Annotation of qemu/roms/ipxe/src/drivers/net/3c595.h, revision 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.