root/dev/pci/if_myxreg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: if_myxreg.h,v 1.2 2007/06/01 18:07:08 reyk Exp $      */
    2 
    3 /*
    4  * Copyright (c) 2007 Reyk Floeter <reyk@openbsd.org>
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   17  */
   18 
   19 /*
   20  * Register definitions for the Myricom Myri-10G Lanai-Z8E Ethernet chipsets.
   21  */
   22 
   23 #ifndef _MYX_REG_H
   24 #define _MYX_REG_H
   25 
   26 /*
   27  * Common definitions
   28  */
   29 
   30 #define MYXBAR0                 PCI_MAPREG_START
   31 
   32 #define MYX_NRXDESC             256
   33 #define MYX_NTXDESC_MIN         2
   34 #define MYX_IRQCOALDELAY        30
   35 #define MYX_IRQDEASSERTWAIT     1
   36 #define MYX_MAX_MTU_SMALL       (ETHERMTU + ETHER_HDR_LEN + 4)
   37 #define MYX_MAX_MTU_BIG         PAGE_SIZE
   38 
   39 #define MYXALIGN_CMD            64
   40 #define MYXALIGN_DATA           PAGE_SIZE
   41 
   42 #define MYX_ADDRHIGH(_v)        ((_v >> 32) & 0xffffffff)
   43 #define MYX_ADDRLOW(_v)         (_v & 0xffffffff)
   44 
   45 /*
   46  * PCI memory/register layout
   47  */
   48 
   49 #define MYX_SRAM                0x00000000      /* SRAM offset */
   50 #define MYX_SRAM_SIZE           0x001dff00      /* SRAM size */
   51 #define  MYX_HEADER_POS         0x0000003c      /* Header position offset */
   52 #define  MYX_HEADER_POS_SIZE    0x00000004      /* Header position size */
   53 #define  MYX_FW                 0x00100000      /* Firmware offset */
   54 #define   MYX_FW_BOOT           0x00100008      /* Firmware boot offset */
   55 #define  MYX_EEPROM             0x001dfe00      /* EEPROM offset */
   56 #define  MYX_EEPROM_SIZE        0x00000100      /* EEPROM size */
   57 #define MYX_BOOT                0x00fc0000      /* Boot handoff */
   58 #define MYX_RDMA                0x00fc01c0      /* Dummy RDMA */
   59 #define MYX_CMD                 0x00f80000      /* Command offset */
   60 
   61 /*
   62  * Firmware definitions
   63  */
   64 
   65 #define MYXFW_ALIGNED           "myx-eth_z8e"
   66 #define MYXFW_UNALIGNED         "myx-ethp_z8e"
   67 #define MYXFW_TYPE_ETH          0x45544820
   68 #define MYXFW_VER               "1.4."          /* stored as a string... */
   69 
   70 #define MYXFW_MIN_LEN           (MYX_HEADER_POS + MYX_HEADER_POS_SIZE)
   71 
   72 struct myx_firmware_hdr {
   73         u_int32_t       fw_hdrlength;
   74         u_int32_t       fw_type;
   75         u_int8_t        fw_version[128];
   76         u_int32_t       fw_sram_size;
   77         u_int32_t       fw_specs;
   78         u_int32_t       fw_specs_len;
   79 } __packed;
   80 
   81 
   82 /*
   83  * Commands, descriptors, and DMA structures
   84  */
   85 
   86 struct myx_cmd {
   87         u_int32_t       mc_cmd;
   88         u_int32_t       mc_data0;
   89         u_int32_t       mc_data1;
   90         u_int32_t       mc_data2;
   91         u_int32_t       mc_addr_high;
   92         u_int32_t       mc_addr_low;
   93         u_int8_t        mc_pad[40];             /* pad up to 64 bytes */
   94 } __packed;
   95 
   96 struct myx_response {
   97         u_int32_t       mr_data;
   98         u_int32_t       mr_result;
   99 } __packed;
  100 
  101 struct myx_bootcmd {
  102         u_int32_t       bc_addr_high;
  103         u_int32_t       bc_addr_low;
  104         u_int32_t       bc_result;
  105         u_int32_t       bc_offset;
  106         u_int32_t       bc_length;
  107         u_int32_t       bc_copyto;
  108         u_int32_t       bc_jumpto;
  109         u_int8_t        bc_pad[36];             /* pad up to 64 bytes */
  110 } __packed;
  111 
  112 struct myx_rdmacmd {
  113         u_int32_t       rc_addr_high;
  114         u_int32_t       rc_addr_low;
  115         u_int32_t       rc_result;
  116         u_int32_t       rc_rdma_high;
  117         u_int32_t       rc_rdma_low;
  118         u_int32_t       rc_enable;
  119 #define  MYXRDMA_ON     1
  120 #define  MYXRDMA_OFF    0
  121         u_int8_t        rc_pad[40];             /* pad up to 64 bytes */
  122 } __packed;
  123 
  124 struct myx_status {
  125         u_int32_t       ms_reserved;
  126         u_int32_t       ms_dropped_pause;
  127         u_int32_t       ms_dropped_unicast;
  128         u_int32_t       ms_dropped_crc32err;
  129         u_int32_t       ms_dropped_phyerr;
  130         u_int32_t       ms_dropped_mcast;
  131         u_int32_t       ms_txdonecnt;
  132         u_int32_t       ms_linkstate;
  133 #define  MYXSTS_LINKDOWN        0
  134 #define  MYXSTS_LINKUP          1
  135 #define  MYXSTS_LINKMYRINET     2
  136 #define  MYXSTS_LINKUNKNOWN     3
  137         u_int32_t       ms_dropped_linkoverflow;
  138         u_int32_t       ms_dropped_linkerror;
  139         u_int32_t       ms_dropped_runt;
  140         u_int32_t       ms_dropped_overrun;
  141         u_int32_t       ms_dropped_smallbufunderrun;
  142         u_int32_t       ms_dropped_bigbufunderrun;
  143         u_int32_t       ms_rdmatags_available;
  144 #define  MYXSTS_RDMAON  1
  145 #define  MYXSTS_RDMAOFF 0
  146         u_int8_t        ms_txstopped;
  147         u_int8_t        ms_linkdowncnt;
  148         u_int8_t        ms_statusupdated;
  149         u_int8_t        ms_isvalid;
  150 } __packed;
  151 
  152 struct myx_rxdesc {
  153         u_int16_t       rx_csum;
  154         u_int16_t       rx_length;
  155 } __packed;
  156 
  157 struct myx_rxbufdesc {
  158         u_int32_t       rb_addr_high;
  159         u_int32_t       rb_addr_low;
  160 } __packed;
  161 
  162 struct myx_txdesc {
  163         u_int32_t       tx_addr_high;
  164         u_int32_t       tx_addr_low;
  165         u_int16_t       tx_hdr_offset;
  166         u_int16_t       tx_length;
  167         u_int8_t        tx_pad;
  168         u_int8_t        tx_nsegs;
  169         u_int8_t        tx_cksum_offset;
  170         u_int8_t        tx_flags;
  171 #define  MYXTXD_FLAGS_SMALL     (1<<0)
  172 #define  MYXTXD_FLAGS_FIRST     (1<<1)
  173 #define  MYXTXD_FLAGS_ALIGN_ODD (1<<2)
  174 #define  MYXTXD_FLAGS_CKSUM     (1<<3)
  175 #define  MYXTXD_FLAGS_NO_TSO    (1<<4)
  176 
  177 #define  MYXTXD_FLAGS_TSO_HDR   (1<<0)
  178 #define  MYXTXD_FLAGS_TSO_LAST  (1<<3)
  179 #define  MYXTXD_FLAGS_TSO_CHOP  (1<<4)
  180 #define  MYXTXD_FLAGS_TSO_PLD   (1<<5)
  181 } __packed;
  182 
  183 enum {
  184         MYXCMD_NONE                     = 0,
  185         MYXCMD_RESET                    = 1,
  186         MYXCMD_GET_VERSION              = 2,
  187         MYXCMD_SET_INTRQDMA             = 3,
  188         MYXCMD_SET_BIGBUFSZ             = 4,
  189         MYXCMD_SET_SMALLBUFSZ           = 5,
  190         MYXCMD_GET_TXRINGOFF            = 6,
  191         MYXCMD_GET_RXSMALLRINGOFF       = 7,
  192         MYXCMD_GET_RXBIGRINGOFF         = 8,
  193         MYXCMD_GET_INTRACKOFF           = 9,
  194         MYXCMD_GET_INTRDEASSERTOFF      = 10,
  195         MYXCMD_GET_TXRINGSZ             = 11,
  196         MYXCMD_GET_RXRINGSZ             = 12,
  197         MYXCMD_SET_INTRQSZ              = 13,
  198         MYXCMD_SET_IFUP                 = 14,
  199         MYXCMD_SET_IFDOWN               = 15,
  200         MYXCMD_SET_MTU                  = 16,
  201         MYXCMD_GET_INTRCOALDELAYOFF     = 17,
  202         MYXCMD_SET_STATSINTVL           = 18,
  203         MYXCMD_SET_STATSDMA_OLD         = 19,
  204         MYXCMD_SET_PROMISC              = 20,
  205         MYXCMD_UNSET_PROMISC            = 21,
  206         MYXCMD_SET_LLADDR               = 22,
  207         MYXCMD_SET_FC                   = 23,
  208         MYXCMD_UNSET_FC                 = 24,
  209 #define  MYXCMD_FC_DEFAULT              MYXCMD_SET_FC   /* set flow control */
  210         MYXCMD_DMA_TEST                 = 25,
  211         MYXCMD_SET_ALLMULTI             = 26,
  212         MYXCMD_UNSET_ALLMULTI           = 27,
  213         MYXCMD_SET_MCASTGROUP           = 28,
  214         MYXCMD_UNSET_MCASTGROUP         = 29,
  215         MYXCMD_UNSET_MCAST              = 30,
  216         MYXCMD_SET_STATSDMA             = 31,
  217         MYXCMD_UNALIGNED_DMA_TEST       = 32,
  218         MYXCMD_GET_UNALIGNED_STATUS     = 33,
  219         MYXCMD_MAX                      = 34
  220 };
  221 
  222 enum {
  223         MYXCMD_OK                       = 0,
  224         MYXCMD_UNKNOWN                  = 1,
  225         MYXCMD_ERR_RANGE                = 2,
  226         MYXCMD_ERR_BUSY                 = 3,
  227         MYXCMD_ERR_EMPTY                = 4,
  228         MYXCMD_ERR_CLOSED               = 5,
  229         MYXCMD_ERR_HASH                 = 6,
  230         MYXCMD_ERR_BADPORT              = 7,
  231         MYXCMD_ERR_RES                  = 8,
  232         MYXCMD_ERR_MULTICAST            = 9,
  233         MYXCMD_ERR_UNALIGNED            = 10
  234 };
  235 
  236 #endif /* _MYX_REG_H */

/* [<][>][^][v][top][bottom][index][help] */