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