Merge from vendor branch LIBPCAP:
[dragonfly.git] / sys / contrib / dev / oltr / trlld.h
1 /*\r
2  ******************************  trlld.h  ***********************************\r
3  *\r
4  *                          Copyright (c) 1997\r
5  *                          OLICOM A/S\r
6  *                          Denmark\r
7  *\r
8  *                          All Rights Reserved\r
9  *\r
10  *      This source file is subject to the terms and conditions of the\r
11  *      OLICOM Software License Agreement which restricts the manner\r
12  *      in which it may be used.\r
13  *\r
14  *---------------------------------------------------------------------------\r
15  *\r
16  * Description: PowerMACH Works header file\r
17  * $FreeBSD: src/sys/contrib/dev/oltr/trlld.h,v 1.3.2.1 2000/03/19 00:32:34 lile Exp $
18  * $DragonFly: src/sys/contrib/dev/oltr/Attic/trlld.h,v 1.2 2003/06/17 04:28:20 dillon Exp $
19  *\r
20  *---------------------------------------------------------------------------\r
21  * $Log:   J:/usr/project/trlld/libsrc/include/trlld.h_v  $\r
22  * \r
23  *    Rev 1.9   25 Jan 1999 09:56:28   EGS\r
24  * Added 3150\r
25  * \r
26  *    Rev 1.8   10 Dec 1998 12:24:52   JHM\r
27  * version 1.2.0,prominfo structure with shorts.\r
28  * \r
29  *    Rev 1.7   25 Nov 1998 16:18:48   JHM\r
30  * Bullseye mac, 100MBPS, mactype in config structure,\r
31  * 3540 adapter, TRlldTransmitFree, TRlldReceiveFree,\r
32  * TRlldAdapterName\r
33  * \r
34  *    Rev 1.6   23 Oct 1998 16:00:36   JHM\r
35  * hawkeye adapter types\r
36  * \r
37  *    Rev 1.5   11 Aug 1998 12:22:06   JHM\r
38  * split hawkeye types into PCI4,5,6\r
39  * \r
40  *    Rev 1.4   10 Jul 1998 14:39:22   JHM\r
41  * OC_3140,OC_3250\r
42  * \r
43  *    Rev 1.3   18 Jun 1998 11:32:20   JHM\r
44  * AddMemory,OC_3250\r
45  * \r
46  *    Rev 1.2   18 Apr 1998 15:11:20   JHM\r
47  * \r
48  *    Rev 1.1   09 Dec 1997 18:17:52   JHM\r
49  * rel111: TRlldDataPtr_t\r
50  * \r
51  *    Rev 1.0   24 Nov 1997 11:08:58   JHM\r
52  * Initial revision.\r
53    \r
54       Rev 1.5   18 Jun 1997 11:31:36   JHM\r
55    Checks for version\r
56    \r
57       Rev 1.4   13 Jun 1997 13:47:34   JHM\r
58    \r
59       Rev 1.3   13 Jun 1997 13:27:56   JHM\r
60    DTR support, version change\r
61    \r
62       Rev 1.2   12 Jun 1997 11:43:20   JHM\r
63    TRLLD_INTERRUPT_TIMEOUT defined\r
64    \r
65       Rev 1.1   11 Apr 1997 15:24:18   JHM\r
66    replaced tabs with spaces\r
67    \r
68       Rev 1.0   11 Apr 1997 14:43:04   JHM\r
69    Initial revision.\r
70  *\r
71  ****************************************************************************\r
72 */\r
73 \r
74 #ifndef TRLLD_H\r
75 #define TRLLD_H\r
76 \r
77 /* Data buffer pointers are always 32 bits.\r
78    For 16:16 it is segment:offset while it for 32:32 is a linear address. */\r
79 \r
80 #ifdef TRlldSmall\r
81 #define TRlldDataPtr_t      unsigned char far *\r
82 #define TRlldWordDataPtr_t  unsigned short far *\r
83 #define TRlldDWordDataPtr_t     unsigned long far *\r
84 #else\r
85 #define TRlldDataPtr_t      unsigned char *\r
86 #define TRlldWordDataPtr_t  unsigned short *\r
87 #define TRlldDWordDataPtr_t     unsigned long *\r
88 #endif\r
89 \r
90 #ifdef __WATCOMC__\r
91 #define CDECL    _cdecl\r
92 #else\r
93 #define CDECL\r
94 #endif\r
95 \r
96 /*****************************************************************************/\r
97 /*                                                                           */\r
98 /* Firmware                                                                  */\r
99 /*                                                                           */\r
100 /*****************************************************************************/\r
101 \r
102 extern unsigned char TRlldMacCode[];       /* 3115,17,18,29,33,36,37 */\r
103 extern unsigned char TRlldHawkeyeMac[];    /* 3139,3140,3141,3250    */\r
104 extern unsigned char TRlldBullseyeMac[];   /* 3150,3540              */\r
105 \r
106 /*****************************************************************************/\r
107 /*                                                                           */\r
108 /* Maximal numbers of concurrent receive and transmit slots                  */\r
109 /*                                                                           */\r
110 /*****************************************************************************/\r
111 \r
112 #define TRLLD_MAX_RECEIVE        32\r
113 #define TRLLD_MAX_TRANSMIT       32\r
114 \r
115 /*****************************************************************************/\r
116 /*                                                                           */\r
117 /* Maximal frame sizes                                                       */\r
118 /*                                                                           */\r
119 /*****************************************************************************/\r
120 \r
121 #define TRLLD_MAXFRAME_100MBPS 18000\r
122 #define TRLLD_MAXFRAME_16MBPS  18000\r
123 #define TRLLD_MAXFRAME_4MBPS    4500\r
124 \r
125 /*****************************************************************************/\r
126 /*                                                                           */\r
127 /* TRlldStatus contains the adapter status used in a DriverStatus call-back. */\r
128 /*                                                                           */\r
129 /*****************************************************************************/\r
130 \r
131 struct OnWireInformation {\r
132         unsigned short RingStatus;\r
133         unsigned short Speed;\r
134         unsigned short AccessProtocol;\r
135         unsigned short Reserved;\r
136 };\r
137 \r
138 typedef struct TRlldStatus {\r
139     unsigned short Type;\r
140     unsigned char Closed;\r
141     unsigned char AccessProtocol;\r
142     unsigned short MaxFrameSize;\r
143     unsigned short Reserved;\r
144     union {\r
145         unsigned short OnWireRingStatus;        /* for compability */\r
146         unsigned short SelftestStatus;\r
147         unsigned short InitStatus;\r
148         unsigned short RingStatus;\r
149         unsigned short AdapterCheck[4];\r
150         unsigned short InternalError[4];\r
151         unsigned short PromRemovedCause;\r
152         unsigned short AdapterTimeout;\r
153         struct OnWireInformation OnWireInformation;\r
154     } Specification;\r
155 } TRlldStatus_t;\r
156 \r
157 /* values of TRlldStatus.Type */\r
158 \r
159 #define TRLLD_STS_ON_WIRE                0\r
160 #define TRLLD_STS_SELFTEST_STATUS        1\r
161 #define TRLLD_STS_INIT_STATUS            2\r
162 #define TRLLD_STS_RING_STATUS            3\r
163 #define TRLLD_STS_ADAPTER_CHECK          4\r
164 #define TRLLD_STS_PROMISCUOUS_STOPPED    5\r
165 #define TRLLD_STS_LLD_ERROR              6\r
166 #define TRLLD_STS_ADAPTER_TIMEOUT        7\r
167 \r
168 /* values of TRlldStatus.Closed */\r
169 \r
170 #define TRLLD_STS_STATUS_OK              0\r
171 #define TRLLD_STS_STATUS_CLOSED          1\r
172 \r
173 /* values of TRlldStatus.AccessProtocol */\r
174 \r
175 #define TRLLD_ACCESS_UNKNOWN             0\r
176 #define TRLLD_ACCESS_TKP                 1\r
177 #define TRLLD_ACCESS_TXI                 2\r
178 \r
179 /* values of TRlldStatus.SelftestStatus */\r
180 \r
181 #define TRLLD_ST_OK            0\r
182 #define TRLLD_ST_ERROR    0x0100       /* actual errors are 010x, where x is */\r
183                                        /* 0: Initial Test Error              */\r
184                                        /* 1: Adapter Software Checksum Error */\r
185                                        /* 2: Adapter RAM Error               */\r
186                                        /* 4: Instruction Test Error          */\r
187                                        /* 5: Protocol Handler/RI Hw Error    */\r
188                                        /* 6: System Interface Register Error */\r
189 \r
190 #define TRLLD_ST_TIMEOUT  0x0200       /* The adapter did not complete */\r
191                                        /* selftest after download      */\r
192 \r
193 /* values of TRlldStatus.Specification.InitStatus */\r
194 \r
195 /* the most likely cause of an init error (whatever the code) is a wrong */\r
196 /* physical or virtual address of the adapter block in TRlldAdapterInit  */\r
197 \r
198 #define TRLLD_INIT_ERROR       0x100   /* actual errors are 010x, where x is */\r
199                                        /* 1: Invalid init block (LLD error)  */\r
200                                        /* 2: Invalid options (LLD error)     */\r
201                                        /* 3: Invalid rcv burst (LLD error)   */\r
202                                        /* 4: Invalid xmt burst (LLD error)   */\r
203                                        /* 5: Invalid DMA threshold (LLDerror)*/\r
204                                        /* 6: Invalid scb addr                */\r
205                                        /* 7: Invalid ssb addr                */\r
206                                        /* 8: DIO parity error (HW error)     */\r
207                                        /* 9: DMA timeout (May be interrupt\r
208                                              failing if PIO mode or PCI2)    */\r
209                                        /* A: DMA parity error (HW error)     */\r
210                                        /* B: DMA bus error (HW error)        */\r
211                                        /* C: DMA data error                  */\r
212                                        /* D: Adapter check                   */\r
213 \r
214 #define TRLLD_INIT_TIMEOUT     0x200   /* adapter init did not complete      */\r
215 #define TRLLD_INIT_DMA_ERROR   0x300   /* adapter cannot access sys memory   */\r
216 #define TRLLD_INIT_INTR_ERROR  0x400   /* adapter cannot interrupt           */\r
217 #define TRLLD_OPEN_TIMEOUT     0x500   /* adapter open did not complete      */\r
218                                        /* within 30 seconds                  */\r
219 \r
220 #define TRLLD_OPEN_ERROR       0x600   /* actual errors are 06xx, where the  */\r
221                                        /* bits in x mean:                    */\r
222                                        /* 01: Invalid open options (LLDerror)*/\r
223                                        /* 04: TxBuffer count error (LLDerror)*/\r
224                                        /* 10: Buffer size error (LLD error)  */\r
225                                        /* 20: List size error (LLD error)    */\r
226                                        /* 40: Node address error             */\r
227 \r
228 #define TRLLD_OPEN_REPEAT      0x700   /* actual errors are 07xy, where      */\r
229                                        /* x is the open phase:               */\r
230                                        /* 1: Lobe media test                 */\r
231                                        /* 2: Physical Insertion              */\r
232                                        /* 3: Address verification            */\r
233                                        /* 4: Participation in ring poll      */\r
234                                        /* 5: Request Initialization          */\r
235                                        /* 9: Request registration (TXI)      */\r
236                                        /* A: Lobe Media Test (TXI)           */\r
237                                        /* B: Address verification (TXI)      */\r
238                                        /* y is the type of error:            */\r
239                                        /* 1: Function failure (No Cable ?)   */\r
240                                        /* 2: Signal loss                     */\r
241                                        /* 5: Timeout                         */\r
242                                        /* 6: Ring failure (TKP)              */\r
243                                        /* 6: Protocol error (TXI)            */\r
244                                        /* 7: Ring beaconing                  */\r
245                                        /* 8: Duplicate Node Address (TKP)    */\r
246                                        /* 8: Insert Denied (TXI)             */\r
247                                        /* 9: Request Initialization (TKP)    */\r
248                                        /* 9: Heart beat failure (TXI)        */\r
249                                        /* A: Remove received                 */\r
250                                        /* B: C-port address changed (TXI)    */\r
251                                        /* C: Wire Fault (TKP)                */\r
252                                        /* D: Auto Speed, 1. on ring (TKP)    */\r
253                                        /* E: Speed sense failed              */\r
254 \r
255 /* When opening with FORCE_TXI and only classic token ring attachment is     */\r
256 /* possible, the error is Request Registration/Timeout or 0x795              */\r
257 \r
258 #define TRLLD_OPEN_1ST_ON_RING  0x800  /* Speed sense is active, but no other*/\r
259                                        /* station is present to set the speed*/\r
260 \r
261 \r
262 /* values of TRlldStatus.Specification.RingStatus */\r
263 \r
264 #define TRLLD_RS_SIGNAL_LOSS        0x8000\r
265 #define TRLLD_RS_HARD_ERROR         0x4000\r
266 #define TRLLD_RS_SOFT_ERROR         0x2000\r
267 #define TRLLD_RS_TRANSMIT_BEACON    0x1000\r
268 #define TRLLD_RS_LOBE_WIRE_FAULT    0x0800\r
269 #define TRLLD_RS_AUTO_REMOVAL_ERROR 0x0400\r
270 #define TRLLD_RS_REMOVE_RECEIVED    0x0100\r
271 #define TRLLD_RS_COUNTER_OVERFLOW   0x0080\r
272 #define TRLLD_RS_SINGLE_STATION     0x0040\r
273 #define TRLLD_RS_RING_RECOVERY      0x0020\r
274 \r
275 /* values of TRlldStatus.Specification.AdapterCheck */\r
276 /* MISSING */\r
277 \r
278 /* values of TRlldStatus.Specification.PromRemovedCause */\r
279 \r
280 #define TRLLD_PROM_REMOVE_RECEIVED    1\r
281 #define TRLLD_PROM_POLL_FAILURE       2\r
282 #define TRLLD_PROM_BUFFER_SIZE        3\r
283 \r
284 /* values of TRlldStatus.Specification.InternalError */\r
285 \r
286 #define TRLLD_INTERNAL_PIO   1        /* A PIO transfer to or from adapter  */\r
287                                       /* did not complete                   */\r
288 #define TRLLD_INTERNAL_TX    2        /* Trouble with clean up of tx frames */\r
289 #define TRLLD_INTERNAL_RX    3        /* Trouble with clean up of receive   */\r
290                                       /* fragments                          */\r
291 #define TRLLD_INTERNAL_CMD   4        /* error response from adapter        */\r
292 #define TRLLD_INTERNAL_STATE 5        /* event happened in unexpected state */\r
293 \r
294 /* values of TRlldStatus.Specification.AdapterTimeout */\r
295 \r
296 #define TRLLD_COMMAND_TIMEOUT    1\r
297 #define TRLLD_TRANSMIT_TIMEOUT   2\r
298 #define TRLLD_INTERRUPT_TIMEOUT  3\r
299 \r
300 \r
301 /*****************************************************************************/\r
302 /*                                                                           */\r
303 /* TRlldStatistics contains the adapter statistics returned to Driver        */\r
304 /* in TRlldStatistics calls and DriverStatistics call-backs                  */\r
305 /*                                                                           */\r
306 /*****************************************************************************/\r
307 \r
308 typedef struct TRlldStatistics {\r
309     unsigned long LineErrors;\r
310     unsigned long InternalErrors;       /* Not maintained by TMS based boards */\r
311     unsigned long BurstErrors;\r
312     unsigned long ARIFCIErrors;\r
313     unsigned long AbortDelimiters;      /* Not maintained by TMS based boards */\r
314     unsigned long LostFrames;\r
315     unsigned long CongestionErrors;\r
316     unsigned long FrameCopiedErrors;\r
317     unsigned long FrequencyErrors;      /* Not maintained by TMS based boards */\r
318     unsigned long TokenErrors;\r
319     unsigned long DMABusErrors;         /* Not maintained by 3139 */\r
320     unsigned long DMAParityErrors;      /* Not maintained by 3139 */\r
321     unsigned long ReceiveLongFrame;     /* Not maintained by TMS based boards */\r
322     unsigned long ReceiveCRCErrors;     /* Not maintained by TMS based boards */\r
323     unsigned long ReceiveOverflow;      /* Not maintained by TMS based boards */\r
324     unsigned long TransmitUnderrun;     /* Not maintained by TMS based boards */\r
325         unsigned long UnderrunLock;                     /* Not maintained by TMS based boards */\r
326         unsigned long OverflowReset;\r
327     unsigned char UpstreamNeighbour[6];\r
328     unsigned short RingNumber;\r
329     unsigned char BeaconingUpstreamNeighbour[6];\r
330     unsigned short padding;\r
331 } TRlldStatistics_t;\r
332 \r
333 \r
334 /*****************************************************************************/\r
335 /*                                                                           */\r
336 /* TRlldDriver contains the Driver call-backs                                */\r
337 /*                                                                           */\r
338 /*****************************************************************************/\r
339 \r
340 typedef struct TRlldDriver {\r
341     unsigned long TRlldVersion;\r
342 #ifndef TRlldInlineIO\r
343     void (CDECL * DriverOutByte)(unsigned short IOAddress,\r
344                                  unsigned char Value);\r
345     void (CDECL * DriverOutWord)(unsigned short IOAddress,\r
346                                  unsigned short Value);\r
347     void (CDECL * DriverOutDWord)(unsigned short IOAddress,\r
348                                   unsigned long Value);\r
349     void (CDECL * DriverRepOutByte)(unsigned short IOAddress,\r
350                                     TRlldDataPtr_t DataPointer,\r
351                                     int ByteCount);\r
352     void (CDECL * DriverRepOutWord)(unsigned short IOAddress,\r
353                                     TRlldWordDataPtr_t DataPointer,\r
354                                     int WordCount);\r
355     void (CDECL * DriverRepOutDWord)(unsigned short IOAddress,\r
356                                      TRlldDWordDataPtr_t DataPointer,\r
357                                      int DWordCount);\r
358     unsigned char (CDECL * DriverInByte)(unsigned short IOAddress);\r
359     unsigned short (CDECL * DriverInWord)(unsigned short IOAddress);\r
360     unsigned long (CDECL * DriverInDWord)(unsigned short IOAddress);\r
361     void (CDECL * DriverRepInByte)(unsigned short IOAddress,\r
362                                    TRlldDataPtr_t DataPointer,\r
363                                    int ByteCount);\r
364     void (CDECL * DriverRepInWord)(unsigned short IOAddress,\r
365                                    TRlldWordDataPtr_t DataPointer,\r
366                                    int WordCount);\r
367     void (CDECL * DriverRepInDWord)(unsigned short IOAddress,\r
368                                     TRlldDWordDataPtr_t DataPointer,\r
369                                     int DWordCount);\r
370 #endif\r
371     void (CDECL * DriverSuspend)(unsigned short MicroSeconds);\r
372     void (CDECL * DriverStatus)(void * DriverHandle,\r
373                                 TRlldStatus_t * Status);\r
374     void (CDECL * DriverCloseCmpltd)(void * DriverHandle);\r
375     void (CDECL * DriverStatistics)(void * DriverHandle,\r
376                                     TRlldStatistics_t * Statistics);\r
377     void (CDECL * DriverTxFrameCmpltd)(void * DriverHandle,\r
378                                        void * FrameHandle,\r
379                                        int TxStatus);\r
380     void (CDECL * DriverRcvFrameCmpltd)(void * DriverHandle,\r
381                                         int ByteCount,\r
382                                         int FragmentCount,\r
383                                         void * FragmentHandle,\r
384                                         int RcvStatus);\r
385 } TRlldDriver_t;\r
386 \r
387 /* Version and model control */\r
388 \r
389 #define TRLLD_VERSION_INLINEIO    0x8000\r
390 #define TRLLD_VERSION_SMALL       0x4000\r
391 #ifdef TRlldInlineIO\r
392 #ifdef TRlldSmall\r
393 #define TRLLD_VERSION    0x4120\r
394 #else\r
395 #define TRLLD_VERSION    0x0120\r
396 #endif\r
397 #else\r
398 #ifdef TRlldSmall\r
399 #define TRLLD_VERSION    0xC120\r
400 #else\r
401 #define TRLLD_VERSION    0x8120\r
402 #endif\r
403 #endif\r
404 \r
405 \r
406 /*****************************************************************************/\r
407 /*                                                                           */\r
408 /* TRlldAdapterConfig contains the properties found for an adapter           */\r
409 /* used when finding and defining adapters to use                            */\r
410 /*                                                                           */\r
411 /*****************************************************************************/\r
412 \r
413 \r
414 struct pnp_id {\r
415     unsigned short vendor;\r
416     unsigned short device;\r
417 };\r
418 \r
419 struct pci_id {\r
420     unsigned short vendor;\r
421     unsigned short device;\r
422     unsigned char revision;\r
423     unsigned char reserved_byte;\r
424     unsigned short reserved_word;\r
425 };\r
426 \r
427 struct pcmcia_id {\r
428     /* unknown as yet */\r
429     unsigned char x;\r
430 };\r
431 \r
432 struct pci_slot {\r
433     unsigned short bus_no;\r
434     unsigned short device_no;\r
435 };\r
436 \r
437 struct pcmcia_socket {\r
438     /* unknown as yet */\r
439     unsigned char x;\r
440 };\r
441 \r
442 typedef struct TRlldAdapterConfig {\r
443     unsigned char type;\r
444     unsigned char bus;\r
445     unsigned short magic;\r
446     union {\r
447         struct pnp_id pnp;\r
448         unsigned long eisa;\r
449         unsigned short mca;\r
450         struct pci_id pci;\r
451         struct pcmcia_id pcmcia;\r
452     } id;\r
453     union {\r
454         unsigned short csn;\r
455         unsigned short eisa;\r
456         unsigned short mca;\r
457         struct pci_slot pci;\r
458         struct pcmcia_socket pcmcia;\r
459     } slot;\r
460     unsigned short iobase0;\r
461     unsigned short iolength0;\r
462     unsigned short iobase1;\r
463     unsigned short iolength1;\r
464     unsigned long memorybase;\r
465     unsigned short memorylength;\r
466     unsigned char mode;\r
467     unsigned char xmode;\r
468     unsigned char interruptlevel;\r
469     unsigned char dmalevel;\r
470     unsigned char macaddress[6];\r
471     unsigned long prombase;\r
472     unsigned char speed;\r
473     unsigned char cachelinesize;\r
474     unsigned short pcicommand;\r
475         unsigned char mactype;\r
476         unsigned char reserved[3];\r
477 } TRlldAdapterConfig_t;\r
478 \r
479 /* values of TRlldAdapterConfig.Type */\r
480 \r
481 #define TRLLD_ADAPTER_XT            0        /* not supported             */\r
482 #define TRLLD_ADAPTER_ISA1          1        /* OC-3115                   */\r
483 #define TRLLD_ADAPTER_ISA2          2        /* OC-3117                   */\r
484 #define TRLLD_ADAPTER_ISA3          3        /* OC-3118                   */\r
485 #define TRLLD_ADAPTER_MCA1          4        /* OC-3129 id A84            */\r
486 #define TRLLD_ADAPTER_MCA2          5        /* OC-3129 id A85            */\r
487 #define TRLLD_ADAPTER_MCA3          6        /* OC-3129 id A86            */\r
488 #define TRLLD_ADAPTER_EISA1         7        /* OC-3133 id 0109833D       */\r
489 #define TRLLD_ADAPTER_EISA2         8        /* OC-3133 id 0209833D       */\r
490 #define TRLLD_ADAPTER_EISA3         9        /* OC-3135 not supported     */\r
491 #define TRLLD_ADAPTER_PCI1         10        /* OC-3136 id 108d0001 rev 1 */\r
492 #define TRLLD_ADAPTER_PCI2         11        /* OC-3136 id 108d0001 rev 2 */\r
493 #define TRLLD_ADAPTER_PCI3         12        /* OC-3137 id 108d0001 rev 3 */\r
494 #define TRLLD_ADAPTER_PCI4         13        /* OC-3139 id 108d0004 rev 2 */\r
495 #define TRLLD_ADAPTER_PCI5         14        /* OC-3140 id 108d0004 rev 3 */\r
496 #define TRLLD_ADAPTER_PCI6         15        /* OC-3141 id 108d0007 rev 1 */\r
497 #define TRLLD_ADAPTER_PCI7         19        /* OC-3540 id 108d0008 rev 1 */\r
498 #define TRLLD_ADAPTER_PCI8         20        /* OC-3150 id 108d000a rev 1 */\r
499 #ifdef PCMCIA\r
500 #define TRLLD_ADAPTER_PCCARD1      16        /* OC-3220                   */\r
501 #define TRLLD_ADAPTER_PCCARD2      17        /* OC-3221,OC-3230,OC-3232   */\r
502 #endif\r
503 #define TRLLD_ADAPTER_PCCARD3      18        /* OC-3250 id 108d0005 rev 1 */\r
504 \r
505 /* values of TRlldAdapterConfig.Bus */\r
506 \r
507 #define TRLLD_BUS_ISA           1\r
508 #define TRLLD_BUS_EISA          2\r
509 #define TRLLD_BUS_MCA           3\r
510 #define TRLLD_BUS_PCI           4\r
511 #define TRLLD_BUS_PCMCIA        5\r
512 \r
513 /* values of TRlldAdapterConfig.mode */\r
514 \r
515 #define TRLLD_MODE_16M             0x01  /* needs data buffers below 16 M     */\r
516 #define TRLLD_MODE_PHYSICAL        0x02  /* needs valid physical addresses    */\r
517 #define TRLLD_MODE_FIXED_CFG       0x04  /* cannot be reconfigured            */\r
518 #define TRLLD_MODE_SHORT_SLOT      0x08  /* in short ISA slot, cannot use DMA */\r
519 #define TRLLD_MODE_CANNOT_DISABLE  0x10  /* can not disable interrupt         */\r
520 #define TRLLD_MODE_SHARE_INTERRUPT 0x20  /* may share interrupt               */\r
521 #define TRLLD_MODE_MEMORY          0x40  /* is configured with a memory window*/\r
522 \r
523 /* values of TRlldAdapterConfig.dma */\r
524 \r
525 #define TRLLD_DMA_PIO      4       /* other values signifies the DMA channel */\r
526 #define TRLLD_DMA_MASTER   0xff    /* to use                                 */\r
527 \r
528 /* values of TRlldAdapterConfig.mactype */\r
529 \r
530                                    /* download with:   */\r
531 #define TRLLD_MAC_TMS       1      /* TRlldMACCode     */\r
532 #define TRLLD_MAC_HAWKEYE   2      /* TRlldHawkeyeMAC  */\r
533 #define TRLLD_MAC_BULLSEYE  3      /* TRlldBullseyeMAC */\r
534 \r
535 \r
536 typedef void * TRlldAdapter_t;\r
537 typedef void * TRlldAdapterType_t;\r
538 \r
539 #ifndef MAX_FRAGMENTS\r
540 #define MAX_FRAGMENTS 32\r
541 #endif\r
542 \r
543 typedef struct TRlldTransmit {\r
544     unsigned short FragmentCount;\r
545     unsigned short TRlldTransmitReserved;\r
546     struct TRlldTransmitFragment {\r
547         unsigned long PhysicalAddress;\r
548         TRlldDataPtr_t VirtualAddress;\r
549         unsigned short count;\r
550         unsigned short TRlldTransmitFragmentReserved;\r
551     } TransmitFragment[MAX_FRAGMENTS];\r
552 } TRlldTransmit_t;\r
553 \r
554 int CDECL TRlldAdapterSize(void);\r
555 \r
556 int CDECL TRlldInit(int TypeCount,\r
557                     TRlldAdapterType_t * AdapterTypeTable);\r
558 \r
559 extern TRlldAdapterType_t CDECL TRlld3115;    /* ISA adapters */\r
560 extern TRlldAdapterType_t CDECL TRlld3117;\r
561 extern TRlldAdapterType_t CDECL TRlld3118;\r
562 extern TRlldAdapterType_t CDECL TRlld3129;    /* MCA adapters */\r
563 extern TRlldAdapterType_t CDECL TRlld3133;    /* EISA adapters */\r
564 extern TRlldAdapterType_t CDECL TRlld3136;    /* PCI adapters */\r
565 extern TRlldAdapterType_t CDECL TRlld3137;\r
566 extern TRlldAdapterType_t CDECL TRlld3139;    /* Hawkeye adapters */\r
567 extern TRlldAdapterType_t CDECL TRlld3540;    /* Bullseye adapters */\r
568 \r
569 #define T3115   &TRlld3115\r
570 #define T3117   &TRlld3117\r
571 #define T3118   &TRlld3118\r
572 #define T3129   &TRlld3129\r
573 #define T3133   &TRlld3133\r
574 #define T3136   &TRlld3136\r
575 #define T3137   &TRlld3137\r
576 #define T3139   &TRlld3139\r
577 #define T3540   &TRlld3540\r
578 \r
579 /* Only for Boot Prom Page Zero code */\r
580 \r
581 extern TRlldAdapterType_t CDECL TRlld3115Boot;    /* ISA adapters */\r
582 extern TRlldAdapterType_t CDECL TRlld3117Boot;\r
583 extern TRlldAdapterType_t CDECL TRlld3118Boot;\r
584 extern TRlldAdapterType_t CDECL TRlld3129Boot;    /* MCA adapters */\r
585 extern TRlldAdapterType_t CDECL TRlld3133Boot;    /* EISA adapters */\r
586 extern TRlldAdapterType_t CDECL TRlld3136Boot;    /* PCI adapters */\r
587 extern TRlldAdapterType_t CDECL TRlld3137Boot;\r
588 extern TRlldAdapterType_t CDECL TRlld3139Boot;    /* Hawkeye adapters */\r
589 extern TRlldAdapterType_t CDECL TRlld3150Boot;\r
590 extern TRlldAdapterType_t CDECL TRlld3250Boot;\r
591 extern TRlldAdapterType_t CDECL TRlld3540Boot;    /* Bullseye adapter */\r
592 \r
593 #define B3115   &TRlld3115Boot\r
594 #define B3117   &TRlld3117Boot\r
595 #define B3118   &TRlld3118Boot\r
596 #define B3129   &TRlld3129Boot\r
597 #define B3133   &TRlld3133Boot\r
598 #define B3136   &TRlld3136Boot\r
599 #define B3137   &TRlld3137Boot\r
600 #define B3139   &TRlld3139Boot\r
601 #define B3150   &TRlld3150Boot\r
602 #define B3250   &TRlld3250Boot\r
603 #define B3540   &TRlld3540Boot\r
604 \r
605 #define TRLLD_INIT_OK           0\r
606 #define TRLLD_INIT_UNKNOWN      5\r
607 \r
608 int CDECL TRlldAdapterInit(TRlldDriver_t * DriverDefinition,\r
609                            TRlldAdapter_t * TRlldAdapter,\r
610                            unsigned long TRlldAdapterPhysical,\r
611                            void * DriverHandle,\r
612                            TRlldAdapterConfig_t * config);\r
613 \r
614 #define TRLLD_INIT_OK           0\r
615 #define TRLLD_INIT_NOT_FOUND    1\r
616 #define TRLLD_INIT_UNSUPPORTED  2\r
617 #define TRLLD_INIT_PHYS16       3\r
618 #define TRLLD_INIT_VERSION      4\r
619 \r
620 int CDECL TRlldSetSpeed(TRlldAdapter_t * adapter,\r
621                         unsigned char speed);\r
622 \r
623 #define TRLLD_SPEED_4MBPS      4\r
624 #define TRLLD_SPEED_16MBPS    16\r
625 #define TRLLD_SPEED_100MBPS  100\r
626 \r
627 int CDECL TRlldSetInterrupt(TRlldAdapter_t * adapter,\r
628                             unsigned char interruptlevel);\r
629 \r
630 int CDECL TRlldSetDMA(TRlldAdapter_t * adapter,\r
631                       unsigned char dma, unsigned char * mode);\r
632 \r
633 #define TRLLD_CONFIG_OK       0\r
634 #define TRLLD_CONFIG_STATE    1\r
635 #define TRLLD_CONFIG_ILLEGAL  2\r
636 #define TRLLD_CONFIG_FAILED   3\r
637 \r
638 int CDECL TRlldSetSpecial(TRlldAdapter_t * adapter,\r
639                           unsigned short param1, unsigned short param2,\r
640                           unsigned short param3, unsigned short param4);\r
641 \r
642 int CDECL TRlldAddMemory(TRlldAdapter_t * adapter,\r
643                          TRlldDataPtr_t virtual,\r
644                          unsigned long physical,\r
645                          long size);\r
646 \r
647 int CDECL TRlldDisable(TRlldAdapter_t * adapter);\r
648 \r
649 #define TRLLD_OK             0\r
650 #define TRLLD_NOT_SUPPORTED  1\r
651 \r
652 void CDECL TRlldEnable(TRlldAdapter_t * adapter);\r
653 \r
654 int CDECL TRlldInterruptPresent(TRlldAdapter_t * adapter);\r
655 \r
656 #define TRLLD_NO_INTERRUPT  0\r
657 #define TRLLD_INTERRUPT     1\r
658 \r
659 int CDECL TRlldInterruptService(TRlldAdapter_t * adapter);\r
660 \r
661 int CDECL TRlldInterruptPreService(TRlldAdapter_t * adapter);\r
662 \r
663 void CDECL TRlldInterruptPostService(TRlldAdapter_t * adapter);\r
664 \r
665 \r
666 int CDECL TRlldPoll(TRlldAdapter_t * adapter);\r
667 \r
668 int CDECL TRlldDownload(TRlldAdapter_t * adapter,\r
669                         char * DownLoadCode);\r
670 \r
671 #define TRLLD_DOWNLOAD_OK     0\r
672 #define TRLLD_DOWNLOAD_ERROR  1\r
673 #define TRLLD_STATE           2\r
674 \r
675 typedef int (CDECL * GetCode_t)(void * handle, unsigned char * maccodebyte);\r
676 \r
677 int CDECL TRlldStreamDownload(TRlldAdapter_t * adapter,\r
678                               GetCode_t procedure, void * handle);\r
679 \r
680 int CDECL TRlldOpen(TRlldAdapter_t * adapter,\r
681                     unsigned char * MACAddress,\r
682                     unsigned long GroupAddress,\r
683                     unsigned long FunctionalAddress,\r
684                     unsigned short MaxFrameSize,\r
685                     unsigned short OpenModes);\r
686 \r
687 #define TRLLD_OPEN_OK             0\r
688 #define TRLLD_OPEN_STATE          1\r
689 #define TRLLD_OPEN_ADDRESS_ERROR  2\r
690 #define TRLLD_OPEN_MODE_ERROR     3\r
691 #define TRLLD_OPEN_MEMORY         4\r
692 \r
693 #define TRLLD_MODE_TX_STATUS      0x01\r
694 #define TRLLD_MODE_RX_SINGLE      0x02\r
695 #define TRLLD_MODE_FORCE_TKP      0x04\r
696 #define TRLLD_MODE_FORCE_TXI      0x08\r
697 #define TRLLD_MODE_TX_CRC         0x10\r
698 \r
699 void CDECL TRlldClose(TRlldAdapter_t * adapter, int immediate);\r
700 \r
701 void CDECL TRlldSetGroupAddress(TRlldAdapter_t * adapter,\r
702                                 unsigned long GroupAddress);\r
703 \r
704 void CDECL TRlldSetFunctionalAddress(TRlldAdapter_t * adapter,\r
705                                      unsigned long FunctionalAddress);\r
706 \r
707 void CDECL TRlldSetPromiscuousMode(TRlldAdapter_t * adapter,\r
708                                    unsigned char mode);\r
709 \r
710 /* mode bits */\r
711 \r
712 #define TRLLD_PROM_LLC          1\r
713 #define TRLLD_PROM_MAC          2\r
714 #define TRLLD_PROM_ERRORFRAMES  4\r
715 \r
716 int CDECL TRlldGetStatistics(TRlldAdapter_t * adapter,\r
717                              TRlldStatistics_t * statistics,\r
718                              int immediate);\r
719 \r
720 #define TRLLD_IMMEDIATE_STATISTICS  1\r
721 \r
722 #define TRLLD_STATISTICS_RETRIEVED  0\r
723 #define TRLLD_STATISTICS_PENDING    1\r
724 \r
725 int CDECL TRlldTransmitFrame(TRlldAdapter_t * adapter,\r
726                              TRlldTransmit_t * TransmitFrame,\r
727                              void * FrameHandle);\r
728 \r
729 #define TRLLD_TRANSMIT_OK        0\r
730 #define TRLLD_TRANSMIT_NOT_OPEN  1\r
731 #define TRLLD_TRANSMIT_TOO_MANY  2\r
732 #define TRLLD_TRANSMIT_MAX16     3\r
733 #define TRLLD_TRANSMIT_SIZE      4\r
734 #define TRLLD_TRANSMIT_EMPTY     5\r
735 \r
736 /* completion flags */\r
737 \r
738 #define TRLLD_TX_OK              0\r
739 #define TRLLD_TX_NOT_PROCESSED   1\r
740 #define TRLLD_TX_NOT_RECOGNIZED  2\r
741 #define TRLLD_TX_NOT_COPIED      3\r
742 \r
743 /* number of free transmit fragments */\r
744 \r
745 int CDECL TRlldTransmitFree(TRlldAdapter_t * adapter);\r
746 \r
747 int CDECL TRlldReceiveFragment(TRlldAdapter_t * adapter,\r
748                                TRlldDataPtr_t FragmentStart,\r
749                                unsigned long FragmentPhysical,\r
750                                int count,\r
751                                void * FragmentHandle);\r
752 \r
753 #define TRLLD_RECEIVE_OK        0\r
754 #define TRLLD_RECEIVE_NOT_OPEN  1\r
755 #define TRLLD_RECEIVE_TOO_MANY  2\r
756 #define TRLLD_RECEIVE_SIZE      3\r
757 #define TRLLD_RECEIVE_MAX16     4\r
758 \r
759 /* completion flags */\r
760 \r
761 #define TRLLD_RCV_OK       0\r
762 #define TRLLD_RCV_NO_DATA  1\r
763 #define TRLLD_RCV_ERROR    2    /* Only when TRLLD_PROM_ERRORFRAMES */\r
764 #define TRLLD_RCV_LONG     3\r
765 \r
766 /* number of free receive fragments */\r
767 \r
768 int CDECL TRlldReceiveFree(TRlldAdapter_t * adapter);\r
769 \r
770 int CDECL TRlldFind(TRlldDriver_t * driver,\r
771                     TRlldAdapterConfig_t * config_table,\r
772                     unsigned long type_mask,\r
773                     int max);\r
774 \r
775 /* type mask bits */\r
776 \r
777 #define OC_3115            0x0001\r
778 #define OC_3117            0x0002\r
779 #define OC_3118            0x0004\r
780 #define OC_3129            0x0008\r
781 #define OC_3133            0x0010\r
782 #define OC_3136            0x0040\r
783 #define OC_3137            0x0080\r
784 #define OC_3139            0x0100\r
785 #define OC_3140            0x0200\r
786 #define OC_3141            0x0400\r
787 #define OC_3540            0x0800\r
788 #define OC_3150            0x1000\r
789 \r
790 #ifdef PCMCIA\r
791 #define OC_3220            0x0800\r
792 #define OC_3221            0x1000\r
793 #define OC_3230            0x2000\r
794 #define OC_3232            0x4000\r
795 #endif\r
796 \r
797 #define OC_3250            0x8000\r
798 \r
799 int CDECL TRlldIOAddressConfig(TRlldDriver_t * driver,\r
800                                TRlldAdapterConfig_t * config,\r
801                                unsigned short address);\r
802 \r
803 \r
804 #define TRLLD_FIND_OK        1\r
805 #define TRLLD_FIND_ERROR     0\r
806 #define TRLLD_FIND_VERSION  -1\r
807 \r
808 int CDECL TRlldEISASlotConfig(TRlldDriver_t * driver,\r
809                               TRlldAdapterConfig_t * config,\r
810                               int slot);\r
811 \r
812 int CDECL TRlldMCASlotConfig(TRlldDriver_t * driver,\r
813                              TRlldAdapterConfig_t * config,\r
814                              int slot);\r
815 \r
816 int CDECL TRlldPCIConfig(TRlldDriver_t * driver,\r
817                          TRlldAdapterConfig_t * config,\r
818                          char * PCIConfigurationSpace);\r
819 \r
820 #define TRLLD_PCICONFIG_OK           0\r
821 #define TRLLD_PCICONFIG_FAIL         1\r
822 #define TRLLD_PCICONFIG_SET_COMMAND  2\r
823 #define TRLLD_PCICONFIG_VERSION      3\r
824 \r
825 \r
826 int CDECL TRlldFindPCI(TRlldDriver_t * driver,\r
827                        TRlldAdapterConfig_t * config_table,\r
828                        unsigned long type_mask,\r
829                        int max);\r
830 \r
831 #ifdef PCMCIA\r
832 typedef void * PCCardHandle_t;\r
833 \r
834 typedef int (CDECL * GetTupleData_t)(PCCardHandle_t handle,\r
835                                      unsigned short TupleIdent,\r
836                                      char * TupleData,\r
837                                      int length);\r
838 \r
839 int CDECL TRlldPCCardConfig(TRlldDriver_t * driver,\r
840                             TRlldAdapterConfig_t * config,\r
841                             unsigned short address,\r
842                             int irq,\r
843                             GetTupleData_t GetTuple,\r
844                             PCCardHandle_t handle);\r
845 \r
846 #define TRLLD_PCCARD_CONFIG_OK    0\r
847 #define TRLLD_PCCARD_CONFIG_FAIL  1\r
848 #endif\r
849 \r
850 /* Boot Prom Support */\r
851 \r
852 typedef struct TRlldPromInfo {\r
853         unsigned short PromIdent;\r
854         short PromPages;\r
855         short PromPageSize;\r
856 } TRlldPromInfo_t;\r
857 \r
858 int CDECL TRlldMapBootProm(TRlldAdapter_t * adapter,\r
859                            TRlldDataPtr_t prompointer);\r
860 \r
861 #define TRLLD_PROM_OK           0\r
862 #define TRLLD_PROM_FAILED       3\r
863 \r
864 int CDECL TRlldGetPromInfo(TRlldAdapter_t * adapter, TRlldPromInfo_t * info);\r
865 \r
866 #define TRLLD_PROM_OK           0\r
867 #define TRLLD_PROM_NOT_MOUNTED  1\r
868 #define TRLLD_PROM_NOT_MAPPED   2\r
869 \r
870 void CDECL TRlldSetPromPage(TRlldAdapter_t * adapter, int page);\r
871 \r
872 int CDECL TRlldSetMemoryUse(TRlldAdapter_t * adapter, int use);\r
873 \r
874 #define TRLLD_PROM_TO_MEMORY       0\r
875 #define TRLLD_REGISTERS_TO_MEMORY  1\r
876 \r
877 #define TRLLD_MEMORY_USE_OK         0\r
878 #define TRLLD_MEMORY_USE_NO_MEMORY  1\r
879 #define TRLLD_MEMORY_USE_STATE      2\r
880 #define TRLLD_MEMORY_USE_ILLEGAL    3\r
881 \r
882 int CDECL TRlldPromErase(TRlldAdapter_t * adapter,\r
883                          void (CDECL * delay)(int milliseconds));\r
884 \r
885 #define TRLLD_PROM_OK           0\r
886 #define TRLLD_PROM_NOT_MOUNTED  1\r
887 #define TRLLD_PROM_NOT_MAPPED   2\r
888 #define TRLLD_PROM_FAILED       3\r
889 \r
890 int CDECL TRlldPromWrite(TRlldAdapter_t * adapter, char * data,\r
891                          int offset, int count);\r
892 \r
893 #define TRLLD_PROM_OK           0\r
894 #define TRLLD_PROM_NOT_MOUNTED  1\r
895 #define TRLLD_PROM_NOT_MAPPED   2\r
896 #define TRLLD_PROM_FAILED       3\r
897 #define TRLLD_PROM_ILLEGAL      4\r
898 \r
899 void CDECL TRlldEmergency(TRlldAdapter_t * adapter);\r
900 \r
901 /* Convert from TRlldAdapterConfig.type to name string */\r
902 char * CDECL TRlldAdapterName(int type);\r
903 #endif\r