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

📄 rebootlib.c

📁 VxWorks操作系统内核源代码
💻 C
字号:
/* rebootLib.c - reboot support library *//* Copyright 1984-1993 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02i,14jul97,dgp  doc: change ^X to CTRL-X in library description02h,22oct95,jdi  doc: added bit values for reboot() <startType>.02g,10oct95,jdi  doc: added .tG Shell to SEE ALSO for reboot().02f,27jan93,jdi  documentation cleanup for 5.1;                 SPR#1594: change include file to rebootLib.h02e,23oct92,jcf  made cacheClear a macro.02d,19oct92,jcf  removed disInst/disData.  Locked interrupts in reboot().02c,12oct92,jdi  fixed mangen problem for reboot() by moving declarations		 of disInst & disData to top section as customary.02b,01oct92,jcf  added cacheDisable() to push out any data before reboot.02a,04jul92,jcf  reworked to use dllLib.01l,13dec91,gae  ANSI cleanup.01k,19nov91,rrr  shut up some ansi warnings.01j,04oct91,rrr  passed through the ansification filter                  -changed functions to ansi style		  -changed VOID to void		  -changed copyright notice01i,05apr91,jdi	 documentation -- removed header parens and x-ref numbers;		 doc review by gae.01h,24mar91,jaa  documentation cleanup.01g,20jun90,gae  changed reboot documentation to match new startTypes.01f,19mar90,jdi  documentation tweak.01e,07mar90,jdi  documentation cleanup.01d,19aug88,gae  documentation.01c,22jun88,dnw  name tweaks.01b,30may88,dnw  changed to v4 names.01a,28may88,dnw  extracted from hookLib and kLib.		 modified to used malloc'ed linked list instead of fixed size		 table.*//*DESCRIPTIONThis library provides reboot support.  To restart VxWorks, the routinereboot() can be called at any time by typing CTRL-X from the shell.  Shutdownroutines can be added with rebootHookAdd().  These are typically used toreset or synchronize hardware.  For example, netLib adds a reboot hookto cause all network interfaces to be reset.  Once the reboot hooks havebeen run, sysToMonitor() is called to transfer control to the boot ROMs.For more information, see the manual entry for bootInit.DEFICIENCIESThe order in which hooks are added is the order in which they are run.As a result, netLib will kill the network, and no user-added hook routineswill be able to use the network.  There is no rebootHookDelete() routine.INCLUDE FILES: rebootLib.hSEE ALSO: sysLib, bootConfig, bootInit*/#include "vxWorks.h"#include "stdlib.h"#include "cacheLib.h"#include "dllLib.h"#include "memLib.h"#include "rebootLib.h"#include "taskLib.h"#include "intLib.h"typedef struct    {    DL_NODE node;    FUNCPTR func;    } REBOOT_HOOK;LOCAL DL_LIST	rebootHookList;LOCAL BOOL	rebootHooksInitialized;/********************************************************************************* reboot - reset network devices and transfer control to boot ROMs** This routine returns control to the boot ROMs after calling a series of* preliminary shutdown routines that have been added via* rebootHookAdd(), including routines to reset all network devices.* After calling the shutdown routines, interrupts are locked, all caches* are cleared, and control is transferred to the boot ROMs.** The bit values for <startType> are defined in sysLib.h:* .iP "BOOT_NORMAL  (0x00)" 8* causes the system to go through the countdown sequence and try to reboot* VxWorks automatically.  Memory is not cleared.* .iP "BOOT_NO_AUTOBOOT  (0x01)"* causes the system to display the VxWorks boot prompt and wait for user* input to the boot ROM monitor.  Memory is not cleared.* .iP "BOOT_CLEAR  (0x02)"* the same as BOOT_NORMAL, except that memory is cleared.* .iP "BOOT_QUICK_AUTOBOOT  (0x04)"* the same as BOOT_NORMAL, except the countdown is shorter.** RETURNS: N/A** SEE ALSO: sysToMonitor(), rebootHookAdd(),* .pG "Target Shell,"* windsh,* .tG "Shell"*/void reboot    (    int startType       /* how the boot ROMS will reboot */    )    {    FAST REBOOT_HOOK *pHook;    int lock;    if (rebootHooksInitialized)	{	for (pHook = (REBOOT_HOOK *) DLL_FIRST (&rebootHookList);	     pHook != NULL;	     pHook = (REBOOT_HOOK *) DLL_NEXT (&pHook->node))	    {	    (* pHook->func) (startType);	    }	}    lock = intLock ();					/* LOCK INTERRUPTS */    if (cacheLib.clearRtn != NULL)			/* clear out cache */	(* cacheLib.clearRtn) (DATA_CACHE, NULL, ENTIRE_CACHE);    (void) sysToMonitor (startType);    }/********************************************************************************* rebootHookAdd - add a routine to be called at reboot** This routine adds the specified routine to a list of routines to be* called when VxWorks is rebooted.  The specified routine should be* declared as follows:* .CS*     void rebootHook*         (*         int startType   /@ startType is passed to all hooks @/*         )* .CE** RETURNS: OK, or ERROR if memory is insufficient.** SEE ALSO: reboot()*/STATUS rebootHookAdd    (    FUNCPTR rebootHook          /* routine to be called at reboot */    )    {    REBOOT_HOOK *pHook;    /* initialize hook list if this is the first time */    if (!rebootHooksInitialized)	{	dllInit (&rebootHookList);	rebootHooksInitialized = TRUE;	}    /* allocate and initialize hook node */    pHook = (REBOOT_HOOK *) memPartAlloc (memSysPartId, sizeof (REBOOT_HOOK));    if (pHook == NULL)	return (ERROR);    pHook->func = rebootHook;    /* add it to end of hook list */    taskLock ();				/* LOCK PREEMPTION */    dllAdd (&rebootHookList, &pHook->node);    taskUnlock ();				/* UNLOCK PREEMPTION */    return (OK);    }

⌨️ 快捷键说明

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