Annotation of qemu/roms/ipxe/src/drivers/net/3c595.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1993 Herb Peyerl ([email protected]) All rights reserved.
                      3:  *
                      4:  * Redistribution and use in source and binary forms, with or without
                      5:  * modification, are permitted provided that the following conditions are
                      6:  * met: 1. Redistributions of source code must retain the above copyright
                      7:  * notice, this list of conditions and the following disclaimer. 2. The name
                      8:  * of the author may not be used to endorse or promote products derived from
                      9:  * this software without specific prior written permission
                     10:  *
                     11:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
                     12:  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
                     13:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
                     14:  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     15:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
                     16:  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
                     17:  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
                     18:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
                     19:  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
                     20:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     21:  *
                     22:  October 2, 1994
                     23: 
                     24:  Modified by: Andres Vega Garcia
                     25: 
                     26:  INRIA - Sophia Antipolis, France
                     27:  e-mail: [email protected]
                     28:  finger: [email protected]
                     29: 
                     30:  */
                     31: 
                     32: FILE_LICENCE ( BSD3 );
                     33: 
                     34: /*
                     35:  * Created from if_epreg.h by Fred Gray ([email protected]) to support the
                     36:  * 3c590 family.
                     37:  */
                     38: 
                     39: /*
                     40:  * Modified by Shusuke Nisiyama <[email protected]>
                     41:  * for etherboot
                     42:  * Mar. 14, 2000
                     43: */
                     44: 
                     45: /*
                     46:  * Ethernet software status per interface.
                     47:  */
                     48: 
                     49: /*
                     50:  * Some global constants
                     51:  */
                     52: 
                     53: #define TX_INIT_RATE         16
                     54: #define TX_INIT_MAX_RATE     64
                     55: #define RX_INIT_LATENCY      64
                     56: #define RX_INIT_EARLY_THRESH 64
                     57: #define MIN_RX_EARLY_THRESHF   16 /* not less than ether_header */
                     58: #define MIN_RX_EARLY_THRESHL   4
                     59: 
                     60: #define EEPROMSIZE      0x40
                     61: #define MAX_EEPROMBUSY  1000
                     62: #define VX_LAST_TAG     0xd7
                     63: #define VX_MAX_BOARDS   16
                     64: #define VX_ID_PORT      0x100
                     65: 
                     66: /*
                     67:  * some macros to acces long named fields
                     68:  */
                     69: #define BASE   (eth_nic_base)
                     70: 
                     71: /*
                     72:  * Commands to read/write EEPROM trough EEPROM command register (Window 0,
                     73:  * Offset 0xa)
                     74:  */
                     75: #define EEPROM_CMD_RD    0x0080        /* Read:  Address required (5 bits) */
                     76: #define EEPROM_CMD_WR    0x0040        /* Write: Address required (5 bits) */
                     77: #define EEPROM_CMD_ERASE 0x00c0        /* Erase: Address required (5 bits) */
                     78: #define EEPROM_CMD_EWEN  0x0030        /* Erase/Write Enable: No data required */
                     79: 
                     80: #define EEPROM_BUSY            (1<<15)
                     81: 
                     82: /*
                     83:  * Some short functions, worth to let them be a macro
                     84:  */
                     85: 
                     86: /**************************************************************************
                     87:  *                                                                       *
                     88:  * These define the EEPROM data structure.  They are used in the probe
                     89:  * function to verify the existence of the adapter after having sent
                     90:  * the ID_Sequence.
                     91:  *
                     92:  * There are others but only the ones we use are defined here.
                     93:  *
                     94:  **************************************************************************/
                     95: 
                     96: #define EEPROM_NODE_ADDR_0     0x0     /* Word */
                     97: #define EEPROM_NODE_ADDR_1     0x1     /* Word */
                     98: #define EEPROM_NODE_ADDR_2     0x2     /* Word */
                     99: #define EEPROM_PROD_ID         0x3     /* 0x9[0-f]50 */
                    100: #define EEPROM_MFG_ID          0x7     /* 0x6d50 */
                    101: #define EEPROM_ADDR_CFG                0x8     /* Base addr */
                    102: #define EEPROM_RESOURCE_CFG    0x9     /* IRQ. Bits 12-15 */
                    103: #define EEPROM_OEM_ADDR_0      0xa     /* Word */
                    104: #define EEPROM_OEM_ADDR_1      0xb     /* Word */
                    105: #define EEPROM_OEM_ADDR_2      0xc     /* Word */
                    106: #define EEPROM_SOFT_INFO_2     0xf     /* Software information 2 */
                    107: 
                    108: #define NO_RX_OVN_ANOMALY       (1<<5)
                    109: 
                    110: /**************************************************************************
                    111:  *                                                                               *
                    112:  * These are the registers for the 3Com 3c509 and their bit patterns when *
                    113:  * applicable.  They have been taken out the the "EtherLink III Parallel  *
                    114:  * Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual *
                    115:  * from 3com.                                                            *
                    116:  *                                                                               *
                    117:  **************************************************************************/
                    118: 
                    119: #define VX_COMMAND             0x0e    /* Write. BASE+0x0e is always a
                    120:                                         * command reg. */
                    121: #define VX_STATUS              0x0e    /* Read. BASE+0x0e is always status
                    122:                                         * reg. */
                    123: #define VX_WINDOW              0x0f    /* Read. BASE+0x0f is always window
                    124:                                         * reg. */
                    125: /*
                    126:  * Window 0 registers. Setup.
                    127:  */
                    128: /* Write */
                    129: #define VX_W0_EEPROM_DATA      0x0c
                    130: #define VX_W0_EEPROM_COMMAND   0x0a
                    131: #define VX_W0_RESOURCE_CFG     0x08
                    132: #define VX_W0_ADDRESS_CFG      0x06 
                    133: #define VX_W0_CONFIG_CTRL      0x04
                    134:         /* Read */
                    135: #define VX_W0_PRODUCT_ID       0x02
                    136: #define VX_W0_MFG_ID           0x00
                    137: 
                    138: 
                    139: /*
                    140:  * Window 1 registers. Operating Set.
                    141:  */
                    142: /* Write */
                    143: #define VX_W1_TX_PIO_WR_2      0x02
                    144: #define VX_W1_TX_PIO_WR_1      0x00
                    145: /* Read */
                    146: #define VX_W1_FREE_TX          0x0c
                    147: #define VX_W1_TX_STATUS                0x0b    /* byte */
                    148: #define VX_W1_TIMER            0x0a    /* byte */
                    149: #define VX_W1_RX_STATUS                0x08
                    150: #define VX_W1_RX_PIO_RD_2      0x02
                    151: #define VX_W1_RX_PIO_RD_1      0x00
                    152: 
                    153: /*
                    154:  * Window 2 registers. Station Address Setup/Read
                    155:  */
                    156: /* Read/Write */
                    157: #define VX_W2_ADDR_5           0x05
                    158: #define VX_W2_ADDR_4           0x04
                    159: #define VX_W2_ADDR_3           0x03
                    160: #define VX_W2_ADDR_2           0x02
                    161: #define VX_W2_ADDR_1           0x01
                    162: #define VX_W2_ADDR_0           0x00
                    163: 
                    164: /*
                    165:  * Window 3 registers. FIFO Management.
                    166:  */
                    167: /* Read */
                    168: #define VX_W3_INTERNAL_CFG     0x00
                    169: #define VX_W3_RESET_OPT                0x08
                    170: #define VX_W3_FREE_TX          0x0c
                    171: #define VX_W3_FREE_RX          0x0a
                    172: 
                    173: /*
                    174:  * Window 4 registers. Diagnostics.
                    175:  */
                    176: /* Read/Write */
                    177: #define VX_W4_MEDIA_TYPE       0x0a
                    178: #define VX_W4_CTRLR_STATUS     0x08
                    179: #define VX_W4_NET_DIAG         0x06
                    180: #define VX_W4_FIFO_DIAG                0x04
                    181: #define VX_W4_HOST_DIAG                0x02
                    182: #define VX_W4_TX_DIAG          0x00
                    183: 
                    184: /*
                    185:  * Window 5 Registers.  Results and Internal status.
                    186:  */
                    187: /* Read */
                    188: #define VX_W5_READ_0_MASK      0x0c
                    189: #define VX_W5_INTR_MASK                0x0a
                    190: #define VX_W5_RX_FILTER                0x08
                    191: #define VX_W5_RX_EARLY_THRESH  0x06
                    192: #define VX_W5_TX_AVAIL_THRESH  0x02
                    193: #define VX_W5_TX_START_THRESH  0x00
                    194: 
                    195: /*
                    196:  * Window 6 registers. Statistics.
                    197:  */
                    198: /* Read/Write */
                    199: #define TX_TOTAL_OK            0x0c
                    200: #define RX_TOTAL_OK            0x0a
                    201: #define TX_DEFERRALS           0x08
                    202: #define RX_FRAMES_OK           0x07
                    203: #define TX_FRAMES_OK           0x06
                    204: #define RX_OVERRUNS            0x05
                    205: #define TX_COLLISIONS          0x04
                    206: #define TX_AFTER_1_COLLISION   0x03
                    207: #define TX_AFTER_X_COLLISIONS  0x02
                    208: #define TX_NO_SQE              0x01
                    209: #define TX_CD_LOST             0x00
                    210: 
                    211: /****************************************
                    212:  *
                    213:  * Register definitions.
                    214:  *
                    215:  ****************************************/
                    216: 
                    217: /*
                    218:  * Command register. All windows.
                    219:  *
                    220:  * 16 bit register.
                    221:  *     15-11:  5-bit code for command to be executed.
                    222:  *     10-0:   11-bit arg if any. For commands with no args;
                    223:  *           this can be set to anything.
                    224:  */
                    225: #define GLOBAL_RESET           (unsigned short) 0x0000 /* Wait at least 1ms
                    226:                                                         * after issuing */
                    227: #define WINDOW_SELECT          (unsigned short) (0x1<<11)
                    228: #define START_TRANSCEIVER      (unsigned short) (0x2<<11)      /* Read ADDR_CFG reg to
                    229:                                                         * determine whether
                    230:                                                         * this is needed. If
                    231:                                                         * so; wait 800 uSec
                    232:                                                         * before using trans-
                    233:                                                         * ceiver. */
                    234: #define RX_DISABLE             (unsigned short) (0x3<<11)      /* state disabled on
                    235:                                                         * power-up */
                    236: #define RX_ENABLE              (unsigned short) (0x4<<11)
                    237: #define RX_RESET               (unsigned short) (0x5<<11)
                    238: #define RX_DISCARD_TOP_PACK    (unsigned short) (0x8<<11)
                    239: #define TX_ENABLE              (unsigned short) (0x9<<11)
                    240: #define TX_DISABLE             (unsigned short) (0xa<<11)
                    241: #define TX_RESET               (unsigned short) (0xb<<11)
                    242: #define REQ_INTR               (unsigned short) (0xc<<11)
                    243: /*
                    244:  * The following C_* acknowledge the various interrupts. Some of them don't
                    245:  * do anything.  See the manual.
                    246:  */
                    247: #define ACK_INTR               (unsigned short) (0x6800)
                    248: #      define C_INTR_LATCH     (unsigned short) (ACK_INTR|0x1)
                    249: #      define C_CARD_FAILURE   (unsigned short) (ACK_INTR|0x2)
                    250: #      define C_TX_COMPLETE    (unsigned short) (ACK_INTR|0x4)
                    251: #      define C_TX_AVAIL       (unsigned short) (ACK_INTR|0x8)
                    252: #      define C_RX_COMPLETE    (unsigned short) (ACK_INTR|0x10)
                    253: #      define C_RX_EARLY       (unsigned short) (ACK_INTR|0x20)
                    254: #      define C_INT_RQD                (unsigned short) (ACK_INTR|0x40)
                    255: #      define C_UPD_STATS      (unsigned short) (ACK_INTR|0x80)
                    256: #define SET_INTR_MASK          (unsigned short) (0xe<<11)
                    257: #define SET_RD_0_MASK          (unsigned short) (0xf<<11)
                    258: #define SET_RX_FILTER          (unsigned short) (0x10<<11)
                    259: #      define FIL_INDIVIDUAL   (unsigned short) (0x1)
                    260: #      define FIL_MULTICAST     (unsigned short) (0x02)
                    261: #      define FIL_BRDCST        (unsigned short) (0x04)
                    262: #      define FIL_PROMISC       (unsigned short) (0x08)
                    263: #define SET_RX_EARLY_THRESH    (unsigned short) (0x11<<11)
                    264: #define SET_TX_AVAIL_THRESH    (unsigned short) (0x12<<11)
                    265: #define SET_TX_START_THRESH    (unsigned short) (0x13<<11)
                    266: #define STATS_ENABLE           (unsigned short) (0x15<<11)
                    267: #define STATS_DISABLE          (unsigned short) (0x16<<11)
                    268: #define STOP_TRANSCEIVER       (unsigned short) (0x17<<11)
                    269: 
                    270: /*
                    271:  * Status register. All windows.
                    272:  *
                    273:  *     15-13:  Window number(0-7).
                    274:  *     12:     Command_in_progress.
                    275:  *     11:     reserved.
                    276:  *     10:     reserved.
                    277:  *     9:      reserved.
                    278:  *     8:      reserved.
                    279:  *     7:      Update Statistics.
                    280:  *     6:      Interrupt Requested.
                    281:  *     5:      RX Early.
                    282:  *     4:      RX Complete.
                    283:  *     3:      TX Available.
                    284:  *     2:      TX Complete.
                    285:  *     1:      Adapter Failure.
                    286:  *     0:      Interrupt Latch.
                    287:  */
                    288: #define S_INTR_LATCH           (unsigned short) (0x1)
                    289: #define S_CARD_FAILURE         (unsigned short) (0x2)
                    290: #define S_TX_COMPLETE          (unsigned short) (0x4)
                    291: #define S_TX_AVAIL             (unsigned short) (0x8)
                    292: #define S_RX_COMPLETE          (unsigned short) (0x10)
                    293: #define S_RX_EARLY             (unsigned short) (0x20)
                    294: #define S_INT_RQD              (unsigned short) (0x40)
                    295: #define S_UPD_STATS            (unsigned short) (0x80)
                    296: #define S_COMMAND_IN_PROGRESS  (unsigned short) (0x1000)
                    297: 
                    298: #define VX_BUSY_WAIT while (inw(BASE + VX_STATUS) & S_COMMAND_IN_PROGRESS)
                    299: 
                    300: /* Address Config. Register.    
                    301:  * Window 0/Port 06
                    302:  */
                    303: 
                    304: #define ACF_CONNECTOR_BITS     14  
                    305: #define ACF_CONNECTOR_UTP      0
                    306: #define ACF_CONNECTOR_AUI      1
                    307: #define ACF_CONNECTOR_BNC      3
                    308:    
                    309: #define INTERNAL_CONNECTOR_BITS 20
                    310: #define INTERNAL_CONNECTOR_MASK 0x01700000
                    311: 
                    312: /*
                    313:  * FIFO Registers. RX Status.
                    314:  *
                    315:  *     15:     Incomplete or FIFO empty.
                    316:  *     14:     1: Error in RX Packet   0: Incomplete or no error.
                    317:  *     13-11:  Type of error.
                    318:  *           1000 = Overrun.
                    319:  *           1011 = Run Packet Error.
                    320:  *           1100 = Alignment Error.
                    321:  *           1101 = CRC Error.
                    322:  *           1001 = Oversize Packet Error (>1514 bytes)
                    323:  *           0010 = Dribble Bits.
                    324:  *           (all other error codes, no errors.)
                    325:  *
                    326:  *     10-0:   RX Bytes (0-1514)
                    327:  */
                    328: #define ERR_INCOMPLETE  (unsigned short) (0x8000)
                    329: #define ERR_RX          (unsigned short) (0x4000)
                    330: #define ERR_MASK        (unsigned short) (0x7800)
                    331: #define ERR_OVERRUN     (unsigned short) (0x4000)
                    332: #define ERR_RUNT        (unsigned short) (0x5800)
                    333: #define ERR_ALIGNMENT   (unsigned short) (0x6000)
                    334: #define ERR_CRC         (unsigned short) (0x6800)
                    335: #define ERR_OVERSIZE    (unsigned short) (0x4800)
                    336: #define ERR_DRIBBLE     (unsigned short) (0x1000)
                    337: 
                    338: /*
                    339:  * TX Status. 
                    340:  *
                    341:  *   Reports the transmit status of a completed transmission. Writing this
                    342:  *   register pops the transmit completion stack.
                    343:  *
                    344:  *   Window 1/Port 0x0b.
                    345:  *
                    346:  *     7:      Complete
                    347:  *     6:      Interrupt on successful transmission requested.
                    348:  *     5:      Jabber Error (TP Only, TX Reset required. )
                    349:  *     4:      Underrun (TX Reset required. )
                    350:  *     3:      Maximum Collisions.
                    351:  *     2:      TX Status Overflow.
                    352:  *     1-0:    Undefined.
                    353:  *
                    354:  */
                    355: #define TXS_COMPLETE           0x80
                    356: #define TXS_INTR_REQ           0x40
                    357: #define TXS_JABBER             0x20
                    358: #define TXS_UNDERRUN           0x10
                    359: #define TXS_MAX_COLLISION      0x8
                    360: #define TXS_STATUS_OVERFLOW    0x4
                    361: 
                    362: #define RS_AUI                 (1<<5)
                    363: #define RS_BNC                 (1<<4)
                    364: #define RS_UTP                 (1<<3)
                    365: #define        RS_T4                   (1<<0)
                    366: #define        RS_TX                   (1<<1)
                    367: #define        RS_FX                   (1<<2)
                    368: #define        RS_MII                  (1<<6)
                    369: 
                    370: 
                    371: /*
                    372:  * FIFO Status (Window 4)
                    373:  *
                    374:  *   Supports FIFO diagnostics
                    375:  *
                    376:  *   Window 4/Port 0x04.1
                    377:  *
                    378:  *     15:     1=RX receiving (RO). Set when a packet is being received
                    379:  *             into the RX FIFO.
                    380:  *     14:     Reserved
                    381:  *     13:     1=RX underrun (RO). Generates Adapter Failure interrupt.
                    382:  *             Requires RX Reset or Global Reset command to recover.
                    383:  *             It is generated when you read past the end of a packet -
                    384:  *             reading past what has been received so far will give bad
                    385:  *             data.
                    386:  *     12:     1=RX status overrun (RO). Set when there are already 8
                    387:  *             packets in the RX FIFO. While this bit is set, no additional
                    388:  *             packets are received. Requires no action on the part of
                    389:  *             the host. The condition is cleared once a packet has been
                    390:  *             read out of the RX FIFO.
                    391:  *     11:     1=RX overrun (RO). Set when the RX FIFO is full (there
                    392:  *             may not be an overrun packet yet). While this bit is set,
                    393:  *             no additional packets will be received (some additional
                    394:  *             bytes can still be pending between the wire and the RX
                    395:  *             FIFO). Requires no action on the part of the host. The
                    396:  *             condition is cleared once a few bytes have been read out
                    397:  *             from the RX FIFO.
                    398:  *     10:     1=TX overrun (RO). Generates adapter failure interrupt.
                    399:  *             Requires TX Reset or Global Reset command to recover.
                    400:  *             Disables Transmitter.
                    401:  *     9-8:    Unassigned.
                    402:  *     7-0:    Built in self test bits for the RX and TX FIFO's.
                    403:  */
                    404: #define FIFOS_RX_RECEIVING     (unsigned short) 0x8000
                    405: #define FIFOS_RX_UNDERRUN      (unsigned short) 0x2000
                    406: #define FIFOS_RX_STATUS_OVERRUN        (unsigned short) 0x1000
                    407: #define FIFOS_RX_OVERRUN       (unsigned short) 0x0800
                    408: #define FIFOS_TX_OVERRUN       (unsigned short) 0x0400
                    409: 
                    410: /*
                    411:  * Misc defines for various things.
                    412:  */
                    413: #define TAG_ADAPTER                     0xd0
                    414: #define ACTIVATE_ADAPTER_TO_CONFIG      0xff
                    415: #define ENABLE_DRQ_IRQ                  0x0001
                    416: #define MFG_ID                          0x506d  /* `TCM' */
                    417: #define PROD_ID                         0x5090
                    418: #define GO_WINDOW(x)           outw(WINDOW_SELECT|(x),BASE+VX_COMMAND)
                    419: #define JABBER_GUARD_ENABLE    0x40
                    420: #define LINKBEAT_ENABLE                0x80
                    421: #define        ENABLE_UTP              (JABBER_GUARD_ENABLE | LINKBEAT_ENABLE)
                    422: #define DISABLE_UTP            0x0
                    423: #define RX_BYTES_MASK          (unsigned short) (0x07ff)
                    424: #define RX_ERROR        0x4000
                    425: #define RX_INCOMPLETE   0x8000
                    426: #define TX_INDICATE            1<<15
                    427: #define is_eeprom_busy(b)      (inw((b)+VX_W0_EEPROM_COMMAND)&EEPROM_BUSY)
                    428: 
                    429: #define        VX_IOSIZE       0x20
                    430: 
                    431: #define VX_CONNECTORS 8
                    432: 
                    433: /*
                    434:  * Local variables:
                    435:  *  c-basic-offset: 8
                    436:  * End:
                    437:  */

unix.superglobalmegacorp.com

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