The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ic/i82557reg.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: i82557reg.h,v 1.25 2011/09/02 03:16:19 msaitoh Exp $   */
    2 
    3 /*-
    4  * Copyright (c) 1998, 1999, 2001 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
    9  * NASA Ames Research Center.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   30  * POSSIBILITY OF SUCH DAMAGE.
   31  */
   32 
   33 /*
   34  * Copyright (c) 1995, David Greenman
   35  * Copyright (c) 2001 Jonathan Lemon <jlemon@freebsd.org>
   36  * All rights reserved.
   37  *
   38  * Redistribution and use in source and binary forms, with or without
   39  * modification, are permitted provided that the following conditions
   40  * are met:
   41  * 1. Redistributions of source code must retain the above copyright
   42  *    notice unmodified, this list of conditions, and the following
   43  *    disclaimer.
   44  * 2. Redistributions in binary form must reproduce the above copyright
   45  *    notice, this list of conditions and the following disclaimer in the
   46  *    documentation and/or other materials provided with the distribution.
   47  *
   48  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   49  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   50  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   51  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   52  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   53  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   54  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   55  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   56  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   57  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   58  * SUCH DAMAGE.
   59  *
   60  *      Id: if_fxpreg.h,v 1.24 2001/05/15 18:52:40 jlemon Exp
   61  */
   62 
   63 #define FXP_PCI_MMBA    0x10
   64 #define FXP_PCI_IOBA    0x14
   65 
   66 /*
   67  * Control/status registers.
   68  */
   69 #define FXP_CSR_SCB_RUSCUS      0x00    /* scb_rus/scb_cus (1 byte) */
   70 #define FXP_CSR_SCB_STATACK     0x01    /* scb_statack (1 byte) */
   71 #define FXP_CSR_SCB_COMMAND     0x02    /* scb_command (1 byte) */
   72 #define FXP_CSR_SCB_INTRCNTL    0x03    /* scb_intrcntl (1 byte) */
   73 #define FXP_CSR_SCB_GENERAL     0x04    /* scb_general (4 bytes) */
   74 #define FXP_CSR_PORT            0x08    /* port (4 bytes) */
   75 #define FXP_CSR_FLASHCONTROL    0x0c    /* flash control (2 bytes) */
   76 #define FXP_CSR_EEPROMCONTROL   0x0e    /* eeprom control (2 bytes) */
   77 #define FXP_CSR_MDICONTROL      0x10    /* mdi control (4 bytes) */
   78 #define FXP_CSR_FLOWCONTROL     0x19    /* flow control (2 bytes) */
   79 
   80 /*
   81  * FOR REFERENCE ONLY, the old definition of FXP_CSR_SCB_RUSCUS:
   82  *
   83  *      volatile uint8_t        :2,
   84  *                              scb_rus:4,
   85  *                              scb_cus:2;
   86  */
   87 
   88 #define FXP_PORT_SOFTWARE_RESET         0
   89 #define FXP_PORT_SELFTEST               1
   90 #define FXP_PORT_SELECTIVE_RESET        2
   91 #define FXP_PORT_DUMP                   3
   92 
   93 #define FXP_SCB_RUS_IDLE                0
   94 #define FXP_SCB_RUS_SUSPENDED           1
   95 #define FXP_SCB_RUS_NORESOURCES         2
   96 #define FXP_SCB_RUS_READY               4
   97 #define FXP_SCB_RUS_SUSP_NORBDS         9
   98 #define FXP_SCB_RUS_NORES_NORBDS        10
   99 #define FXP_SCB_RUS_READY_NORBDS        12
  100 
  101 #define FXP_SCB_CUS_IDLE                0
  102 #define FXP_SCB_CUS_SUSPENDED           1
  103 #define FXP_SCB_CUS_ACTIVE              2
  104 
  105 #define FXP_SCB_INTR_DISABLE            0x01    /* disable all interrupts */
  106 #define FXP_SCB_INTR_SWI                0x02    /* generate SWI */
  107 #define FXP_SCB_INTMASK_FCP             0x04
  108 #define FXP_SCB_INTMASK_ER              0x08
  109 #define FXP_SCB_INTMASK_RNR             0x10
  110 #define FXP_SCB_INTMASK_CNA             0x20
  111 #define FXP_SCB_INTMASK_FR              0x40
  112 #define FXP_SCB_INTMASK_CXTNO           0x80
  113 
  114 #define FXP_SCB_STATACK_FCP             0x01    /* flow control pause */
  115 #define FXP_SCB_STATACK_ER              0x02    /* early receive */
  116 #define FXP_SCB_STATACK_SWI             0x04
  117 #define FXP_SCB_STATACK_MDI             0x08
  118 #define FXP_SCB_STATACK_RNR             0x10
  119 #define FXP_SCB_STATACK_CNA             0x20
  120 #define FXP_SCB_STATACK_FR              0x40
  121 #define FXP_SCB_STATACK_CXTNO           0x80
  122 
  123 #define FXP_SCB_COMMAND_CU_NOP          0x00
  124 #define FXP_SCB_COMMAND_CU_START        0x10
  125 #define FXP_SCB_COMMAND_CU_RESUME       0x20
  126 #define FXP_SCB_COMMAND_CU_DUMP_ADR     0x40
  127 #define FXP_SCB_COMMAND_CU_DUMP         0x50
  128 #define FXP_SCB_COMMAND_CU_BASE         0x60
  129 #define FXP_SCB_COMMAND_CU_DUMPRESET    0x70
  130 
  131 #define FXP_SCB_COMMAND_RU_NOP          0
  132 #define FXP_SCB_COMMAND_RU_START        1
  133 #define FXP_SCB_COMMAND_RU_RESUME       2
  134 #define FXP_SCB_COMMAND_RU_ABORT        4
  135 #define FXP_SCB_COMMAND_RU_LOADHDS      5
  136 #define FXP_SCB_COMMAND_RU_BASE         6
  137 #define FXP_SCB_COMMAND_RU_RBDRESUME    7
  138 
  139 #define FXP_SCB_INTRCNTL_REQUEST_SWI    0x02
  140 /*
  141  * Command block definitions
  142  */
  143 
  144 /*
  145  * NOP command.
  146  */
  147 struct fxp_cb_nop {
  148         volatile uint16_t cb_status;
  149         volatile uint16_t cb_command;
  150         volatile uint32_t link_addr;
  151 };
  152 
  153 /*
  154  * Individual Address command.
  155  */
  156 struct fxp_cb_ias {
  157         volatile uint16_t cb_status;
  158         volatile uint16_t cb_command;
  159         volatile uint32_t link_addr;
  160         uint8_t macaddr[6];
  161 };
  162 
  163 #if BYTE_ORDER == LITTLE_ENDIAN
  164 #define __FXP_BITFIELD2(a, b)                   a, b
  165 #define __FXP_BITFIELD3(a, b, c)                a, b, c
  166 #define __FXP_BITFIELD4(a, b, c, d)             a, b, c, d
  167 #define __FXP_BITFIELD5(a, b, c, d, e)          a, b, c, d, e
  168 #define __FXP_BITFIELD6(a, b, c, d, e, f)       a, b, c, d, e, f
  169 #define __FXP_BITFIELD7(a, b, c, d, e, f, g)    a, b, c, d, e, f, g
  170 #define __FXP_BITFIELD8(a, b, c, d, e, f, g, h) a, b, c, d, e, f, g, h
  171 #else
  172 #define __FXP_BITFIELD2(a, b)                   b, a
  173 #define __FXP_BITFIELD3(a, b, c)                c, b, a
  174 #define __FXP_BITFIELD4(a, b, c, d)             d, c, b, a
  175 #define __FXP_BITFIELD5(a, b, c, d, e)          e, d, c, b, a
  176 #define __FXP_BITFIELD6(a, b, c, d, e, f)       f, e, d, c, b, a
  177 #define __FXP_BITFIELD7(a, b, c, d, e, f, g)    g, f, e, d, c, b, a
  178 #define __FXP_BITFIELD8(a, b, c, d, e, f, g, h) h, g, f, e, d, c, b, a
  179 #endif
  180 
  181 /*
  182  * Configure command.
  183  */
  184 struct fxp_cb_config {
  185         volatile uint16_t       cb_status;
  186         volatile uint16_t       cb_command;
  187         volatile uint32_t       link_addr;
  188 
  189         /* Bytes 0 - 21 -- common to all i8255x */
  190 /**/   volatile uint8_t        __FXP_BITFIELD2(byte_count:6, :2);
  191 /*1*/   volatile uint8_t        __FXP_BITFIELD3(rx_fifo_limit:4,
  192                                     tx_fifo_limit:3,
  193                                     :1);
  194 /*2*/   volatile uint8_t        adaptive_ifs;
  195 /*3*/   volatile uint8_t        __FXP_BITFIELD5(mwi_enable:1,   /* 8,9 */
  196                                     type_enable:1,              /* 8,9 */
  197                                     read_align_en:1,            /* 8,9 */
  198                                     end_wr_on_cl:1,             /* 8,9 */
  199                                     :4);
  200 /*4*/   volatile uint8_t        __FXP_BITFIELD2(rx_dma_bytecount:7,
  201                                     :1);
  202 /*5*/   volatile uint8_t        __FXP_BITFIELD2(tx_dma_bytecount:7,
  203                                     dma_mbce:1);
  204 /*6*/   volatile uint8_t        __FXP_BITFIELD8(late_scb:1,     /* 7 */
  205                                     direct_dma_dis:1,           /* 8,9 */
  206                                     tno_int_or_tco_en:1,        /* 7,9 */
  207                                     ci_int:1,
  208                                     ext_txcb_dis:1,             /* 8,9 */
  209                                     ext_stats_dis:1,            /* 8,9 */
  210                                     keep_overrun_rx:1,
  211                                     save_bf:1);
  212 /*7*/   volatile uint8_t        __FXP_BITFIELD6(disc_short_rx:1,
  213                                     underrun_retry:2,
  214                                     :2,
  215                                     ext_rfa:1,                  /* 0 */
  216                                     two_frames:1,               /* 8,9 */
  217                                     dyn_tbd:1);                 /* 8,9 */
  218 /*8*/   volatile uint8_t        __FXP_BITFIELD3(mediatype:1,    /* 7 */
  219                                     :6,
  220                                     csma_dis:1);                /* 8,9 */
  221 /*9*/   volatile uint8_t        __FXP_BITFIELD6(tcp_udp_cksum:1,/* 9 */
  222                                     :3,
  223                                     vlan_tco:1,                 /* 8,9 */
  224                                     link_wake_en:1,             /* 8,9 */
  225                                     arp_wake_en:1,              /* 8 */
  226                                     mc_wake_en:1);              /* 8 */
  227 /*10*/  volatile uint8_t        __FXP_BITFIELD4(:3,
  228                                     nsai:1,
  229                                     preamble_length:2,
  230                                     loopback:2);
  231 /*11*/  volatile uint8_t        __FXP_BITFIELD2(linear_priority:3,/* 7 */
  232                                     :5);
  233 /*12*/  volatile uint8_t        __FXP_BITFIELD3(linear_pri_mode:1,/* 7 */
  234                                     :3,
  235                                     interfrm_spacing:4);
  236 /*13*/  volatile uint8_t        :8;
  237 /*14*/  volatile uint8_t        :8;
  238 /*15*/  volatile uint8_t        __FXP_BITFIELD8(promiscuous:1,
  239                                     bcast_disable:1,
  240                                     wait_after_win:1,           /* 8,9 */
  241                                     :1,
  242                                     ignore_ul:1,                /* 8,9 */
  243                                     crc16_en:1,                 /* 9 */
  244                                     :1,
  245                                     crscdt:1);
  246 /*16*/  volatile uint8_t        fc_delay_lsb:8;                 /* 8,9 */
  247 /*17*/  volatile uint8_t        fc_delay_msb:8;                 /* 8,9 */
  248 /*18*/  volatile uint8_t        __FXP_BITFIELD6(stripping:1,
  249                                     padding:1,
  250                                     rcv_crc_xfer:1,
  251                                     long_rx_en:1,               /* 8,9 */
  252                                     pri_fc_thresh:3,            /* 8,9 */
  253                                     :1);
  254 /*19*/  volatile uint8_t        __FXP_BITFIELD8(ia_wake_en:1,   /* 8 */
  255                                     magic_pkt_dis:1,            /* 8,9,!9ER */
  256                                     tx_fc_dis:1,                /* 8,9 */
  257                                     rx_fc_restop:1,             /* 8,9 */
  258                                     rx_fc_restart:1,            /* 8,9 */
  259                                     fc_filter:1,                /* 8,9 */
  260                                     force_fdx:1,
  261                                     fdx_pin_en:1);
  262 /*20*/  volatile uint8_t        __FXP_BITFIELD4(:5,
  263                                     pri_fc_loc:1                /* 8,9 */,
  264                                     multi_ia:1,
  265                                     :1);
  266 /*21*/  volatile uint8_t        __FXP_BITFIELD3(:3, mc_all:1, :4);
  267 
  268         /* Bytes 22 - 31 -- i82550 only */
  269 /*22*/  volatile uint8_t        __FXP_BITFIELD3(ext_rx_mode:1,
  270                                     vlan_drop_en:1,
  271                                     :6);
  272         volatile uint8_t        reserved[9];
  273 };
  274 
  275 #define FXP_CONFIG_LEN          22      /* i8255x */
  276 #define FXP_EXT_CONFIG_LEN      32      /* i82550 */
  277 
  278 /*
  279  * Multicast setup command.
  280  */
  281 #define MAXMCADDR 80
  282 struct fxp_cb_mcs {
  283         volatile uint16_t cb_status;
  284         volatile uint16_t cb_command;
  285         volatile uint32_t link_addr;
  286         volatile uint16_t mc_cnt;
  287         uint8_t mc_addr[MAXMCADDR][6];
  288 };
  289 
  290 #define MAXUCODESIZE            192
  291 struct fxp_cb_ucode {
  292         volatile uint16_t cb_status;
  293         volatile uint16_t cb_command;
  294         volatile uint32_t link_addr;
  295         uint32_t ucode[MAXUCODESIZE];
  296 };
  297 
  298 struct fxp_ipcb {
  299         /*
  300          * The following fields are valid only when
  301          * using the IPCB command block for TX checksum offload
  302          * (and TCP large send, VLANs, and (I think) IPsec). To use
  303          * them, you must enable extended TxCBs (available only
  304          * on the 82559 and later) and use the IPCBXMIT command.
  305          * Note that Intel defines the IPCB to be 32 bytes long,
  306          * the last 8 bytes of which comprise the first entry
  307          * in the TBD array. This means we only have to define
  308          * 8 extra bytes here.
  309          */
  310         volatile uint16_t ipcb_schedule_low;
  311         volatile uint8_t ipcb_ip_schedule;
  312         volatile uint8_t ipcb_ip_activation_high;
  313         volatile uint16_t ipcb_vlan_id;
  314         volatile uint8_t ipcb_ip_header_offset;
  315         volatile uint8_t ipcb_tcp_header_offset;
  316 };
  317 
  318 /*
  319  * IPCB field definitions
  320  */
  321 /* for ipcb_ip_schedule */
  322 #define FXP_IPCB_IP_CHECKSUM_ENABLE     0x10
  323 #define FXP_IPCB_TCPUDP_CHECKSUM_ENABLE 0x20
  324 #define FXP_IPCB_TCP_PACKET             0x40
  325 #define FXP_IPCB_LARGESEND_ENABLE       0x80
  326 /* for ipcb_ip_activation_high */
  327 #define FXP_IPCB_HARDWAREPARSING_ENABLE 0x01
  328 #define FXP_IPCB_INSERTVLAN_ENABLE      0x02
  329 
  330 /*
  331  * hardware ip4csum-tx on fxp(4) doesn't set IP checksums properly
  332  * if the TX IP packet length is 21 or 22 bytes and it requires autopadding.
  333  * To avoid this bug, we have to pad such very short packets manually.
  334  */
  335 #define FXP_IP4CSUMTX_MINLEN    22
  336 #define FXP_IP4CSUMTX_PADLEN    (ETHER_HDR_LEN + FXP_IP4CSUMTX_MINLEN)
  337 
  338 /*
  339  * Transmit command.
  340  */
  341 struct fxp_cb_tx {
  342         volatile uint16_t cb_status;
  343         volatile uint16_t cb_command;
  344         volatile uint32_t link_addr;
  345         volatile uint32_t tbd_array_addr;
  346         volatile uint16_t byte_count;
  347         volatile uint8_t tx_threshold;
  348         volatile uint8_t tbd_number;
  349         /*
  350          * If using the extended TxCB feature, there is a
  351          * two TBDs right here.  We handle this in the
  352          * fxp_control_data in i82557var.h.
  353          */
  354 };
  355 
  356 /*
  357  * Transmit buffer descriptors.
  358  */
  359 struct fxp_tbd {
  360         volatile uint32_t tb_addr;
  361         volatile uint32_t tb_size;
  362 };
  363 
  364 /*
  365  * Control Block (CB) definitions
  366  */
  367 
  368 /* status */
  369 #define FXP_CB_STATUS_OK        0x2000
  370 #define FXP_CB_STATUS_C         0x8000
  371 
  372 /* commands */
  373 #define FXP_CB_COMMAND_CMD      0x0007
  374 #define FXP_CB_COMMAND_NOP      0x0
  375 #define FXP_CB_COMMAND_IAS      0x1
  376 #define FXP_CB_COMMAND_CONFIG   0x2
  377 #define FXP_CB_COMMAND_MCAS     0x3
  378 #define FXP_CB_COMMAND_XMIT     0x4
  379 #define FXP_CB_COMMAND_UCODE    0x5
  380 #define FXP_CB_COMMAND_DUMP     0x6
  381 #define FXP_CB_COMMAND_DIAG     0x7
  382 #define FXP_CB_COMMAND_IPCBXMIT 0x9
  383 
  384 /* command flags */
  385 #define FXP_CB_COMMAND_SF       0x0008  /* simple/flexible mode */
  386 #define FXP_CB_COMMAND_I        0x2000  /* generate interrupt on completion */
  387 #define FXP_CB_COMMAND_S        0x4000  /* suspend on completion */
  388 #define FXP_CB_COMMAND_EL       0x8000  /* end of list */
  389 
  390 /*
  391  * Receive Frame Area.
  392  *
  393  * NOTE!  The RFA will NOT be aligned on a 4-byte boundary in the DMA
  394  * area!  To prevent EGCS from optimizing the copy of link_addr and
  395  * rbd_addr (which would cause an unaligned access fault on RISC systems),
  396  * we must make them an array of bytes!
  397  */
  398 struct fxp_rfa {
  399         /* Fields common to all i8255x chips. */
  400         volatile uint16_t rfa_status;
  401         volatile uint16_t rfa_control;
  402         volatile uint8_t link_addr[4];
  403         volatile uint8_t rbd_addr[4];
  404         volatile uint16_t actual_size;
  405         volatile uint16_t size;
  406 
  407         /* Fields available only on the i82550/i82551 in extended RFD mode. */
  408         volatile uint16_t vlan_id;
  409         volatile uint8_t rx_parse_stat;
  410         volatile uint8_t reserved;
  411         volatile uint16_t security_stat;
  412         volatile uint8_t cksum_stat;
  413         volatile uint8_t zerocopy_stat;
  414         volatile uint8_t unused[8];
  415 };
  416 
  417 #define RFA_SIZE                16
  418 #define RFA_EXT_SIZE            32
  419 
  420 #define FXP_RFA_STATUS_RCOL     0x0001  /* receive collision */
  421 #define FXP_RFA_STATUS_IAMATCH  0x0002  /* 0 = matches station address */
  422 #define FXP_RFA_STATUS_NOAMATCH 0x0004  /* 1 = doesn't match anything */
  423 #define FXP_RFA_STATUS_PARSE    0x0008  /* pkt parse ok (82550/1 only) */
  424 #define FXP_RFA_STATUS_S4       0x0010  /* receive error from PHY */
  425 #define FXP_RFA_STATUS_TL       0x0020  /* type/length */
  426 #define FXP_RFA_STATUS_FTS      0x0080  /* frame too short */
  427 #define FXP_RFA_STATUS_OVERRUN  0x0100  /* DMA overrun */
  428 #define FXP_RFA_STATUS_RNR      0x0200  /* no resources */
  429 #define FXP_RFA_STATUS_ALIGN    0x0400  /* alignment error */
  430 #define FXP_RFA_STATUS_CRC      0x0800  /* CRC error */
  431 #define FXP_RFA_STATUS_VLAN     0x1000  /* VLAN */
  432 #define FXP_RFA_STATUS_OK       0x2000  /* packet received okay */
  433 #define FXP_RFA_STATUS_C        0x8000  /* packet reception complete */
  434 
  435 #define FXP_RFA_CONTROL_SF      0x0008  /* simple/flexible memory mode */
  436 #define FXP_RFA_CONTROL_H       0x0010  /* header RFD */
  437 #define FXP_RFA_CONTROL_S       0x4000  /* suspend after reception */
  438 #define FXP_RFA_CONTROL_EL      0x8000  /* end of list */
  439 
  440 /* Bits in the 'cksum_stat' byte */
  441 #define FXP_RFDX_CS_TCPUDP_CSUM_BIT_VALID       0x10
  442 #define FXP_RFDX_CS_TCPUDP_CSUM_VALID           0x20
  443 #define FXP_RFDX_CS_IP_CSUM_BIT_VALID           0x01
  444 #define FXP_RFDX_CS_IP_CSUM_VALID               0x02
  445 
  446 /* Bits in the 'rx_parse_stat' byte */
  447 #define FXP_RFDX_P_PARSE_BIT                    0x08
  448 #define FXP_RFDX_P_CSUM_PROTOCOL_MASK           0x03
  449 #define FXP_RFDX_P_TCP_PACKET                   0x00
  450 #define FXP_RFDX_P_UDP_PACKET                   0x01
  451 #define FXP_RFDX_P_IP_PACKET                    0x03
  452 
  453 /*
  454  * Statistics dump area definitions
  455  */
  456 struct fxp_stats {
  457         volatile uint32_t tx_good;
  458         volatile uint32_t tx_maxcols;
  459         volatile uint32_t tx_latecols;
  460         volatile uint32_t tx_underruns;
  461         volatile uint32_t tx_lostcrs;
  462         volatile uint32_t tx_deferred;
  463         volatile uint32_t tx_single_collisions;
  464         volatile uint32_t tx_multiple_collisions;
  465         volatile uint32_t tx_total_collisions;
  466         volatile uint32_t rx_good;
  467         volatile uint32_t rx_crc_errors;
  468         volatile uint32_t rx_alignment_errors;
  469         volatile uint32_t rx_rnr_errors;
  470         volatile uint32_t rx_overrun_errors;
  471         volatile uint32_t rx_cdt_errors;
  472         volatile uint32_t rx_shortframes;
  473         volatile uint32_t tx_pauseframes;
  474 #define completion_status       tx_pauseframes
  475         volatile uint32_t rx_pauseframes;
  476         volatile uint32_t rx_unsupportedframes;
  477         volatile uint32_t tx_tco_frames;
  478         volatile uint32_t rx_tco_frames;
  479         volatile uint32_t ext_completion_status;
  480 };
  481 #define FXP_STATS_DUMP_COMPLETE 0xa005
  482 #define FXP_STATS_DR_COMPLETE   0xa007
  483 
  484 /*
  485  * Serial EEPROM control register bits
  486  */
  487 #define FXP_EEPROM_EESK         0x01            /* shift clock */
  488 #define FXP_EEPROM_EECS         0x02            /* chip select */
  489 #define FXP_EEPROM_EEDI         0x04            /* data in */
  490 #define FXP_EEPROM_EEDO         0x08            /* data out */
  491 
  492 /*
  493  * Serial EEPROM opcodes, including start bit
  494  */
  495 #define FXP_EEPROM_OPC_ERASE    0x4
  496 #define FXP_EEPROM_OPC_WRITE    0x5
  497 #define FXP_EEPROM_OPC_READ     0x6
  498 
  499 /*
  500  * Management Data Interface opcodes
  501  */
  502 #define FXP_MDI_WRITE           0x1
  503 #define FXP_MDI_READ            0x2
  504 
  505 /*
  506  * PHY device types (from EEPROM)
  507  */
  508 #define FXP_PHY_DEVICE_MASK     0x3f00
  509 #define FXP_PHY_DEVICE_SHIFT    8
  510 #define FXP_PHY_DEVADDR_MASK    0x00ff
  511 #define FXP_PHY_SERIAL_ONLY     0x8000
  512 #define FXP_PHY_NONE            0
  513 #define FXP_PHY_82553A          1
  514 #define FXP_PHY_82553C          2
  515 #define FXP_PHY_82503           3
  516 #define FXP_PHY_DP83840         4
  517 #define FXP_PHY_80C240          5
  518 #define FXP_PHY_80C24           6
  519 #define FXP_PHY_82555           7
  520 #define FXP_PHY_DP83840A        10
  521 #define FXP_PHY_DP82555B        11
  522 
  523 /*
  524  * PCI revisions.
  525  */
  526 #define FXP_REV_82558_A4        4
  527 #define FXP_REV_82558_B0        5
  528 #define FXP_REV_82559_A0        8
  529 #define FXP_REV_82559S_A        9
  530 #define FXP_REV_82550           12
  531 #define FXP_REV_82550_C         13
  532 #define FXP_REV_82551_E         14      /* 82551 */
  533 #define FXP_REV_82551_F         15
  534 #define FXP_REV_82551_10        16      /* 82551 */

Cache object: 8f971e02ab4aa4b3c795da5c002e8e7a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.