sysMipsLib.c
上传用户:yingyi0918
上传日期:2022-06-26
资源大小:214k
文件大小:11k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* sysMipsLib.c - MIPS system-dependent routines */
  2. /* Copyright 2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5.  * This file has been developed or significantly modified by the
  6.  * MIPS Center of Excellence Dedicated Engineering Staff.
  7.  * This notice is as per the MIPS Center of Excellence Master Partner
  8.  * Agreement, do not remove this notice without checking first with
  9.  * WR/Platforms MIPS Center of Excellence engineering management.
  10.  */
  11. /*
  12. modification history
  13. --------------------
  14. 01g,13mar02,agf  replace (SM_OBJ || SM_NET) with SM_COMMON, SPR 74321
  15. 01f,27feb02,pes  Fix conditional to include sysProcNumSet
  16. 01e,17jan02,tlc  Add call to vxTas() to sysBusTas() (SPR #70336 fix).
  17. 01d,16jul01,tlc  Add CofE copyright.
  18. 01c,27jun01,tlc  Add conditional for (INCLUDE_SM_OBJ) and (INCLUDE_SM_NET) for
  19.                  sysLocalToBusAdrs, sysBusToLocalAdrs, sysBusIntAck, and
  20.                  sysBusIntGen.
  21. 01b,15jun01,tlc  Make each routine conditionally compiled so that BSPs may
  22.                  define thier own routines, if necessary.
  23. 01a,13jun01,tlc  Add sysIntDisable().  Remove sysBusTas().
  24. */
  25. /*
  26. DESCRIPTION
  27. DO NOT EDIT THIS FILE.
  28. This library provides board-specific routines that are shared by *all* MIPS-based
  29. BSPs.  MIPS BSPs utilize this file by creating a symbolic link from their
  30. directory to target/config/mipsCommon/sysMipsLib.c and include the file at the 
  31. top of sysLib.c using
  32. #include "sysMipsLib.c"
  33. A list of provided routines follows.  If a BSP requires a specialized routine,
  34. then #define the appropriate MACRO corresponding to the routine to be
  35. specialized in the BSPs sysLib.c file.  
  36.        ROUTINE              MACRO
  37.        ------------------------------------------------------
  38.        sysProcNumGet        SYS_PROC_NUM_GET
  39.        sysProcNumSet        SYS_PROC_NUM_SET
  40.        sysBusEid            SYS_BUS_EID
  41.        sysBusEar            SYS_BUS_EAR
  42.        sysClearTlb          SYS_CLEAR_TLB
  43.        sysMaskVmeErr        SYS_MASK_VME_ERR
  44.        sysUnmaskVmeErr      SYS_UNMASK_VMR_ERR
  45.        sysLocalToBusAdrs    SYS_LOCAL_TO_BUS_ADRS
  46.        sysBusToLocalAdrs    SYS_BUS_TO_LOCAL_ADRS
  47.        sysBusIntAck         SYS_BUS_INT_ACK
  48.        sysBusIntGen         SYS_BUS_INT_GEN
  49.        sysIntEnable         SYS_INT_ENABLE
  50.        sysIntDisable        SYS_INT_DISABLE
  51.        sysSw0Gen            SYS_SW0_GEN
  52.        sysSw1Gen            SYS_SW1_GEN
  53.        sysSw0Ack            SYS_SW0_ACK
  54.        sysSw1Ack            SYS_SW1_ACK
  55.        sysBusTas            SYS_BUS_TAS
  56. */
  57. /* globals */
  58. int   sysBus      = BUS;                /* system bus type (VME_BUS, etc) */
  59. int   sysCpu      = CPU;                /* system CPU type (MIPS_Vr5400) */
  60. char *sysMemTopAdr= NULL; /* top of memory */
  61. char *sysBootLine = BOOT_LINE_ADRS; /* address of boot line */
  62. char *sysExcMsg   = EXC_MSG_ADRS; /* catastrophic message area */
  63. int   sysProcNum; /* processor number of this CPU */
  64. int   sysFlags; /* boot flags */
  65. char  sysBootHost [BOOT_FIELD_LEN]; /* name of host from which we booted */
  66. char  sysBootFile [BOOT_FIELD_LEN]; /* name of file from which we booted */
  67. /* externals */
  68. IMPORT BOOL vxTas();
  69. /* Initialize cache function pointer */
  70. LOCAL STATUS      sysCacheInit ();
  71. FUNCPTR sysCacheLibInit = (FUNCPTR) sysCacheInit;
  72. #ifndef SYS_PROC_NUM_GET
  73. /******************************************************************************
  74. *
  75. * sysProcNumGet - get the processor number
  76. *
  77. * This routine returns the processor number for the CPU board, which is
  78. * set with sysProcNumSet().
  79. *
  80. * RETURNS: The processor number for the CPU board.
  81. *
  82. * SEE ALSO: sysProcNumSet()
  83. */
  84. int sysProcNumGet (void)
  85.     {
  86.     return (sysProcNum);
  87.     }
  88. #endif
  89. #ifndef SYS_PROC_NUM_SET
  90. /******************************************************************************
  91. *
  92. * sysProcNumSet - set the processor number
  93. *
  94. * This routine sets the processor number for this board.  Processor numbers
  95. * should be unique on a single backplane.
  96. *
  97. * RETURNS: N/A
  98. *
  99. * SEE ALSO: sysProcNumGet()
  100. */
  101. void sysProcNumSet
  102.     (
  103.     int procNum
  104.     )
  105.     {
  106.     sysProcNum = procNum;
  107.     }
  108. #endif
  109. #ifndef SYS_BUS_EID
  110. /******************************************************************************
  111. *
  112. * sysBusEid - get the value of the error ID register
  113. *
  114. * This routine returns the contents of the bus error status register
  115. * MIPS devices have no such register, so they simply return zero.
  116. *
  117. * RETURNS: 0, always.
  118. */
  119. USHORT sysBusEid (void)
  120.     {
  121.     return (0);
  122.     }
  123. #endif
  124. #ifndef SYS_BUS_EAR
  125. /******************************************************************************
  126. *
  127. * sysBusEar - get the access address of a bus error
  128. *
  129. * This routine returns the address of a bus error.
  130. *
  131. * NOTE:
  132. * This routine must be provided on all MIPS board support packages.
  133. * MIPS devices cannot determine the address that caused
  134. * a bus error.  It is possible to determine the source of a read bus error
  135. * by interpreting the instruction stream that caused the bus error.
  136. *
  137. * RETURNS: -1, always.
  138. */
  139. ULONG sysBusEar (void)
  140.     {
  141.     return (-1);
  142.     }
  143. #endif
  144. #ifndef SYS_CLEAR_TLB
  145. /******************************************************************************
  146. *
  147. * sysClearTlb - clear the translation lookaside buffer
  148. *
  149. * This routine clears the entries in the translation lookaside buffer (TLB)
  150. * for the MIPS devices.
  151. *
  152. * RETURNS: N/A
  153. *
  154. * NOMANUAL
  155. */
  156. void sysClearTlb (void)
  157.     {
  158.     int tlbEntry;
  159.     for (tlbEntry = 0; tlbEntry < TLB_ENTRIES; tlbEntry++)
  160. sysClearTlbEntry (tlbEntry);
  161.     }
  162. #endif
  163. #ifndef SYS_MASK_VME_ERR
  164. /******************************************************************************
  165. *
  166. * sysMaskVmeErr - mask the VMEbus error interrupt
  167. *
  168. * This routine is required for all MIPS BSPs.  It has no effect.
  169. *
  170. * RETURNS: 0.
  171. *
  172. * NOMANUAL
  173. */
  174. UINT8 sysMaskVmeErr (void)
  175.     {
  176.     return (0);
  177.     }
  178. #endif
  179. #ifndef SYS_UNMASK_VME_ERR
  180. /******************************************************************************
  181. *
  182. * sysUnmaskVmeErr - unmask the VMEbus error interrupt
  183. *
  184. * This routine is required for all MIPS BSPs.  It has no effect.
  185. *
  186. * RETURNS: 0.
  187. *
  188. * NOMANUAL
  189. */
  190. UINT8 sysUnmaskVmeErr (void)
  191.     {
  192.     return (0);
  193.     }
  194. #endif
  195. #ifdef INCLUDE_SM_COMMON
  196. #ifndef SYS_LOCAL_TO_BUS_ADRS
  197. /******************************************************************************
  198. *
  199. * sysLocalToBusAdrs - convert a local address to a bus address
  200. *
  201. * Not Implemented
  202. *
  203. *  NOMANUAL
  204. */
  205. STATUS sysLocalToBusAdrs
  206.     (
  207.     int  adrsSpace,     /* bus address space in which busAdrs resides,  */
  208.                         /* use address modifier codes defined in vme.h, */
  209.                         /* such as VME_AM_STD_SUP_DATA                  */
  210.     char *localAdrs,    /* local address to convert                     */
  211.     char **pBusAdrs     /* where to return bus address                  */
  212.     )
  213.     {
  214.     return (ERROR);
  215.     }
  216. #endif
  217. #ifndef SYS_BUS_TO_LOCAL_ADRS
  218. /******************************************************************************
  219. *
  220. * sysBusToLocalAdrs - convert a bus address to a local address
  221. *
  222. * Not Implemented
  223. *
  224. * NOMANUAL 
  225. */
  226.  
  227. STATUS sysBusToLocalAdrs
  228.     (
  229.     int  adrsSpace,     /* bus address space in which busAdrs resides,  */
  230.                         /* use address modifier codes defined in vme.h, */
  231.                         /* such as VME_AM_STD_SUP_DATA                  */
  232.     char *busAdrs,      /* bus address to convert                       */
  233.     char **pLocalAdrs   /* where to return local address                */
  234.     )
  235.     {
  236.     return (ERROR);
  237.     }
  238. #endif
  239. #ifndef SYS_BUS_INT_ACK
  240. /******************************************************************************
  241. *
  242. * sysBusIntAck - acknowledge a bus interrupt
  243. *
  244. * Not Implemented
  245. *
  246. * NOMANUAL
  247. */
  248. int sysBusIntAck
  249.     (
  250.     int intLevel /* interrupt level to acknowledge */
  251.     )
  252.     {
  253.     return(ERROR);    
  254.     }
  255. #endif
  256. #ifndef SYS_BUS_INT_GEN
  257. /******************************************************************************
  258. *
  259. * sysBusIntGen - generate a bus interrupt
  260. *
  261. * Not Implemented
  262. * RETURNS: ERROR, since there is no external bus.
  263. */
  264. STATUS sysBusIntGen
  265.     (
  266.     int level,          /* bus interrupt level to generate          */
  267.     int vector          /* interrupt vector to return (0-255)       */
  268.     )
  269.     {
  270.     return (ERROR);
  271.     }
  272. #endif
  273. #endif /* INCLUDE_SM_COMMON */
  274. #ifndef SYS_INT_ENABLE
  275. /******************************************************************************
  276. *
  277. * sysIntEnable - enable a bus interrupt level
  278. *
  279. * Not Implemented
  280. *
  281. * NOMANUAL 
  282. */
  283.  
  284. STATUS sysIntEnable
  285.     (
  286.     int intLevel       /* interrupt level to enable (1-7) */
  287.     )
  288.     {
  289.     return (ERROR);
  290.     }
  291. #endif
  292. #ifndef SYS_INT_DISABLE
  293. /******************************************************************************
  294. *
  295. * sysIntDisable - disable a bus interrupt level
  296. *
  297. * Not Implemented
  298. *
  299. * NOMANUAL 
  300. */
  301.  
  302. STATUS sysIntDisable
  303.     (
  304.     int intLevel       /* interrupt level to disable (1-7) */
  305.     )
  306.     {
  307.     return (ERROR);
  308.     }
  309. #endif
  310. #ifndef SYS_SW0_GEN
  311. /*******************************************************************************
  312. *
  313. * sysSw0Gen - generate software interrupt 0
  314. *
  315. * This routine writes to the MIPS cause register to generate a software
  316. * interrupt.
  317. *
  318. * RETURNS: N/A
  319. */
  320. void sysSw0Gen (void)
  321.     {
  322.     unsigned causeReg;
  323.     causeReg = intCRGet ();
  324.     causeReg |= CAUSE_SW1;
  325.     intCRSet (causeReg);
  326.     }
  327. #endif
  328. #ifndef SYS_SW1_GEN
  329. /*******************************************************************************
  330. *
  331. * sysSw1Gen - generate software interrupt 1
  332. *
  333. * This routine writes to the MIPS cause register to generate a software
  334. * interrupt.
  335. *
  336. * RETURNS: N/A
  337. */
  338. void sysSw1Gen (void)
  339.     {
  340.     unsigned causeReg;
  341.     causeReg = intCRGet ();
  342.     causeReg |= CAUSE_SW2;
  343.     intCRSet (causeReg);
  344.     }
  345. #endif
  346. #ifndef SYS_SW0_ACK
  347. /*******************************************************************************
  348. *
  349. * sysSw0Ack - acknowledge software interrupt 0
  350. *
  351. * This routine writes to the MIPS cause register to acknowledge a software
  352. * interrupt.
  353. *
  354. * NOTE:
  355. * This routine is provided as a default interrupt service routine.
  356. *
  357. * RETURNS: N/A
  358. */
  359. LOCAL int sysSw0Ack (void)
  360.     {
  361.     unsigned causeReg;
  362.     causeReg = intCRGet ();
  363.     causeReg &= ~CAUSE_SW1;
  364.     intCRSet (causeReg);
  365.     return (OK);
  366.     }
  367. #endif
  368. #ifndef SYS_SW1_ACK
  369. /*******************************************************************************
  370. *
  371. * sysSw1Ack - acknowledge software interrupt 1 
  372. *
  373. * This routine writes to the MIPS cause register to acknowledge a software
  374. * interrupt.
  375. *
  376. * NOTE:
  377. * This routine is provided as a default interrupt service routine.
  378. *
  379. * RETURNS: N/A
  380. */
  381. LOCAL int sysSw1Ack (void)
  382.     {
  383.     unsigned causeReg;
  384.     causeReg = intCRGet ();
  385.     causeReg &= ~CAUSE_SW2;
  386.     intCRSet (causeReg);
  387.     return (OK);
  388.     }
  389. #endif
  390. #ifndef SYS_BUS_TAS
  391. /******************************************************************************
  392. *
  393. * sysBusTas - test and set a location across the bus
  394. *
  395. * This routine performs a test-and-set operation across the backplane.
  396. *
  397. * RETURNS: TRUE if the value had not been set but is now, or FALSE if the
  398. * value was set already.
  399. *
  400. * SEE ALSO: vxTas()
  401. */
  402. BOOL sysBusTas
  403.     (
  404.     char *adrs /* address to be tested-and-set */
  405.     )
  406.     {
  407.     return (vxTas(adrs));
  408.     }
  409. #endif