Annotation of researchv9/sys/sundev/lereg.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1985 by Sun Microsystems, Inc.
                      3:  */
                      4: 
                      5: /*
                      6:  * AMD 7990 LANCE Ethernet controller registers.
                      7:  *
                      8:  * The LANCE chip saves address pins by accessing
                      9:  * several registers with one address pin by first writing the
                     10:  * register address to an internal address register, then reading
                     11:  * or writing a data register.  To use this safely, care must be
                     12:  * taken that the driver isn't reentered between the writing
                     13:  * of the address register and the access to the data register,
                     14:  * lest the reentered code try to touch the registers and
                     15:  * screw up the sequence.
                     16:  *
                     17:  * There are 4 registers accessible with this scheme, CSR0, CSR1,
                     18:  * CSR2, and CSR3.  In normal operation, only CSR0 can be or
                     19:  * needs to be accessed, so the driver normally leaves a 0 in the
                     20:  * Register Address Port, allowing CSR0 to be accessed simply by
                     21:  * accessing the Register Data Port.  During the initialization
                     22:  * sequence, when the other CSRs need to be accessed, the appropriate
                     23:  * CSR address is written into the address port, and afterwards
                     24:  * the 0 is put back in the address port.
                     25:  */
                     26: 
                     27: 
                     28: /*
                     29:  * Buffer size is chosen to give room for:
                     30:  *  -  the Ethernet maximum transmission unit,         1536
                     31:  *  -  the CRC,                                           4
                     32:  *  -  and an overrun consisting of the entire
                     33:  *     fifo contents,                                    48
                     34:  */
                     35: #define MAXBUF 1588
                     36: 
                     37: struct le_device {
                     38:        u_short le_rdp;                 /* Register Data Port */
                     39:        u_short         : 14;           /* Reserved */
                     40:        u_short le_rap  : 2;            /* Register Address Port */
                     41: };
                     42: #define le_csr le_rdp
                     43: 
                     44: #define        LE_CSR0         0
                     45: #define        LE_CSR1         1
                     46: #define        LE_CSR2         2
                     47: #define        LE_CSR3         3
                     48: 
                     49: /*
                     50:  * Control and status bits for CSR0.
                     51:  * These behave somewhat strangely, but the net effect is that
                     52:  * bit masks may be written to the register which affect only
                     53:  * those functions for which there is a one bit in the mask.
                     54:  * The exception is the interrupt enable, which must be explicitly
                     55:  * set to the correct value in each mask that is used.
                     56:  *
                     57:  * RO - Read Only, writing has no effect
                     58:  * RC - Read, Clear.  Writing 1 clears, writing 0 has no effect
                     59:  * RW - Read, Write.
                     60:  * W1 - Write with 1 only.  Writing 1 sets, writing 0 has no effect.
                     61:  *        Reading gives unpredictable data but doesn't hurt anything.
                     62:  * RW1 - Read, Write with 1 only.  Writing 1 sets, writing 0 has no effect.
                     63:  */
                     64: 
                     65: #define        LE_ERR          0x8000          /* RO BABL | CERR | MISS | MERR */
                     66: #define        LE_BABL         0x4000          /* RC transmitted too many bits */
                     67: #define        LE_CERR         0x2000          /* RC No Heartbeat */
                     68: #define        LE_MISS         0x1000          /* RC Missed an incoming packet */
                     69: #define        LE_MERR         0x0800          /* RC Memory Error; no acknowledge */
                     70: #define        LE_RINT         0x0400          /* RC Received packet Interrupt */
                     71: #define        LE_TINT         0x0200          /* RC Transmitted packet Interrupt */
                     72: #define        LE_IDON         0x0100          /* RC Initialization Done */
                     73: #define        LE_INTR         0x0080          /* RO BABL|MISS|MERR|RINT|TINT|IDON */
                     74: #define        LE_INEA         0x0040          /* RW Interrupt Enable */
                     75: #define        LE_RXON         0x0020          /* RO Receiver On */
                     76: #define        LE_TXON         0x0010          /* RO Transmitter On */
                     77: #define        LE_TDMD         0x0008          /* W1 Transmit Demand (send it now) */
                     78: #define        LE_STOP         0x0004          /* RW1 Stop */
                     79: #define        LE_STRT         0x0002          /* RW1 Start */
                     80: #define        LE_INIT         0x0001          /* RW1 Initialize */
                     81: 
                     82: /*
                     83:  * CSR1  is   the low 16 bits of the address of the initialization block
                     84:  * CSR2  is   the high 8 bits of the address of the initialization block
                     85:  *           the high 8 bits of the register must be 0
                     86:  * CSR3 mode bits:
                     87:  *
                     88:  */
                     89: #define        LE_BSWP         0x4     /* Byte Swap (on for 68000 byte order) */
                     90: #define        LE_ACON         0x2     /* ALE Control (on for active low ALE) */
                     91: #define        LE_BCON         0x1     /* Byte Control (see the manual) */
                     92: 
                     93: /* The address contained in this structure must be longword aligned */
                     94: struct le_drp {                        /* Descriptor Ring Pointer */
                     95:        u_short drp_laddr;      /* Low 16 bits of ring address */
                     96:        u_char  drp_len : 3;    /* Binary exponent of no. of ring entries */
                     97:        u_char          : 5;    /* Reserved */
                     98:        u_char  drp_haddr;      /* High 16 bits of ring address */
                     99: };
                    100: 
                    101: /*
                    102:  * Initialization Block.  This structure is constructed in memory,
                    103:  * and it's address is written into the chip during initialization.
                    104:  * The chip then fetches it's initialization info from the structure.
                    105:  */
                    106: struct le_init_block {
                    107:        /* In the normal mode, these 16 bits are all 0 */
                    108:        u_short ib_prom : 1;    /* Promiscuous Mode */
                    109:        u_short                 : 7;    /* Reserved */
                    110:        u_short ib_intl : 1;    /* Internal Loopback */
                    111:        u_short ib_drty : 1;    /* Disable Retry */
                    112:        u_short ib_coll : 1;    /* Force Collision */
                    113:        u_short ib_dtcr : 1;    /* Disable Transmit CRC */
                    114:        u_short ib_loop : 1;    /* Loopback */
                    115:        u_short ib_dtx  : 1;    /* Disable Transmitter */
                    116:        u_short ib_drx  : 1;    /* Disable Receiver */
                    117: 
                    118:        /*
                    119:         * The bytes must be swapped within the word, so that, for example,
                    120:         * the address 8:0:20:1:25:5a is written in the order
                    121:         *             0 8 1 20 5a 25
                    122:         */
                    123:        u_char  ib_padr[6];
                    124: 
                    125:        u_char  ib_ladrf[8];
                    126: 
                    127:        struct  le_drp ib_rdrp; /* Receive Descriptor Ring Pointer */
                    128:        struct  le_drp ib_tdrp; /* Transmit Descriptor Ring Pointer */
                    129: };
                    130: 
                    131: struct le_md {                 /* Message Descriptor */
                    132:        u_short lmd_ladr;       /* Low Order 16 Address Bits */
                    133:        u_char  lmd_flags;
                    134:        u_char  lmd_hadr: 8;    /* High Order 8 Address Bits */
                    135:        u_short lmd_bcnt;       /* Buffer Byte Count (maximum length) */
                    136:        u_short lmd_mcnt;       /* Message Byte Count (actual length) */
                    137: };
                    138: #define lmd_flags3 lmd_mcnt    /* for Transmit message descriptor */
                    139: 
                    140: /* Bits common to both rmds and tmds */
                    141: #define        LMD_OWN         0x80    /* Chip owns the descriptor */
                    142: #define        LMD_ERR         0x40    /* Error occurred */
                    143: #define        LMD_STP         0x02    /* Start of Packet */
                    144: #define        LMD_ENP         0x01    /* End of Packet */
                    145: 
                    146: /* Bits in rmd flags */
                    147: #define        RMD_FRAM        0x20    /* Framing error */
                    148: #define        RMD_OFLO        0x10    /* Internal Silo Overflowed. Valid if !ENP */
                    149: #define        RMD_CRC         0x08    /* CRC Error */
                    150: #define        RMD_BUFF        0x04    /* Didn't have a buffer for the packet */
                    151: /* bits in tmd flags */
                    152: #define        TMD_MORE        0x10    /* More than one retry was needed */
                    153: #define        TMD_ONE         0x08    /* Exactly One Retry, valid only if !LCOL */
                    154: #define        TMD_DEF         0x04    /* Deferred (net was initially busy) */
                    155: 
                    156: /* Bits for lmd_errflags */
                    157: #define        TMD_BUFF 0x8000         /* Buffer Error (imples underflow too) */
                    158: #define        TMD_UFLO 0x4000         /* Underflow Error */
                    159: #define        TMD_LCOL 0x1000         /* Late Collision */
                    160: #define        TMD_LCAR 0x0800         /* Loss of Carrier */
                    161: #define        TMD_RTRY 0x0400         /* More than 16 Retry's */
                    162: #define        TMD_TDR  0x003f         /* Time Domain Reflectometry counter mask */

unix.superglobalmegacorp.com

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