source: rtems/c/src/lib/libbsp/i386/i386ex/network/uti596.h @ 5c7f274

4.104.114.84.95
Last change on this file since 5c7f274 was f05b2ac, checked in by Ralf Corsepius <ralf.corsepius@…>, on 04/21/04 at 16:01:48

Remove duplicate white lines.

  • Property mode set to 100644
File size: 7.0 KB
Line 
1
2/* uti596.h: Contains the defines and structures used by the uti596 driver */
3
4/*
5 * EII: March 11: Created v. 0.0
6 *      Jan 12/98 Added STAT bits, s11-=s5 and max_colls.
7 *
8 *  $Id$
9 */
10
11#ifndef UTI596_H
12#define UTI596_H
13#include <rtems/error.h>
14#include <rtems/rtems_bsdnet.h>
15
16#include <sys/param.h>
17#include <sys/mbuf.h>
18#include <sys/socket.h>
19#include <sys/sockio.h>
20
21#include <net/if.h>
22
23#include <netinet/in.h>
24#include <netinet/if_ether.h>
25
26/* Ethernet statistics */
27
28struct enet_statistics{
29  int   rx_packets;                     /* total packets received       */
30  int   tx_packets;                     /* total packets transmitted    */
31  int   rx_errors;                      /* bad packets received         */
32  int   tx_errors;                      /* packet transmit problems     */
33  int   rx_dropped;                     /* no space in buffers          */
34  int   tx_dropped;                     /*                              */
35  int   tx_retries_exceeded;              /* excessive retries            */
36  int   multicast;                      /* multicast packets received   */
37  int   collisions;
38
39  /* detailed rx_errors: */
40  int   rx_length_errors;
41  int   rx_over_errors;                 /* receiver ring buff overflow  */
42  int   rx_crc_errors;                  /* recved pkt with crc error    */
43  int   rx_frame_errors;                /* recv'd frame alignment error */
44  int   rx_fifo_errors;                 /* recv'r fifo overrun          */
45  int   rx_missed_errors;               /* receiver missed packet       */
46
47  /* detailed tx_errors */
48  int   tx_aborted_errors;
49  int   tx_carrier_errors;
50  int   tx_fifo_errors;
51  int   tx_heartbeat_errors;
52  int   tx_window_errors;
53
54  /* NIC reset errors */
55  int   nic_reset_count;      /* The number of times uti596reset() has been called. */
56};
57
58enum commands {
59  CmdNOp           = 0,
60  CmdSASetup       = 1,
61  CmdConfigure     = 2,
62  CmdMulticastList = 3,
63  CmdTx            = 4,
64  CmdTDR           = 5,
65  CmdDump          = 6,
66  CmdDiagnose      = 7
67};
68
69#define UTI596_MUTEX   1
70
71#define CMD_EOL         0x8000  /* The last command of the list, stop. */
72#define CMD_SUSP        0x4000  /* Suspend after doing cmd. */
73#define CMD_INTR        0x2000  /* Interrupt after doing cmd. */
74
75#define CMD_FLEX        0x0008  /* Enable flexible memory model */
76
77#define SCB_STAT_CX     0x8000  /* Cmd completes with 'I' bit set */
78#define SCB_STAT_FR     0x4000  /* Frame Received                 */
79#define SCB_STAT_CNA    0x2000  /* Cmd unit Not Active            */
80#define SCB_STAT_RNR    0x1000  /* Receiver Not Ready             */
81
82#define SCB_CUS_SUSPENDED 0x0100
83#define SCB_CUS_ACTIVE    0x0200
84
85#define STAT_C          0x8000  /* Set to 1 after execution              */
86#define STAT_B          0x4000  /* 1 : Cmd being executed, 0 : Cmd done. */
87#define STAT_OK         0x2000  /* 1: Command executed ok 0 : Error      */
88#define STAT_A          0x1000  /* command has been aborted              */
89
90#define STAT_S11        0x0800
91#define STAT_S10        0x0400
92#define STAT_S9         0x0200
93#define STAT_S8         0x0100
94#define STAT_S7         0x0080
95#define STAT_S6         0x0040
96#define STAT_S5         0x0020
97#define STAT_MAX_COLLS  0x000F
98
99#define RBD_STAT_P      0x4000  /* prefetch */
100#define RBD_STAT_F      0x4000  /* used */
101
102#define  CUC_START      0x0100
103#define  CUC_RESUME     0x0200
104#define  CUC_SUSPEND    0x0300
105#define  CUC_ABORT      0x0400
106#define  RX_START       0x0010
107#define  RX_RESUME      0x0020
108#define  RX_SUSPEND     0x0030
109#define  RX_ABORT       0x0040
110
111#define  RU_SUSPENDED    0x0010
112#define  RU_NO_RESOURCES 0x0020
113#define  RU_READY        0x0040
114
115#define IO_ADDR         0x360
116#define PORT_ADDR       IO_ADDR
117#define CHAN_ATTN       PORT_ADDR + 4
118#define NIC_ADDR        PORT_ADDR + 8
119
120struct i596_cmd {
121    volatile unsigned short status;
122    volatile unsigned short command;
123    struct i596_cmd *next;
124};
125
126#define I596_NULL ( ( void * ) 0xffffffff)
127#define UTI_596_END_OF_FRAME            0x8000
128#define SIZE_MASK       0x3fff
129
130/*
131 * Transmit buffer Descriptor
132 */
133
134struct i596_tbd {
135    unsigned short size;
136    unsigned short pad;
137    struct i596_tbd *next;
138    char *data;
139};
140
141/*
142 * Receive buffer Descriptor
143 */
144
145struct i596_rbd {
146    unsigned short count;
147    unsigned short offset;
148    struct i596_rbd *next;
149    char           *data;
150    unsigned short size;
151    unsigned short pad;
152};
153
154/*
155 * Transmit Command Structure
156 */
157struct tx_cmd {
158    struct i596_cmd cmd;
159    struct i596_tbd *pTbd;
160    unsigned short size;
161    unsigned short pad;
162} ;
163
164/*
165 * Receive Frame Descriptor
166 */
167struct i596_rfd {
168    volatile unsigned short stat;
169    volatile unsigned short cmd;
170    struct i596_rfd *next;
171    struct i596_rbd *pRbd;
172    unsigned short count;
173    unsigned short size;
174    char data [1532 ];
175} ;
176
177struct i596_dump {
178  struct i596_cmd cmd;
179  char * pData;
180};
181
182struct i596_set_add {
183  struct i596_cmd cmd;
184  char   data[8];
185};
186
187struct i596_configure {
188  struct i596_cmd cmd;
189  char   data[16];
190};
191
192struct i596_nop {
193  struct i596_cmd cmd;
194};
195
196struct i596_tdr {
197  struct i596_cmd cmd;
198  unsigned int data;
199};
200
201#define RX_RING_SIZE 8
202
203/*
204 * System Control Block
205 */
206struct i596_scb {
207    volatile unsigned short status;
208    volatile unsigned short command;
209    struct i596_cmd *pCmd;
210    struct i596_rfd *pRfd;
211    volatile unsigned long crc_err;
212    volatile unsigned long align_err;
213    volatile unsigned long resource_err;
214    volatile unsigned long over_err;
215    volatile unsigned long rcvdt_err;
216    volatile unsigned long short_err;
217    volatile unsigned short t_on;
218    volatile unsigned short t_off;
219};
220
221/*
222 * Intermediate System Control Block
223 */
224struct i596_iscp {
225    volatile unsigned long stat;
226    struct i596_scb *scb;
227} ;
228/*
229 * System Control Parameters
230 */
231struct i596_scp {
232    unsigned long sysbus;
233    unsigned long pad;
234    struct i596_iscp *iscp;
235} ;
236
237struct uti596_softc {
238  struct arpcom                 arpcom;
239  rtems_irq_connect_data        irqInfo;
240  struct i596_scp              *pScp;
241  struct i596_iscp              iscp;
242  struct i596_scb               scb;
243  struct i596_set_add           set_add;
244  struct i596_configure         set_conf;
245  struct i596_tdr               tdr;
246  struct i596_nop               nop;
247  unsigned long                 stat;
248  struct tx_cmd                *pTxCmd;
249  struct i596_tbd              *pTbd;
250
251  int                   ioAddr;
252
253  struct i596_rfd     *pBeginRFA;
254  struct i596_rfd     *pEndRFA;
255  struct i596_rfd     *pLastUnkRFD;
256  struct i596_rbd     *pLastUnkRBD;
257  struct i596_rfd     *pEndSavedQueue;
258  struct i596_cmd     *pCmdHead;
259  struct i596_cmd     *pCmdTail;  /* unneeded, as chaining not used, but implemented */
260
261  rtems_id              rxDaemonTid;
262  rtems_id              txDaemonTid;
263  rtems_id              resetDaemonTid;
264
265  struct enet_statistics stats;
266  int                  started;
267  unsigned long        rxInterrupts;
268  unsigned long        txInterrupts;
269  volatile int         cmdOk;
270  int                  resetDone;
271  unsigned long        txRawWait;
272  struct i596_rfd     *pInboundFrameQueue;
273  short int            rxBdCount;
274  short int            txBdCount;
275  short int            countRFD;
276  short int            savedCount;
277  struct i596_rfd     *pSavedRfdQueue;
278  rtems_name           semaphore_name;
279  rtems_id             semaphore_id;
280  char                 zeroes[64];
281  unsigned long        rawsndcnt;
282  int                  nic_reset; /* flag is for requesting that ISR issue a reset quest */
283} ;
284#endif
Note: See TracBrowser for help on using the repository browser.