[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     ! 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