亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ravenmpic.c

?? WINDRIVER MCP750 BSP
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ravenMpic.c - Raven Interrupt Controller driver *//* Copyright 1984-1998 Wind River Systems, Inc. *//* Copyright 1996,1997,1998 Motorola, Inc., All Rights Reserved */#include "copyright_wrs.h"/*modification history--------------------01v,01nov01,mil  Cleaned up compiler warnings.01u,17nov98,srr  Correct phantom interrupt else if test and remove semicolon.01t,24aug98,cjtc windview 2.0 event logging is now single step and handled in                 the interrupt controller driver. Fixes a problem with out of                 sequence timestamps in the event log for this architechture.                 Method of initiating event logging is now via a macro                 (SPR 21868)01s,20aug98,scg  SPR 21961: fix sysIbcPhantomInt to correctly handle phantom                 interrupts on slave 8259.  Remove extra semicolons in		 sysIbcIntHandler()01q,21jul98,scb  #define name cleanup - removal of board name defines.01p,07jul98,scb  Initial support for MCPN750.01o,17apr98,pr   added windview 20 support01n,14apr98,ms_  merged Motorola mv2700 support01m,11apr98,scb  HW rework makes ISA IRQ's 14 & 15 edge (note level) sensitive.01l,22apr98,scb  added phantom IBC int handling for IRQ7 and IRQ1501k,13jan98,srr  updated copyright dates to 1998.01j,11dec97,srr  Updated comment in sysIbcInit to show support for VIA chip.01i,20jul97,srr  send end of interrupt acknowledge to master IBC first.01h,23oct97,dat, removed IACK loop from sysMpicIntHandler() (SPR 9389).            mas01g,20jul97,dat  implemented dave's second revision + some code cleanup01f,11jun97,dmw  MPIC handler cleanup. 01e,06may97,dat  added IBC updates from sl82565 controller.01d,30apr97,dat  added WindView instrumentation SPR 843401c,29apr97,dat  Fixed Motorola MR #62, moved MPIC_EOI01b,23apr97,mas  merged with sl82565IntrCtl.c (SPR 8170).01a,11nov96,rhk  created by Motorola.*//*DESCRIPTIONThis module implements the Raven Mpic and the Winbond W83C553 PCI-ISA Bridge(PIB) drivers.  (The W83C553 PIB was formerly known as the Motorola sl82565 ISABridge Controller (IBC).These merged drivers provide support for initializing their respective devicesand handling interrupts from them.*//* includes */#include "ravenMpic.h"#include "private/eventP.h"/* defines */#define	MPIC_EOI	sysPciWrite32(MPIC_ADDR(MPIC_CPU0_EOI_REG),0)#define IBC_INT_PENDING	0x80/* globals */IMPORT STATUS	      (*_func_intConnectRtn) (VOIDFUNCPTR *, VOIDFUNCPTR, int);IMPORT int	      (*_func_intEnableRtn) (int);IMPORT int	      (*_func_intDisableRtn) (int);IMPORT void		sysOutByte (ULONG, UCHAR);IMPORT UCHAR		sysInByte (ULONG);IMPORT void		sysPciRead32 (UINT32, UINT32 *);IMPORT void		sysPciWrite32 (UINT32, UINT32);IMPORT STATUS		excIntConnect (VOIDFUNCPTR *, VOIDFUNCPTR);void			sysIbcIntEnable (int);void			sysIbcIntDisable (int);void			sysIbcIntHandler (void);void			sysMpicIntHandler (void);IMPORT UINT		sysVectorIRQ0; 	/* vector for IRQ0 */INT_HANDLER_DESC * sysIntTbl [256];	/* system interrupt table */int tpr;/* forward declarations */LOCAL int       getMpicVecOffset (int);LOCAL STATUS	sysMpicIntConnect (VOIDFUNCPTR * vector, VOIDFUNCPTR routine,			       int parameter);LOCAL int	sysMpicIntEnable (int);LOCAL int	sysMpicIntDisable (int);LOCAL void	sysIbcMpicConnect (void);LOCAL BOOL 	sysIbcPhantomInt (UCHAR *intNum, int lvl7Int, int lvl15Int);LOCAL void	sysIbcEndOfInt (int);LOCAL void	sysIbcIntLevelSet (int);/* Mask values are the currently disabled sources */LOCAL UINT8	sysPicMask1 = 0xfb;	/* all levels disabled */LOCAL UINT8	sysPicMask2 = 0xff;/* Level values are the interrupt level masks */LOCAL UINT8	sysPicLevel1;LOCAL UINT8	sysPicLevel2;LOCAL UINT8	sysPicLevelCur;		/* current priority level, 0 to 16 *//* level values by real priority */LOCAL UCHAR sysPicPriMask1[17] = {0xFB,0xFA,0xF8,0xF8,0xF0,0xE0,0xC0,0x80,			     0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x0};LOCAL UCHAR sysPicPriMask2[17] = {0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,			     0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0};/* Hardware access methods */#ifndef IBC_BYTE_OUT#   define IBC_BYTE_OUT(reg,data) \	(sysOutByte (reg,data))#endif#ifndef IBC_BYTE_IN#   define IBC_BYTE_IN(reg,pData) \	(*pData = sysInByte(reg))#endif#ifndef CPU_INT_LOCK#   define CPU_INT_LOCK(x) \	(*x = intLock ())#endif#ifndef CPU_INT_UNLOCK#   define CPU_INT_UNLOCK(data) \	(intUnlock (data))#endif/********************************************************************************* sysMpicInit - initialize the MPIC in the Raven** This function initializes the Multi-Processor Interrupt Controller (MPIC)* contained in the Raven chip.** It first initializes the system vector table, connects the MPIC interrupt* handler to the PPC external interrupt and attaches the local MPIC routines* for interrupt connecting, enabling and disabling to the corresponding system* routine pointers.** It then initializes the MPIC registers, clears any pending MPIC interrupts,* enables interrupt handling by the MPIC and enables external ISA interrupts* (from the W83C553).** RETURNS: OK always*/STATUS sysMpicInit (void)    {    int			i;    UINT32		timerReg;    UINT32		ipiReg;    UINT32		destReg;    LOCAL_INT_DATA	init;    /* Initialize the interrupt table */    for (i = 0; i < 256; i++)        sysIntTbl[i] = NULL;     /* Connect the interrupt demultiplexer to the PowerPC external interrupt */    excIntConnect ((VOIDFUNCPTR *) _EXC_OFF_INTR, sysMpicIntHandler);    /*     *  Set up the BSP specific routines     *  Attach the local routines to the vxWorks system calls     */    _func_intConnectRtn = sysMpicIntConnect;    _func_intEnableRtn = sysMpicIntEnable;    _func_intDisableRtn = sysMpicIntDisable;    /* Initialize the MPIC */    /* generate a PCI IACK to clear any pending interrupts */    sysPciRead32( MPIC_ADDR(MPIC_CPU0_IACK_REG), (UINT32 *) &init.temp );    /* inhibit the timer and IPI regs. and clear the counter regs. */    timerReg = MPIC_TIMER0_BASE_CT_REG;    ipiReg = MPIC_IPI0_VEC_PRI_REG;    for (i=0; i<4; i++)	{	sysPciWrite32( MPIC_ADDR(ipiReg), IPI_INHIBIT );	ipiReg += REG_OFFSET;	sysPciWrite32( MPIC_ADDR(timerReg), TIMER_INHIBIT );	timerReg += REG_OFFSET;	sysPciWrite32( MPIC_ADDR(timerReg), TIMER_INHIBIT );	timerReg += (REG_OFFSET * 3);	}    /* setup the external source vector/priority registers */    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC0_VEC_PRI_REG), INIT_EXT_SRC0 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC1_VEC_PRI_REG), INIT_EXT_SRC1 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC2_VEC_PRI_REG), INIT_EXT_SRC2 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC3_VEC_PRI_REG), INIT_EXT_SRC3 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC4_VEC_PRI_REG), INIT_EXT_SRC4 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC5_VEC_PRI_REG), INIT_EXT_SRC5 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC6_VEC_PRI_REG), INIT_EXT_SRC6 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC7_VEC_PRI_REG), INIT_EXT_SRC7 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC8_VEC_PRI_REG), INIT_EXT_SRC8 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC9_VEC_PRI_REG), INIT_EXT_SRC9 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC10_VEC_PRI_REG), INIT_EXT_SRC10 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC11_VEC_PRI_REG), INIT_EXT_SRC11 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC12_VEC_PRI_REG), INIT_EXT_SRC12 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC13_VEC_PRI_REG), INIT_EXT_SRC13 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC14_VEC_PRI_REG), INIT_EXT_SRC14 );    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC15_VEC_PRI_REG), INIT_EXT_SRC15 );    destReg = MPIC_EXT_SRC0_DEST_REG;    for (i=0; i<=15; i++)	{	sysPciWrite32( MPIC_ADDR(destReg), DESTINATION_CPU0 );	destReg += (REG_OFFSET*2);	}    /* setup the Ext source 0 reg (8259 input) for normal operation */    sysPciRead32( MPIC_ADDR(MPIC_EXT_SRC0_VEC_PRI_REG), &init.regVal );    init.regVal |= PIB_INT_VEC;    init.regVal &= (~INT_MASK_BIT);    sysPciWrite32( MPIC_ADDR(MPIC_EXT_SRC0_VEC_PRI_REG), init.regVal );    /* enable interrupts for this processor */    sysPciWrite32( MPIC_ADDR(MPIC_CPU0_CUR_TASK_PRI_REG), 1 );    /* setup the MPIC to process the 8259 interrupts ( mixed mode ) */    sysPciWrite32( MPIC_ADDR(MPIC_GLOBAL_CONFIG_REG), SET_MIXED_MODE );    return (OK);    }/******************************************************************************** sysMpicIntConnect - connect an interrupt handler to the system vector table** This function connects an interrupt handler to the system vector table.** RETURNS: OK/ERROR.*/ LOCAL STATUS sysMpicIntConnect    (     VOIDFUNCPTR *      vector,         /* interrupt vector to attach */     VOIDFUNCPTR        routine,        /* routine to be called */     int                parameter       /* parameter to be passed to routine */    )    {    INT_HANDLER_DESC * newHandler;    INT_HANDLER_DESC * currHandler;    LOCAL_INT_DATA     connect;    static BOOL	       firstTime = TRUE;    if (((int)vector < 0) || ((int)vector > 0xff))      /* Out of Range? */        return (ERROR);     if (firstTime)	{	/* connect the PIB to MPIC, before any other connections */	firstTime = FALSE;	sysIbcMpicConnect (); /* calls this rtn, recursively */	}    /* create a new interrupt handler */    if ((newHandler = (INT_HANDLER_DESC *)calloc (1, sizeof (INT_HANDLER_DESC)))	 == NULL)        return (ERROR);     /* initialize the new handler */    newHandler->vec  = routine;    newHandler->arg  = parameter;    newHandler->next = NULL;    /* install the handler in the system interrupt table */    if (sysIntTbl[(int) vector] == NULL)        sysIntTbl [(int ) vector] = newHandler; /* single int. handler case */    else        {        currHandler = sysIntTbl[(int) vector]; /* multiple int. handler case */        while (currHandler->next != NULL)            {            currHandler = currHandler->next;            }        currHandler->next = newHandler;        }    /*      * if the connect is for an MPIC interrupt,      * then store the vector into the appropriate MPIC vector register     */    connect.regAddr = getMpicVecOffset( (int)vector );    if ( connect.regAddr > 0 )        {        /* read the vector register */        sysPciRead32( MPIC_ADDR(connect.regAddr), &connect.regVal );        /* store the interrupt vector number */        connect.regVal |= (int)vector;        /* write the contents of the vector register back */        sysPciWrite32( MPIC_ADDR(connect.regAddr), connect.regVal );        }    return (OK);    } /********************************************************************************* sysMpicIntEnable - enable an Mpic interrupt level** This routine enables a specified Mpic interrupt level.** RETURNS: OK or ERROR if interrupt level not supported*/ LOCAL int sysMpicIntEnable    (    int intLevel        /* interrupt level to enable */    )    {    LOCAL_INT_DATA	enable;    /*     * if the int. level is not for ISA or MPIC, then it is not supported.     * If not supported, just return.     */    if ((intLevel < 0) || (intLevel > ERR_INTERRUPT_BASE))        return (ERROR);    /* If ISA interrupt level,call the IBC driver enable routine, */    if ( intLevel < EXT_INTERRUPT_BASE )        sysIbcIntEnable( intLevel );    enable.regAddr = getMpicVecOffset( intLevel );    if ( enable.regAddr > 0 )        {        /* read the vector register */        sysPciRead32( MPIC_ADDR(enable.regAddr), &enable.regVal );        /* enable the interrupt */        enable.regVal &= (~INT_MASK_BIT);        /* write the contents of the vector register back */        sysPciWrite32( MPIC_ADDR(enable.regAddr), enable.regVal );        }    return (OK);    }/********************************************************************************* sysMpicIntDisable - disable an Mpic interrupt level** This routine disables a specified Mpic interrupt level.** RETURNS: OK or ERROR if interrupt level not supported*/ LOCAL int sysMpicIntDisable    (    int intLevel        /* interrupt level to disable */    )    {    LOCAL_INT_DATA      disable;     /*     * if the int. level is not for ISA or MPIC, then it is not supported.     * If not supported, just return.     */    if ((intLevel < 0) || (intLevel > ERR_INTERRUPT_BASE))        return (ERROR);    /* If ISA interrupt level, call the IBC driver disable routine, */    if ( intLevel < EXT_INTERRUPT_BASE )        sysIbcIntDisable( intLevel );     /* else, it is an MPIC interrupt level */    else        {        /* get the vector reg. offset value */        disable.regAddr = getMpicVecOffset( intLevel );         if ( disable.regAddr > 0 )            {            /* read the vector register */            sysPciRead32( MPIC_ADDR(disable.regAddr), &disable.regVal );            /* disable the interrupt */            disable.regVal |= INT_MASK_BIT;            /* write the contents of the vector register back */            sysPciWrite32( MPIC_ADDR(disable.regAddr), disable.regVal );            }        }    return (OK);    }/******************************************************************************** sysMpicIntHandler - handle an interrupt received at the Mpic* * This routine will process interrupts received from PCI or ISA devices as* these interrupts arrive via the MPIC.  This routine supports MPIC interrupt* nesting.** RETURNS: N/A*/void sysMpicIntHandler (void)    {    INT_HANDLER_DESC *  currHandler;    UINT32		vecNum;    int			dontCare;    /* get the vector from the MPIC IACK reg. */    sysPciRead32 (MPIC_ADDR (MPIC_CPU0_IACK_REG), &vecNum);    vecNum &= VECTOR_MASK;    /* Ignore spurious interrupts */    if (vecNum == 0xFF)        {        logMsg ("MPIC Spurious Interrupt!\n", 0,0,0,0,0,0);        return;        }     /*     * Allow maskable interrupts to the CPU.  MPIC will hold off     * lower and equal interrupts until MPIC_EOI is performed.     */    CPU_INT_UNLOCK(_PPC_MSR_EE);#ifdef INCLUDE_WINDVIEW    WV_EVT_INT_ENT(vecNum)#endif    /* call the necessary interrupt handlers */    if ((currHandler = sysIntTbl [vecNum]) == NULL)        {        logMsg ("uninitialized MPIC interrupt %d\r\n", vecNum, 0,0,0,0,0);        }    else        {        /* Call EACH respective chained interrupt handler */        while (currHandler != NULL)            {            currHandler->vec (currHandler->arg);            currHandler = currHandler->next;            }        }    /* issue an end-of-interrupt to the MPIC */    MPIC_EOI;    CPU_INT_LOCK (&dontCare);    return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂在线aⅴ视频| 一区二区三区高清| 亚洲乱码国产乱码精品精小说 | 91国偷自产一区二区开放时间| 欧美精品久久99久久在免费线| 欧美高清在线视频| 捆绑调教一区二区三区| 色婷婷av一区二区三区软件 | 国产精品成人一区二区三区夜夜夜 | 欧美一区二区日韩一区二区| ...xxx性欧美| 成人免费观看男女羞羞视频| 精品日韩一区二区三区免费视频| 亚洲国产成人高清精品| 99久免费精品视频在线观看| 久久精品人人做| 狠狠色丁香久久婷婷综合_中| 欧美日韩综合不卡| 又紧又大又爽精品一区二区| 成人性生交大片| 亚洲精品一区二区三区蜜桃下载 | 精品久久人人做人人爽| 三级精品在线观看| 欧美老肥妇做.爰bbww视频| 夜夜夜精品看看| 一本大道久久精品懂色aⅴ| 中文欧美字幕免费| 成人妖精视频yjsp地址| 国产日韩亚洲欧美综合| 成人在线综合网站| 国产精品久久久久久久久晋中| 国产精品一区二区在线观看网站| 久久久久久久免费视频了| 国产精品一区二区三区四区| 精品国产乱码久久久久久老虎| 七七婷婷婷婷精品国产| 色悠久久久久综合欧美99| 国产清纯美女被跳蛋高潮一区二区久久w| 免费观看在线色综合| 日韩欧美电影在线| 国产精品一级在线| 亚洲欧美综合另类在线卡通| 99久久国产免费看| 亚洲精选视频免费看| 在线看日本不卡| 青青草国产精品亚洲专区无| 精品美女一区二区| 国产成人av电影在线播放| 中文字幕在线观看一区二区| 色狠狠色狠狠综合| 石原莉奈在线亚洲二区| 精品成人一区二区| av不卡免费在线观看| 亚洲午夜在线电影| 日韩一区二区三区视频在线观看| 国产精品资源网| 亚洲美女精品一区| 欧美丰满少妇xxxxx高潮对白| 蜜臀久久99精品久久久画质超高清 | 亚洲www啪成人一区二区麻豆| 欧美巨大另类极品videosbest | youjizz久久| 亚洲国产视频一区二区| 日韩一二三区视频| 99麻豆久久久国产精品免费优播| 亚洲网友自拍偷拍| 精品久久久久久久久久久久久久久久久 | 麻豆视频一区二区| 亚洲日本免费电影| 日韩女优毛片在线| 99在线视频精品| 看片的网站亚洲| 亚洲欧美另类综合偷拍| 日韩一级二级三级| 色欲综合视频天天天| 久色婷婷小香蕉久久| 亚洲美女在线一区| 欧美精品一区二区不卡| 在线精品观看国产| 国产 欧美在线| 免费人成黄页网站在线一区二区| 中文一区一区三区高中清不卡| 欧美日韩三级视频| 成人免费的视频| 精品一区二区三区视频在线观看 | 久久国产日韩欧美精品| 一区二区三区四区激情| 国产色产综合色产在线视频| 欧美老年两性高潮| 欧洲生活片亚洲生活在线观看| 国产精品资源网站| 久久99精品久久久久久动态图| 亚洲午夜久久久久中文字幕久| 中文字幕成人在线观看| 91蝌蚪porny九色| 欧美日韩极品在线观看一区| 99久久精品国产毛片| 激情深爱一区二区| 日本欧美一区二区三区乱码| 一区二区三区av电影| 中文字幕二三区不卡| 久久久久久免费毛片精品| 欧美变态凌虐bdsm| 欧美一级在线视频| 欧美一区二区网站| 91精品在线一区二区| 欧美日韩国产美女| 3d动漫精品啪啪一区二区竹菊| 91久久精品一区二区三| 色婷婷久久久亚洲一区二区三区 | 久久久久久久网| 精品动漫一区二区三区在线观看| 91精品国产高清一区二区三区| 欧美视频三区在线播放| 欧美裸体一区二区三区| 67194成人在线观看| 欧美另类z0zxhd电影| 91精品国产91综合久久蜜臀| 在线观看91av| 日韩三级伦理片妻子的秘密按摩| 日韩免费看网站| 久久人人爽人人爽| 国产精品美女久久久久av爽李琼 | 免费观看30秒视频久久| 麻豆精品一区二区av白丝在线| 免费的成人av| 国产成人av一区二区| 99视频有精品| 欧美日韩一级视频| 日韩精品一区二区三区中文不卡 | 久久精品这里都是精品| 国产午夜精品一区二区| 国产精品久久久久久久久久久免费看| 国产精品久久福利| 午夜精品久久久久久久99樱桃| 免费观看久久久4p| 国产成人丝袜美腿| 欧美做爰猛烈大尺度电影无法无天| 欧美午夜一区二区| 精品国产一区a| 中文字幕欧美一区| 视频在线观看91| 国产乱码精品一区二区三区五月婷 | 日本中文字幕不卡| 国产精品综合在线视频| 99视频在线精品| 91精品国产综合久久久久久| 久久久精品免费观看| 亚洲精品国产一区二区三区四区在线 | 国产亚洲污的网站| 亚洲天堂中文字幕| 美国十次综合导航| 99re在线视频这里只有精品| 欧美日本一区二区三区| 欧美激情中文不卡| 亚洲成人av福利| 国产成人精品亚洲日本在线桃色| 色诱视频网站一区| 国产午夜亚洲精品羞羞网站| 亚洲第一综合色| av高清久久久| 国产精品久久久久久久久搜平片| 精品久久久久久久一区二区蜜臀| 亚洲欧洲日产国码二区| 精品在线一区二区| 在线观看欧美日本| 欧美韩日一区二区三区四区| 亚洲成av人**亚洲成av**| 成人免费黄色大片| 久久一夜天堂av一区二区三区| 亚洲自拍都市欧美小说| 成人黄色777网| 精品久久久影院| 视频一区视频二区中文| 93久久精品日日躁夜夜躁欧美| 日韩美女天天操| 亚洲电影一级片| 日本道色综合久久| 国产精品天美传媒| 国产一区二区三区四| 91精品国产aⅴ一区二区| 伊人色综合久久天天| jiyouzz国产精品久久| 久久久精品中文字幕麻豆发布| 日本伊人午夜精品| 欧美日韩高清一区二区不卡| 亚洲精品视频一区二区| 99精品热视频| 成人免费一区二区三区视频| 成人久久视频在线观看| 国产欧美精品一区二区三区四区| 奇米精品一区二区三区在线观看| 欧美二区在线观看| 天堂在线亚洲视频| 欧美日本国产一区| 五月婷婷综合激情| 欧美日韩综合在线| 日韩av电影免费观看高清完整版| 欧美优质美女网站| 亚洲第一成年网|