⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syslib.c

📁 vxworks下16550SIO Drv
💻 C
📖 第 1 页 / 共 4 页
字号:
	}    else	{        sysMmuMapAdd ((void *)addrLo, lengthLo, 		      VM_STATE_MASK_FOR_ALL, VM_STATE_FOR_IO);        sysMmuMapAdd ((void *)addrIo, lengthIo, 		      VM_STATE_MASK_FOR_ALL, VM_STATE_FOR_IO);	}    }#else    i8259Init ();#endif	/* defined(VIRTUAL_WIRE_MODE) */    }/********************************************************************************* sysIntLock - lock out all interrupts** This routine saves the mask and locks out all interrupts.* It should be called in the interrupt disable state(IF bit is 0).** SEE ALSO: sysIntUnlock()** ARGSUSED0*/VOID sysIntLock (void)    {#if	defined(VIRTUAL_WIRE_MODE)    loApicIntLock ();    i8259IntLock ();#elif	defined(SYMMETRIC_IO_MODE)    loApicIntLock ();    ioApicIntLock ();#else    i8259IntLock ();#endif	/* defined(VIRTUAL_WIRE_MODE) */    }/********************************************************************************* sysIntUnlock - unlock the PIC interrupts** This routine restores the mask and unlocks the PIC interrupts* It should be called in the interrupt disable state(IF bit is 0).** SEE ALSO: sysIntLock()** ARGSUSED0*/VOID sysIntUnlock (void)    {#if	defined(VIRTUAL_WIRE_MODE)    loApicIntUnlock ();    i8259IntUnlock ();#elif	defined(SYMMETRIC_IO_MODE)    loApicIntUnlock ();    ioApicIntUnlock ();#else    i8259IntUnlock ();#endif	/* defined(VIRTUAL_WIRE_MODE) */    }/********************************************************************************* sysIntDisablePIC - disable a bus interrupt level** This routine disables a specified bus interrupt level.** RETURNS: OK, or ERROR if failed.** ARGSUSED0*/STATUS sysIntDisablePIC    (    int irqNo		/* IRQ(PIC) or INTIN(APIC) number to disable */    )    {#if	defined(VIRTUAL_WIRE_MODE)    return (i8259IntDisable (irqNo));#elif	defined(SYMMETRIC_IO_MODE)    return (ioApicIntDisable (irqNo));#else    return (i8259IntDisable (irqNo));#endif	/* defined(VIRTUAL_WIRE_MODE) */    }/********************************************************************************* sysIntEnablePIC - enable a bus interrupt level** This routine enables a specified bus interrupt level.** RETURNS: OK, or ERROR if failed.** ARGSUSED0*/STATUS sysIntEnablePIC    (    int irqNo		/* IRQ(PIC) or INTIN(APIC) number to enable */    )    {#if	defined(VIRTUAL_WIRE_MODE)    return (i8259IntEnable (irqNo));#elif	defined(SYMMETRIC_IO_MODE)    return (ioApicIntEnable (irqNo));#else    return (i8259IntEnable (irqNo));#endif	/* defined(VIRTUAL_WIRE_MODE) */    }/********************************************************************************* sysIntEoiGet - get EOI/BOI function and its parameter** This routine gets EOI function and its parameter for the interrupt controller.* If returned EOI/BOI function is NULL, intHandlerCreateX86() replaces * "call _routineBoi/Eoi" in intConnectCode[] with NOP instruction.** RETURNS: N/A** ARGSUSED0*/LOCAL void sysIntEoiGet    (    VOIDFUNCPTR * vector,	/* interrupt vector to attach to */    VOIDFUNCPTR * routineBoi,	/* BOI function */    int * parameterBoi,		/* a parameter of the BOI function */    VOIDFUNCPTR * routineEoi,	/* EOI function */    int * parameterEoi		/* a parameter of the EOI function */    )    {    int vectorNo = IVEC_TO_INUM (vector);    int irqNo;    *routineBoi = NULL;		/* set the default value */    *parameterBoi = 0;		/* set the default value */#if	defined(VIRTUAL_WIRE_MODE)    if (vectorNo == TIMER_INT_VEC)	{        *routineEoi   = loApicIntEoi;        *parameterEoi = TIMER_INT_LVL;	}    else if (vectorNo == SPURIOUS_INT_VEC)	{        *routineEoi   = NULL;		/* no EOI is necessary */        *parameterEoi = SPURIOUS_INT_LVL;	}    else if (vectorNo == ERROR_INT_VEC)	{        *routineEoi   = loApicIntEoi;        *parameterEoi = ERROR_INT_LVL;	}    else        {        irqNo = vectorNo - INT_NUM_IRQ0;	if ((irqNo == 7) || (irqNo == 15))	    {            *routineBoi   = i8259IntBoi;            *parameterBoi = irqNo;	    }	if (irqNo < 8)            *routineEoi   = i8259IntEoiMaster;	else            *routineEoi   = i8259IntEoiSlave;        *parameterEoi = irqNo;        }#elif	defined(SYMMETRIC_IO_MODE)    if (vectorNo == TIMER_INT_VEC)	{        *routineEoi   = loApicIntEoi;        *parameterEoi = TIMER_INT_LVL;	}    else if (vectorNo == SPURIOUS_INT_VEC)	{        *routineEoi   = NULL;		/* no EOI is necessary */        *parameterEoi = SPURIOUS_INT_LVL;	}    else if (vectorNo == ERROR_INT_VEC)	{        *routineEoi   = loApicIntEoi;        *parameterEoi = ERROR_INT_LVL;	}    else        {        for (irqNo = 0; irqNo < NELEMENTS (redTable); irqNo++)	    if (redTable [irqNo].vectorNo == vectorNo)	        break;        *routineEoi   = ioApicIntEoi;        *parameterEoi = irqNo;        }#else    irqNo = vectorNo - INT_NUM_IRQ0;    if ((irqNo == 7) || (irqNo == 15))        {        *routineBoi   = i8259IntBoi;        *parameterBoi = irqNo;        }    if (irqNo < 8)        *routineEoi   = i8259IntEoiMaster;    else        *routineEoi   = i8259IntEoiSlave;    *parameterEoi = irqNo;#endif	/* defined(VIRTUAL_WIRE_MODE) */    }/********************************************************************************* sysIntLevel - get an IRQ(PIC) or INTIN(APIC) number in service** This routine gets an IRQ(PIC) or INTIN(APIC) number in service.  * We assume followings:*   - this function is called in intEnt()*   - IRQ number of the interrupt is at intConnectCode [29]** RETURNS: 0 - (NUMBER_OF_IRQS - 1), or NUMBER_OF_IRQS if we failed to get it.** ARGSUSED0*/#ifdef	SYS_INT_DEBUGUINT32 sysIntCount[NUMBER_OF_IRQS + 1];#endif	/* SYS_INT_DEBUG */int sysIntLevel     (    int arg		/* parameter to get the stack pointer */    )    {    UINT32 * pStack;    UCHAR * pInst;    int ix;    int irqNo = NUMBER_OF_IRQS;	/* return NUMBER_OF_IRQS if we failed */    pStack = &arg;		/* get the stack pointer */    pStack += 3;		/* skip pushed volitile registers */    /*      * we are looking for a return address on the stack which point     * to the next instruction of "call _intEnt" in the malloced stub.     * Then get the irqNo at intConnectCode [29].     */    for (ix = 0; ix < 10; ix++, pStack++)	{	pInst = (UCHAR *)*pStack;		/* return address */	if ((*pInst == 0x50) && 		/* intConnectCode [5] */	    ((*(int *)(pInst - 4) + (int)pInst) == (int)intEnt))	    {    	    irqNo = *(int *)(pInst + 24);	/* intConnectCode [29] */	    break;	    }	}#ifdef	SYS_INT_DEBUG    sysIntCount[irqNo]++;#endif	/* SYS_INT_DEBUG */    return (irqNo);    }/****************************************************************************** sysProcNumGet - get the processor number** This routine returns the processor number for the CPU board, which is* set with sysProcNumSet().** RETURNS: The processor number for the CPU board.** SEE ALSO: sysProcNumSet()*/int sysProcNumGet (void)    {    return (sysProcNum);    }/****************************************************************************** sysProcNumSet - set the processor number** Set the processor number for the CPU board.  Processor numbers should be* unique on a single backplane.** NOTE: By convention, only Processor 0 should dual-port its memory.** RETURNS: N/A** SEE ALSO: sysProcNumGet()*/void sysProcNumSet    (    int procNum		/* processor number */    )    {    sysProcNum = procNum;    }/********************************************************************************* sysDelay - allow recovery time for port accesses** This routine provides a brief delay used between accesses to the same serial* port chip.* * RETURNS: N/A*/void sysDelay (void)    {    char ix;    ix = sysInByte (UNUSED_ISA_IO_ADDRESS);	/* it takes 720ns */    }/********************************************************************************* sysStrayInt - Do nothing for stray interrupts.** Do nothing for stray interrupts.*/LOCAL void sysStrayInt (void)    {    sysStrayIntCount++;    }/********************************************************************************* sysMmuMapAdd - insert a new mmu mapping** This routine adds a new mmu mapping entry to allow dynamic mappings. ** RETURNS: OK or ERROR depending on availability of free mappings.*/  STATUS sysMmuMapAdd     (    void *address,    UINT length,    UINT initialStateMask,    UINT initialState    )    {    PHYS_MEM_DESC *pMmu;    STATUS result = OK;    pMmu = &sysPhysMemDesc[sysPhysMemDescNumEnt];      if(pMmu->virtualAddr != (void *)DUMMY_VIRT_ADDR)        result = ERROR;    else        {        pMmu->virtualAddr = address;        pMmu->physicalAddr = address;        pMmu->len = length;        pMmu->initialStateMask = initialStateMask;        pMmu->initialState = initialState;        sysPhysMemDescNumEnt += 1;        }        return (result);}/*06A*/#if INCLUDE_06A#define INCLUDE_USB#define INCLUDE_USB_MOUSE#define BULK_DRIVE_NAME "bulkd"#define CBI_DRIVE_NAME "cbid"#include "usrUsbInit.c"#include "usrUsbHcdUhciInit.c"   #include "usrUsbHcdOhciInit.c"#include "usrUsbMseInit.c"#include "usrUsbBulkDevInit.c"#include "usrUsbCbiUfiDevInit.c"#include "usrUsbPciOhciInit2.c"#include "usbPciStub2.c"/*#include "usrUsbUglKbdInit.c"*/void initUsbDisk(){/*	sysUsbOhciPciInit();*//*	sysUsbPciOhciInit();*/	usbInit();	usrUsbHcdOhciAttach();	usrUsbBulkDevInit();/*	usrUsbCbiUfiDevInit();*/}#endif /**/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -