亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲黄色免费网站| 欧美国产欧美综合| 欧美肥胖老妇做爰| 一区二区三区国产豹纹内裤在线 | 久久久天堂av| 国产精品久久久久久亚洲伦| 一区二区三区成人在线视频| 免费人成网站在线观看欧美高清| 久久不见久久见中文字幕免费| 国产乱码精品一区二区三| 大尺度一区二区| 91精品国产综合久久香蕉的特点| 国产午夜精品在线观看| 亚洲一区二区在线播放相泽| 国产高清视频一区| 精品国产青草久久久久福利| 国产午夜亚洲精品午夜鲁丝片 | 国产精品水嫩水嫩| 国产欧美日韩不卡免费| 在线亚洲人成电影网站色www| 日韩丝袜情趣美女图片| 亚洲国产日韩综合久久精品| 丁香亚洲综合激情啪啪综合| 日韩一区二区精品| 91美女片黄在线观看91美女| 日韩区在线观看| 日本在线不卡一区| 日韩视频国产视频| 麻豆久久久久久久| 国产欧美综合在线观看第十页 | 国产日韩欧美综合一区| 麻豆国产91在线播放| 欧美xingq一区二区| 国内精品在线播放| 国产精品福利电影一区二区三区四区 | 水野朝阳av一区二区三区| 欧美狂野另类xxxxoooo| 免费成人美女在线观看| 久久网站热最新地址| 99国产精品久久久久久久久久| 亚洲视频一区在线观看| 一本色道久久加勒比精品| 亚洲国产成人va在线观看天堂| 欧美日韩日日骚| 国产一区二区伦理| 亚洲综合一区二区三区| 久久你懂得1024| 91精品蜜臀在线一区尤物| 国产馆精品极品| 三级在线观看一区二区 | 不卡一区二区三区四区| 亚洲大片一区二区三区| 日韩欧美三级在线| 欧洲视频一区二区| 成人黄色网址在线观看| 日本午夜一区二区| 夜夜嗨av一区二区三区网页| 国产日本欧美一区二区| 日韩欧美一区二区视频| 538在线一区二区精品国产| 欧美精品一区二区三区一线天视频 | 在线亚洲欧美专区二区| 成人激情小说乱人伦| 色哟哟精品一区| 亚洲成人自拍一区| 综合久久综合久久| 国产精品欧美一区喷水| 国产精品久久久久永久免费观看 | 日本高清不卡视频| www.欧美色图| 99精品在线观看视频| 成人午夜激情片| 色婷婷精品久久二区二区蜜臂av| 色视频一区二区| 91精品国产综合久久小美女| 91精品国产色综合久久| 精品国产制服丝袜高跟| 日本一区二区三区久久久久久久久不| 国产欧美一区二区在线| 国产精品久久精品日日| 一区二区三区日韩精品| 一本色道**综合亚洲精品蜜桃冫| 精品久久久久香蕉网| 国产亚洲精品超碰| 日韩电影一区二区三区四区| 国产精品白丝jk黑袜喷水| 91久久久免费一区二区| 久久综合色一综合色88| 午夜精品影院在线观看| 国产盗摄女厕一区二区三区| 欧美日韩免费观看一区三区| 国产精品视频一二三区| 日本不卡中文字幕| 色婷婷国产精品| 亚洲男帅同性gay1069| 欧美大肚乱孕交hd孕妇| 亚洲免费三区一区二区| 不卡av免费在线观看| 国产日韩亚洲欧美综合| 久久99久久久欧美国产| 欧美夫妻性生活| 日韩毛片精品高清免费| 一本大道av一区二区在线播放| 欧美国产精品专区| 北岛玲一区二区三区四区| 国产欧美日韩中文久久| 欧美军同video69gay| 色狠狠一区二区三区香蕉| 国产欧美1区2区3区| 国产精华液一区二区三区| 日韩西西人体444www| 麻豆精品一区二区三区| 精品成人一区二区| 成人高清av在线| 亚洲欧美日韩国产综合在线| 在线观看一区日韩| 免费看欧美美女黄的网站| 亚洲国产日日夜夜| 欧美一级一区二区| 成人三级在线视频| 性做久久久久久免费观看欧美| 日韩欧美国产午夜精品| 成人av网站免费观看| 国产另类ts人妖一区二区| 成人欧美一区二区三区白人| 欧美日韩精品系列| 91亚洲精品久久久蜜桃| 久久不见久久见中文字幕免费| 国产精品你懂的在线| 欧美日韩精品欧美日韩精品一| 国产一区二区免费视频| 久久精品国产99国产精品| 亚洲精品久久7777| 国产午夜精品一区二区三区视频 | 国产酒店精品激情| 日本一不卡视频| 日韩中文字幕1| 日韩av在线免费观看不卡| 中文字幕一区三区| 色综合天天视频在线观看| 日韩成人一区二区三区在线观看| 久久久久久久久久看片| 欧美一级理论片| 欧美日韩在线播放一区| 91小视频在线免费看| 欧美精品一区二区三区视频| 欧美欧美欧美欧美首页| 欧美人妖巨大在线| 欧美亚洲一区二区三区四区| 成人app软件下载大全免费| 亚洲精品视频在线观看免费 | 精品美女在线播放| 欧美肥妇free| 国产色综合久久| 一区二区高清在线| 婷婷丁香激情综合| 国产精品一线二线三线| 国产91精品在线观看| 欧美在线观看你懂的| 91精品在线免费| 国产精品免费aⅴ片在线观看| 国产69精品久久99不卡| 欧美亚洲一区三区| 欧美不卡视频一区| 日韩理论电影院| 国产高清不卡二三区| www.爱久久.com| 日韩美女主播在线视频一区二区三区| 国产欧美一区二区精品仙草咪| 免费av成人在线| 色婷婷一区二区| 一区二区三区毛片| 国产盗摄女厕一区二区三区| 亚洲精品一区二区三区在线观看| 亚洲丝袜自拍清纯另类| 激情综合色综合久久综合| 色素色在线综合| 亚洲欧美激情视频在线观看一区二区三区| 午夜精品福利一区二区三区av| 91黄色免费观看| 国产精品污污网站在线观看| 欧美日韩午夜影院| 亚洲免费成人av| 色综合久久久久综合体| 精品国产人成亚洲区| 成人午夜在线播放| 国产女同互慰高潮91漫画| 成人在线视频首页| 椎名由奈av一区二区三区| 成人午夜电影久久影院| 亚洲精品免费在线播放| 在线精品视频一区二区| 日日摸夜夜添夜夜添精品视频| 日韩亚洲欧美成人一区| 精品亚洲国产成人av制服丝袜| 精品国产一二三区| 欧美日韩国产一区| 在线观看视频欧美| 国产成人免费在线| 亚洲精品久久久久久国产精华液|