ln97xEnd.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:19k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ln97xEnd.h - END style AMD Am79C97X PCnet-PCI Ethernet driver header */
  2. /* Copyright 1998-2002 Wind River Systems, Inc. */
  3. /* Copyright 1998 CETIA Inc. */
  4. /*
  5. modification history
  6. --------------------
  7. 01f,30may02,sru  Added REG_SWAP and LS_MODE_NOSWAP_MASTER definitions.
  8. 01e,12nov01,pai  Added definitions for CSR5 and CSR8-CSR11 fields.  Setup
  9.                  PCI_SWAP definition in one place.  Doubled the number of
  10.                  receive and transmit descriptors the device will use.
  11.                  Removed obsolete <errorStat> member from DRV_CTRL.
  12.                  Removed superfluous "arch-specific" (CPU_FAMILY==I80X86)
  13.                  macros.
  14. 01d,27mar01,tlc  Add definitions for interrupt level and PCI bus endianess.
  15.                  Revised how PCI_SWAP is defined. It is now conditionally
  16.                  defined based on the ln97xEndianess parameter set in
  17.                  ln97xParamInit().
  18. 01c,11jun00,ham  removed reference to etherLib.
  19. 01b,19may00,pai  Implemented accumulated driver bug fixes (SPR #31349).
  20. 01a,07dec98,snk added support 7997x[012] across architectures.
  21. written from 01b of lnPciEnd.h
  22. */
  23. #ifndef __INCln97xEndh
  24. #define __INCln97xEndh
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. #ifndef _ASMLANGUAGE
  29. #include "end.h"
  30. #include "cacheLib.h"
  31. #include "netinet/if_ether.h"
  32. /* define the various levels of debugging if the DRV_DEBUG is defined */    
  33. #ifdef DRV_DEBUG
  34. #    include "logLib.h"
  35. #    define DRV_DEBUG_OFF           0x0000
  36. #    define DRV_DEBUG_RX            0x0001
  37. #    define DRV_DEBUG_TX            0x0002
  38. #    define DRV_DEBUG_INT           0x0004
  39. #    define DRV_DEBUG_POLL          (DRV_DEBUG_POLL_RX | DRV_DEBUG_POLL_TX)
  40. #    define DRV_DEBUG_POLL_RX       0x0008
  41. #    define DRV_DEBUG_POLL_TX       0x0010
  42. #    define DRV_DEBUG_LOAD          0x0020
  43. #    define DRV_DEBUG_LOAD2         0x0040
  44. #    define DRV_DEBUG_IOCTL         0x0080
  45. #    define DRV_DEBUG_RESET         0x0100
  46. #    define DRV_DEBUG_MCAST         0x0200
  47. #    define DRV_DEBUG_CSR           0x0400
  48. #    define DRV_DEBUG_RX_PKT        0x0800
  49. #    define DRV_DEBUG_POLL_REDIR    0x10000
  50. #    define DRV_DEBUG_LOG_NVRAM     0x20000
  51. #    define DRV_DEBUG_ALL           0xfffff
  52. #endif /* DRV_DEBUG */
  53. /* board level/bus specific and architecture specific macros */
  54. #if _BYTE_ORDER==_BIG_ENDIAN
  55. #   define PCI_SWAP(x)  ((ln97xBusEndianess) ? (int)(x) : LONGSWAP((int)(x))) 
  56. #else
  57. #   define PCI_SWAP(x)  (x)
  58. #endif
  59. #if _BYTE_ORDER==_BIG_ENDIAN
  60. #    define REG_SWAP(d,x)  (((d)->flags & LS_MODE_NOSWAP_MASTER) ? 
  61.                                 (int)(x) : LONGSWAP((int)(x)))
  62. #else
  63. #    define REG_SWAP(d,x)  (x)
  64. #endif
  65. /* device IO or memory mapped access and data registers */
  66. #define LN_97X_RDP      ((UINT32 *)((UINT32)(pDrvCtrl->devAdrs) + 0x10))
  67. #define LN_97X_RAP      ((UINT32 *)((UINT32)(pDrvCtrl->devAdrs) + 0x14))
  68. #define LN_97X_RST      ((UINT32 *)((UINT32)(pDrvCtrl->devAdrs) + 0x18))
  69. #define LN_97X_BDP      ((UINT32 *)((UINT32)(pDrvCtrl->devAdrs) + 0x1C))
  70. /* csr and bcr addresses */
  71. #define CSR(x)          (x)
  72. #define BCR(x)          (x)
  73. /* Definitions for fields and bits in the device */
  74. #define CSR0_RESRVD         0xffff0000 /* resvd: written 0, read undefined */
  75. #define CSR0_ERR            0x8000 /* (RO) err flg (BABL|CERR|MISS|MERR) */
  76. #define CSR0_BABL           0x4000 /* (RC) babble transmitter timeout */
  77. #define CSR0_CERR           0x2000 /* (RC) collision error */
  78. #define CSR0_MISS           0x1000 /* (RC) missed packet */
  79. #define CSR0_MERR           0x0800 /* (RC) memory error */
  80. #define CSR0_RINT           0x0400 /* (RC) receiver interrupt */
  81. #define CSR0_TINT           0x0200 /* (RC) transmitter interrupt */
  82. #define CSR0_IDON           0x0100 /* (RC) initialization done */
  83. #define CSR0_INTR           0x0080 /* (RO) interrupt flag */
  84. #define CSR0_INEA           0x0040 /* (RW) interrupt enable */
  85. #define CSR0_RXON           0x0020 /* (RO) receiver on */
  86. #define CSR0_TXON           0x0010 /* (RO) transmitter on */
  87. #define CSR0_TDMD           0x0008 /* (WOO)transmit demand */
  88. #define CSR0_STOP           0x0004 /* (WOO)stop (& reset) chip */
  89. #define CSR0_STRT           0x0002 /* (RW) start chip */
  90. #define CSR0_INIT           0x0001 /* (RW) initialize (acces init block) */
  91. #define CSR0_INTMASK            (CSR0_BABL | CSR0_CERR | CSR0_MISS | 
  92.                                  CSR0_MERR | CSR0_RINT | CSR0_TINT | 
  93.                                  CSR0_IDON | CSR0_INEA)
  94. #define CSR3_DXSUFLO 0x0040 /* disable transmit stop on UFLO */
  95. #define CSR3_BSWP 0x0004 /* Byte Swap */
  96. /* CSR 4 test and features control */
  97. #define CSR4_EN124 0x8000 /* enable CSR124 access */
  98. #define CSR4_DMAPLUS 0x4000 /* disable DMA burst xfer counter */
  99. #define CSR4_TIMER 0x2000 /* enable bus activity timer */
  100. #define CSR4_DPOLL 0x1000 /* disable transmit polling */
  101. #define CSR4_APAD_XMIT 0x0800 /* enable auto pad transmit */
  102. #define CSR4_ASTRP_RCV 0x0400 /* enable auto pad stripping */
  103. #define CSR4_MFCO 0x0200 /* missed frame counter overflow */
  104. #define CSR4_MFCOM 0x0100 /* missed frame counter mask */
  105. #define CSR4_UINTCMD 0x0080 /* user interrupt command */
  106. #define CSR4_UINT 0x0040 /* user interrupt issued */
  107. #define CSR4_RCVCC0 0x0020 /* receive collision cntr overflow */
  108. #define CSR4_RCVCCOM 0x0010 /* receive collision cntr mask */
  109. #define CSR4_TXSTRT 0x0008 /* transmit start status */
  110. #define CSR4_TXSTRTM 0x0004 /* transmit start mask */
  111. #define CSR4_JAB 0x0002 /* jabber error indicated */
  112. #define CSR4_JABM 0x0001 /* jabber error mask */
  113. #define CSR4_TFC_MASK (CSR4_MFCOM | CSR4_RCVCCOM | 
  114.                                  CSR4_TXSTRTM | CSR4_JABM)
  115. /* CSR 5 extended control and interrupt */
  116. #define CSR5_RESRVD_B       0xffff0000 /* resvd: written 0, read undefined */
  117. #define CSR5_TOKINTD        0x00008000 /* transmit OK interrupt disable */
  118. #define CSR5_LTINTEN        0x00004000 /* last transmit interrupt enable */
  119. #define CSR5_RESRVD_A       0x00003000 /* resvd: written 0, read undefined */
  120. #define CSR5_SINT           0x00000800 /* system interrupt asserted */
  121. #define CSR5_SINTE          0x00000400 /* system interrupt enable */
  122. #define CSR5_SLPINT         0x00000200 /* sleep interrupt asserted */
  123. #define CSR5_SLPINTE        0x00000100 /* sleep interrupt enable */
  124. #define CSR5_EXDINT         0x00000080 /* excessive deferral asserted */
  125. #define CSR5_EXDINTE        0x00000040 /* excessive deferral int. enable */
  126. #define CSR5_MPPLBA         0x00000020 /* magic packet broadcast accept */
  127. #define CSR5_MPINT          0x00000010 /* magic packet int. asserted */
  128. #define CSR5_MPINTE         0x00000008 /* magic packet int. enable */
  129. #define CSR5_MPEN           0x00000004 /* magic packet mode enable */
  130. #define CSR5_MPMODE         0x00000002 /* set magic packet mode */
  131. #define CSR5_SPND           0x00000001 /* set suspend mode */
  132. #define CSR5_RESRVD_MASK    (~(CSR5_RESRVD_B | CSR5_RESRVD_A))
  133. /* CSR  8 logical address filter 0 */
  134. #define CSR8_RESRVD         0xffff0000 /* reserved locations, write as 0 */
  135. #define CSR8_LADRF0         0x0000ffff /* logical address filter [15:0] */
  136. /* CSR  9 logical address filter 1 */
  137. #define CSR9_RESRVD         0xffff0000 /* reserved locations, write as 0 */
  138. #define CSR9_LADRF1         0x0000ffff /* logical address filter [31:16] */
  139. /* CSR 10 logical address filter 2 */
  140. #define CSR10_RESRVD        0xffff0000 /* reserved locations, write as 0 */
  141. #define CSR10_LADRF2        0x0000ffff /* logical address filter [47:32] */
  142. /* CSR 11 logical address filter 3 */
  143. #define CSR11_RESRVD        0xffff0000 /* reserved locations, write as 0 */
  144. #define CSR11_LADRF3        0x0000ffff /* logical address filter [63:48] */
  145. /* CSR 15 mode register - loaded from initialization block */
  146. #define CSR15_PROM          0x00008000 /* set promiscuous mode */
  147. #define CSR15_DTX           0x00000002 /* disable transmitter section */
  148. #define CSR15_DRX           0x00000001 /* disable receiver section */
  149. /* CSR 88 and CSR 89 chip ID registers */
  150. #define CSR88_LN970_PARTID  0x00001003 /* Am79c970 part ID lower value */
  151. #define CSR88_LN971_PARTID  0x00003003 /* Am79c971 part ID lower value */
  152. #define CSR88_LN972_PARTID  0x00004003 /* Am79c972 part ID lower value */
  153. #define CSR88_LN973_PARTID  0x00005003 /* Am79c973 part ID lower value */
  154. #define CSR88_LN975_PARTID  0x00007003 /* Am79c975 part ID lower value */
  155. #define CSR89_LN97X_PARTID  0x00000262 /* Am79c97x part ID upper value */
  156. /* chip ID values are formed as follows:
  157.  *
  158.  *     chipId = (CSR(88) | (CSR(89) << 16))
  159.  *     chipId = (chipId >> 12) & 0xffff
  160.  */
  161. #define CHIP_ID_AM79C970A   (0x2621)    /* PCnet-PCI II   Am79C970A */
  162. #define CHIP_ID_AM79C971    (0x2623)    /* PCnet-FAST     Am79C971 */
  163. #define CHIP_ID_AM79C972    (0x2624)    /* PCnet-FAST +   Am79C972 */
  164. #define CHIP_ID_AM79C973    (0x2625)    /* PCnet-FAST III Am79C973 */
  165. #define CHIP_ID_AM79C975    (0x2627)    /* PCnet Fast III Am79C975 */
  166. /* BCR 2 */
  167. #define BCR2_LEDPE              0x1000  /* LED program enable */
  168. #define BCR2_AUTO_SELECT        0x0002  /* auto select port type 10BT/AUI */
  169. #define BCR2_ACTIVE_HIGH        0x80    /* select active high interrupt pin */
  170. #define BCR2_ACTIVE_LOW         0x00    /* select active low interrupt pin  */
  171. /* BCR 18 burst size and bus control register */
  172. #define BCR18_ROMTMG 0x9000 /* expansion ROM timing (default) */
  173. #define BCR18_MEMCMD 0x0200 /* enable PCI memory read multiple */
  174. #define BCR18_BREADE 0x0040 /* burst read enable (SWSTYLE=3) */
  175. #define BCR18_BWRITE 0x0020 /* burst write enable (SWSTYLE=3) */
  176. #define BCR18_RESRVD 0x0001 /* reserved location (default) */
  177. #define BCR18_BSBC_MASK (BCR18_ROMTMG | BCR18_RESRVD | 
  178.                                  BCR18_BREADE | BCR18_BWRITE)
  179. /* BCR 20 software style register */
  180.     
  181. #define BCR20_SSIZE32 0x0100
  182. #define BCR20_SWSTYLE_LANCE 0x0000
  183. #define BCR20_SWSTYLE_ILACC 0x0001
  184. #define BCR20_SWSTYLE_PCNET 0x0002
  185. #define BCR20_SWSTYLE_PCNET_II 0x0003
  186.     
  187. /* Control block definitions for AMD PCnet (Ethernet) chip. */
  188. typedef struct
  189.     {
  190.     ULONG       rdp;            /* register data Port */
  191.     ULONG       rap;            /* Register Address Port */
  192.     ULONG       rst;            /* Reset Register */
  193.     ULONG       bdp;            /* Bus Configuration Register Data Port */
  194.     } LN_DEVICE;
  195. /* Initialization Block */
  196. typedef struct lnIB
  197.     {
  198.     ULONG       lnIBMode;       /* mode register */
  199.     UCHAR       lnIBPadr [8];   /* PADR: bswapd ethnt phys address */
  200.     UCHAR       lnIBLadrf [8];  /* logical address filter */
  201.     ULONG       lnIBRdra;       /* RDRA: read ring address, long word */
  202.     ULONG       lnIBTdra;       /* TDRA: transmit ring address long word */
  203.     } LN_IB;
  204. /* Receive Message Descriptor Entry.*/
  205. typedef struct lnRMD
  206.     {
  207.     /* element order changed to accomodate burst mode operation */
  208.     ULONG       lnRMD2;         /* message byte count */
  209.     ULONG       lnRMD1;         /* status & buffer byte count (negative) */
  210.     ULONG       lnRMD0;         /* bits 31:00 of receive buffer address */
  211.     ULONG       lnRMD3;         /* reserved */
  212.     } LN_RMD;
  213. /* Transmit Message Descriptor Entry. */
  214. typedef struct lnTMD
  215.     {
  216.     /* element order changed to accomodate burst mode operation */
  217.     ULONG       lnTMD2;         /* errors */
  218.     ULONG       lnTMD1;         /* message byte count */
  219.     ULONG       lnTMD0;         /* bits 31:00 of transmit buffer address */
  220.     ULONG       lnTMD3;         /* reserved */
  221.     } LN_TMD;
  222. typedef union addrFilter        /* logical address filter layout */
  223.     {
  224.     UINT8  lafBytes  [8];       /* (8) bytes */
  225.     UINT16 lafWords  [4];       /* (4) 16-bit words */
  226.     UINT32 lafDwords [2];       /* (2) 32-bit dwords */
  227.     } ADDR_FILTER;
  228. typedef enum filterModCmd       /* addrFilterMod() commands */
  229.     {
  230.     LN_LADRF_ADD,               /* add a logical address */
  231.     LN_LADRF_DEL,               /* delete a logical address */
  232.     LN_LADRF_ADD_ALL,           /* add all logical addresses */
  233.     LN_LADRF_DEL_ALL            /* delete all logical addresses */
  234.     } FILTER_MOD_CMD;
  235. /* initialization block */
  236. #define IB_MODE_TLEN_MSK 0xf0000000
  237. #define IB_MODE_RLEN_MSK 0x00f00000
  238. /* receive descriptor */
  239. #define RMD1_OWN 0x80000000 /* Own */
  240. #define RMD1_ERR 0x40000000 /* Error */
  241. #define RMD1_FRAM 0x20000000 /* Framming Error */
  242. #define RMD1_OFLO 0x10000000 /* Overflow */
  243. #define RMD1_CRC 0x08000000 /* CRC */
  244. #define RMD1_BUFF 0x04000000 /* Buffer Error */
  245. #define RMD1_STP 0x02000000 /* Start of Packet */
  246. #define RMD1_ENP 0x01000000 /* End of Packet */
  247. #define RMD1_RES 0x00ff0000 /* reserved */
  248. #define RMD1_CNST 0x0000f000 /* rmd1 constant value */
  249. #define RMD1_BCNT_MSK 0x00000fff /* buffer cnt mask */
  250. #define RMD2_MCNT_MSK 0x00000fff /* message buffer cnt mask */
  251. /* transmit descriptor */
  252. #define TMD1_OWN 0x80000000 /* Own */
  253. #define TMD1_ERR 0x40000000 /* Error */
  254. #define TMD1_MORE 0x10000000 /* More than One Retry */
  255. #define TMD1_ONE 0x08000000 /* One Retry */
  256. #define TMD1_DEF 0x04000000 /* Deferred */
  257. #define TMD1_STP 0x02000000 /* Start of Packet */
  258. #define TMD1_ENP 0x01000000 /* End of Packet */
  259. #define TMD1_BPE                0x00800000      /* Bus Parity Error */
  260. #define TMD1_RES 0x007F0000 /* Reserved locations */
  261. #define TMD1_CNST 0x0000f000 /* tmd1 constant value */
  262. #define TMD2_BUFF 0x80000000 /* Buffer Error */
  263. #define TMD2_UFLO 0x40000000 /* Underflow Error */
  264. #define TMD2_LCOL 0x10000000 /* Late Collision */
  265. #define TMD2_LCAR 0x08000000 /* Lost Carrier */
  266. #define TMD2_RTRY 0x04000000 /* Retry Error */
  267. #define TMD2_TDR 0x03FF0000 /* Time Domain Reflectometry */
  268. #define TMD1_BCNT_MSK 0x00000fff /* buffer cnt mask */
  269. /* CRC for logical address filter */
  270. #define LN_CRC_POLYNOMIAL       (0xedb88320)    /* Ethernet CRC polynomial */
  271. #define LN_CRC_TO_LAF_IX(crc)   ((crc) >> 26)   /* get 6 MSBits */
  272. #define LN_LAF_LEN              (8)             /* logical addr filter length */
  273. #define LN_LA_LEN               (6)             /* logical address length */
  274. #define BITS_PER_LA             (8 * LN_LA_LEN) /* logical addr length bits */
  275. /* Definitions for the drvCtrl specific flags field */
  276. #define LS_PROMISCUOUS_FLAG     0x1     /* set the promiscuous mode */
  277. #define LS_MEM_ALLOC_FLAG       0x2     /* allocating memory flag */
  278. #define LS_PAD_USED_FLAG        0x4     /* padding used flag */
  279. #define LS_RCV_HANDLING_FLAG    0x8     /* handling recv packet */
  280. #define LS_START_OUTPUT_FLAG    0x10    /* trigger output flag */
  281. #define LS_POLLING              0x20    /* polling flag */
  282. #define LS_MODE_MEM_IO_MAP      0x100   /* device registers memory mapped */
  283. #define LS_MODE_DWIO            0x200   /* device in 32 bit mode */
  284. #define LS_MODE_NOSWAP_MASTER 0x400   /* don't swap PCI master I/O ops */
  285. /* descriptor size */
  286. #define RMD_SIZ                 sizeof(LN_RMD)
  287. #define TMD_SIZ                 sizeof(LN_TMD)
  288. #define IB_SIZ                  sizeof(LN_IB)
  289. /* The definition of the driver control structure */
  290. typedef struct ln97xDevice
  291.     {
  292.     END_OBJ           endObj;            /* The class we inherit from */
  293.     int               unit;              /* unit number of the device */
  294.     volatile LN_IB *  ib;                /* ptr to Initialization Block */
  295.     int               rmdIndex;          /* current RMD send index */
  296.     int               rringSize;         /* RMD ring size */
  297.     int               rringLen;          /* RMD ring length (bytes) */
  298.     volatile LN_RMD * pRring;            /* RMD ring start */
  299.     int               tmdIndex;          /* current TMD transmit index */
  300.     int               tmdIndexC;         /* current TMD cleaning index */
  301.     int               tringSize;         /* TMD ring size */
  302.     int               tringLen;          /* TMD ring length (bytes) */
  303.     volatile LN_TMD * pTring;            /* TMD ring start */
  304.     int               inum;              /* interrupt number */
  305.     int               ilevel;            /* interrupt level */
  306.     volatile UINT32 * pRdp;              /* device register CSR */
  307.     volatile UINT32 * pRap;              /* device register RAP */
  308.     volatile UINT32 * pReset;            /* device register Reset */
  309.     volatile UINT32 * pBdp;              /* device register BCR */
  310.     volatile char *   pShMem;            /* real ptr to shared memory */
  311.     volatile char *   memBase;           /* PCnet memory pool base */
  312.     volatile char *   memAdrs;           /* PCnet memory pool base */
  313.     UINT32            devAdrs;           /* device structure address */
  314.     UINT16            csr3B;             /* csr3 value board specific */
  315.     UINT32            chipId;            /* (csr88|csr89) chip ID value */
  316.     int               memSize;           /* PCnet memory pool size */
  317.     int               memWidth;          /* width of data port */
  318.     int               offset;            /* offset of data in the buffer */
  319.     volatile UINT32   flags;             /* Our local flags */
  320.     UINT32            pciMemBase;        /* memory base as seen from PCI*/
  321.     UINT8             enetAddr[6];       /* ethernet address */
  322.     CACHE_FUNCS       cacheFuncs;        /* cache function pointers */
  323.     volatile BOOL     txBlocked;         /* transmit flow control */
  324.     volatile BOOL     txCleaning;        /* transmit descriptor cleaning */
  325.     CL_POOL_ID        pClPoolId;         /* cluster pool Id */
  326.     M_CL_CONFIG       mClCfg;            /* mBlk & cluster config structure */
  327.     CL_DESC           clDesc;            /* cluster descriptor table */
  328.     END_ERR           lastError;         /* Last error passed to muxError */
  329.     volatile BOOL     errorHandling;     /* task level error handling */
  330.     } LN_97X_DRV_CTRL;
  331. /* Configuration items */
  332. #define LN_MIN_FBUF             (100)     /* Min sizeof first buffer in chain */
  333. #define LN_BUFSIZ               (ETHERMTU + SIZEOF_ETHERHEADER + 6)
  334. #define LN_SPEED                (10000000)
  335. #define LN_RMD_RLEN             (7)       /* ring size as a ^ 2 => 128 RMD's */
  336. #define LN_TMD_TLEN             (7)       /* ring size as a ^ 2 => 128 TMD's */
  337. #define LN_RMD_MIN              (2)       /* min descriptors 4 */
  338. #define LN_TMD_MIN              (2)       /* min descriptors 4 */
  339. #define LN_RMD_MAX              (9)       /* max descriptors 512 */
  340. #define LN_TMD_MAX              (9)       /* max descriptors 512 */
  341. #define LN_97X_DEV_NAME         "lnPci"   /* name of the device */
  342. #define LN_97X_DEV_NAME_LEN     (6)       /* length of the name string */
  343. #define LN_97X_APROM_SIZE       (32)      /* hardware Address PROM size bytes */
  344. #define LN_LITTLE_ENDIAN        (0)       /* little endian PCI bus      */
  345. #define LN_BIG_ENDIAN           (1)       /* big endian PCI bus         */
  346. #define LN_ACTIVE_LOW           (0)       /* active-low interrupt line  */
  347. #define LN_ACTIVE_HI            (1)       /* active-high interrupt line */
  348. #define LN_RMD_OWNED(rmd)       (PCI_SWAP ((rmd)->lnRMD1) & RMD1_OWN)
  349. #define LN_TMD_OWNED(tmd)       (PCI_SWAP ((tmd)->lnTMD1) & TMD1_OWN)
  350. #define LN_PKT_LEN_GET(rmd)     (PCI_SWAP ((rmd)->lnRMD2) - 4)
  351. #if defined(__STDC__) || defined(__cplusplus)
  352. IMPORT STATUS    ln97xInitParse (LN_97X_DRV_CTRL * pDrvCtrl, char * initString);
  353. IMPORT END_OBJ * ln97xEndLoad (char * initString);
  354. #else
  355. IMPORT STATUS    ln97xInitParse ();
  356. IMPORT END_OBJ * ln97xEndLoad ();
  357. #endif  /* __STDC__ */
  358. #endif  /* _ASMLANGUAGE */
  359. #ifdef __cplusplus
  360. }
  361. #endif
  362. #endif /* __INCln97xEndh */