📄 syslib.c
字号:
* configuration necessary.** RETURNS: N/A*/void sysHwInit2 (void){ static BOOL configured = FALSE;int immrVal; if (!configured) { immrVal = vxImmrGet(); /* initialize serial interrupts */ sysSerialHwInit2(); /* initialize hdlc interrupts *//* sysHdlcHwInit2();*/ *SCCR(immrVal) &= ~SCCR_TBS; /* un-freeze the Time Base clock */ /* lqy added 10-18, unlock key */ *TBSCRK(immrVal) = 0x55ccaa33; *TBSCR(immrVal) = TBSCR_TBE ; configured = TRUE; } }/******************************************************************************** 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** This routine sets the processor number for the CPU board. Processor numbers* should be unique on a single backplane.** Not applicable for the busless 860Ads.** RETURNS: N/A** SEE ALSO: sysProcNumGet()**/void sysProcNumSet ( int procNum /* processor number */ ) { sysProcNum = procNum; }/******************************************************************************** sysLocalToBusAdrs - convert a local address to a bus address** This routine gets the VMEbus address that accesses a specified local* memory address.** Not applicable for the 860Ads** RETURNS: ERROR, always.** SEE ALSO: sysBusToLocalAdrs()*/ STATUS sysLocalToBusAdrs ( int adrsSpace, /* bus address space where busAdrs resides */ char * localAdrs, /* local address to convert */ char ** pBusAdrs /* where to return bus address */ ) { return (ERROR); }/******************************************************************************** sysBusToLocalAdrs - convert a bus address to a local address** This routine gets the local address that accesses a specified VMEbus* physical memory address.** Not applicable for the 860Ads** RETURNS: ERROR, always.** SEE ALSO: sysLocalToBusAdrs()*/STATUS sysBusToLocalAdrs ( int adrsSpace, /* bus address space where busAdrs resides */ char * busAdrs, /* bus address to convert */ char ** pLocalAdrs /* where to return local address */ ) { return (ERROR); }/******************************************************************************** sysBusTas - test and set a location across the bus** This routine does an atomic test-and-set operation across the backplane.** Not applicable for the 860Ads.** RETURNS: FALSE, always.** SEE ALSO: vxTas()*/BOOL sysBusTas ( char * adrs /* address to be tested-and-set */ ) { return (FALSE); }/******************************************************************************** sysBusClearTas - test and clear ** This routine is a null function.** RETURNS: N/A*/void sysBusClearTas ( volatile char * address /* address to be tested-and-cleared */ ) { } /********************************************************************************* sysCpmEnetDisable - disable the Ethernet controller** This routine is expected to perform any target specific functions required* to disable the Ethernet controller. This usually involves disabling the* Transmit Enable (TENA) signal.** RETURNS: N/A*/void sysCpmEnetDisable ( int unit /* not used - only slave SCC1 is wired to port */ ) { *PBPAR(vxImmrGet()) &= ~(0x1000); /* set port B -> RTS1 = *TENA */ }/********************************************************************************* sysCpmEnetIntDisable - disable the Ethernet interface interrupt** This routine disable the interrupt for the Ethernet interface specified* by <unit>.** RETURNS: N/A.*/void sysCpmEnetIntDisable ( int unit ) { *CIMR(vxImmrGet()) &= ~CIMR_SCC1; }#ifdef INCLUDE_CPM/********************************************************************************* sysCpmEnetEnable - enable the Ethernet controller** This routine is expected to perform any target specific functions required* to enable the Ethernet controller. These functions typically include* enabling the Transmit Enable signal (TENA) and connecting the transmit* and receive clocks to the SCC.** RETURNS: OK, or ERROR if the Ethernet controller cannot be enabled.*/STATUS sysCpmEnetEnable ( int unit /* not used - only slave SCC1 is wired to port */ ) { int immrVal = vxImmrGet(); /* PA6 -> CLK2 ; PA4 -> CLK4 ; PA14 -> TXD1 ; PA15 -> RXD1 */ *PAPAR(immrVal) |= 0x0a03; *PADIR(immrVal) &= ~(0x0a03); /* PA3 -> I/O */ *PAPAR(immrVal) &= ~(0x1000); *PADIR(immrVal) &= ~(0x1000); /* PC10 ->CD1 ; PC11 -> CTS1 */ *PCPAR(immrVal) &= ~(0x0030); *PCDIR(immrVal) &= ~(0x0030); *PCSO(immrVal) |= 0x0030; /* PB15 -> I/O (collision dectect,1) PB16 -> I/O (loop back,0); PB17 -> I/O (link Enable,1) PB14 -> I/O (SQEL,1) */ /* general I/O */ *PBPAR(immrVal) &= ~(0x3c000); /* set PB14:1, PB15:1, PB16:0, PB17:1 */ *PBDAT(immrVal) |= 0x34000; *PBDAT(immrVal) &= ~(0x8000); /* */ *SICR(immrVal) |= 0x3d; /* connect SCC1 clocks */ *SICR(immrVal) &= ~(0x40); /* NMSI mode */ /* PB19 -> RTS1 */ *PBPAR(immrVal) |= 0x00001000; /* set port B -> *RTS1 = TENA */ *PBDIR(immrVal) |= 0x00001000; return (OK); }/********************************************************************************* sysCpmEnetAddrGet - get the hardware Ethernet address** This routine provides the six byte Ethernet hardware address that will be* used by each individual Ethernet device unit. This routine must copy* the six byte address to the space provided by <addr>.** RETURNS: OK, or ERROR if the Ethernet address cannot be returned.*/STATUS sysCpmEnetAddrGet ( int unit, /* not used - only slave SCC1 is wired to port */ UINT8 * addr ) { bcopy ((char *) sysCpmEnetAddr, (char *) addr, sizeof (sysCpmEnetAddr)); return (OK); }/********************************************************************************* sysCpmEnetCommand - issue a command to the Ethernet interface controller** RETURNS: OK, or ERROR if the Ethernet controller could not be restarted.*/STATUS sysCpmEnetCommand ( int unit, UINT16 command ) { int immrVal = vxImmrGet(); while (*CPCR(immrVal) & CPM_CR_FLG); *CPCR(immrVal) = CPM_CR_CHANNEL_SCC1 | command | CPM_CR_FLG; while (*CPCR(immrVal) & CPM_CR_FLG); return (OK); }/********************************************************************************* sysCpmEnetIntEnable - enable the Ethernet interface interrupt** This routine enable the interrupt for the Ethernet interface specified* by <unit>.** RETURNS: N/A.*/void sysCpmEnetIntEnable ( int unit ) { *CIMR(vxImmrGet()) |= CIMR_SCC1; }/********************************************************************************* sysCpmEnetIntClear - clear the Ethernet interface interrupt** This routine clears the interrupt for the Ethernet interface specified* by <unit>.** RETURNS: N/A.*/void sysCpmEnetIntClear ( int unit ) { *CISR(vxImmrGet()) = CISR_SCC1; }/********************************************************************************* sysCpmAttach - attach wrapper**/STATUS sysCpmAttach ( int unit, /* unit number */ SCC * pScc, /* address of SCC parameter RAM */ SCC_REG * pSccReg, /* address of SCC registers */ VOIDFUNCPTR * ivec, /* interrupt vector offset */ SCC_BUF * txBdBase, /* transmit buffer descriptor base address */ SCC_BUF * rxBdBase, /* receive buffer descriptor base address */ int txBdNum, /* number of transmit buffer descriptors */ int rxBdNum, /* number of receive buffer descriptors */ UINT8 * bufBase /* address of memory pool; NONE = malloc it */ ) { return (cpmattach(unit, pScc, pSccReg, ivec, txBdBase, rxBdBase, txBdNum, rxBdNum, bufBase)); } #endif /* INCLUDE_CPM */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -