📄 syslib.c
字号:
/* sysLib.c - Motorola 860sar board system-dependent library */ /* Copyright 1984-1997 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------15/5/2000,tpr written.*//*DESCRIPTIONThis library provides board-specific routines. The chip drivers included are: ppc860Timer.c - PowerPC/860 Timer library sysMotCpmEnd.c - configuration module for the motCpmEnd driverINCLUDE FILES: sysLib.hSEE ALSO:.pG "Configuration"*//* includes */#include "vxWorks.h"#include "vme.h"#include "memLib.h"#include "cacheLib.h"#include "sysLib.h"#include "config.h"#include "string.h"#include "intLib.h"#include "logLib.h"#include "stdio.h"#include "taskLib.h"#include "vxLib.h"#include "tyLib.h"#include "arch/ppc/vxPpcLib.h"#include "private/vmLibP.h"#include "drv/multi/ppc860Siu.h"#include "860sar.h"#ifdef INCLUDE_CPM#include "drv/netif/if_cpm.h"#endifPHYS_MEM_DESC sysPhysMemDesc [] = { { (void *) LOCAL_MEM_LOCAL_ADRS, (void *) LOCAL_MEM_LOCAL_ADRS, LOCAL_MEM_SIZE , /* EDO DRAM */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT },/* { (void *) MT90820_BASE_ADRS, (void *) MT90820_BASE_ADRS, MT90820_SIZE , VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, */ { (void *) INTERNAL_MEM_MAP_ADDR, (void *) INTERNAL_MEM_MAP_ADDR, INTERNAL_MEM_MAP_SIZE, /* 64 k - Internal Memory Map */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT | VM_STATE_GUARDED }, { (void *) ROM_BASE_ADRS, (void *) ROM_BASE_ADRS, ROM_SIZE, /* Flach_0 memory */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, { (void *) AM29F040B_ADRS, (void *) AM29F040B_ADRS, AM29F040B_SIZE, /* Flach_1 memory */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, { (void *) SRAM_BASE_ADRS, (void *) SRAM_BASE_ADRS, SRAM_SIZE , /* SRAM */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, { (void *) MT90840_BASE_ADRS, (void *) MT90840_BASE_ADRS, MT90840_SIZE , VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, { (void *) DS2154_ADRS(0), (void *) DS2154_ADRS(0), DS2154_SIZE * 16, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT } };int sysPhysMemDescNumEnt = NELEMENTS (sysPhysMemDesc);int sysBus = BUS; /* system bus type (VME_BUS, etc) */int sysCpu = CPU; /* system CPU type (PPC860) */char *sysBootLine = BOOT_LINE_ADRS; /* address of boot line */char *sysExcMsg = EXC_MSG_ADRS; /* catastrophic message area */int sysProcNum; /* processor number of this CPU */int sysFlags; /* boot flags */char sysBootHost [BOOT_FIELD_LEN]; /* name of host from which we booted */char sysBootFile [BOOT_FIELD_LEN]; /* name of file from which we booted */BOOL sysVmeEnable = FALSE; /* by default no VME */#ifdef INCLUDE_CPM/* XXX set the following array to a unique Ethernet hardware address XXX *//* last 5 nibbles are board specific, initialized in sysHwInit */unsigned char sysCpmEnetAddr [6] = {0x08, 0x00, 0x3e, 0x03, 0x02, 0x01};extern STATUS cpmattach();#endif /* INCLUDE_CPM *//* locals */void sysCpmEnetDisable (int unit);void sysCpmEnetIntDisable (int unit);STATUS sysCpmEnetEnable(int unit);void sysCpmEnetIntEnable(int uint);#include "sysSerial.c"#include "intrCtl/ppc860Intr.c"#include "mem/nullNvRam.c"#include "timer/ppc860Timer.c" /* PPC860 & 821 have on chip timers */#ifdef INCLUDE_CPM#include "sysMotCpmEnd.c" /* configuration module for motCpmEnd */#endif /* INCLUDE_CPM *//*#include "sysHdlc.c"*/#include "mpc860p.h"/*static int immrVal;*//******************************************************************************** sysModel - return the model name of the CPU board** This routine returns the model name of the CPU board.** RETURNS: A pointer to the string.*/char * sysModel (void) { return ("Motorola ADS - PowerPC 860"); }/******************************************************************************** sysBspRev - return the bsp version with the revision eg 1.0/<x>** This function returns a pointer to a bsp version with the revision.* for eg. 1.0/<x>. BSP_REV defined in config.h is concatanated to* BSP_VERSION and returned.** RETURNS: A pointer to the BSP version/revision string.*/char * sysBspRev (void) { return (BSP_VERSION BSP_REV); }/******************************************************************************** sysHwInit - initialize the system hardware** This routine initializes various feature of the MPC860ADS boards. It sets up* the control registers, initializes various devices if they are present.** NOTE: This routine should not be called directly by the user.** RETURNS: N/A*/void sysHwInit (void) { int immrVal = vxImmrGet(); /* set the SPLL to the value requested */ * PLPRCR(immrVal) = (*PLPRCR(immrVal) & ~PLPRCR_MF_MSK) | (SPLL_MUL_FACTOR << PLPRCR_MF_SHIFT); /* set the BRGCLK division factor */ * SCCR(immrVal) = (* SCCR(immrVal) & ~SCCR_DFBRG_MSK) | (BRGCLK_DIV_FACTOR << SCCR_DFBRG_SHIFT); /* set the Periodic Timer A value */ * MAMR(immrVal) = (* MAMR(immrVal) & ~MAMR_PTA_MSK) | (PTA_VALUE << MAMR_PTA_SHIFT); /* set the Periodic Timer PreScale */ * MPTPR(immrVal) = PTP_VALUE; /* reset the port A */ *PAPAR(immrVal) = 0x0000; *PADIR(immrVal) = 0x0000; *PAODR(immrVal) = 0x0000; /* reset the port B */ *PBPAR(immrVal) = 0x00000000; *PBDIR(immrVal) = 0x00000000; *PBODR(immrVal) = 0x00000000; /* reset the port C */ *PCPAR(immrVal) = 0x0000; *PCDIR(immrVal) = 0x0000; *PCSO(immrVal) = 0x0000; /* reset the port D */ *PDPAR(immrVal) = 0x0000; *PDDIR(immrVal) = 0x0000; *SICR(immrVal) = 0x0; /* initialize SI/NMSI connections */ /* Initialize interrupts */ ppc860IntrInit(IV_LEVEL4); /* default vector level */ /* Reset serial channels *//* sysSerialHwInit();*/ /* make sure Ethernet is disabled */ sysCpmEnetDisable (0); sysCpmEnetIntDisable (0);/* sysHdlcHwInit();*/ /* * The power management mode is initialized here. Reduced power mode * is activated only when the kernel is iddle (cf vxPowerDown). * Power management mode is selected via vxPowerModeSet(). * DEFAULT_POWER_MGT_MODE is defined in config.h. */ vxPowerModeSet (DEFAULT_POWER_MGT_MODE); }/********************************************************************************* sysPhysMemTop - get the address of the top of physical memory** This routine returns the address of the first missing byte of memory,* which indicates the top of memory.** RETURNS: The address of the top of physical memory.** SEE ALSO: sysMemTop()*/char * sysPhysMemTop (void) { static char * physTop = NULL; if (physTop == NULL) { physTop = (char *)(LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE); } return (physTop) ; }/********************************************************************************* sysMemTop - get the address of the top of VxWorks memory** This routine returns a pointer to the first byte of memory not* controlled or used by VxWorks.** The user can reserve memory space by defining the macro USER_RESERVED_MEM* in config.h. This routine returns the address of the reserved memory* area. The value of USER_RESERVED_MEM is in bytes.** RETURNS: The address of the top of VxWorks memory.*/char * sysMemTop (void) { static char * memTop = NULL; if (memTop == NULL) { memTop = sysPhysMemTop () - USER_RESERVED_MEM; } return memTop; }/******************************************************************************** sysToMonitor - transfer control to the ROM monitor** This routine transfers control to the ROM monitor. Normally, it is called* only by reboot()--which services ^X--and bus errors at interrupt level.* However, in some circumstances, the user may wish to introduce a* <startType> to enable special boot ROM facilities.** RETURNS: Does not return.*/STATUS sysToMonitor ( int startType /* parameter passed to ROM to tell it how to boot */ ) { FUNCPTR pRom = (FUNCPTR) (ROM_TEXT_ADRS + 4); /* Warm reboot */ *CIMR(vxImmrGet()) = 0; /* disable all cpm interupts */ sysCpmEnetDisable (0); /* disable the ethernet device */ sysSerialReset(); /* reset the serail device */ (*pRom) (startType); /* jump to bootrom entry point */ return (OK); /* in case we ever continue from ROM monitor */ }/******************************************************************************** sysHwInit2 - additional system configuration and initialization** This routine connects system interrupts and does any additional
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -