usrConfig.c
上传用户:yuanda199
上传日期:2022-06-26
资源大小:412k
文件大小:36k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usrConfig.c - user-defined system configuration library */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 19j,19sep02,jmb  missed a patch in jul30 merge
  8. 19i,16sep02,jmb  fixed TFFS initialization
  9. 19h,30jul02,jmb  merged in BRCM changes
  10. 19g,22feb01,scm  add fast dram support capabilities for XScale...
  11. 19f,16mar99,jpd  changed copyright yearfrom 1998 to 1999.
  12. 19e,13nov98,jpd  call usrMmuInit if INCLUDE_MMU_MPU defined; conditionally
  13.  add sysHwInit0() call before cacheLibInit(); added
  14.  INCLUDE_INITIAL_MEM_ALLOCATION
  15.     cdp  make Thumb support for ARM CPUs dependent on ARM_THUMB.
  16. 19j,27feb01,hk   update INCLUDE_WDB_BANNER copyright notice to cover 2001.
  17. 19i,08jun00,csi  Merginf usrConfig.c for vxfusion
  18. 19h,19apr00,zl   updated copyright year to 2000.
  19. 19g,02mar00,zl   merged SH support into T2.
  20. 01g,07mar01,sn   simplify job of host val by using creationDate (which
  21.                  is overridable) rather than __DATE__
  22. 19g,14oct99,jk   added conditional init code for sound driver support.
  23. 19i,30jul99,jkf  fixed SPR#4429. ideDrv, ataDrv, fdDrv, warn on ERROR.
  24. 19h,16mar99,jpd  changed copyright yearfrom 1998 to 1999.
  25. 19g,10mar99,drm  Changing WINDMP to VXFUSION to reflect new product name.
  26. 19f,13nov98,jpd  call usrMmuInit if INCLUDE_MMU_MPU defined; conditionally
  27.  add sysHwInit0() call before cacheLibInit(); added
  28.  INCLUDE_INITIAL_MEM_ALLOCATION
  29.     cdp  make Thumb support for ARM CPUs dependent on ARM_THUMB.
  30. 19e,08oct98,rlp  added support for UGL and HTML.
  31. 19d,17sep98,ms   call cplusDemanglerInit if INCLUDE_CPLUS and INCLUDE_LOADER
  32. 19c,17sep98,cym  added code to calculate proper IP address for PCSIM.
  33. 19b,01sep98,drm  added code to initialize WindMP
  34. 19a,10aug98,cym  added code to inform tornado when the NT simulator is up.
  35. 18z,23apr98,yp   merged in TrueFFS support
  36. 18y,22apr98,elp  created group 1 module when standalone (fixed SPR# 20301).
  37. 18w,22apr98,hdn  added comment for tffsDrv().
  38. 18t,17apr98,nps  added support for rBuffShow.
  39. 18s,09mar98,sjw  merge in HTTP and JAVA changes for conflict resolution
  40. 18r,18dec97,cth  replaced windview, timestamp initialization with windviewConfig
  41. 18q,13nov97,cth  changed WV evtInstInit to wvLibInit2; removed connRtnSet,
  42.  evtTaskInit; added include wvLib.h, rBuffLib.h
  43. 18p,18aug97,nps  changed WV buffer initialization with the rBuff API.
  44. 18x,06mar98,ms   changed copyright year from 1996 to 1998.
  45. 18v,04feb98,jpd  fix unsigned/signed warning (usrRoot); updated copyright date.
  46. 18u,25feb98,jgn  removed call to excShowInit(), it is called by excInit()
  47.                  if needed (SPR #20625)
  48. 18t,19jan98,hdn  changed a condition macro to include tffsDrv().
  49. 18p,06jan98,cym  added SIMNT as processor not to clear bss.
  50. 18s,23sep97,yp   added support for TFFS.
  51. 18r,13aug97,cdp  add Thumb (ARM7TDMI_T) support;
  52.                  'fix' unsigned/signed comparison in usrRoot.
  53. 18q,26feb97,dat  added INCLUDE_USER_APPL and USER_APPL_INIT, spr 8071.
  54. 18p,05feb97,cdp  remove ARM test hook (_func_armStartup).
  55. 18o,12dec96,cdp  added _func_armStartup for ARM platforms.
  56. 18n,13dec96,elp  changed syncLibInit() into symSyncLibInit().
  57. 18m,18nov96,dds  SPR 2529: return status for sysScsiInit is now checked.
  58. 18l,06nov96,ms   removed 17n hack to usrClock.
  59. 18k,01nov96,hdn  added support for PCMCIA.
  60. 18j,21oct96,hdn  changed paramerters for new LPT driver.
  61. 18i,04oct96,elp  added INCLUDE_SYM_TBL_SYNC (SPR# 6775).
  62. 18h,11jul96,tam  changed copyright year from 1995 to 1996.
  63. 18l,19jul96,hdn  added support for ATA driver.
  64. 18k,25jun96,jmb  Eliminated alternative WDB macro names (SPR #5707).
  65. 18j,25jun96,dbt  Initialized _func_selWakeupListInit before tyLib (SPR #3314).
  66. 18i,21jun96,jmb  update copyright. SPR #6364
  67. 18h,21jun96,jmb  long modhist -- deleted entries prior to 1994.  SPR #6528
  68. 18g,12mar96,tam  removed all #if (CPU == PPC403).
  69. 18p,06jun96,ism  bumped copyright to 1996.
  70. 18o,26jan96,ism  cleaned up vxsim/solaris version
  71. 18f,02oct95,kvk  added sysHwInit2() for PPC603.
  72. 18e,27sep95,tpr  removed #if (CPU_FAMILY != PPC) staff.
  73. 18n,07nov95,srh  fixed C++ support comments.
  74. 18m,29oct95,dat  fixed warnings about printf arguments
  75. 18l,11oct95,jdi  doc: changed .pG to .tG.
  76. 18k,10oct95,dat  new BSP revision id. Added WDB Banner printing
  77. 18j,15jun95,ms  updated for new serial drivers.
  78. 18i,09jun95,ms  cleaned up console initialization
  79. 18h,30may95,p_m  added initialization of formatted I/O library.
  80.  replaced spyStop() by spyLibInit().
  81. 18g,22may95,p_m  no longer initialize object format specific libraries if
  82.  loader is not included.
  83. 18f,22may95,myz  modified new serial device initialization for x86 support
  84. 18e,22may95,ms   added some WDB agent support
  85. 18e,30oct95,ism  updated for SIMSPARCSOLARIS
  86. 18d,28mar95,kkk  added scalability support, changed edata and end to arrays
  87.  (SPR #3917), changed baud rate to be a macro in configAll.h
  88. 18g,25may95,yao  changed to bzero bss segment for PPC.
  89. 18f,04apr95,caf  added PPC cache support.
  90. 18e,03mar95,yao  added shsHwInit2 () for PPC403.
  91. 18d,24feb95,caf  added PPC support.
  92. 18c,20nov94,kdl  added hashLibInit() when using dosFs.
  93. 18b,09nov94,jds  additions for scsi backward compatability ; scsi[12]IfInit()
  94. 18a,04nov94,kdl  merge cleanup.
  95. 17l,02aug94,tpr  added cacheEnable (BRANCH_CACHE) for the MC68060.
  96. 17m,15oct94,hdn  added LPT driver.
  97. 17o,20jul94,ms   changed INCLUDE_AOUT_HPPA to INCLUDE_SOM_COFF
  98. 17n,02may94,ms   added VxSim HP hack to usrClock().
  99. 17q,15mar94,smb  renamed tEvtTask parameters.
  100. 17p,15feb94,smb  defined WV_MODE, EVTBUFFER_ADDRESS for wvInstInit().
  101. 17o,12jan94,kdl  modified posix initialization; added queued signal init.
  102. */
  103. /*
  104. DESCRIPTION
  105. This library is the WRS-supplied configuration module for VxWorks.  It
  106. contains the root task, the primary system initialization routine, the
  107. network initialization routine, and the clock interrupt routine.
  108. The include file config.h includes a number of system-dependent parameters used
  109. in this file.
  110. In an effort to simplify the presentation of the configuration of vxWorks,
  111. this file has been split into smaller files.  These additional configuration
  112. source files are located in ../../src/config/usr[xxx].c and are #included into
  113. this file below.  This file contains the bulk of the code a customer is
  114. likely to customize.
  115. The module usrDepend.c contains checks that guard against unsupported
  116. configurations such as INCLUDE_NFS without INCLUDE_RPC.  The module
  117. usrKernel.c contains the core initialization of the kernel which is rarely
  118. customized, but provided for information.  The module usrNetwork.c now
  119. contains all network initialization code.  Finally, the module usrExtra.c
  120. contains the conditional inclusion of the optional packages selected in
  121. configAll.h.
  122. The source code necessary for the configuration selected is entirely
  123. included in this file during compilation as part of a standard build in
  124. the board support package.  No other make is necessary.
  125. INCLUDE FILES:
  126. config.h
  127. SEE ALSO:
  128. .tG "Getting Started, Cross-Development"
  129. */
  130. #include "vxWorks.h" /* always first */
  131. #include "config.h" /* board support configuration header */
  132. #ifdef BROADCOM_BSP
  133. IMPORT UINT8 sysBoardRev();
  134. #ifdef INCLUDE_TFFS
  135. IMPORT STATUS tffsBCM47xxInit(int forceFormat);
  136. #endif
  137. #endif /* BROADCOM_BSP */
  138. #include "usrConfig.h" /* general configuration header */
  139. #include "usrDepend.c" /* include dependency rules */
  140. #include "usrKernel.c" /* kernel configuration */
  141. #if defined(BROADCOM_BSP) && defined(INCLUDE_NET_INIT)
  142. #include "usrNetwork.c"                 /* Attach network */
  143. #endif
  144. #include "usrExtra.c" /* conditionally included packages */
  145. #if CPU==SIMNT
  146. extern int simUpMutex;
  147. extern int win_ReleaseMutex(int hMutex);
  148. #endif
  149. #ifdef INCLUDE_HTTP
  150. #include "http/httpLib.h" /* Wind Web Server interfaces */
  151. #endif
  152. /* defines - must be after include of usrDepend.c */
  153. #ifdef INCLUDE_WDB
  154. #define FREE_MEM_START_ADRS (FREE_RAM_ADRS + WDB_POOL_SIZE)
  155. #else
  156. #define FREE_MEM_START_ADRS FREE_RAM_ADRS
  157. #endif
  158. #ifdef INCLUDE_INITIAL_MEM_ALLOCATION
  159. #define MEM_POOL_START_ADRS 
  160.     (ROUND_UP(FREE_MEM_START_ADRS, (INITIAL_MEM_ALIGNMENT)) + 
  161.     (INITIAL_MEM_SIZE))
  162. #else /* INCLUDE_INITIAL_MEM_ALLOCATION */
  163. #define MEM_POOL_START_ADRS FREE_MEM_START_ADRS
  164. #endif /* INCLUDE_INITIAL_MEM_ALLOCATION */
  165. /* global variables */
  166. int consoleFd; /* fd of initial console device */
  167. char consoleName[20]; /* console device name, eg. "/tyCo/0" */
  168. SYMTAB_ID statSymTbl; /* system error status symbol table id*/
  169. SYMTAB_ID standAloneSymTbl; /* STANDALONE version symbol table id */
  170. SYMTAB_ID sysSymTbl; /* system symbol table id */
  171. BOOT_PARAMS sysBootParams; /* parameters from boot line */
  172. int sysStartType; /* type of boot (WARM, COLD, etc) */
  173. /*******************************************************************************
  174. *
  175. * usrInit - user-defined system initialization routine
  176. *
  177. * This is the first C code executed after the system boots.  This routine is
  178. * called by the assembly language start-up routine sysInit() which is in the
  179. * sysALib module of the target-specific directory.  It is called with
  180. * interrupts locked out.  The kernel is not multitasking at this point.
  181. *
  182. * This routine starts by clearing BSS; thus all variables are initialized to 0,
  183. * as per the C specification.  It then initializes the hardware by calling
  184. * sysHwInit(), sets up the interrupt/exception vectors, and starts kernel
  185. * multitasking with usrRoot() as the root task.
  186. *
  187. * RETURNS: N/A
  188. *
  189. * SEE ALSO: kernelLib
  190. *
  191. * ARGSUSED0
  192. */
  193. void usrInit
  194.     (
  195.     int startType
  196.     )
  197.     {
  198. #ifdef BRINGUP
  199.     if ((SYS_REVID_GET()) == BOARD_ID_LM_1)
  200.         bringupPrintRtn = sysSerialPrintStringNL;
  201.     else
  202.         bringupPrintRtn = sysLedDsply;
  203. #else
  204.     bringupPrintRtn = NULL;
  205. #endif
  206. #if (CPU_FAMILY == SPARC)
  207.     excWindowInit (); /* SPARC window management */
  208. #endif
  209. #ifdef INCLUDE_SYS_HW_INIT_0
  210.     /*
  211.      * Perform any BSP-specific initialisation that must be done before
  212.      * cacheLibInit() is called and/or BSS is cleared.
  213.      */
  214.     SYS_HW_INIT_0 ();
  215. #endif /* INCLUDE_SYS_HW_INIT_0 */
  216.     /* configure data and instruction cache if available and leave disabled */
  217. #ifdef  INCLUDE_CACHE_SUPPORT
  218.     cacheLibInit (USER_I_CACHE_MODE, USER_D_CACHE_MODE);
  219. #endif  /* INCLUDE_CACHE_SUPPORT */
  220. #if CPU_FAMILY!=SIMNT && CPU_FAMILY!=SIMSPARCSUNOS && CPU_FAMILY!=SIMHPPA && CPU_FAMILY!=SIMSPARCSOLARIS
  221.     /* don't assume bss variables are zero before this call */
  222.     bzero (edata, end - edata); /* zero out bss variables */
  223. #endif /* CPU_FAMILY!=SIMNT && CPU_FAMILY!=SIMSPARCSUNOS && CPU_FAMILY!=SIMHPPA && CPU_FAMILY!=SIMSPARCSOLARIS */
  224.     sysStartType = startType; /* save type of system start */
  225.     intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS); /* set vector base table */
  226. #if (CPU_FAMILY == AM29XXX)
  227.     excSpillFillInit (); /* am29k stack cache managemt */
  228. #endif
  229. #ifdef  INCLUDE_EXC_HANDLING
  230.     excVecInit (); /* install exception vectors */
  231. #endif  /* INCLUDE_EXC_HANDLING */
  232.     sysHwInit (); /* initialize system hardware */
  233.     usrKernelInit (); /* configure the Wind kernel */
  234. #ifdef  INCLUDE_CACHE_SUPPORT
  235. #ifdef  USER_I_CACHE_ENABLE
  236.     cacheEnable (INSTRUCTION_CACHE); /* enable instruction cache */
  237. #endif /* USER_I_CACHE_ENABLE */
  238. #ifdef USER_D_CACHE_ENABLE
  239.     cacheEnable (DATA_CACHE); /* enable data cache */
  240. #endif  /* USER_D_CACHE_ENABLE */
  241. #if (CPU == MC68060)
  242. #ifdef  USER_B_CACHE_ENABLE
  243.     cacheEnable (BRANCH_CACHE); /* enable branch cache */
  244. #endif /* USER_B_CACHE_ENABLE */
  245. #endif /* (CPU == MC68060) */
  246. #endif  /* INCLUDE_CACHE_SUPPORT */
  247.     /* start the kernel specifying usrRoot as the root task */
  248.     kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE,
  249. (char *) MEM_POOL_START_ADRS,
  250. sysMemTop (), ISR_STACK_SIZE, INT_LOCK_LEVEL);
  251.     }
  252. #ifdef BROADCOM_BSP
  253. /*
  254.  * sysSetClock - set VxWorks clock from system realtime clock
  255.  *
  256.  *      The system clock is set from the TOD which contains UTC (GMT).
  257.  *      The initial value of the TIMEZONE environment variable is then
  258.  *      set from NVRAM.  The inverse process must be used to set the clock.
  259.  *
  260.  *      (This used to be in sysHwInit2, but mktime does
  261.  *      not like to be used that early and crashes.)
  262.  */
  263. void sysSetClock(void)
  264. {
  265.     struct timespec     tp;
  266.     struct tm           tm;
  267.     static char         tzvar[74];
  268.     extern int          sysTimeZoneGood(char *tz);      /* sysLib.c */
  269.     /* Fetch GMT */
  270.     if (sysTodGet(&tm.tm_year,                /* 00-99 */
  271.                   &tm.tm_mon,                 /* 01-12 */
  272.                   &tm.tm_mday,                /* 01-31 */
  273.                   &tm.tm_hour,                /* 00-23 */
  274.                   &tm.tm_min,                 /* 00-59 */
  275.                   &tm.tm_sec) < 0)            /* 00-59 */
  276.         return;
  277.     /* Use mktime to convert GMT time to seconds since 1970 */
  278.     putenv("TIMEZONE=GMT::0::");
  279.     tm.tm_year -= 1900;         /* tm year is years since 1900 */
  280.     tm.tm_mon -= 1;             /* tm month is 0-11 */
  281.     tp.tv_sec  = mktime(&tm);
  282.     tp.tv_nsec = 0;
  283.     clock_settime(CLOCK_REALTIME, &tp);
  284.     /* Set TIMEZONE variable according to NVRAM value, if valid */
  285.     strcpy(tzvar, "TIMEZONE=");
  286.     sysNvRamGet(tzvar + 9, 64, NV_OFF_TIMEZONE);
  287.     if (sysTimeZoneGood(tzvar + 9))
  288.         putenv(tzvar);
  289. }
  290. /*
  291.  * dateTimeHook for dosFs, using current local time
  292.  */
  293. void dateTimeHook(DOS_DATE_TIME *pDateTime)
  294. {
  295.     time_t              now;
  296.     struct tm           tm;
  297.     time(&now);
  298.     localtime_r(&now, &tm);
  299.     pDateTime->dosdt_year = tm.tm_year + 1900;
  300.     pDateTime->dosdt_month = tm.tm_mon + 1;     /* 01-12 */
  301.     pDateTime->dosdt_day = tm.tm_mday;          /* 01-31 */
  302.     pDateTime->dosdt_hour = tm.tm_hour;         /* 00-23 */
  303.     pDateTime->dosdt_minute = tm.tm_min;        /* 00-59 */
  304.     pDateTime->dosdt_second = tm.tm_sec;        /* 00-59 */
  305. }
  306. #endif /* BROADCOM_BSP */
  307. /*******************************************************************************
  308. *
  309. * usrRoot - the root task
  310. *
  311. * This is the first task to run under the multitasking kernel.  It performs
  312. * all final initialization and then starts other tasks.
  313. *
  314. * It initializes the I/O system, installs drivers, creates devices, and sets
  315. * up the network, etc., as necessary for a particular configuration.  It
  316. * may also create and load the system symbol table, if one is to be included.
  317. * It may then load and spawn additional tasks as needed.  In the default
  318. * configuration, it simply initializes the VxWorks shell.
  319. *
  320. * RETURNS: N/A
  321. */
  322. void usrRoot
  323.     (
  324.     char * pMemPoolStart, /* start of system memory partition */
  325.     unsigned memPoolSize /* initial size of mem pool */
  326.     )
  327.     {
  328.     char tyName [20];
  329.     int  ix;
  330.     /* Initialize the memory pool before initializing any other package.
  331.      * The memory associated with the root task will be reclaimed at the
  332.      * completion of its activities.
  333.      */
  334. #ifdef INCLUDE_MEM_MGR_FULL
  335.     memInit (pMemPoolStart, memPoolSize); /* initialize memory pool */
  336. #else
  337.     memPartLibInit (pMemPoolStart, memPoolSize);/* initialize memory pool */
  338. #endif /* INCLUDE_MEM_MGR_FULL */
  339. #ifdef INCLUDE_SHOW_ROUTINES
  340.     memShowInit (); /* initialize memShow routine */
  341. #endif /* INCLUDE_SHOW_ROUTINES */
  342. #if defined(INCLUDE_MMU_BASIC) || defined(INCLUDE_MMU_FULL) || 
  343. defined(INCLUDE_MMU_MPU)
  344.     usrMmuInit (); /* initialize the mmu */
  345. #endif /* defined(INCLUDE_MMU_BASIC, INCLUDE_MMU_FULL, INCLUDE_MMU_MPU) */
  346.     /* set up system timer */
  347.     sysClkConnect ((FUNCPTR) usrClock, 0); /* connect clock ISR */
  348.     sysClkRateSet (60); /* set system clock rate */
  349.     sysClkEnable (); /* start it */
  350. #ifdef INCLUDE_FAST_DRAM
  351. /*
  352.  * make use of data cache as fast DRAM,
  353.  * establish parameters in config.h, MMU
  354.  * must be initialed before data cache is
  355.  * initialized as data ram...
  356.  */
  357.   cacheCreateInternalDataRAM((UINT32 *)FD_ORIGIN, FD_NUMLINES);
  358. #endif
  359.     /*
  360.      * select sould be initialized after NFS and RPC for proper delete
  361.      * hook order but _func_selWakeupListInit should be set
  362.      * before tyLib module (SPR #3314).
  363.      */
  364. #ifdef  INCLUDE_SELECT
  365.     _func_selWakeupListInit     = (FUNCPTR) selWakeupListInit;
  366. #endif /* INCLUDE_SELECT */
  367.     /* initialize I/O system */
  368. #ifdef  INCLUDE_IO_SYSTEM
  369.     iosInit (NUM_DRIVERS, NUM_FILES, "/null");
  370.     consoleFd = NONE;                           /* assume no console device */
  371. #ifdef  INCLUDE_TYCODRV_5_2
  372. #ifdef  INCLUDE_TTY_DEV
  373.     if (NUM_TTY > 0)
  374. {
  375. tyCoDrv (); /* install console driver */
  376. for (ix = 0; ix < NUM_TTY; ix++) /* create serial devices */
  377.     {
  378.     sprintf (tyName, "%s%d", "/tyCo/", ix);
  379.     (void) tyCoDevCreate (tyName, ix, 512, 512);
  380.     if (ix == CONSOLE_TTY)
  381. strcpy (consoleName, tyName); /* store console name */
  382.     }
  383. consoleFd = open (consoleName, O_RDWR, 0);
  384. /* set baud rate */
  385. (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);
  386. (void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);
  387. }
  388. #endif /* INCLUDE_TTY_DEV */
  389. #else   /* !INCLUDE_TYCODRV_5_2 */
  390. #ifdef  INCLUDE_TTY_DEV
  391.     if (NUM_TTY > 0)
  392. {
  393. ttyDrv(); /* install console driver */
  394. for (ix = 0; ix < NUM_TTY; ix++) /* create serial devices */
  395.     {
  396. #if     (defined(INCLUDE_WDB) && (WDB_COMM_TYPE == WDB_COMM_SERIAL))
  397.     if (ix == WDB_TTY_CHANNEL) /* don't use WDBs channel */
  398. continue;
  399. #endif
  400.     sprintf (tyName, "%s%d", "/tyCo/", ix);
  401.     (void) ttyDevCreate (tyName, sysSerialChanGet(ix), 512, 512);
  402.     if (ix == CONSOLE_TTY) /* init the tty console */
  403. {
  404. strcpy (consoleName, tyName);
  405. consoleFd = open (consoleName, O_RDWR, 0);
  406. (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);
  407. (void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);
  408. }
  409.     }
  410. }
  411. #endif  /* INCLUDE_TTY_DEV */
  412. #ifdef INCLUDE_PC_CONSOLE
  413.     pcConDrv ();
  414.     for (ix = 0; ix < N_VIRTUAL_CONSOLES; ix++)
  415. {
  416. sprintf (tyName, "%s%d", "/pcConsole/", ix);
  417. (void) pcConDevCreate (tyName,ix, 512, 512);
  418. if (ix == PC_CONSOLE) /* init the console device */
  419.     {
  420.     strcpy (consoleName, tyName);
  421.     consoleFd = open (consoleName, O_RDWR, 0);
  422.     (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);
  423.     (void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);
  424.     }
  425. }
  426. #endif /* INCLUDE_PC_CONSOLE */
  427. #endif  /* !INCLUDE_TYCODRV_5_2 */
  428.     ioGlobalStdSet (STD_IN,  consoleFd);
  429.     ioGlobalStdSet (STD_OUT, consoleFd);
  430.     ioGlobalStdSet (STD_ERR, consoleFd);
  431. #endif  /* INCLUDE_IO_SYSTEM */
  432.     /* initialize symbol table facilities */
  433. #ifdef INCLUDE_SYM_TBL
  434.     hashLibInit (); /* initialize hash table package */
  435.     symLibInit (); /* initialize symbol table package */
  436. #ifdef  INCLUDE_SHOW_ROUTINES
  437.     symShowInit (); /* initialize symbol table show */
  438. #endif /* INCLUDE_SHOW_ROUTINES */
  439. #endif /* INCLUDE_SYM_TBL */
  440.     /* initialize exception handling */
  441. #if     defined(INCLUDE_EXC_HANDLING) && defined(INCLUDE_EXC_TASK)
  442.     excInit (); /* initialize exception handling */
  443. #endif  /* defined(INCLUDE_EXC_HANDLING) && defined(INCLUDE_EXC_TASK) */
  444. #ifdef INCLUDE_LOGGING
  445.     logInit (consoleFd, MAX_LOG_MSGS); /* initialize logging */
  446. #endif /* INCLUDE_LOGGING */
  447. #ifdef INCLUDE_SIGNALS
  448.     sigInit (); /* initialize signals */
  449. #endif /* INCLUDE_SIGNALS */
  450.     /* initialize debugging */
  451. #ifdef INCLUDE_DEBUG
  452.     dbgInit (); /* initialize debugging */
  453. #endif /* INCLUDE_DEBUG */
  454.     /* initialize pipe driver */
  455. #ifdef INCLUDE_PIPES
  456.     pipeDrv (); /* install pipe driver */
  457. #endif /* INCLUDE_PIPES */
  458.     /* initialize standard I/O package */
  459. #ifdef INCLUDE_STDIO
  460.     stdioInit (); /* initialize standard I/O library */
  461. #ifdef  INCLUDE_SHOW_ROUTINES
  462.     stdioShowInit ();
  463. #endif  /* INCLUDE_SHOW_ROUTINES */
  464. #endif /* INCLUDE_STDIO */
  465.     /* initialize POSIX queued signals */
  466. #if defined(INCLUDE_POSIX_SIGNALS) && defined(INCLUDE_SIGNALS)
  467.     sigqueueInit (NUM_SIGNAL_QUEUES); /* initialize queued signals */
  468. #endif
  469.     /* initialize POSIX semaphores */
  470. #ifdef  INCLUDE_POSIX_SEM
  471.     semPxLibInit ();
  472. #ifdef INCLUDE_SHOW_ROUTINES
  473.     semPxShowInit ();
  474. #endif  /* INCLUDE_SHOW_POUTINES */
  475. #endif  /* INCLUDE_POSIX_SEM */
  476.     /* initialize POSIX message queues */
  477. #ifdef INCLUDE_POSIX_MQ
  478.     mqPxLibInit (MQ_HASH_SIZE);
  479. #ifdef INCLUDE_SHOW_ROUTINES
  480.     mqPxShowInit ();
  481. #endif  /* INCLUDE_SHOW_ROUTINES */
  482. #endif  /* INCLUDE_POSIX_MQ */
  483.     /* initialize POSIX async I/O support */
  484. #ifdef INCLUDE_POSIX_AIO
  485.     aioPxLibInit (MAX_LIO_CALLS);
  486. #ifdef INCLUDE_POSIX_AIO_SYSDRV
  487.     aioSysInit (MAX_AIO_SYS_TASKS, AIO_TASK_PRIORITY, AIO_TASK_STACK_SIZE);
  488. #endif  /* INCLUDE_POSIX_AIO_SYSDRV */
  489. #endif  /* INCLUDE_POSIX_AIO */
  490.     /* initialize filesystems and disk drivers */
  491. #ifdef INCLUDE_DOSFS
  492.     hashLibInit (); /* initialize hash table package */
  493.     dosFsInit (NUM_DOSFS_FILES);  /* init dosFs filesystem */
  494. #ifdef BROADCOM_BSP
  495.     dosFsDateTimeInstall((FUNCPTR) dateTimeHook);
  496. #endif
  497. #endif /* INCLUDE_DOSFS */
  498. #ifdef INCLUDE_RAWFS
  499.     rawFsInit (NUM_RAWFS_FILES);  /* init rawFs filesystem */
  500. #endif /* INCLUDE_RAWFS */
  501. #ifdef INCLUDE_RT11FS
  502.     rt11FsInit (NUM_RT11FS_FILES);  /* init rt11Fs filesystem */
  503. #endif /* INCLUDE_RT11FS */
  504. #ifdef INCLUDE_RAMDRV
  505.     ramDrv (); /* initialize ram disk driver */
  506. #endif /* INCLUDE_RAMDRV */
  507. #ifdef INCLUDE_SCSI
  508.     /*
  509.      * initialize either the SCSI1 or SCSI2 interface; initialize SCSI2 when
  510.      * the SCSI2 interface is available.
  511.      */
  512. #ifndef INCLUDE_SCSI2
  513.     scsi1IfInit ();
  514. #else
  515.     scsi2IfInit ();
  516. #endif
  517.     /* initialize SCSI controller */
  518.     if (sysScsiInit () == OK)
  519. {
  520. usrScsiConfig (); /* configure SCSI peripherals */
  521.         }
  522.     else
  523.         {
  524. #ifdef INCLUDE_STDIO
  525.         printf ("sysScsiInit() Failed, SCSI system not initializedn");
  526. #endif  /* INCLUDE_STDIO */
  527.         }
  528. #endif /* INCLUDE_SCSI */
  529. #ifdef  INCLUDE_FD     /* initialize floppy disk driver */
  530.     if ((fdDrv (FD_INT_VEC, FD_INT_LVL)) == ERROR)
  531.      {
  532. #ifdef INCLUDE_STDIO
  533. printf ("fdDrv returned ERROR from usrRoot.n");
  534. #endif /* INCLUDE_STDIO */
  535. }
  536. #endif /* INCLUDE_FD */
  537. #ifdef  INCLUDE_IDE
  538.     /* init IDE disk driver */
  539.     if ((ideDrv (IDE_INT_VEC, IDE_INT_LVL, IDE_CONFIG)) == ERROR)
  540. {
  541. #ifdef INCLUDE_STDIO
  542. printf ("ideDrv returned ERROR from usrRoot.n");
  543. #endif /* INCLUDE_STDIO */
  544. }
  545. #endif  /* INCLUDE_IDE */
  546. #ifdef  INCLUDE_ATA
  547.     {                                   /* initialize hard disk driver */
  548.     IMPORT ATA_RESOURCE ataResources[];
  549.     ATA_RESOURCE *pAtaResource;
  550.     for (ix = 0; ix < ATA_MAX_CTRLS; ix++)
  551.         {
  552.         pAtaResource = &ataResources[ix];
  553.         if (pAtaResource->ctrlType == IDE_LOCAL)
  554.             if ((ataDrv (ix, pAtaResource->drives, pAtaResource->intVector,
  555.    pAtaResource->intLevel, pAtaResource->configType,
  556.                    pAtaResource->semTimeout, pAtaResource->wdgTimeout))
  557. == ERROR)
  558. {
  559. #ifdef INCLUDE_STDIO
  560. printf ("ataDrv returned ERROR from usrRoot.n");
  561. #endif /* INCLUDE_STDIO */
  562. }
  563.         }
  564.     }
  565. #ifdef  INCLUDE_SHOW_ROUTINES
  566.     ataShowInit ();                     /* install ATA/IDE show routine */
  567. #endif  /* INCLUDE_SHOW_ROUTINES */
  568. #endif  /* INCLUDE_ATA */
  569. #ifdef  INCLUDE_LPT
  570.     {
  571.     IMPORT LPT_RESOURCE lptResources[];
  572.     lptDrv (LPT_CHANNELS, &lptResources[0]); /* init LPT parallel driver */
  573.     }
  574. #endif  /* INCLUDE_LPT */
  575. #ifdef  INCLUDE_PCMCIA
  576. #ifdef  INCLUDE_SHOW_ROUTINES
  577.     pcmciaShowInit (); /* install PCMCIA show routines */
  578. #endif  /* INCLUDE_SHOW_ROUTINES */
  579.     pcmciaInit (); /* init PCMCIA Lib */
  580. #endif  /* INCLUDE_PCMCIA */
  581. #ifdef INCLUDE_TFFS
  582. #ifdef BROADCOM_BSP
  583.     tffsBCM47xxInit(0); 
  584. #else
  585.     tffsDrv (); /* it should be after pcmciaInit() */
  586. #endif
  587. #endif /* INCLUDE_TFFS */
  588. #ifdef INCLUDE_FLASH
  589.     flashFsLibInit();
  590. #endif /* INCLUDE_FLASH */
  591. #ifdef  INCLUDE_FORMATTED_IO
  592.     fioLibInit (); /* initialize formatted I/O */
  593. #endif  /* INCLUDE_FORMATTED_IO */
  594.     /* initialize floating point facilities */
  595. #ifdef INCLUDE_FLOATING_POINT
  596.     floatInit (); /* initialize floating point I/O */
  597. #endif /* INCLUDE_FLOATING_POINT */
  598.     /* install software floating point emulation (if applicable) */
  599. #ifdef INCLUDE_SW_FP
  600.     mathSoftInit (); /* use software emulation for fp math */
  601. #endif /* INCLUDE_SW_FP */
  602.     /* install hardware floating point support (if applicable) */
  603. #ifdef INCLUDE_HW_FP
  604.     mathHardInit ();  /* do fppInit() & install hw fp math */
  605. #ifdef INCLUDE_SHOW_ROUTINES
  606.     fppShowInit (); /* install hardware fp show routine */
  607. #endif /* INCLUDE_SHOW_ROUTINES */
  608. #endif /* INCLUDE_HW_FP */
  609.     /* install dsp support (if applicable) */
  610. #ifdef INCLUDE_DSP
  611.     usrDspInit ();  /* do dspInit() */
  612. #endif /* INCLUDE_DSP */
  613.     /* initialize performance monitoring tools */
  614. #ifdef INCLUDE_SPY
  615.     spyLibInit (); /* install task cpu utilization tool */
  616. #endif /* INCLUDE_SPY */
  617. #ifdef INCLUDE_TIMEX
  618.     timexInit (); /* install function timing tool */
  619. #endif /* INCLUDE_TIMEX */
  620. #ifdef  INCLUDE_ENV_VARS
  621.     envLibInit (ENV_VAR_USE_HOOKS); /* initialize environment variable */
  622. #endif /* INCLUDE_ENV_VARS */
  623. #ifdef BROADCOM_BSP
  624.     /*
  625.      * Set clock after envLib is initialized because it sets the
  626.      * TIMEZONE environment variable according to NVRAM.
  627.      */
  628.     sysSetClock();
  629. #endif
  630. #ifdef INCLUDE_NTPASSFS
  631.     {
  632.     extern int ntPassFsInit();
  633.     extern int ntPassFsDevInit();
  634.     ntPassFsInit(1);
  635.     ntPassFsDevInit("host:");
  636.     }
  637. #endif /* INCLUDE_NTPASSFS */
  638.     /* initialize object module loader */
  639. #ifdef INCLUDE_LOADER
  640.     moduleLibInit (); /* initialize module manager */
  641. #if defined(INCLUDE_AOUT)
  642.     loadAoutInit (); /* use a.out format */
  643. #else /* coff or ecoff */
  644. #if defined(INCLUDE_ECOFF)
  645.     loadEcoffInit (); /* use ecoff format */
  646. #else /* ecoff */
  647. #if defined(INCLUDE_COFF)
  648.     loadCoffInit (); /* use coff format */
  649. #else   /* coff */
  650. #if defined(INCLUDE_ELF)
  651.     loadElfInit (); /* use elf format */
  652. #else
  653. #if defined(INCLUDE_SOM_COFF)
  654.     loadSomCoffInit ();
  655. #else
  656. #if defined(INCLUDE_PECOFF)
  657.     {
  658.     extern int loadPecoffInit();
  659.     loadPecoffInit ();
  660.     }
  661. #endif
  662. #endif
  663. #endif
  664. #endif
  665. #endif
  666. #endif
  667. #endif /* INCLUDE_LOADER */
  668.     /* initialize wtx client to synchronize host and target symbol tables */
  669. #ifdef INCLUDE_SYM_TBL_SYNC
  670.     symSyncLibInit ();
  671. #endif /* INCLUDE_SYM_TBL_SYNC */
  672.     /* initialize network */
  673. #ifdef  INCLUDE_NET_INIT
  674.     usrBootLineInit (sysStartType); /* crack the bootline */
  675.     usrNetInit (BOOT_LINE_ADRS); /* initialize network support */
  676. # ifdef BROADCOM_BSP
  677.     sysBindFix();                       /* See sysLib.c */
  678. # endif
  679. #if CPU==SIMNT
  680.     {
  681.     extern int simProcnum;
  682.     char ulipIP[] = "90.0.0.1";
  683.     ulipIP[7] = '1'+simProcnum;
  684.     routeAdd("0.0.0.0",ulipIP);
  685.     }
  686. #endif  /* CPU==SIMNT */
  687. #endif /* INCLUDE_NET_INIT */
  688. #ifdef INCLUDE_PASSFS
  689.     {
  690.     extern STATUS passFsInit ();
  691.     extern void *passFsDevInit ();
  692.     char passName [256];
  693.     if (passFsInit (1) == OK)
  694. {
  695. extern char vxsim_hostname[];
  696. extern char vxsim_cwd[];
  697. sprintf (passName, "%s:", vxsim_hostname);
  698. if (passFsDevInit (passName) == NULL)
  699.     {
  700. #ifdef INCLUDE_STDIO
  701.     printf ("passFsDevInit failed for <%s>n", passName);
  702. #endif /* INCLUDE_STDIO */
  703.     }
  704. else
  705.     {
  706.     sprintf (passName, "%s:%s", vxsim_hostname, vxsim_cwd);
  707.     ioDefPathSet (passName);
  708.     }
  709. }
  710.     else
  711. #ifdef INCLUDE_STDIO
  712. printf ("passFsInit failedn");
  713. #endif /* INCLUDE_STDIO */
  714.     }
  715. #endif /* INCLUDE_PASSFS */
  716. #ifdef INCLUDE_DOS_DISK
  717.     {
  718.     char unixName [80];
  719.     extern void unixDrv ();
  720.     extern void unixDiskInit ();
  721.     extern char *u_progname;  /* home of executable */
  722.     char *pLastSlash;
  723.     unixDrv ();
  724.     pLastSlash = strrchr (u_progname, '/');
  725.     pLastSlash = (pLastSlash == NULL) ? u_progname : (pLastSlash + 1);
  726.     sprintf (unixName, "/tmp/%s%d.dos", pLastSlash, sysProcNumGet());
  727.     unixDiskInit (unixName, "A:", 0);
  728.     }
  729. #endif /* INCLUDE_DOS_DISK */
  730.     /* initialize shared memory objects */
  731. #ifdef INCLUDE_SM_OBJ /* unbundled shared memory objects */
  732.     usrSmObjInit (BOOT_LINE_ADRS);
  733. #endif /* INCLUDE_SM_OBJ */
  734.    /* initialize WindMP */
  735. #ifdef INCLUDE_VXFUSION /* unbundled VxFusion (distributed objects) */
  736.     usrVxFusionInit (BOOT_LINE_ADRS);
  737. #ifdef INCLUDE_SHOW_ROUTINES
  738.     {
  739.     extern void msgQDistShowInit();
  740.     extern void distNameShowInit ();
  741.     extern void distIfShowInit ();
  742.     extern void msgQDistGrpShowInit ();
  743.     msgQDistShowInit();
  744.     distNameShowInit ();
  745.     distIfShowInit ();
  746.     msgQDistGrpShowInit ();
  747.     }
  748. #endif /* INCLUDE_SHOW_ROUTINES */
  749. #endif /* INCLUDE_WINDMP */
  750.     /* write protect text segment & vector table only after bpattach () */
  751. #ifdef INCLUDE_MMU_FULL /* unbundled mmu product */
  752. #ifdef INCLUDE_PROTECT_TEXT
  753.     if (vmTextProtect () != OK)
  754. printf ("nError protecting text segment. errno = %xn", errno);
  755. #endif /* INCLUDE_PROTECT_TEXT */
  756. #ifdef INCLUDE_PROTECT_VEC_TABLE
  757.     if (intVecTableWriteProtect () != OK)
  758. printf ("nError protecting vector table. errno = %xn", errno);
  759. #endif /* INCLUDE_PROTECT_VEC_TABLE */
  760. #endif /* INCLUDE_MMU_FULL */
  761.     /* initialize select only after NFS and RPC for proper delete hook order */
  762. #ifdef INCLUDE_SELECT
  763.     selectInit ();
  764. #endif /* INCLUDE_SELECT */
  765.     /* create system and status symbol tables */
  766. #ifdef  INCLUDE_STANDALONE_SYM_TBL
  767.     sysSymTbl = symTblCreate (SYM_TBL_HASH_SIZE_LOG2, TRUE, memSysPartId);
  768. #ifdef INCLUDE_SYM_TBL_SYNC
  769.     /* create a module (group 1) that is not synchronized (SPR# 20301) */
  770.     moduleCreate ("vxWorks.sym",
  771. #if (defined INCLUDE_AOUT)
  772.   MODULE_A_OUT,
  773. #elif ((defined INCLUDE_COFF) || (defined INCLUDE_ECOFF) || 
  774.        (defined INCLUDE_SOMCOFF))
  775.   MODULE_ECOFF,
  776. #elif (defined INCLUDE_ELF)
  777.   MODULE_ELF,
  778. #endif /* INCLUDE_AOUT */
  779.   HIDDEN_MODULE|LOAD_NO_SYMBOLS);
  780. #endif /* INCLUDE_SYM_TBL_SYNC */
  781.     printf ("nAdding %ld symbols for standalone.n", standTblSize);
  782.     /* fill in from built in table*/
  783.     for (ix = 0; (ULONG) ix < standTblSize; ix++)
  784. #if ((CPU_FAMILY == ARM) && ARM_THUMB)
  785. thumbSymTblAdd (sysSymTbl, &(standTbl[ix]));
  786. #else
  787. symTblAdd (sysSymTbl, &(standTbl[ix]));
  788. #endif /* CPU_FAMILY == ARM */
  789. #endif /* INCLUDE_STANDALONE_SYM_TBL */
  790. #ifdef  INCLUDE_NET_SYM_TBL
  791.     sysSymTbl = symTblCreate (SYM_TBL_HASH_SIZE_LOG2, TRUE, memSysPartId);
  792.     netLoadSymTbl (); /* fill in table from host */
  793. #endif /* INCLUDE_NET_SYM_TBL */
  794. #ifdef  INCLUDE_STAT_SYM_TBL
  795.     statSymTbl = symTblCreate (STAT_TBL_HASH_SIZE_LOG2, FALSE, memSysPartId);
  796.     for (ix = 0; (ULONG)ix < statTblSize; ix ++) /* fill in from builtin table*/
  797. symTblAdd (statSymTbl, &(statTbl [ix]));
  798. #endif /* INCLUDE_STAT_SYM_TBL */
  799.     /* initialize C++ support library */
  800. #if defined (INCLUDE_CPLUS) && defined (INCLUDE_CPLUS_MIN)
  801. #error Define only one of INCLUDE_CPLUS or INCLUDE_CPLUS_MIN, not both
  802. #endif
  803. #ifdef INCLUDE_CPLUS /* all standard C++ runtime support */
  804.     cplusLibInit ();
  805. #ifdef INCLUDE_LOADER
  806.     cplusDemanglerInit ();
  807. #endif
  808. #endif
  809. #ifdef INCLUDE_CPLUS_MIN /* minimal C++ runtime support */
  810.     cplusLibMinInit ();
  811. #ifdef INCLUDE_LOADER
  812.     cplusDemanglerInit ();
  813. #endif
  814. #endif
  815.     /* initialize Wind Web Server */
  816. #ifdef INCLUDE_HTTP
  817.     httpd ();
  818. #endif /* INCLUDE_HTTP */
  819. #ifdef   INCLUDE_RBUFF                  /* install rBuff support */
  820.     rBuffLibInit();
  821. #ifdef  INCLUDE_SHOW_ROUTINES
  822.     rBuffShowInit ();                   /* install rBuff show routine */
  823. #endif  /* INCLUDE_SHOW_ROUTINES */
  824. #endif /* INCLUDE_RBUFF */
  825. #ifdef INCLUDE_WINDVIEW
  826.     windviewConfig ();
  827. #endif /* INCLUDE_WINDVIEW */
  828.     /* initialize the WDB debug agent */
  829. #ifdef  INCLUDE_WDB
  830.     wdbConfig();
  831. #ifdef INCLUDE_WDB_BANNER
  832. #ifndef INCLUDE_SHELL
  833.     /* short banner, like the bootPrintLogo banner */
  834.     printf ("nn");
  835.     printf ("%17s%s",     "","VxWorksnn");
  836.     printf ("Copyright 1984-2001  Wind River Systems, Inc.nn");
  837.     printf ("            CPU: %sn", sysModel ());
  838. #ifdef BROADCOM_BSP
  839.     printf ("       Board ID: %dn", sysBoardRev());
  840. #endif
  841.     printf ("        VxWorks: " VXWORKS_VERSION "n");
  842.     printf ("    BSP version: " BSP_VERSION BSP_REV "n");
  843.     printf ("        Created: %sn", creationDate);
  844.     printf ("            WDB: %s.nn",
  845.     ((wdbRunsExternal () || wdbRunsTasking ()) ?
  846.  "Ready" : "Agent configuration failed") );
  847. #endif /*INCLUDE_SHELL*/
  848. #endif /*INCLUDE_WDB_BANNER*/
  849. #endif  /* INCLUDE_WDB */
  850. #if !defined(BROADCOM_BSP)
  851.     /* initialize interactive shell */
  852. #ifdef  INCLUDE_SHELL
  853. #ifdef INCLUDE_SECURITY /* include shell security */
  854.     if ((sysFlags & SYSFLG_NO_SECURITY) == 0)
  855. {
  856.         loginInit (); /* initialize login table */
  857.         shellLoginInstall (loginPrompt, NULL); /* install security program */
  858. /* add additional users here as required */
  859.         loginUserAdd (LOGIN_USER_NAME, LOGIN_PASSWORD);
  860. }
  861. #endif /* INCLUDE_SECURITY */
  862.     printLogo (); /* print out the banner page */
  863.     printf ("                               ");
  864.     printf ("CPU: %s.  Processor #%d.n", sysModel (), sysProcNumGet ());
  865.     printf ("                              ");
  866. #ifdef HITACHI_SH_KERNEL_ON_SDRAM
  867.     printf ("Memory Size: 0x%x.", (UINT)(sysMemTop () - (char *)FREE_RAM_ADRS));
  868. #else /* HITACHI_SH_KERNEL_ON_SDRAM */
  869.     printf ("Memory Size: 0x%x.", (UINT)(sysMemTop () - (char *)LOCAL_MEM_LOCAL_ADRS));
  870. #endif /* HITACHI_SH_KERNEL_ON_SDRAM */
  871.     printf ("  BSP version " BSP_VERSION BSP_REV ".");
  872. #if defined(INCLUDE_WDB) && defined(INCLUDE_WDB_BANNER)
  873.     printf ("n                             ");
  874.     printf ("WDB: %s.",
  875.     ((wdbRunsExternal () || wdbRunsTasking ()) ?
  876.  "Ready" : "Agent configuration failed") );
  877. #endif /*INCLUDE_WDB && INCLUDE_WDB_BANNER*/
  878.     printf ("nn");
  879. #ifdef INCLUDE_STARTUP_SCRIPT /* run a startup script */
  880.     if (sysBootParams.startupScript [0] != EOS)
  881. usrStartupScript (sysBootParams.startupScript);
  882. #endif /* INCLUDE_STARTUP_SCRIPT */
  883.     shellInit (SHELL_STACK_SIZE, TRUE); /* create the shell */
  884.     /* only include the simple demo if the shell is NOT included */
  885. #else
  886. #if defined(INCLUDE_DEMO) /* create demo w/o shell */
  887.     taskSpawn ("demo", 20, 0, 2000, (FUNCPTR)usrDemo, 0,0,0,0,0,0,0,0,0,0);
  888. #endif /* mips cpp no elif */
  889. #endif /* INCLUDE_SHELL */
  890. #endif /* BROADCOM_BSP */
  891. #ifdef  INCLUDE_UGL
  892.     usrUglInit ();
  893. #endif  /* INCLUDE_UGL */
  894. #if defined (INCLUDE_SOUND) && defined(INCLUDE_SB16)
  895.     sb16Drv ();            /* install sound driver SB16 */
  896.     sb16DevCreate ("/sound", 0x220, 5, 1, 5);
  897. #endif /* INCLUDE_SOUND && INCLUDE_SB16 */
  898. #if defined(INCLUDE_JAVA)
  899.     javaConfig ();
  900. #endif /* INCLUDE_JAVA */
  901. #ifdef INCLUDE_HTML
  902.     usrHtmlInit ();
  903. #endif /* INCLUDE_HTML */
  904. #if CPU==SIMNT
  905.     win_ReleaseMutex(simUpMutex);
  906. #endif
  907. #ifdef INCLUDE_USER_APPL
  908.     /* Startup the user's application */
  909.     USER_APPL_INIT; /* must be a valid C statement or block */
  910. #endif
  911.     }
  912. /*******************************************************************************
  913. *
  914. * usrClock - user-defined system clock interrupt routine
  915. *
  916. * This routine is called at interrupt level on each clock interrupt.
  917. * It is installed by usrRoot() with a sysClkConnect() call.
  918. * It calls all the other packages that need to know about clock ticks,
  919. * including the kernel itself.
  920. *
  921. * If the application needs anything to happen at the system clock interrupt
  922. * level, it can be added to this routine.
  923. *
  924. * RETURNS: N/A
  925. */
  926. void usrClock ()
  927.     {
  928.     tickAnnounce (); /* announce system tick to kernel */
  929.     }
  930. #ifdef INCLUDE_DEMO
  931. /********************************************************************************
  932. * usrDemo - example application without shell
  933. *
  934. * This routine is spawned as a task at the end of usrRoot(), if INCLUDE_DEMO
  935. * is defined, and INCLUDE_SHELL is NOT defined in configAll.h or config.h.
  936. * It is intended to indicate how a shell-less application can be linked,
  937. * loaded, and ROMed.
  938. *
  939. * NOMANUAL
  940. */
  941. void usrDemo (void)
  942.     {
  943.     char string [40];
  944.     printf ("VxWorks (for %s) version %s.n", sysModel (), vxWorksVersion);
  945.     printf ("Kernel: %s.n", kernelVersion ());
  946.     printf ("Made on %s.n", creationDate);
  947.     FOREVER
  948.         {
  949.         printf ("nThis is a test.  Type something: ");
  950.         fioRdString (STD_IN, string, sizeof (string));
  951. printf ("nYou typed "%s".n", string);
  952. if (strcmp (string, "0") == 0)
  953.     memShow (0);
  954. if (strcmp (string, "1") == 0)
  955.     memShow (1);
  956.         }
  957.     }
  958. #endif /* INCLUDE_DEMO */