📄 bootconfig.c
字号:
{64, NUM_SYS_64_MIN, NULL, 0},
{128, NUM_SYS_128_MIN, NULL, 0},
{256, NUM_SYS_256_MIN, NULL, 0},
{512, NUM_SYS_512_MIN, NULL, 0},
};
int sysClDescTblNumEnt = (NELEMENTS(sysClDescTbl));
#ifdef INCLUDE_PPP
#ifndef PPP_OPTIONS_FLAGS
#define PPP_OPTIONS_FLAGS ((PPP_OPT_NO_ALL << PPP_S_NO_ALL) | \
(PPP_OPT_PASSIVE_MODE << PPP_S_PASSIVE_MODE) | \
(PPP_OPT_SILENT_MODE << PPP_S_SILENT_MODE) | \
(PPP_OPT_DEFAULTROUTE << PPP_S_DEFAULTROUTE) | \
(PPP_OPT_PROXYARP << PPP_S_PROXYARP) | \
(PPP_OPT_IPCP_ACCEPT_LOCAL << PPP_S_IPCP_ACCEPT_LOCAL) | \
(PPP_OPT_IPCP_ACCEPT_REMOTE << PPP_S_IPCP_ACCEPT_REMOTE) | \
(PPP_OPT_NO_IP << PPP_S_NO_IP) | \
(PPP_OPT_NO_ACC << PPP_S_NO_ACC) | \
(PPP_OPT_NO_PC << PPP_S_NO_PC) | \
(PPP_OPT_NO_VJ << PPP_S_NO_VJ) | \
(PPP_OPT_NO_VJCCOMP << PPP_S_NO_VJCCOMP) | \
(PPP_OPT_NO_ASYNCMAP << PPP_S_NO_ASYNCMAP) | \
(PPP_OPT_NO_MN << PPP_S_NO_MN) | \
(PPP_OPT_NO_MRU << PPP_S_NO_MRU) | \
(PPP_OPT_NO_PAP << PPP_S_NO_PAP) | \
(PPP_OPT_NO_CHAP << PPP_S_NO_CHAP) | \
(PPP_OPT_REQUIRE_PAP << PPP_S_REQUIRE_PAP) | \
(PPP_OPT_REQUIRE_CHAP << PPP_S_REQUIRE_CHAP) | \
(PPP_OPT_LOGIN << PPP_S_LOGIN) | \
(PPP_OPT_DEBUG << PPP_S_DEBUG) | \
(PPP_OPT_DRIVER_DEBUG << PPP_S_DRIVER_DEBUG))
#endif /* PPP_OPTIONS_FLAGS */
PPP_OPTIONS pppOptions =
{
PPP_OPTIONS_FLAGS, /* flags field */
PPP_STR_ASYNCMAP, /* Set the desired async map */
PPP_STR_ESCAPE_CHARS, /* Set chars to escape on transmission */
PPP_STR_VJ_MAX_SLOTS, /* Set maximum VJ compression header slots */
PPP_STR_NETMASK, /* Set netmask value for negotiation */
PPP_STR_MRU, /* Set MRU value for negotiation */
PPP_STR_MTU, /* Set MTU value for negotiation */
PPP_STR_LCP_ECHO_FAILURE, /* Set max # consecutive LCP echo failures */
PPP_STR_LCP_ECHO_INTERVAL, /* Set time for LCP echo requests */
PPP_STR_LCP_RESTART, /* Set timeout for LCP */
PPP_STR_LCP_MAX_TERMINATE, /* Set max # xmits for LCP term-reqs */
PPP_STR_LCP_MAX_CONFIGURE, /* Set max # xmits for LCP conf-reqs */
PPP_STR_LCP_MAX_FAILURE, /* Set max # conf-naks for LCP */
PPP_STR_IPCP_RESTART, /* Set timeout for IPCP */
PPP_STR_IPCP_MAX_TERMINATE, /* Set max # xmits for IPCP term-reqs */
PPP_STR_IPCP_MAX_CONFIGURE, /* Set max # xmits for IPCP conf-reqs */
PPP_STR_IPCP_MAX_FAILURE, /* Set max # conf-naks for IPCP */
PPP_STR_LOCAL_AUTH_NAME, /* Set local name for authentication */
PPP_STR_REMOTE_AUTH_NAME, /* Set remote name for authentication */
PPP_STR_PAP_FILE, /* Set the PAP secrets file */
PPP_STR_PAP_USER_NAME, /* Set username for PAP auth with peer */
PPP_STR_PAP_PASSWD, /* Set password for PAP auth with peer */
PPP_STR_PAP_RESTART, /* Set timeout for PAP */
PPP_STR_PAP_MAX_AUTHREQ, /* Set max # xmits for PAP auth-reqs */
PPP_STR_CHAP_FILE, /* Set the CHAP secrets file */
PPP_STR_CHAP_RESTART, /* Set timeout for CHAP */
PPP_STR_CHAP_INTERVAL, /* Set interval for CHAP rechallenge */
PPP_STR_CHAP_MAX_CHALLENGE /* Set max # xmits for CHAP challenge */
};
#endif /* INCLUDE_PPP */
#endif /* INCLUDE_NETWORK */
/* forward declarations */
#ifdef __STDC__
void usrRoot (char *pMemPoolStart, unsigned memPoolSize);
void usrClock (void);
void usrKernelInit (void);
LOCAL void bootCmdLoop (void);
LOCAL char autoboot (int timeout);
LOCAL void printBootLogo (void);
LOCAL void bootHelp (void);
LOCAL STATUS bootLoad (char *bootString, FUNCPTR *pEntry);
LOCAL void go (FUNCPTR entry);
LOCAL void m (char *adrs);
LOCAL void d (char *adrs, int nwords);
LOCAL void bootExcHandler (int tid);
LOCAL void skipSpace (char **strptr);
LOCAL void printExcMsg (char *string);
LOCAL STATUS getArg (char **ppString, int *pValue, BOOL defaultHex,
BOOL optional);
LOCAL void usrBootLineInit (int startType);
LOCAL STATUS usrBootLineCrack (char *bootString, BOOT_PARAMS *pParams);
#ifdef INCLUDE_NETWORK
LOCAL STATUS netLoad (char *hostName, char *fileName, char *usr,
char *passwd, FUNCPTR *pEntry);
LOCAL void netifAdrsPrint (char *ifname);
LOCAL STATUS checkInetAddrField (char *pInetAddr, BOOL subnetMaskOK);
LOCAL STATUS usrNetIfAttach (char *devName, int unitNum, char *inetAdrs);
LOCAL STATUS usrNetIfConfig (char *devName, int unitNum, char *inetAdrs,
char *inetName, int netmask);
LOCAL STATUS usrBpInit (char *devName, int unitNum, u_long startAddr);
LOCAL STATUS usrSlipInit (char *pBootDev, int unitNum, char *localAddr,
char *peerAddr);
LOCAL STATUS usrPPPInit (char *pBootDev, int unitNum, char *localAddr,
char *peerAddr);
#ifdef INCLUDE_BOOTP
LOCAL STATUS bootpGet (char *pNetDev, char *pBootDevAddr, char *pBootFile,
char *pHostAddr, int *pMask);
#endif
#ifdef INCLUDE_DHCPC
LOCAL STATUS dhcpGet (char *pNetDev, char *pBootDevAddr, char *pBootFile,
char *pHostAddr, int *pMask,
DHCP_LEASE_DATA *pDhcpLease);
#endif
#endif /* INCLUDE_NETWORK */
#ifdef INCLUDE_SCSI_BOOT
LOCAL STATUS scsiLoad (int bootDevId, int bootDevLUN, char *fileName,
FUNCPTR *pEntry);
#endif /* INCLUDE_SCSI_BOOT */
#ifdef INCLUDE_FD
LOCAL STATUS fdLoad (int drive, int type, char *fileName, FUNCPTR *pEntry);
#endif /* INCLUDE_FD */
#ifdef INCLUDE_IDE
LOCAL STATUS ideLoad (int drive, int type, char *fileName, FUNCPTR *pEntry);
#endif /* INCLUDE_IDE */
#ifdef INCLUDE_ATA
LOCAL STATUS ataLoad (int ctrl, int drive, char *fileName, FUNCPTR *pEntry);
#endif /* INCLUDE_ATA */
#ifdef INCLUDE_PCMCIA
LOCAL STATUS pcmciaLoad (int sock, char *fileName, FUNCPTR *pEntry);
#endif /* INCLUDE_PCMCIA */
#ifdef INCLUDE_TFFS
LOCAL STATUS tffsLoad (int drive, int removable, char *fileName,
FUNCPTR *pEntry);
#endif /* INCLUDE_TFFS */
#ifdef INCLUDE_TSFS_BOOT
LOCAL STATUS tsfsLoad (char * fileName, FUNCPTR * pEntry);
LOCAL void wdbRebootEventGet (void * pNode, WDB_EVT_DATA * pEvtData);
#endif /* INCLUDE_TSFS_BOOT */
#else
void usrRoot ();
void usrClock ();
void usrKernelInit ();
LOCAL void bootCmdLoop ();
LOCAL char autoboot ();
LOCAL void printBootLogo ();
LOCAL void bootHelp ();
LOCAL STATUS bootLoad ();
LOCAL void go ();
LOCAL void m ();
LOCAL void d ();
LOCAL void bootExcHandler ();
LOCAL void skipSpace ();
LOCAL void printExcMsg ();
LOCAL STATUS getArg ();
LOCAL void usrBootLineInit ();
LOCAL STATUS usrBootLineCrack ();
#ifdef INCLUDE_NETWORK
LOCAL STATUS netLoad ();
LOCAL void netifAdrsPrint ();
LOCAL STATUS checkInetAddrField ();
LOCAL STATUS usrNetIfAttach ();
LOCAL STATUS usrNetIfConfig ();
LOCAL STATUS usrBpInit ();
LOCAL STATUS usrSlipInit ();
LOCAL STATUS usrPPPInit ();
#ifdef INCLUDE_BOOTP
LOCAL STATUS bootpGet ();
#endif
#endif /* INCLUDE_NETWORK */
#ifdef INCLUDE_SCSI_BOOT
LOCAL STATUS scsiLoad();
#endif /* INCLUDE_SCSI_BOOT */
#ifdef INCLUDE_FD
LOCAL STATUS fdLoad ();
#endif /* INCLUDE_FD */
#ifdef INCLUDE_IDE
LOCAL STATUS ideLoad ();
#endif /* INCLUDE_IDE */
#ifdef INCLUDE_ATA
LOCAL STATUS ataLoad ();
#endif /* INCLUDE_ATA */
#ifdef INCLUDE_PCMCIA
LOCAL STATUS pcmciaLoad ();
#endif /* INCLUDE_PCMCIA */
#ifdef INCLUDE_TFFS
LOCAL STATUS tffsLoad ();
#endif /* INCLUDE_TFFS */
#ifdef INCLUDE_TSFS_BOOT
LOCAL STATUS tsfsLoad ();
LOCAL void wdbRebootEventGet ();
#endif /* INCLUDE_TSFS_BOOT */
#endif /* __STDC__ */
/*******************************************************************************
*
* usrInit - user-defined system initialization routine
*
* This routine is called by the start-up code in romStart(). It is called
* before kernel multi-tasking is enabled, with the interrupts locked out.
*
* It starts by clearing BSS, so all variables are initialized to 0 as per
* the C specification. Then it sets up exception vectors, initializes the
* hardware by calling sysHwInit(), and finally starts the kernel with the
* usrRoot() task to do the remainder of the initialization.
*
* NOMANUAL
*/
void usrInit
(
int startType
)
{
/*
* This trap will catch improper loading of the data section.
* We check the magic cookie values to make sure the data section is
* in the expected memory location. We do not want
* to proceed further if the data segment is not correct.
*
* It should be easy to detect entry into the trap using an ICE, JTAG,
* or logic analyzer. Without the trap, the processor is likely to run
* away out of control.
*
* Data section misalignment can occur when there is a change in tool
* chain, build rules, compiler, host utilites, etc.
*/
while (trapValue1 != TRAP_VALUE_1 || trapValue2 != TRAP_VALUE_2)
{
/* infinite loop */;
}
#if (CPU_FAMILY == SPARC)
excWindowInit (); /* SPARC window management */
#endif
#if (CPU_FAMILY == MIPS)
sysGpInit (); /* MIPS global pointer */
#endif /* (CPU_FAMILY == MIPS) */
#ifdef INCLUDE_SYS_HW_INIT_0
/*
* Perform any BSP-specific initialisation that must be done before
* cacheLibInit() is called and/or BSS is cleared.
*/
SYS_HW_INIT_0 ();
#endif /* INCLUDE_SYS_HW_INIT_0 */
/* configure data and instruction cache if available and leave disabled */
#ifdef INCLUDE_CACHE_SUPPORT
/*
* SPR 73609: If a cache is not to be enabled, don't require
* its mode to be defined. Instead, default it to disabled.
*/
# if (!defined(USER_D_CACHE_ENABLE) && !defined(USER_D_CACHE_MODE))
# define USER_D_CACHE_MODE CACHE_DISABLED
# endif /* !USER_D_CACHE_ENABLE && !USER_D_CACHE_MODE */
# if (!defined(USER_I_CACHE_ENABLE) && !defined(USER_I_CACHE_MODE))
# define USER_I_CACHE_MODE CACHE_DISABLED
# endif /* !USER_I_CACHE_ENABLE && !USER_I_CACHE_MODE */
cacheLibInit (USER_I_CACHE_MODE, USER_D_CACHE_MODE);
#endif /* INCLUDE_CACHE_SUPPORT */
#if (CPU == SPARClite)
cacheLib.textUpdateRtn = NULL; /* XXX - mod hist 07u */
#endif
/* don't assume bss variables are zero before this call */
bzero (edata, end - edata); /* zero out bss variables */
sysStartType = startType;
intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS); /* set vector base table */
#if (CPU_FAMILY == AM29XXX)
excSpillFillInit (); /* am29k stack cache managemt */
#endif
excVecInit (); /* install exception vectors */
sysHwInit (); /* initialize system hardware */
usrKernelInit (); /* configure the Wind kernel */
#if (CPU==SPARC) || (CPU_FAMILY==I80X86) /* XXX workaround for sun1e */
#undef USER_I_CACHE_ENABLE /* XXX disable instruction cache */
#endif /* (CPU==SPARC) || (CPU_FAMILY==I80X86) */
#ifdef INCLUDE_CACHE_SUPPORT
#ifdef USER_I_CACHE_ENABLE
cacheEnable (INSTRUCTION_CACHE); /* enable instruction cache */
#endif /* USER_I_CACHE_ENABLE */
#endif /* INCLUDE_CACHE_SUPPORT */
/* start the kernel specifying usrRoot as the root task */
kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE,
(char *) MEM_POOL_START_ADRS,
sysMemTop (), ISR_STACK_SIZE, INT_LOCK_LEVEL);
}
/*******************************************************************************
*
* usrRoot - user-defined root task
*
* The root task performs any initialization that should be done
* subsequent to the kernel initialization.
*
* It initializes the I/O system, install drivers, create devices,
* sets up the network, etc., as necessary for the particular configuration.
* It may also create the system symbol table if one is to be included.
* Finally, it spawns the boot command loop task.
*
* NOMANUAL
*/
void usrRoot
(
char * pMemPoolStart, /* start of system memory partition */
unsigned memPoolSize /* initial size of mem pool */
)
{
char tyName [20];
int ix;
#ifdef INCLUDE_END
int count;
END_TBL_ENTRY* pDevTbl;
#endif /* INCLUDE_END */
/* Initialize the memory pool before initializing any other package.
* The memory associated with the root task will be reclaimed at the
* completion of its activities.
*/
memInit (pMemPoolStart, memPoolSize);/* XXX select between memPartLibInit */
/* set up system timer */
sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */
sysClkRateSet (SYS_CLK_RATE); /* set system clock rate */
sysClkEnable (); /* start it */
/*
* The select library needs to be initialized before the tyLib module
* since the _func_selWakeupListInit FUNCPTR is required (SPR #3314).
* The installation of the select task delete hook is not performed
* for boot ROMs.
*/
#ifdef INCLUDE_SELECT
selectInit (NUM_FILES);
#endif /* INCLUDE_SELECT */
/* initialize I/O and file system */
iosInit (NUM_DRIVERS, NUM_FILES, "/null");
consoleFd = NONE;
/* install driver for on-board serial ports and make devices */
#ifdef INCLUDE_TYCODRV_5_2
#ifdef INCLUDE_TTY_DEV
if (NUM_TTY > 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -