Annotation of qemu/roms/ipxe/src/drivers/net/3c509.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 withough 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:  * if_epreg.h,v 1.4 1994/11/13 10:12:37 gibbs Exp Modified by:
        !            23:  *
        !            24:  October 2, 1994
        !            25: 
        !            26:  Modified by: Andres Vega Garcia
        !            27: 
        !            28:  INRIA - Sophia Antipolis, France
        !            29:  e-mail: [email protected]
        !            30:  finger: [email protected]
        !            31: 
        !            32:  */
        !            33: 
        !            34: FILE_LICENCE ( BSD3 );
        !            35: 
        !            36: #include "nic.h"
        !            37: 
        !            38: /*
        !            39:  * Ethernet software status per interface.
        !            40:  */
        !            41: /*
        !            42:  * Some global constants
        !            43:  */
        !            44: 
        !            45: #define TX_INIT_RATE           16
        !            46: #define TX_INIT_MAX_RATE       64
        !            47: #define RX_INIT_LATENCY                64
        !            48: #define RX_INIT_EARLY_THRESH   64
        !            49: #define MIN_RX_EARLY_THRESHF   16      /* not less than ether_header */
        !            50: #define MIN_RX_EARLY_THRESHL   4
        !            51: 
        !            52: #define EEPROMSIZE     0x40
        !            53: #define MAX_EEPROMBUSY 1000
        !            54: #define EP_ID_PORT_START 0x110  /* avoid 0x100 to avoid conflict with SB16 */
        !            55: #define EP_ID_PORT_INC 0x10
        !            56: #define EP_ID_PORT_END 0x200
        !            57: #define EP_TAG_MAX             0x7 /* must be 2^n - 1 */
        !            58: 
        !            59: /*
        !            60:  * Commands to read/write EEPROM trough EEPROM command register (Window 0,
        !            61:  * Offset 0xa)
        !            62:  */
        !            63: #define EEPROM_CMD_RD  0x0080  /* Read:  Address required (5 bits) */
        !            64: #define EEPROM_CMD_WR  0x0040  /* Write: Address required (5 bits) */
        !            65: #define EEPROM_CMD_ERASE 0x00c0        /* Erase: Address required (5 bits) */
        !            66: #define EEPROM_CMD_EWEN        0x0030  /* Erase/Write Enable: No data required */
        !            67: 
        !            68: #define EEPROM_BUSY            (1<<15)
        !            69: #define EEPROM_TST_MODE                (1<<14)
        !            70: 
        !            71: /*
        !            72:  * Some short functions, worth to let them be a macro
        !            73:  */
        !            74: #define is_eeprom_busy(b) (inw((b)+EP_W0_EEPROM_COMMAND)&EEPROM_BUSY)
        !            75: #define GO_WINDOW(b,x) outw(WINDOW_SELECT|(x), (b)+EP_COMMAND)
        !            76: 
        !            77: /**************************************************************************
        !            78:  *
        !            79:  * These define the EEPROM data structure.  They are used in the probe
        !            80:  * function to verify the existance of the adapter after having sent
        !            81:  * the ID_Sequence.
        !            82:  *
        !            83:  * There are others but only the ones we use are defined here.
        !            84:  *
        !            85:  **************************************************************************/
        !            86: 
        !            87: #define EEPROM_NODE_ADDR_0     0x0     /* Word */
        !            88: #define EEPROM_NODE_ADDR_1     0x1     /* Word */
        !            89: #define EEPROM_NODE_ADDR_2     0x2     /* Word */
        !            90: #define EEPROM_PROD_ID         0x3     /* 0x9[0-f]50 */
        !            91: #define EEPROM_MFG_ID          0x7     /* 0x6d50 */
        !            92: #define EEPROM_ADDR_CFG                0x8     /* Base addr */
        !            93: #define EEPROM_RESOURCE_CFG    0x9     /* IRQ. Bits 12-15 */
        !            94: 
        !            95: /**************************************************************************
        !            96:  *
        !            97:  * These are the registers for the 3Com 3c509 and their bit patterns when
        !            98:  * applicable.  They have been taken out the the "EtherLink III Parallel
        !            99:  * Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual
        !           100:  * from 3com.
        !           101:  *
        !           102:  * Getting this document out of 3Com is almost impossible.  However,
        !           103:  * archived copies are available at
        !           104:  * http://www.osdever.net/cottontail/downloads/docs/3c5x9b.zip and
        !           105:  * several other places on the web (search for 3c5x9b.pdf).
        !           106:  *
        !           107:  **************************************************************************/
        !           108: 
        !           109: #define EP_COMMAND             0x0e    /* Write. BASE+0x0e is always a
        !           110:                                         * command reg. */
        !           111: #define EP_STATUS              0x0e    /* Read. BASE+0x0e is always status
        !           112:                                         * reg. */
        !           113: #define EP_WINDOW              0x0f    /* Read. BASE+0x0f is always window
        !           114:                                         * reg. */
        !           115: /*
        !           116:  * Window 0 registers. Setup.
        !           117:  */
        !           118: /* Write */
        !           119: #define EP_W0_EEPROM_DATA      0x0c
        !           120: #define EP_W0_EEPROM_COMMAND   0x0a
        !           121: #define EP_W0_RESOURCE_CFG     0x08
        !           122: #define EP_W0_ADDRESS_CFG      0x06
        !           123: #define EP_W0_CONFIG_CTRL      0x04
        !           124: /* Read */
        !           125: #define EP_W0_PRODUCT_ID       0x02
        !           126: #define EP_W0_MFG_ID           0x00
        !           127: 
        !           128: /*
        !           129:  * Window 1 registers. Operating Set.
        !           130:  */
        !           131: /* Write */
        !           132: #define EP_W1_TX_PIO_WR_2      0x02
        !           133: #define EP_W1_TX_PIO_WR_1      0x00
        !           134: /* Read */
        !           135: #define EP_W1_FREE_TX          0x0c
        !           136: #define EP_W1_TX_STATUS                0x0b    /* byte */
        !           137: #define EP_W1_TIMER            0x0a    /* byte */
        !           138: #define EP_W1_RX_STATUS                0x08
        !           139: #define EP_W1_RX_PIO_RD_2      0x02
        !           140: #define EP_W1_RX_PIO_RD_1      0x00
        !           141: 
        !           142: /*
        !           143:  * Window 2 registers. Station Address Setup/Read
        !           144:  */
        !           145: /* Read/Write */
        !           146: #define EP_W2_ADDR_5           0x05
        !           147: #define EP_W2_ADDR_4           0x04
        !           148: #define EP_W2_ADDR_3           0x03
        !           149: #define EP_W2_ADDR_2           0x02
        !           150: #define EP_W2_ADDR_1           0x01
        !           151: #define EP_W2_ADDR_0           0x00
        !           152: 
        !           153: /*
        !           154:  * Window 3 registers.  FIFO Management.
        !           155:  */
        !           156: /* Read */
        !           157: #define EP_W3_FREE_TX          0x0c
        !           158: #define EP_W3_FREE_RX          0x0a
        !           159: 
        !           160: /*
        !           161:  * Window 4 registers. Diagnostics.
        !           162:  */
        !           163: /* Read/Write */
        !           164: #define EP_W4_MEDIA_TYPE       0x0a
        !           165: #define EP_W4_CTRLR_STATUS     0x08
        !           166: #define EP_W4_NET_DIAG         0x06
        !           167: #define EP_W4_FIFO_DIAG                0x04
        !           168: #define EP_W4_HOST_DIAG                0x02
        !           169: #define EP_W4_TX_DIAG          0x00
        !           170: 
        !           171: /*
        !           172:  * Window 5 Registers.  Results and Internal status.
        !           173:  */
        !           174: /* Read */
        !           175: #define EP_W5_READ_0_MASK      0x0c
        !           176: #define EP_W5_INTR_MASK                0x0a
        !           177: #define EP_W5_RX_FILTER                0x08
        !           178: #define EP_W5_RX_EARLY_THRESH  0x06
        !           179: #define EP_W5_TX_AVAIL_THRESH  0x02
        !           180: #define EP_W5_TX_START_THRESH  0x00
        !           181: 
        !           182: /*
        !           183:  * Window 6 registers. Statistics.
        !           184:  */
        !           185: /* Read/Write */
        !           186: #define TX_TOTAL_OK            0x0c
        !           187: #define RX_TOTAL_OK            0x0a
        !           188: #define TX_DEFERRALS           0x08
        !           189: #define RX_FRAMES_OK           0x07
        !           190: #define TX_FRAMES_OK           0x06
        !           191: #define RX_OVERRUNS            0x05
        !           192: #define TX_COLLISIONS          0x04
        !           193: #define TX_AFTER_1_COLLISION   0x03
        !           194: #define TX_AFTER_X_COLLISIONS  0x02
        !           195: #define TX_NO_SQE              0x01
        !           196: #define TX_CD_LOST             0x00
        !           197: 
        !           198: /****************************************
        !           199:  *
        !           200:  * Register definitions.
        !           201:  *
        !           202:  ****************************************/
        !           203: 
        !           204: /*
        !           205:  * Command register. All windows.
        !           206:  *
        !           207:  * 16 bit register.
        !           208:  *     15-11:  5-bit code for command to be executed.
        !           209:  *     10-0:   11-bit arg if any. For commands with no args;
        !           210:  *           this can be set to anything.
        !           211:  */
        !           212: #define GLOBAL_RESET           (unsigned short) 0x0000 /* Wait at least 1ms
        !           213:                                                         * after issuing */
        !           214: #define WINDOW_SELECT          (unsigned short) (0x1<<11)
        !           215: #define START_TRANSCEIVER      (unsigned short) (0x2<<11)      /* Read ADDR_CFG reg to
        !           216:                                                         * determine whether
        !           217:                                                         * this is needed. If
        !           218:                                                         * so; wait 800 uSec
        !           219:                                                         * before using trans-
        !           220:                                                         * ceiver. */
        !           221: #define RX_DISABLE             (unsigned short) (0x3<<11)      /* state disabled on
        !           222:                                                         * power-up */
        !           223: #define RX_ENABLE              (unsigned short) (0x4<<11)
        !           224: #define RX_RESET               (unsigned short) (0x5<<11)
        !           225: #define RX_DISCARD_TOP_PACK    (unsigned short) (0x8<<11)
        !           226: #define TX_ENABLE              (unsigned short) (0x9<<11)
        !           227: #define TX_DISABLE             (unsigned short) (0xa<<11)
        !           228: #define TX_RESET               (unsigned short) (0xb<<11)
        !           229: #define REQ_INTR               (unsigned short) (0xc<<11)
        !           230: #define SET_INTR_MASK          (unsigned short) (0xe<<11)
        !           231: #define SET_RD_0_MASK          (unsigned short) (0xf<<11)
        !           232: #define SET_RX_FILTER          (unsigned short) (0x10<<11)
        !           233: #define FIL_INDIVIDUAL (unsigned short) (0x1)
        !           234: #define FIL_GROUP              (unsigned short) (0x2)
        !           235: #define FIL_BRDCST     (unsigned short) (0x4)
        !           236: #define FIL_ALL                (unsigned short) (0x8)
        !           237: #define SET_RX_EARLY_THRESH    (unsigned short) (0x11<<11)
        !           238: #define SET_TX_AVAIL_THRESH    (unsigned short) (0x12<<11)
        !           239: #define SET_TX_START_THRESH    (unsigned short) (0x13<<11)
        !           240: #define STATS_ENABLE           (unsigned short) (0x15<<11)
        !           241: #define STATS_DISABLE          (unsigned short) (0x16<<11)
        !           242: #define STOP_TRANSCEIVER       (unsigned short) (0x17<<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: 
        !           257: /*
        !           258:  * Status register. All windows.
        !           259:  *
        !           260:  *     15-13:  Window number(0-7).
        !           261:  *     12:     Command_in_progress.
        !           262:  *     11:     reserved.
        !           263:  *     10:     reserved.
        !           264:  *     9:      reserved.
        !           265:  *     8:      reserved.
        !           266:  *     7:      Update Statistics.
        !           267:  *     6:      Interrupt Requested.
        !           268:  *     5:      RX Early.
        !           269:  *     4:      RX Complete.
        !           270:  *     3:      TX Available.
        !           271:  *     2:      TX Complete.
        !           272:  *     1:      Adapter Failure.
        !           273:  *     0:      Interrupt Latch.
        !           274:  */
        !           275: #define S_INTR_LATCH           (unsigned short) (0x1)
        !           276: #define S_CARD_FAILURE         (unsigned short) (0x2)
        !           277: #define S_TX_COMPLETE          (unsigned short) (0x4)
        !           278: #define S_TX_AVAIL             (unsigned short) (0x8)
        !           279: #define S_RX_COMPLETE          (unsigned short) (0x10)
        !           280: #define S_RX_EARLY             (unsigned short) (0x20)
        !           281: #define S_INT_RQD              (unsigned short) (0x40)
        !           282: #define S_UPD_STATS            (unsigned short) (0x80)
        !           283: #define S_5_INTS               (S_CARD_FAILURE|S_TX_COMPLETE|\
        !           284:                                 S_TX_AVAIL|S_RX_COMPLETE|S_RX_EARLY)
        !           285: #define S_COMMAND_IN_PROGRESS  (unsigned short) (0x1000)
        !           286: 
        !           287: /*
        !           288:  * FIFO Registers.
        !           289:  * RX Status. Window 1/Port 08
        !           290:  *
        !           291:  *     15:     Incomplete or FIFO empty.
        !           292:  *     14:     1: Error in RX Packet   0: Incomplete or no error.
        !           293:  *     13-11:  Type of error.
        !           294:  *           1000 = Overrun.
        !           295:  *           1011 = Run Packet Error.
        !           296:  *           1100 = Alignment Error.
        !           297:  *           1101 = CRC Error.
        !           298:  *           1001 = Oversize Packet Error (>1514 bytes)
        !           299:  *           0010 = Dribble Bits.
        !           300:  *           (all other error codes, no errors.)
        !           301:  *
        !           302:  *     10-0:   RX Bytes (0-1514)
        !           303:  */
        !           304: #define ERR_RX_INCOMPLETE      (unsigned short) (0x1<<15)
        !           305: #define ERR_RX                 (unsigned short) (0x1<<14)
        !           306: #define ERR_RX_OVERRUN         (unsigned short) (0x8<<11)
        !           307: #define ERR_RX_RUN_PKT         (unsigned short) (0xb<<11)
        !           308: #define ERR_RX_ALIGN           (unsigned short) (0xc<<11)
        !           309: #define ERR_RX_CRC             (unsigned short) (0xd<<11)
        !           310: #define ERR_RX_OVERSIZE                (unsigned short) (0x9<<11)
        !           311: #define ERR_RX_DRIBBLE         (unsigned short) (0x2<<11)
        !           312: 
        !           313: /*
        !           314:  * FIFO Registers.
        !           315:  * TX Status. Window 1/Port 0B
        !           316:  *
        !           317:  *   Reports the transmit status of a completed transmission. Writing this
        !           318:  *   register pops the transmit completion stack.
        !           319:  *
        !           320:  *   Window 1/Port 0x0b.
        !           321:  *
        !           322:  *     7:      Complete
        !           323:  *     6:      Interrupt on successful transmission requested.
        !           324:  *     5:      Jabber Error (TP Only, TX Reset required. )
        !           325:  *     4:      Underrun (TX Reset required. )
        !           326:  *     3:      Maximum Collisions.
        !           327:  *     2:      TX Status Overflow.
        !           328:  *     1-0:    Undefined.
        !           329:  *
        !           330:  */
        !           331: #define TXS_COMPLETE           0x80
        !           332: #define TXS_SUCCES_INTR_REQ            0x40
        !           333: #define TXS_JABBER             0x20
        !           334: #define TXS_UNDERRUN           0x10
        !           335: #define TXS_MAX_COLLISION      0x8
        !           336: #define TXS_STATUS_OVERFLOW    0x4
        !           337: 
        !           338: /*
        !           339:  * Configuration control register.
        !           340:  * Window 0/Port 04
        !           341:  */
        !           342: /* Read */
        !           343: #define IS_AUI                         (1<<13)
        !           344: #define IS_BNC                         (1<<12)
        !           345: #define IS_UTP                         (1<<9)
        !           346: /* Write */
        !           347: #define ENABLE_DRQ_IRQ                 0x0001
        !           348: #define W0_P4_CMD_RESET_ADAPTER                0x4
        !           349: #define W0_P4_CMD_ENABLE_ADAPTER       0x1
        !           350: /*
        !           351:  * Media type and status.
        !           352:  * Window 4/Port 0A
        !           353:  */
        !           354: #define ENABLE_UTP                     0xc0
        !           355: #define DISABLE_UTP                    0x0
        !           356: 
        !           357: /*
        !           358:  * Resource control register
        !           359:  */
        !           360: 
        !           361: #define SET_IRQ(i)     ( ((i)<<12) | 0xF00) /* set IRQ i */
        !           362: 
        !           363: /*
        !           364:  * Receive status register
        !           365:  */
        !           366: 
        !           367: #define RX_BYTES_MASK                  (unsigned short) (0x07ff)
        !           368: #define RX_ERROR       0x4000
        !           369: #define RX_INCOMPLETE  0x8000
        !           370: 
        !           371: /*
        !           372:  * Misc defines for various things.
        !           373:  */
        !           374: #define MFG_ID                         0x6d50 /* in EEPROM and W0 ADDR_CONFIG */
        !           375: #define PROD_ID                                0x9150
        !           376: 
        !           377: #define AUI                            0x1
        !           378: #define BNC                            0x2
        !           379: #define UTP                            0x4
        !           380: 
        !           381: #define RX_BYTES_MASK                  (unsigned short) (0x07ff)
        !           382: 
        !           383: /*
        !           384:  * Function shared between 3c509.c and 3c529.c
        !           385:  */
        !           386: extern int t5x9_probe ( struct nic *nic,
        !           387:                        uint16_t prod_id_check, uint16_t prod_id_mask );
        !           388: extern void t5x9_disable ( struct nic *nic );
        !           389: 
        !           390: /*
        !           391:  * Local variables:
        !           392:  *  c-basic-offset: 8
        !           393:  * End:
        !           394:  */

unix.superglobalmegacorp.com

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