Annotation of Gnu-Mach/linux/src/drivers/net/ni52.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Intel i82586 Ethernet definitions
                      3:  *
                      4:  * This is an extension to the Linux operating system, and is covered by the
                      5:  * same Gnu Public License that covers that work.
                      6:  *
                      7:  * copyrights (c) 1994 by Michael Hipp ([email protected])
                      8:  *
                      9:  * I have done a look in the following sources:
                     10:  *   crynwr-packet-driver by Russ Nelson
                     11:  *   Garret A. Wollman's i82586-driver for BSD
                     12:  */
                     13: 
                     14:  
                     15: #define NI52_RESET     0  /* writing to this address, resets the i82586 */
                     16: #define NI52_ATTENTION 1  /* channel attention, kick the 586 */
                     17: #define NI52_TENA      3  /* 2-5 possibly wrong, Xmit enable */
                     18: #define NI52_TDIS      2  /* Xmit disable */
                     19: #define NI52_INTENA    5  /* Interrupt enable */
                     20: #define NI52_INTDIS    4  /* Interrupt disable */
                     21: #define NI52_MAGIC1    6  /* dunno exact function */
                     22: #define NI52_MAGIC2    7  /* dunno exact function */
                     23: 
                     24: #define NI52_MAGICVAL1 0x00  /* magic-values for ni5210 card */
                     25: #define NI52_MAGICVAL2 0x55
                     26: 
                     27: /*
                     28:  * where to find the System Configuration Pointer (SCP)
                     29:  */
                     30: #define SCP_DEFAULT_ADDRESS 0xfffff4
                     31: 
                     32: 
                     33: /*
                     34:  * System Configuration Pointer Struct
                     35:  */
                     36: 
                     37: struct scp_struct
                     38: {
                     39:   unsigned short zero_dum0;    /* has to be zero */
                     40:   unsigned char  sysbus;       /* 0=16Bit,1=8Bit */
                     41:   unsigned char  zero_dum1;    /* has to be zero for 586 */
                     42:   unsigned short zero_dum2;
                     43:   unsigned short zero_dum3;
                     44:   char          *iscp;         /* pointer to the iscp-block */
                     45: };
                     46: 
                     47: 
                     48: /*
                     49:  * Intermediate System Configuration Pointer (ISCP)
                     50:  */
                     51: struct iscp_struct
                     52: {
                     53:   unsigned char  busy;          /* 586 clears after successful init */
                     54:   unsigned char  zero_dummy;    /* has to be zero */
                     55:   unsigned short scb_offset;    /* pointeroffset to the scb_base */
                     56:   char          *scb_base;      /* base-address of all 16-bit offsets */
                     57: };
                     58: 
                     59: /*
                     60:  * System Control Block (SCB)
                     61:  */
                     62: struct scb_struct
                     63: {
                     64:   unsigned char rus;
                     65:   unsigned char cus;
                     66:   unsigned char cmd_ruc;           /* command word: RU part */
                     67:   unsigned char cmd_cuc;           /* command word: CU part & ACK */
                     68:   unsigned short cbl_offset;    /* pointeroffset, command block list */
                     69:   unsigned short rfa_offset;    /* pointeroffset, receive frame area */
                     70:   unsigned short crc_errs;      /* CRC-Error counter */
                     71:   unsigned short aln_errs;      /* allignmenterror counter */
                     72:   unsigned short rsc_errs;      /* Resourceerror counter */
                     73:   unsigned short ovrn_errs;     /* OVerrunerror counter */
                     74: };
                     75: 
                     76: /*
                     77:  * possible command values for the command word
                     78:  */
                     79: #define RUC_MASK       0x0070  /* mask for RU commands */
                     80: #define RUC_NOP                0x0000  /* NOP-command */
                     81: #define RUC_START      0x0010  /* start RU */
                     82: #define RUC_RESUME     0x0020  /* resume RU after suspend */
                     83: #define RUC_SUSPEND    0x0030  /* suspend RU */
                     84: #define RUC_ABORT      0x0040  /* abort receiver operation immediately */
                     85: 
                     86: #define CUC_MASK        0x07  /* mask for CU command */
                     87: #define CUC_NOP         0x00  /* NOP-command */
                     88: #define CUC_START       0x01  /* start execution of 1. cmd on the CBL */
                     89: #define CUC_RESUME      0x02  /* resume after suspend */
                     90: #define CUC_SUSPEND     0x03  /* Suspend CU */
                     91: #define CUC_ABORT       0x04  /* abort command operation immediately */
                     92: 
                     93: #define ACK_MASK        0xf0  /* mask for ACK command */
                     94: #define ACK_CX          0x80  /* acknowledges STAT_CX */
                     95: #define ACK_FR          0x40  /* ack. STAT_FR */
                     96: #define ACK_CNA         0x20  /* ack. STAT_CNA */
                     97: #define ACK_RNR         0x10  /* ack. STAT_RNR */
                     98: 
                     99: /*
                    100:  * possible status values for the status word
                    101:  */
                    102: #define STAT_MASK       0xf0  /* mask for cause of interrupt */
                    103: #define STAT_CX         0x80  /* CU finished cmd with its I bit set */
                    104: #define STAT_FR         0x40  /* RU finished receiving a frame */
                    105: #define STAT_CNA        0x20  /* CU left active state */
                    106: #define STAT_RNR        0x10  /* RU left ready state */
                    107: 
                    108: #define CU_STATUS       0x7   /* CU status, 0=idle */
                    109: #define CU_SUSPEND      0x1   /* CU is suspended */
                    110: #define CU_ACTIVE       0x2   /* CU is active */
                    111: 
                    112: #define RU_STATUS      0x70    /* RU status, 0=idle */
                    113: #define RU_SUSPEND     0x10    /* RU suspended */
                    114: #define RU_NOSPACE     0x20    /* RU no resources */
                    115: #define RU_READY       0x40    /* RU is ready */
                    116: 
                    117: /*
                    118:  * Receive Frame Descriptor (RFD)
                    119:  */
                    120: struct rfd_struct
                    121: {
                    122:   unsigned char  stat_low;     /* status word */
                    123:   unsigned char  stat_high;    /* status word */
                    124:   unsigned char  rfd_sf;       /* 82596 mode only */
                    125:   unsigned char  last;         /* Bit15,Last Frame on List / Bit14,suspend */
                    126:   unsigned short next;         /* linkoffset to next RFD */
                    127:   unsigned short rbd_offset;   /* pointeroffset to RBD-buffer */
                    128:   unsigned char  dest[6];      /* ethernet-address, destination */
                    129:   unsigned char  source[6];    /* ethernet-address, source */
                    130:   unsigned short length;       /* 802.3 frame-length */
                    131:   unsigned short zero_dummy;   /* dummy */
                    132: };
                    133: 
                    134: #define RFD_LAST     0x80      /* last: last rfd in the list */
                    135: #define RFD_SUSP     0x40      /* last: suspend RU after  */
                    136: #define RFD_COMPL    0x80
                    137: #define RFD_OK       0x20
                    138: #define RFD_BUSY     0x40
                    139: #define RFD_ERR_LEN  0x10     /* Length error (if enabled length-checking */
                    140: #define RFD_ERR_CRC  0x08     /* CRC error */
                    141: #define RFD_ERR_ALGN 0x04     /* Alignment error */
                    142: #define RFD_ERR_RNR  0x02     /* status: receiver out of resources */
                    143: #define RFD_ERR_OVR  0x01     /* DMA Overrun! */
                    144: 
                    145: #define RFD_ERR_FTS  0x0080    /* Frame to short */
                    146: #define RFD_ERR_NEOP 0x0040    /* No EOP flag (for bitstuffing only) */
                    147: #define RFD_ERR_TRUN 0x0020    /* (82596 only/SF mode) indicates truncated frame */
                    148: #define RFD_MATCHADD 0x0002     /* status: Destinationaddress !matches IA (only 82596) */
                    149: #define RFD_COLLDET  0x0001    /* Detected collision during reception */
                    150: 
                    151: /*
                    152:  * Receive Buffer Descriptor (RBD)
                    153:  */
                    154: struct rbd_struct 
                    155: {
                    156:   unsigned short status;       /* status word,number of used bytes in buff */
                    157:   unsigned short next;         /* pointeroffset to next RBD */
                    158:   char          *buffer;       /* receive buffer address pointer */
                    159:   unsigned short size;         /* size of this buffer */
                    160:   unsigned short zero_dummy;    /* dummy */
                    161: };
                    162: 
                    163: #define RBD_LAST       0x8000  /* last buffer */
                    164: #define RBD_USED       0x4000  /* this buffer has data */
                    165: #define RBD_MASK       0x3fff  /* size-mask for length */
                    166: 
                    167: /*
                    168:  * Statusvalues for Commands/RFD
                    169:  */
                    170: #define STAT_COMPL   0x8000    /* status: frame/command is complete */
                    171: #define STAT_BUSY    0x4000    /* status: frame/command is busy */
                    172: #define STAT_OK      0x2000    /* status: frame/command is ok */
                    173: 
                    174: /*
                    175:  * Action-Commands
                    176:  */
                    177: #define CMD_NOP                0x0000  /* NOP */
                    178: #define CMD_IASETUP    0x0001  /* initial address setup command */
                    179: #define CMD_CONFIGURE  0x0002  /* configure command */
                    180: #define CMD_MCSETUP    0x0003  /* MC setup command */
                    181: #define CMD_XMIT       0x0004  /* transmit command */
                    182: #define CMD_TDR                0x0005  /* time domain reflectometer (TDR) command */
                    183: #define CMD_DUMP       0x0006  /* dump command */
                    184: #define CMD_DIAGNOSE   0x0007  /* diagnose command */
                    185: 
                    186: /*
                    187:  * Action command bits
                    188:  */
                    189: #define CMD_LAST       0x8000  /* indicates last command in the CBL */
                    190: #define CMD_SUSPEND    0x4000  /* suspend CU after this CB */
                    191: #define CMD_INT                0x2000  /* generate interrupt after execution */
                    192: 
                    193: /*
                    194:  * NOP - command
                    195:  */
                    196: struct nop_cmd_struct
                    197: {
                    198:   unsigned short cmd_status;   /* status of this command */
                    199:   unsigned short cmd_cmd;       /* the command itself (+bits) */
                    200:   unsigned short cmd_link;      /* offsetpointer to next command */
                    201: };
                    202: 
                    203: /*
                    204:  * IA Setup command
                    205:  */
                    206: struct iasetup_cmd_struct 
                    207: {
                    208:   unsigned short cmd_status;
                    209:   unsigned short cmd_cmd;
                    210:   unsigned short cmd_link;
                    211:   unsigned char  iaddr[6];
                    212: };
                    213: 
                    214: /*
                    215:  * Configure command 
                    216:  */
                    217: struct configure_cmd_struct
                    218: {
                    219:   unsigned short cmd_status;
                    220:   unsigned short cmd_cmd;
                    221:   unsigned short cmd_link;
                    222:   unsigned char  byte_cnt;   /* size of the config-cmd */
                    223:   unsigned char  fifo;       /* fifo/recv monitor */
                    224:   unsigned char  sav_bf;     /* save bad frames (bit7=1)*/
                    225:   unsigned char  adr_len;    /* adr_len(0-2),al_loc(3),pream(4-5),loopbak(6-7)*/
                    226:   unsigned char  priority;   /* lin_prio(0-2),exp_prio(4-6),bof_metd(7) */
                    227:   unsigned char  ifs;        /* inter frame spacing */
                    228:   unsigned char  time_low;   /* slot time low */
                    229:   unsigned char  time_high;  /* slot time high(0-2) and max. retries(4-7) */
                    230:   unsigned char  promisc;    /* promisc-mode(0) , et al (1-7) */
                    231:   unsigned char  carr_coll;  /* carrier(0-3)/collision(4-7) stuff */
                    232:   unsigned char  fram_len;   /* minimal frame len */
                    233:   unsigned char  dummy;             /* dummy */
                    234: };
                    235: 
                    236: /*
                    237:  * Multicast Setup command 
                    238:  */
                    239: struct mcsetup_cmd_struct 
                    240: {
                    241:   unsigned short cmd_status;
                    242:   unsigned short cmd_cmd;
                    243:   unsigned short cmd_link;
                    244:   unsigned short mc_cnt;               /* number of bytes in the MC-List */
                    245:   unsigned char  mc_list[0][6];        /* pointer to 6 bytes entries */
                    246: };
                    247: 
                    248: /*
                    249:  * DUMP command
                    250:  */
                    251: struct dump_cmd_struct
                    252: {
                    253:   unsigned short cmd_status;
                    254:   unsigned short cmd_cmd;
                    255:   unsigned short cmd_link;
                    256:   unsigned short dump_offset;    /* pointeroffset to DUMP space */
                    257: };
                    258: 
                    259: /*
                    260:  * transmit command 
                    261:  */
                    262: struct transmit_cmd_struct 
                    263: {
                    264:   unsigned short cmd_status;
                    265:   unsigned short cmd_cmd;
                    266:   unsigned short cmd_link;
                    267:   unsigned short tbd_offset;   /* pointeroffset to TBD */
                    268:   unsigned char  dest[6];       /* destination address of the frame */
                    269:   unsigned short length;       /* user defined: 802.3 length / Ether type */
                    270: };
                    271: 
                    272: #define TCMD_ERRMASK     0x0fa0
                    273: #define TCMD_MAXCOLLMASK 0x000f
                    274: #define TCMD_MAXCOLL     0x0020
                    275: #define TCMD_HEARTBEAT   0x0040
                    276: #define TCMD_DEFERRED    0x0080
                    277: #define TCMD_UNDERRUN    0x0100
                    278: #define TCMD_LOSTCTS     0x0200
                    279: #define TCMD_NOCARRIER   0x0400
                    280: #define TCMD_LATECOLL    0x0800
                    281: 
                    282: struct tdr_cmd_struct
                    283: {
                    284:   unsigned short cmd_status;
                    285:   unsigned short cmd_cmd;
                    286:   unsigned short cmd_link;
                    287:   unsigned short status;
                    288: };
                    289: 
                    290: #define TDR_LNK_OK     0x8000  /* No link problem identified */
                    291: #define TDR_XCVR_PRB   0x4000  /* indicates a transceiver problem */
                    292: #define TDR_ET_OPN     0x2000  /* open, no correct termination */
                    293: #define TDR_ET_SRT     0x1000  /* TDR detected a short circuit */
                    294: #define TDR_TIMEMASK   0x07ff  /* mask for the time field */
                    295: 
                    296: /*
                    297:  * Transmit Buffer Descriptor (TBD)
                    298:  */
                    299: struct tbd_struct
                    300: {
                    301:   unsigned short size;         /* size + EOF-Flag(15) */
                    302:   unsigned short next;          /* pointeroffset to next TBD */
                    303:   char          *buffer;        /* pointer to buffer */
                    304: };
                    305: 
                    306: #define TBD_LAST 0x8000         /* EOF-Flag, indicates last buffer in list */
                    307: 
                    308: 
                    309: 
                    310: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.