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

📄 usrconfig.c

📁 MPC5200 BSP 支持ATA,USB, I2C,扩展网口
💻 C
📖 第 1 页 / 共 3 页
字号:
/* usrConfig.c - user-defined system configuration library *//*DESCRIPTIONThis library is the WRS-supplied configuration module for VxWorks.  Itcontains the root task, the primary system initialization routine, thenetwork initialization routine, and the clock interrupt routine.The include file config.h includes a number of system-dependent parameters usedin this file.In an effort to simplify the presentation of the configuration of vxWorks,this file has been split into smaller files.  These additional configurationsource files are located in ../../src/config/usr[xxx].c and are #included intothis file below.  This file contains the bulk of the code a customer islikely to customize.The module usrDepend.c contains checks that guard against unsupportedconfigurations such as INCLUDE_NFS without INCLUDE_RPC.  The moduleusrKernel.c contains the core initialization of the kernel which is rarelycustomized, but provided for information.  The module usrNetwork.c nowcontains all network initialization code.  Finally, the module usrExtra.ccontains the conditional inclusion of the optional packages selected inconfigAll.h.The source code necessary for the configuration selected is entirelyincluded in this file during compilation as part of a standard build inthe board support package.  No other make is necessary.INCLUDE FILES:config.hSEE ALSO:.tG "Getting Started, Cross-Development"*/#include "vxWorks.h"			/* always first */#include "config.h"			/* board support configuration header */#include "usrConfig.h"			/* general configuration header */#include "pubDir.h"/*#include "i2c.h" */#ifdef INCLUDE_USB    #include "usbPciStub.c" #endif#ifdef INCLUDE_OHCI_INIT    #include "usrUsbHcdOhciInit.c"#endif#ifdef INCLUDE_USB_INIT    #include "../comps/src/usrUsbInit.c"#endif#ifdef INCLUDE_USB_MS_CBI_INIT    #include "../comps/src/usrUsbCbiUfiDevInit.c"#endif#ifdef INCLUDE_OHCI_PCI_INIT    #include "../comps/src/usrUsbPciOhciInit.c"#endif#ifdef INCLUDE_USBTOOL    #include "../comps/src/usrUsbTool.c"#endif#ifdef INCLUDE_SELF_SHELL#include "shell.c"#endif#include "usrKernel.c"			/* kernel configuration */#include "usrExtra.c"			/* conditionally included packages */extern 	void usrShell(void);#if CPU==SIMNTextern int simUpMutex;extern int win_ReleaseMutex(int hMutex);#endif#ifdef INCLUDE_HTTP#include "http/httpLib.h"		/* Wind Web Server interfaces */#endif#ifdef INCLUDE_COMextern int comLibInit ();#endif#ifdef INCLUDE_DCOMextern int dcomLibInit ();#endif/* defines - must be after include of usrDepend.c */#ifdef	INCLUDE_WDB#define FREE_MEM_START_ADRS (FREE_RAM_ADRS + WDB_POOL_SIZE)#else#define FREE_MEM_START_ADRS FREE_RAM_ADRS#endif#ifdef	INCLUDE_INITIAL_MEM_ALLOCATION#define MEM_POOL_START_ADRS \	    (ROUND_UP(FREE_MEM_START_ADRS, (INITIAL_MEM_ALIGNMENT)) + \	    (INITIAL_MEM_SIZE))#else	/* INCLUDE_INITIAL_MEM_ALLOCATION */#define MEM_POOL_START_ADRS FREE_MEM_START_ADRS#endif	/* INCLUDE_INITIAL_MEM_ALLOCATION *//* global variables */int		consoleFd;		/* fd of initial console device */char		consoleName[20];	/* console device name, eg. "/tyCo/0" */SYMTAB_ID	statSymTbl;		/* system error status symbol table id*/SYMTAB_ID	standAloneSymTbl;	/* STANDALONE version symbol table id */SYMTAB_ID	sysSymTbl;		/* system symbol table id */BOOT_PARAMS	sysBootParams;		/* parameters from boot line */int		sysStartType;		/* type of boot (WARM, COLD, etc) *//* Two magic cookies used to detect data section misalignment */#define TRAP_VALUE_1	0x12348765#define TRAP_VALUE_2	0x5a5ac3c3LOCAL volatile UINT32	trapValue1	= TRAP_VALUE_1;LOCAL volatile UINT32	trapValue2	= TRAP_VALUE_2;IMPORT void buildBootLine( char *v_pcBootLine, int flag_bootconfig);/********************************************************************************* usrInit - user-defined system initialization routine** This is the first C code executed after the system boots.  This routine is* called by the assembly language start-up routine sysInit() which is in the* sysALib module of the target-specific directory.  It is called with* interrupts locked out.  The kernel is not multitasking at this point.** This routine starts by clearing BSS; thus all variables are initialized to 0,* as per the C specification.  It then initializes the hardware by calling* sysHwInit(), sets up the interrupt/exception vectors, and starts kernel* multitasking with usrRoot() as the root task.** RETURNS: N/A** SEE ALSO: kernelLib** ARGSUSED0*/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#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_FAMILY!=SIMNT && CPU_FAMILY!=SIMSPARCSUNOS && CPU_FAMILY!=SIMHPPA && CPU_FAMILY!=SIMSPARCSOLARIS    /* don't assume bss variables are zero before this call */    bzero (edata, end - edata);		/* zero out bss variables */#endif	/* CPU_FAMILY!=SIMNT && CPU_FAMILY!=SIMSPARCSUNOS && CPU_FAMILY!=SIMHPPA && CPU_FAMILY!=SIMSPARCSOLARIS */#if (CPU_FAMILY == PPC)    /*     * Immediately after clearing the bss, ensure global stdin     * etc. are ERROR until set to real values.  This is used in     * target/src/arch/ppc/excArchLib.c to improve diagnosis of     * exceptions which occur before I/O is set up.     */    ioGlobalStdSet (STD_IN,  ERROR);    ioGlobalStdSet (STD_OUT, ERROR);    ioGlobalStdSet (STD_ERR, ERROR);#endif  /* CPU_FAMILY == PPC */    sysStartType = startType;			/* save type of system start */	/* for Scorpion CP2 board vector base address need to be changed */    if (VEC_BASE_ADRS == (char *)_PPC_EXC_VEC_BASE_HIGH)		{		_func_intVecBaseGetRtn = excVecBaseGet;		_func_intVecBaseSetRtn = excVecBaseSet;		}    intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS);	/* set vector base table */#if (CPU_FAMILY == AM29XXX)    excSpillFillInit ();			/* am29k stack cache managemt */#endif#ifdef  INCLUDE_EXC_HANDLING# if (CPU_FAMILY == PPC) && defined(INCLUDE_EXC_SHOW)    /*     * Do this ahead of excVecInit() to set up _func_excPanicHook, in case     * the enabling of Machine Check there allows a pending one to occur.     * excShowInit() will be called again later, harmlessly.     */    excShowInit ();# endif  /* CPU_FAMILY == PPC && defined(INCLUDE_EXC_SHOW) */    excVecInit ();				/* install exception vectors */#endif  /* INCLUDE_EXC_HANDLING */    sysHwInit ();				/* initialize system hardware */    usrKernelInit ();				/* configure the Wind kernel */#ifdef INCLUDE_USB 	#ifdef INCLUDE_OHCI_PCI_INIT       	sysUsbPciOhciInit ();	#endif#endif#ifdef  INCLUDE_CACHE_SUPPORT#ifdef 	USER_I_CACHE_ENABLE    cacheEnable (INSTRUCTION_CACHE);		/* enable instruction cache */#endif	/* USER_I_CACHE_ENABLE */#ifdef	USER_D_CACHE_ENABLE    cacheEnable (DATA_CACHE);			/* enable data cache */#endif 	/* USER_D_CACHE_ENABLE */#if (CPU == MC68060)#ifdef 	USER_B_CACHE_ENABLE    cacheEnable (BRANCH_CACHE);			/* enable branch cache */#endif	/* USER_B_CACHE_ENABLE */#endif	/* (CPU == MC68060) */#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 - the root task** This is the first task to run under the multitasking kernel.  It performs* all final initialization and then starts other tasks.** It initializes the I/O system, installs drivers, creates devices, and sets* up the network, etc., as necessary for a particular configuration.  It* may also create and load the system symbol table, if one is to be included.* It may then load and spawn additional tasks as needed.  In the default* configuration, it simply initializes the VxWorks shell.** RETURNS: N/A*/void usrRoot    (    char *	pMemPoolStart,		/* start of system memory partition */    unsigned	memPoolSize		/* initial size of mem pool */    )    {    char tyName [20];    char ifname[20];    int  ix;		    /* 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.     */#ifdef INCLUDE_MEM_MGR_FULL    memInit (pMemPoolStart, memPoolSize);	/* initialize memory pool */#else    memPartLibInit (pMemPoolStart, memPoolSize);/* initialize memory pool */#endif /* INCLUDE_MEM_MGR_FULL */#ifdef	INCLUDE_SHOW_ROUTINES    memShowInit ();				/* initialize memShow routine */#endif	/* INCLUDE_SHOW_ROUTINES */#if	defined(INCLUDE_MMU_BASIC) || defined(INCLUDE_MMU_FULL) || \	defined(INCLUDE_MMU_MPU)    usrMmuInit ();				/* initialize the mmu */#endif	/* defined(INCLUDE_MMU_BASIC, INCLUDE_MMU_FULL, INCLUDE_MMU_MPU) */    /* set up system timer */    sysClkConnect ((FUNCPTR) usrClock, 0);	/* connect clock ISR */    sysClkRateSet (SYS_CLK_RATE);	/* set system clock rate */    sysClkEnable ();				/* start it */#ifdef INCLUDE_FAST_DRAM/* * make use of data cache as fast DRAM, * establish parameters in config.h, MMU * must be initialed before data cache is * initialized as data ram... */  cacheCreateInternalDataRAM((UINT32 *)FD_ORIGIN, FD_NUMLINES);#endif    /*     * 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 hooks is performed     * later in usrRoot() after NFS and RPC have been initialized.     */#ifdef  INCLUDE_SELECT    selectInit (NUM_FILES);#endif	/* INCLUDE_SELECT */    /* initialize I/O system */#ifdef  INCLUDE_IO_SYSTEM    iosInit (NUM_DRIVERS, NUM_FILES, "/null");    consoleFd = NONE;                           /* assume no console device */#ifdef  INCLUDE_TYCODRV_5_2#ifdef  INCLUDE_TTY_DEV    if (NUM_TTY > 0)	{	tyCoDrv ();				/* install console driver */	for (ix = 0; ix < NUM_TTY; ix++)	/* create serial devices */	    {	    sprintf (tyName, "%s%d", "/tyCo/", ix);	    (void) tyCoDevCreate (tyName, ix, 512, 512);	    if (ix == CONSOLE_TTY)		strcpy (consoleName, tyName);	/* store console name */	    }	consoleFd = open (consoleName, O_RDWR, 0);	/* set baud rate */	(void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);	(void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);	}#endif	/* INCLUDE_TTY_DEV */#else   /* !INCLUDE_TYCODRV_5_2 */#ifdef  INCLUDE_TTY_DEV    if (NUM_TTY > 0)	{	ttyDrv();				/* install console driver */	for (ix = 0; ix < NUM_TTY; ix++)	/* create serial devices */	    {#if     (defined(INCLUDE_WDB) && (WDB_COMM_TYPE == WDB_COMM_SERIAL))	    if (ix == WDB_TTY_CHANNEL)		/* don't use WDBs channel */		continue;#endif	    sprintf (tyName, "%s%d", "/tyCo/", ix);	    (void) ttyDevCreate (tyName, sysSerialChanGet(ix), 512, 512);	    if (ix == CONSOLE_TTY)		/* init the tty console */		{		strcpy (consoleName, tyName);		consoleFd = open (consoleName, O_RDWR, 0);		(void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);		(void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);		}	    }	}#endif  /* INCLUDE_TTY_DEV */#ifdef INCLUDE_PC_CONSOLE    pcConDrv ();    for (ix = 0; ix < N_VIRTUAL_CONSOLES; ix++)	{	sprintf (tyName, "%s%d", "/pcConsole/", ix);	(void) pcConDevCreate (tyName,ix, 512, 512);	if (ix == PC_CONSOLE)		/* init the console device */	    {	    strcpy (consoleName, tyName);	    consoleFd = open (consoleName, O_RDWR, 0);	    (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);	    (void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);	    }	}#endif	/* INCLUDE_PC_CONSOLE */#endif  /* !INCLUDE_TYCODRV_5_2 */    ioGlobalStdSet (STD_IN,  consoleFd);    ioGlobalStdSet (STD_OUT, consoleFd);    ioGlobalStdSet (STD_ERR, consoleFd);#endif  /* INCLUDE_IO_SYSTEM */

⌨️ 快捷键说明

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