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

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

?? ixp425pciintlib.c

?? INTEL IXP425的VXWORKS BSP
?? C
字號:
/* ixp425PciIntLib.c - PCI interrupts driver for the IXP425 *//* Copyright 2002 Wind River Systems, Inc. *//*modification history--------------------01a,05jun02,jb  initial version...*//*DESCRIPTIONThis code handles the PCI Interrupts INTA#...INTD#. The code herein permits client code to bind to these interrupts, and handles the invocation of attached routines when the associated interrupt goes off. In addition to the standard PCI interrupts, this module provides services for handling interrupts associated with error conditions in the PCI controller.In order for the functionality defined herein to be available, INCLUDE_PCI must be defined in config.h.SH INITIALIZATIONThe function sysPciInit(), which should be called fromsysHwInit() to initialize the PCI unit on the IXP425.The function sysPciAssignAddrs() should be called from sysHwInit() after the call to sysPciInit to initialise devices on the PCI bus.INCLUDE FILES:ixp425Pci.h ixp425Pci_p.hSEE ALSO:.I "PCI Local Bus Specification, Revision 2.2, December 18, 1998"ixp425Pci.c*/#include "vxWorks.h"#include "config.h" #include "dllLib.h"   #include "stdio.h"#include "ixp425Pci.h"#include "ixp425Pci_p.h"extern void pciAtpIsr (int param);extern void pciPtaIsr (int param);LOCAL UINT32  pciInternalIsrInvocations = 0;LOCAL UINT32  pciIsrInvocations = 0;LOCAL DL_LIST pciIntList[PCI_IRQ_LINES];  /* linked list of int handlers */LOCAL DL_LIST pciCallbackList;	          /* linked list of callback error handlers *//********************************************************************************* pciInt - interrupt handler for shared PCI interrupt.** This routine executes multiple interrupt handlers for a PCI interrupt.* Each interrupt handler must check the device dependent interrupt status bit* to determine the source of the interrupt, since it simply executes all* interrupt handlers in the link list.** RETURNS: N/A**/voidpciInt (UINT32 pciIntIndex)     {    PCI_INT_RTN *pRtn;           for (pRtn = (PCI_INT_RTN *)DLL_FIRST (&pciIntList[pciIntIndex]); pRtn != NULL;	 pRtn = (PCI_INT_RTN *)DLL_NEXT (&pRtn->node))    {	(* pRtn->routine) (pRtn->parameter);    }    /*clear the status in the GPIO ISR*/    if(pciIntIndex == IXP425_PCI_INTA_INDEX)    {	ixp425GPIOIntStatusClear(IXP425_PCI_INTA_PIN);    }    else if(pciIntIndex == IXP425_PCI_INTB_INDEX)    {	ixp425GPIOIntStatusClear(IXP425_PCI_INTB_PIN);    }    else if(pciIntIndex == IXP425_PCI_INTC_INDEX)    {	ixp425GPIOIntStatusClear(IXP425_PCI_INTC_PIN);    }    else if(pciIntIndex == IXP425_PCI_INTD_INDEX)    {	ixp425GPIOIntStatusClear(IXP425_PCI_INTD_PIN);    }    pciIsrInvocations++;}/********************************************************************************* pciIntConnect - connect the interrupt handler to the PCI interrupt.** This routine connects an interrupt handler to the PCI interrupt line (A - D).** RETURNS:* OK, or ERROR if there is insufficient memory to store the interrupt descriptor.**/STATUS pciIntConnect (VOIDFUNCPTR *vector, /* interrupt vector to attach to     */	       VOIDFUNCPTR routine, /* routine to be called              */	       UINT32 parameter)    /* parameter to be passed to routine */    {    UINT32 irq = IVEC_TO_INUM ((UINT32)vector);    UINT32 index;    PCI_INT_RTN *pRtn;    UINT32 key;        if (pciLibInitStatus != OK)    {	return (ERROR);    }    pRtn = (PCI_INT_RTN *)malloc (sizeof (PCI_INT_RTN));        if (pRtn == NULL)    {	return (ERROR);    }    switch (irq)    {    case IXP425_PCI_INTA_INTERRUPT_NUM:	index = IXP425_PCI_INTA_INDEX;	break;    case IXP425_PCI_INTB_INTERRUPT_NUM:	index = IXP425_PCI_INTB_INDEX;	break;    case IXP425_PCI_INTC_INTERRUPT_NUM:	index = IXP425_PCI_INTC_INDEX;	break;    case IXP425_PCI_INTD_INTERRUPT_NUM:	index = IXP425_PCI_INTD_INDEX;	break;    default:	return (ERROR);    }	    pRtn->routine   = routine;    pRtn->parameter = parameter;        key = intLock ();		         dllAdd (&pciIntList[index], &pRtn->node);    intUnlock (key);        return (OK);}/********************************************************************************* pciIntDisconnect - disconnect the interrupt handler from the PCI interrupt.** This routine disconnects the interrupt handler from the PCI interrupt line.** RETURNS:* OK, or ERROR if the interrupt handler cannot be removed/does not exist in the list.**/STATUS pciIntDisconnect (VOIDFUNCPTR *vector, /* interrupt vector to attach to     */		  VOIDFUNCPTR routine) /* routine to be called              */    {    UINT32 irq = IVEC_TO_INUM ((UINT32)vector);    PCI_INT_RTN *pRtn;    UINT32 key;    UINT32 index;    if (pciLibInitStatus != OK)    {	return (ERROR);    }    switch (irq)    {    case IXP425_PCI_INTA_INTERRUPT_NUM:	index = IXP425_PCI_INTA_INDEX;	break;    case IXP425_PCI_INTB_INTERRUPT_NUM:	index = IXP425_PCI_INTB_INDEX;	break;    case IXP425_PCI_INTC_INTERRUPT_NUM:	index = IXP425_PCI_INTC_INDEX;	break;    case IXP425_PCI_INTD_INTERRUPT_NUM:	index = IXP425_PCI_INTD_INDEX;	break;    default:	return (ERROR);    }    for (pRtn = (PCI_INT_RTN *)DLL_FIRST (&pciIntList[index]); pRtn != NULL;	 pRtn = (PCI_INT_RTN *)DLL_NEXT (&pRtn->node))    {	if (pRtn->routine == routine)	{	    key = intLock ();		      	    dllRemove (&pciIntList[index], &pRtn->node);	    intUnlock (key); 	    	    free ((UINT8 *)pRtn);	    return (OK);	}    }        return (ERROR);}/********************************************************************************* pciInternalIsr - interrupt handler for internal PCI interrupt.** This routine handles the internal PCI interrupt by invoking all registered* callbacks and then attempting to clear the error condition.* RETURNS: N/A**/void pciInternalIsr (UINT32 irq)	  {    PCI_CALLBACK_INT_RTN *pRtn;    PciStatus status=OK;    UINT32 regval;    REG_READ (PCI_CSR_BASE, PCI_ISR_OFFSET, regval);    #ifdef INCLUDE_PCI_DMA    /*fast path the dma interrupts*/    if (regval & PCI_ISR_APDC)    {	/*Invoke ATP DMA ISR*/	pciAtpIsr(0);	status = PCI_APDC;    }    else if (regval & PCI_ISR_PADC)    {	/*Invoke PTA DMA ISR*/	pciPtaIsr(0);	status = PCI_PADC;    }    else#endif    {       		if (regval & PCI_ISR_PSE)	{	    status = PCI_ERR_PSE;	} 	else if (regval & PCI_ISR_PFE)	{	    status = PCI_ERR_PFE;	}	else if (regval & PCI_ISR_PPE)	{	    status = PCI_ERR_PPE;	} 	else if (regval & PCI_ISR_AHBE)	{	    status = PCI_ERR_AHBE;	}     		for (pRtn = (PCI_CALLBACK_INT_RTN *)DLL_FIRST (&pciCallbackList); pRtn != NULL;	     pRtn = (PCI_CALLBACK_INT_RTN *)DLL_NEXT (&pRtn->node))	{		    (* pRtn->routine) (status, 0);	}    }    /*store the error status for display from another function*/    lastError=status;    /*clear the error status in pci_isr, note that pci_isr is       "write one to clear" for all error indicators, and read       only otherwise, so this works ok.*/    REG_WRITE (PCI_CSR_BASE, PCI_ISR_OFFSET, regval);    pciInternalIsrInvocations++;    }/********************************************************************************* pciErrorCallbackRegister - connect the interrupt handler to the PCI pcc_int** This routine connects an interrupt handler to the PCI internal interrupt pcc_int** RETURNS:* OK, or ERROR if there is insufficient memory to store the interrupt descriptor**/STATUS pciErrorCallbackRegister (PCICALLBACKFUNC routine){    PCI_CALLBACK_INT_RTN *pRtn;    UINT32 key;        if (pciLibInitStatus != OK)    {	return (ERROR);    }        pRtn = (PCI_CALLBACK_INT_RTN *)malloc (sizeof (PCI_CALLBACK_INT_RTN));      if (pRtn == NULL)    {	return (ERROR);    }        pRtn->routine   = routine;       key = intLock ();	          dllAdd (&pciCallbackList, &pRtn->node);    intUnlock (key);         return (OK);}/********************************************************************************* pciIntShow - Display statistics relating to PCI interrupts** This routine displays statistics such as the number of invocations of the * PCI internal ISR, and the PCI ISR which dispatches INTA..INTD.**/voidpciIntShow(){    UINT32 i;    printf("IXP425 PCI interrupt statistics:\n");       printf("Number of invocations of the INTA..INTD ISR: %d\n", pciIsrInvocations);    printf("Number of invocations of the internal ISR: %d\n", pciInternalIsrInvocations);    if (pciInternalIsrInvocations > 0)    {	printf ("Last error code handled by the internal ISR: %d\n", lastError);    }    printf ("Number of error interrupt callbacks registered is: %d\n", 	    dllCount(&pciCallbackList));    for (i=0; i < PCI_IRQ_LINES; i++)    {	printf ("Number of callbacks registered for PCI interrupt %d is %d\n", i, 		dllCount(&pciIntList[i]));    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品对白一区国产伦| 久久免费视频色| 蜜桃av一区二区| 中文字幕一区二区三区在线不卡 | 成人精品一区二区三区四区| 日日摸夜夜添夜夜添亚洲女人| 亚洲欧美国产三级| 亚洲欧洲国产专区| 国内精品视频一区二区三区八戒| 捆绑紧缚一区二区三区视频 | 日韩欧美的一区二区| 91精品国产91久久综合桃花| 欧美日本韩国一区二区三区视频 | 亚洲综合丝袜美腿| 一区二区三区高清不卡| 亚洲一区二区黄色| 成人动漫精品一区二区| jiyouzz国产精品久久| 91片黄在线观看| 欧美日韩亚州综合| 精品久久久久久最新网址| 国产亚洲精品资源在线26u| 欧美国产综合一区二区| 一区二区三区精品在线观看| a在线播放不卡| 中文字幕av一区二区三区高| 国产一区二区三区在线观看免费 | 日韩精品91亚洲二区在线观看 | 肉色丝袜一区二区| 欧美系列在线观看| 欧美成人vps| 美女国产一区二区三区| 日韩午夜在线影院| 国产精品久久久久四虎| 日韩精品久久久久久| 91精品国产麻豆| 美女尤物国产一区| 精品国产麻豆免费人成网站| 久久国产精品99久久久久久老狼| 精品国产乱码久久久久久老虎| 久久99国产精品免费网站| 91福利视频久久久久| 欧美一区二区久久久| 麻豆成人久久精品二区三区红 | 欧美一区二区三区播放老司机| 日韩电影在线观看电影| 成人aa视频在线观看| 亚洲同性gay激情无套| 免费欧美在线视频| 欧美无砖砖区免费| 日韩电影在线免费看| 久久久美女毛片| 色播五月激情综合网| 亚洲一区二区黄色| 久久女同精品一区二区| av网站一区二区三区| 蜜乳av一区二区三区| 国产色91在线| 欧美性猛片xxxx免费看久爱| 日本不卡不码高清免费观看| 欧美国产一区视频在线观看| 在线观看免费一区| 亚洲欧洲日韩在线| 欧美老肥妇做.爰bbww视频| 久久久不卡网国产精品二区| 99精品1区2区| 国产欧美精品日韩区二区麻豆天美| 理论电影国产精品| 日本一区二区三区四区在线视频| 欧美系列在线观看| 国产成人在线视频免费播放| 久久久久久久久久久久久夜| 欧美在线视频日韩| 国产专区欧美精品| 亚洲制服欧美中文字幕中文字幕| 欧美成人女星排行榜| 一本在线高清不卡dvd| 欧美国产一区视频在线观看| 欧美日本视频在线| 成人动漫一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲免费观看视频| 国产欧美日韩在线视频| 欧美高清精品3d| 一本久久综合亚洲鲁鲁五月天 | 老司机精品视频一区二区三区| 亚洲男女毛片无遮挡| 精品国产乱码久久久久久久| 欧美日韩国产在线观看| 91女厕偷拍女厕偷拍高清| 黄色日韩三级电影| 日韩综合一区二区| 一区二区三区免费在线观看| 国产精品色呦呦| 欧美中文字幕亚洲一区二区va在线| 狠狠色狠狠色综合| 日韩在线a电影| 亚洲二区在线视频| 91精品国产91久久综合桃花| 在线免费亚洲电影| 91美女精品福利| 成人a级免费电影| 国产成人精品亚洲777人妖| 另类欧美日韩国产在线| 青娱乐精品视频| 五月婷婷激情综合网| 欧美大胆一级视频| 欧美一区二区三区日韩视频| 91久久免费观看| 在线国产电影不卡| 色天使色偷偷av一区二区| 99精品黄色片免费大全| 播五月开心婷婷综合| 成人午夜视频免费看| 懂色av一区二区三区蜜臀| 亚洲男人天堂一区| 亚洲精品五月天| 26uuu欧美| 欧美日韩亚州综合| 欧美日韩国产高清一区二区三区| 欧美日本视频在线| 欧美大胆一级视频| 久久精品视频在线看| 国产欧美一区二区三区在线老狼| 久久午夜羞羞影院免费观看| 亚洲国产精品激情在线观看| 综合久久一区二区三区| 亚洲精品免费在线播放| 图片区小说区区亚洲影院| 亚洲aaa精品| 国产精品第一页第二页第三页| 欧美激情艳妇裸体舞| 亚洲免费观看在线视频| 日韩影院精彩在线| 精品一区二区三区免费视频| 国产一区二区h| 99久久精品国产网站| 欧美性色黄大片| 精品国产一区二区三区久久久蜜月 | 激情文学综合网| 国产mv日韩mv欧美| 日本高清成人免费播放| 91精品国产综合久久久久久漫画 | 日韩欧美亚洲国产另类| 国产亚洲欧美一区在线观看| 成人欧美一区二区三区| 性欧美疯狂xxxxbbbb| 精品一区二区三区蜜桃| 成人v精品蜜桃久久一区| 欧美日本国产一区| 久久久午夜精品理论片中文字幕| 亚洲美女淫视频| 免费观看成人鲁鲁鲁鲁鲁视频| 国产91在线观看丝袜| 欧美三级午夜理伦三级中视频| 精品日韩99亚洲| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区美女| 日本韩国欧美一区二区三区| 精品国产一区二区国模嫣然| 亚洲天堂a在线| 国内外精品视频| 在线观看欧美精品| 欧美激情一区在线观看| 男女男精品视频网| 91捆绑美女网站| 久久久亚洲精华液精华液精华液| 亚洲一区二区三区三| 成人高清伦理免费影院在线观看| 日韩欧美国产精品一区| 一区二区三区中文字幕在线观看| 国产麻豆日韩欧美久久| 6080午夜不卡| 一区二区视频在线| 成人激情小说网站| 久久午夜羞羞影院免费观看| 日韩高清一区二区| 精品视频免费在线| 亚洲天堂成人网| av中文字幕不卡| 国产丝袜在线精品| 精品一区二区三区欧美| 欧美一区二区久久久| 石原莉奈一区二区三区在线观看 | 26uuu国产电影一区二区| 日本一道高清亚洲日美韩| 欧美亚洲一区三区| 一区二区在线观看免费| 91欧美一区二区| 亚洲男女一区二区三区| av综合在线播放| 亚洲免费毛片网站| 日本乱码高清不卡字幕| 亚洲丝袜另类动漫二区| a美女胸又www黄视频久久| 国产精品美女视频| 本田岬高潮一区二区三区| 国产精品毛片高清在线完整版 | 国产乱国产乱300精品| 成人av在线资源网|