[BACK]Return to fxpreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/fxpreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: fxpreg.h,v 1.12 2006/06/09 04:04:05 brad Exp $        */
                      2:
                      3: /*
                      4:  * Copyright (c) 1995, David Greenman
                      5:  * All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice unmodified, this list of conditions, and the following
                     12:  *    disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  *
                     29:  *     $FreeBSD: if_fxpreg.h,v 1.13 1998/06/08 09:47:46 bde Exp $
                     30:  */
                     31:
                     32: #define FXP_VENDORID_INTEL     0x8086
                     33: #define FXP_DEVICEID_i82557    0x1229
                     34:
                     35: #define FXP_PCI_MMBA   0x10
                     36: #define FXP_PCI_IOBA   0x14
                     37:
                     38: /*
                     39:  * Control/status registers.
                     40:  */
                     41: #define        FXP_CSR_SCB_RUSCUS      0       /* scb_rus/scb_cus (1 byte) */
                     42: #define        FXP_CSR_SCB_STATACK     1       /* scb_statack (1 byte) */
                     43: #define        FXP_CSR_SCB_COMMAND     2       /* scb_command (1 byte) */
                     44: #define        FXP_CSR_SCB_INTRCNTL    3       /* scb_intrcntl (1 byte) */
                     45: #define        FXP_CSR_SCB_GENERAL     4       /* scb_general (4 bytes) */
                     46: #define        FXP_CSR_PORT            8       /* port (4 bytes) */
                     47: #define        FXP_CSR_FLASHCONTROL    12      /* flash control (2 bytes) */
                     48: #define        FXP_CSR_EEPROMCONTROL   14      /* eeprom control (2 bytes) */
                     49: #define        FXP_CSR_MDICONTROL      16      /* mdi control (4 bytes) */
                     50:
                     51: /*
                     52:  * FOR REFERENCE ONLY, the old definition of FXP_CSR_SCB_RUSCUS:
                     53:  *
                     54:  *     volatile u_int8_t       :2,
                     55:  *                             scb_rus:4,
                     56:  *                             scb_cus:2;
                     57:  */
                     58:
                     59: #define FXP_PORT_SOFTWARE_RESET                0
                     60: #define FXP_PORT_SELFTEST              1
                     61: #define FXP_PORT_SELECTIVE_RESET       2
                     62: #define FXP_PORT_DUMP                  3
                     63:
                     64: #define FXP_SCB_RUS_IDLE               0
                     65: #define FXP_SCB_RUS_SUSPENDED          1
                     66: #define FXP_SCB_RUS_NORESOURCES                2
                     67: #define FXP_SCB_RUS_READY              4
                     68: #define FXP_SCB_RUS_SUSP_NORBDS                9
                     69: #define FXP_SCB_RUS_NORES_NORBDS       10
                     70: #define FXP_SCB_RUS_READY_NORBDS       12
                     71:
                     72: #define FXP_SCB_CUS_IDLE               0
                     73: #define FXP_SCB_CUS_SUSPENDED          1
                     74: #define FXP_SCB_CUS_ACTIVE             2
                     75:
                     76: #define FXP_SCB_STATACK_SWI            0x04
                     77: #define FXP_SCB_STATACK_MDI            0x08
                     78: #define FXP_SCB_STATACK_RNR            0x10
                     79: #define FXP_SCB_STATACK_CNA            0x20
                     80: #define FXP_SCB_STATACK_FR             0x40
                     81: #define FXP_SCB_STATACK_CXTNO          0x80
                     82:
                     83: #define FXP_SCB_COMMAND_CU_NOP         0x00
                     84: #define FXP_SCB_COMMAND_CU_START       0x10
                     85: #define FXP_SCB_COMMAND_CU_RESUME      0x20
                     86: #define FXP_SCB_COMMAND_CU_DUMP_ADR    0x40
                     87: #define FXP_SCB_COMMAND_CU_DUMP                0x50
                     88: #define FXP_SCB_COMMAND_CU_BASE                0x60
                     89: #define FXP_SCB_COMMAND_CU_DUMPRESET   0x70
                     90:
                     91: #define FXP_SCB_COMMAND_RU_NOP         0
                     92: #define FXP_SCB_COMMAND_RU_START       1
                     93: #define FXP_SCB_COMMAND_RU_RESUME      2
                     94: #define FXP_SCB_COMMAND_RU_ABORT       4
                     95: #define FXP_SCB_COMMAND_RU_LOADHDS     5
                     96: #define FXP_SCB_COMMAND_RU_BASE                6
                     97: #define FXP_SCB_COMMAND_RU_RBDRESUME   7
                     98:
                     99: #define        FXP_SCB_INTRCNTL_REQUEST_SWI    0x02
                    100:
                    101: /*
                    102:  * Command block definitions
                    103:  */
                    104: struct fxp_cb_nop {
                    105:        void *fill[2];
                    106:        volatile u_int16_t cb_status;
                    107:        volatile u_int16_t cb_command;
                    108:        volatile u_int32_t link_addr;
                    109: };
                    110: struct fxp_cb_ias {
                    111:        volatile u_int16_t cb_status;
                    112:        volatile u_int16_t cb_command;
                    113:        volatile u_int32_t link_addr;
                    114:        volatile u_int8_t macaddr[6];
                    115: };
                    116: /* I hate bit-fields :-( */ /* SO WHY USE IT, EH? */
                    117:
                    118: /*
                    119:  *  Bitfields cleaned out since it is not endian compatible. OK
                    120:  *  you can define a big endian structure but can never be 100% safe...
                    121:  *
                    122:  *  ANY PROGRAMER TRYING THE STUNT WITH BITFIELDS IN A DEVICE DRIVER
                    123:  *  SHOULD BE PUT UP AGAINST THE WALL, BLINDFOLDED AND SHOT!
                    124:  */
                    125: struct fxp_cb_config {
                    126:         volatile u_int16_t      cb_status;
                    127:         volatile u_int16_t      cb_command;
                    128:         volatile u_int32_t      link_addr;
                    129:         volatile u_int8_t       byte_count;
                    130:         volatile u_int8_t       fifo_limit;
                    131:         volatile u_int8_t       adaptive_ifs;
                    132:         volatile u_int8_t       ctrl0;
                    133:         volatile u_int8_t       rx_dma_bytecount;
                    134:         volatile u_int8_t       tx_dma_bytecount;
                    135:         volatile u_int8_t       ctrl1;
                    136:         volatile u_int8_t       ctrl2;
                    137:         volatile u_int8_t       mediatype;
                    138:         volatile u_int8_t       void2;
                    139:         volatile u_int8_t       ctrl3;
                    140:         volatile u_int8_t       linear_priority;
                    141:         volatile u_int8_t       interfrm_spacing;
                    142:         volatile u_int8_t       void3;
                    143:         volatile u_int8_t       void4;
                    144:         volatile u_int8_t       promiscuous;
                    145:         volatile u_int8_t       void5;
                    146:         volatile u_int8_t       void6;
                    147:         volatile u_int8_t       stripping;
                    148:         volatile u_int8_t       fdx_pin;
                    149:         volatile u_int8_t       multi_ia;
                    150:         volatile u_int8_t       mc_all;
                    151: };
                    152:
                    153: #define MAXMCADDR 80
                    154: struct fxp_cb_mcs {
                    155:        volatile u_int16_t cb_status;
                    156:        volatile u_int16_t cb_command;
                    157:        volatile u_int32_t link_addr;
                    158:        volatile u_int16_t mc_cnt;
                    159:        volatile u_int8_t mc_addr[MAXMCADDR][6];
                    160: };
                    161:
                    162: /*
                    163:  * Number of DMA segments in a TxCB. Note that this is carefully
                    164:  * chosen to make the total struct size an even power of two. It's
                    165:  * critical that no TxCB be split across a page boundary since
                    166:  * no attempt is made to allocate physically contiguous memory.
                    167:  */
                    168: #define        SZ_TXCB         16      /* TX control block head size = 4 32 bit words */
                    169: #define        SZ_TBD          8       /* Fragment ptr/size block size */
                    170: #define FXP_NTXSEG      ((256 - SZ_TXCB) / SZ_TBD)
                    171:
                    172: struct fxp_tbd {
                    173:        volatile u_int32_t tb_addr;
                    174:        volatile u_int32_t tb_size;
                    175: };
                    176: struct fxp_cb_tx {
                    177:        volatile u_int16_t cb_status;
                    178:        volatile u_int16_t cb_command;
                    179:        volatile u_int32_t link_addr;
                    180:        volatile u_int32_t tbd_array_addr;
                    181:        volatile u_int16_t byte_count;
                    182:        volatile u_int8_t tx_threshold;
                    183:        volatile u_int8_t tbd_number;
                    184:        /*
                    185:         * The following isn't actually part of the TxCB.
                    186:         */
                    187:        volatile struct fxp_tbd tbd[FXP_NTXSEG];
                    188: };
                    189:
                    190: /*
                    191:  * Control Block (CB) definitions
                    192:  */
                    193:
                    194: /* status */
                    195: #define FXP_CB_STATUS_OK       0x2000
                    196: #define FXP_CB_STATUS_C                0x8000
                    197: /* commands */
                    198: #define FXP_CB_COMMAND_NOP     0x0
                    199: #define FXP_CB_COMMAND_IAS     0x1
                    200: #define FXP_CB_COMMAND_CONFIG  0x2
                    201: #define FXP_CB_COMMAND_MCAS    0x3
                    202: #define FXP_CB_COMMAND_XMIT    0x4
                    203: #define FXP_CB_COMMAND_UCODE   0x5
                    204: #define FXP_CB_COMMAND_DUMP    0x6
                    205: #define FXP_CB_COMMAND_DIAG    0x7
                    206: /* command flags */
                    207: #define FXP_CB_COMMAND_SF      0x0008  /* simple/flexible mode */
                    208: #define FXP_CB_COMMAND_I       0x2000  /* generate interrupt on completion */
                    209: #define FXP_CB_COMMAND_S       0x4000  /* suspend on completion */
                    210: #define FXP_CB_COMMAND_EL      0x8000  /* end of list */
                    211:
                    212: /*
                    213:  * RFA definitions
                    214:  */
                    215:
                    216: struct fxp_rfa {
                    217:        volatile u_int16_t rfa_status;
                    218:        volatile u_int16_t rfa_control;
                    219:        volatile u_int32_t link_addr;
                    220:        volatile u_int32_t rbd_addr;
                    221:        volatile u_int16_t actual_size;
                    222:        volatile u_int16_t size;
                    223: };
                    224: #define FXP_RFA_STATUS_RCOL    0x0001  /* receive collision */
                    225: #define FXP_RFA_STATUS_IAMATCH 0x0002  /* 0 = matches station address */
                    226: #define FXP_RFA_STATUS_S4      0x0010  /* receive error from PHY */
                    227: #define FXP_RFA_STATUS_TL      0x0020  /* type/length */
                    228: #define FXP_RFA_STATUS_FTS     0x0080  /* frame too short */
                    229: #define FXP_RFA_STATUS_OVERRUN 0x0100  /* DMA overrun */
                    230: #define FXP_RFA_STATUS_RNR     0x0200  /* RU not ready */
                    231: #define FXP_RFA_STATUS_ALIGN   0x0400  /* alignment error */
                    232: #define FXP_RFA_STATUS_CRC     0x0800  /* CRC error */
                    233: #define FXP_RFA_STATUS_OK      0x2000  /* packet received okay */
                    234: #define FXP_RFA_STATUS_C       0x8000  /* packet reception complete */
                    235: #define FXP_RFA_CONTROL_SF     0x08    /* simple/flexible memory mode */
                    236: #define FXP_RFA_CONTROL_H      0x10    /* header RFD */
                    237: #define FXP_RFA_CONTROL_S      0x4000  /* suspend after reception */
                    238: #define FXP_RFA_CONTROL_EL     0x8000  /* end of list */
                    239:
                    240: /*
                    241:  * Statistics dump area definitions
                    242:  */
                    243: struct fxp_stats {
                    244:        volatile u_int32_t tx_good;
                    245:        volatile u_int32_t tx_maxcols;
                    246:        volatile u_int32_t tx_latecols;
                    247:        volatile u_int32_t tx_underruns;
                    248:        volatile u_int32_t tx_lostcrs;
                    249:        volatile u_int32_t tx_deffered;
                    250:        volatile u_int32_t tx_single_collisions;
                    251:        volatile u_int32_t tx_multiple_collisions;
                    252:        volatile u_int32_t tx_total_collisions;
                    253:        volatile u_int32_t rx_good;
                    254:        volatile u_int32_t rx_crc_errors;
                    255:        volatile u_int32_t rx_alignment_errors;
                    256:        volatile u_int32_t rx_rnr_errors;
                    257:        volatile u_int32_t rx_overrun_errors;
                    258:        volatile u_int32_t rx_cdt_errors;
                    259:        volatile u_int32_t rx_shortframes;
                    260:        volatile u_int32_t completion_status;
                    261: };
                    262: #define FXP_STATS_DUMP_COMPLETE        0xa005
                    263: #define FXP_STATS_DR_COMPLETE  0xa007
                    264:
                    265: /*
                    266:  * Serial EEPROM control register bits
                    267:  */
                    268: /* shift clock */
                    269: #define FXP_EEPROM_EESK                0x01
                    270: /* chip select */
                    271: #define FXP_EEPROM_EECS                0x02
                    272: /* data in */
                    273: #define FXP_EEPROM_EEDI                0x04
                    274: /* data out */
                    275: #define FXP_EEPROM_EEDO                0x08
                    276:
                    277: /*
                    278:  * Serial EEPROM opcodes, including start bit
                    279:  */
                    280: #define FXP_EEPROM_OPC_ERASE   0x4
                    281: #define FXP_EEPROM_OPC_WRITE   0x5
                    282: #define FXP_EEPROM_OPC_READ    0x6
                    283:
                    284: /*
                    285:  * Management Data Interface opcodes
                    286:  */
                    287: #define FXP_MDI_WRITE          0x1
                    288: #define FXP_MDI_READ           0x2
                    289:
                    290: /*
                    291:  * PHY device types
                    292:  */
                    293: #define FXP_PHY_DEVICE_MASK    0x3f00
                    294: #define FXP_PHY_SERIAL_ONLY    0x8000
                    295: #define FXP_PHY_NONE           0
                    296: #define FXP_PHY_82553A         1
                    297: #define FXP_PHY_82553C         2
                    298: #define FXP_PHY_82503          3
                    299: #define FXP_PHY_DP83840                4
                    300: #define FXP_PHY_80C240         5
                    301: #define FXP_PHY_80C24          6
                    302: #define FXP_PHY_82555          7
                    303: #define FXP_PHY_DP83840A       10
                    304: #define FXP_PHY_82555B         11
                    305:
                    306: /*
                    307:  * PHY BMCR Basic Mode Control Register
                    308:  */
                    309: #define FXP_PHY_BMCR                   0x0
                    310: #define FXP_PHY_BMCR_FULLDUPLEX                0x0100
                    311: #define FXP_PHY_BMCR_AUTOEN            0x1000
                    312: #define FXP_PHY_BMCR_SPEED_100M                0x2000
                    313:
                    314: /*
                    315:  * DP84830 PHY, PCS Configuration Register
                    316:  */
                    317: #define FXP_DP83840_PCR                        0x17
                    318: #define FXP_DP83840_PCR_LED4_MODE      0x0002  /* 1 = LED4 always indicates full duplex */
                    319: #define FXP_DP83840_PCR_F_CONNECT      0x0020  /* 1 = force link disconnect function bypass */
                    320: #define FXP_DP83840_PCR_BIT8           0x0100
                    321: #define FXP_DP83840_PCR_BIT10          0x0400
                    322:
                    323: #define        MAXUCODESIZE 192
                    324: struct fxp_cb_ucode {
                    325:        volatile u_int16_t cb_status;
                    326:        volatile u_int16_t cb_command;
                    327:        volatile u_int32_t link_addr;
                    328:        volatile u_int32_t ucode[MAXUCODESIZE];
                    329: };
                    330:
                    331: /*
                    332:  * Chip revision values.
                    333:  */
                    334: #define FXP_REV_82557_A                0       /* 82557 A */
                    335: #define FXP_REV_82557_B                1       /* 82557 B */
                    336: #define FXP_REV_82557_C                2       /* 82557 C */
                    337: #define FXP_REV_82558_A4       4       /* 82558 A4 stepping */
                    338: #define FXP_REV_82558_B0       5       /* 82558 B0 stepping */
                    339: #define FXP_REV_82559_A0       8       /* 82559 A0 stepping */
                    340: #define FXP_REV_82559S_A       9       /* 82559S A stepping */
                    341: #define FXP_REV_82550          12
                    342: #define FXP_REV_82550_C                13      /* 82550 C stepping */
                    343: #define FXP_REV_82551_E                14      /* 82551 */
                    344: #define FXP_REV_82551_F                15      /* 82551 */
                    345: #define FXP_REV_82551_10       16      /* 82551 */

CVSweb