Annotation of qemu/roms/ipxe/src/drivers/net/myri10ge_mcp.h, revision 1.1.1.1

1.1       root        1: /************************************************* -*- linux-c -*-
                      2:  * Myricom 10Gb Network Interface Card Software
                      3:  * Copyright 2005-2010, Myricom, Inc.
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or
                      6:  * modify it under the terms of the GNU General Public License,
                      7:  * version 2, as published by the Free Software Foundation.
                      8:  *
                      9:  * This program is distributed in the hope that it will be useful,
                     10:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     12:  * GNU General Public License for more details.
                     13:  *
                     14:  * You should have received a copy of the GNU General Public License
                     15:  * along with this program; if not, write to the Free Software
                     16:  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     17:  ****************************************************************/
                     18: 
                     19: FILE_LICENCE ( GPL2_ONLY );
                     20: 
                     21: #ifndef _myri10ge_mcp_h
                     22: #define _myri10ge_mcp_h
                     23: 
                     24: #define MXGEFW_VERSION_MAJOR   1
                     25: #define MXGEFW_VERSION_MINOR   4
                     26: 
                     27: #ifdef MXGEFW
                     28: #ifndef _stdint_h_
                     29: typedef signed char          int8_t;
                     30: typedef signed short        int16_t;
                     31: typedef signed int          int32_t;
                     32: typedef signed long long    int64_t;
                     33: typedef unsigned char       uint8_t;
                     34: typedef unsigned short     uint16_t;
                     35: typedef unsigned int       uint32_t;
                     36: typedef unsigned long long uint64_t;
                     37: #endif
                     38: #endif
                     39: 
                     40: /* 8 Bytes */
                     41: struct mcp_dma_addr {
                     42:   uint32_t high;
                     43:   uint32_t low;
                     44: };
                     45: typedef struct mcp_dma_addr mcp_dma_addr_t;
                     46: 
                     47: /* 4 Bytes */
                     48: struct mcp_slot {
                     49:   uint16_t checksum;
                     50:   uint16_t length;
                     51: };
                     52: typedef struct mcp_slot mcp_slot_t;
                     53: 
                     54: #ifdef MXGEFW_NDIS
                     55: /* 8-byte descriptor, exclusively used by NDIS drivers. */
                     56: struct mcp_slot_8 {
                     57:   /* Place hash value at the top so it gets written before length.
                     58:    * The driver polls length.
                     59:    */
                     60:   uint32_t hash;
                     61:   uint16_t checksum;
                     62:   uint16_t length;
                     63: };
                     64: typedef struct mcp_slot_8 mcp_slot_8_t;
                     65: 
                     66: /* Two bits of length in mcp_slot are used to indicate hash type. */
                     67: #define MXGEFW_RSS_HASH_NULL (0 << 14) /* bit 15:14 = 00 */
                     68: #define MXGEFW_RSS_HASH_IPV4 (1 << 14) /* bit 15:14 = 01 */
                     69: #define MXGEFW_RSS_HASH_TCP_IPV4 (2 << 14) /* bit 15:14 = 10 */
                     70: #define MXGEFW_RSS_HASH_MASK (3 << 14) /* bit 15:14 = 11 */
                     71: #endif
                     72: 
                     73: /* 64 Bytes */
                     74: struct mcp_cmd {
                     75:   uint32_t cmd;
                     76:   uint32_t data0;      /* will be low portion if data > 32 bits */
                     77:   /* 8 */
                     78:   uint32_t data1;      /* will be high portion if data > 32 bits */
                     79:   uint32_t data2;      /* currently unused.. */
                     80:   /* 16 */
                     81:   struct mcp_dma_addr response_addr;
                     82:   /* 24 */
                     83:   uint8_t pad[40];
                     84: };
                     85: typedef struct mcp_cmd mcp_cmd_t;
                     86: 
                     87: /* 8 Bytes */
                     88: struct mcp_cmd_response {
                     89:   uint32_t data;
                     90:   uint32_t result;
                     91: };
                     92: typedef struct mcp_cmd_response mcp_cmd_response_t;
                     93: 
                     94: 
                     95: 
                     96: /*
                     97:    flags used in mcp_kreq_ether_send_t:
                     98: 
                     99:    The SMALL flag is only needed in the first segment. It is raised
                    100:    for packets that are total less or equal 512 bytes.
                    101: 
                    102:    The CKSUM flag must be set in all segments.
                    103: 
                    104:    The PADDED flags is set if the packet needs to be padded, and it
                    105:    must be set for all segments.
                    106: 
                    107:    The  MXGEFW_FLAGS_ALIGN_ODD must be set if the cumulative
                    108:    length of all previous segments was odd.
                    109: */
                    110: 
                    111: 
                    112: #define MXGEFW_FLAGS_SMALL      0x1
                    113: #define MXGEFW_FLAGS_TSO_HDR    0x1
                    114: #define MXGEFW_FLAGS_FIRST      0x2
                    115: #define MXGEFW_FLAGS_ALIGN_ODD  0x4
                    116: #define MXGEFW_FLAGS_CKSUM      0x8
                    117: #define MXGEFW_FLAGS_TSO_LAST   0x8
                    118: #define MXGEFW_FLAGS_NO_TSO     0x10
                    119: #define MXGEFW_FLAGS_TSO_CHOP   0x10
                    120: #define MXGEFW_FLAGS_TSO_PLD    0x20
                    121: 
                    122: #define MXGEFW_SEND_SMALL_SIZE  1520
                    123: #define MXGEFW_MAX_MTU          9400
                    124: 
                    125: union mcp_pso_or_cumlen {
                    126:   uint16_t pseudo_hdr_offset;
                    127:   uint16_t cum_len;
                    128: };
                    129: typedef union mcp_pso_or_cumlen mcp_pso_or_cumlen_t;
                    130: 
                    131: #define        MXGEFW_MAX_SEND_DESC 12
                    132: #define MXGEFW_PAD         2
                    133: 
                    134: /* 16 Bytes */
                    135: struct mcp_kreq_ether_send {
                    136:   uint32_t addr_high;
                    137:   uint32_t addr_low;
                    138:   uint16_t pseudo_hdr_offset;
                    139:   uint16_t length;
                    140:   uint8_t  pad;
                    141:   uint8_t  rdma_count;
                    142:   uint8_t  cksum_offset;       /* where to start computing cksum */
                    143:   uint8_t  flags;              /* as defined above */
                    144: };
                    145: typedef struct mcp_kreq_ether_send mcp_kreq_ether_send_t;
                    146: 
                    147: /* 8 Bytes */
                    148: struct mcp_kreq_ether_recv {
                    149:   uint32_t addr_high;
                    150:   uint32_t addr_low;
                    151: };
                    152: typedef struct mcp_kreq_ether_recv mcp_kreq_ether_recv_t;
                    153: 
                    154: 
                    155: /* Commands */
                    156: 
                    157: #define        MXGEFW_BOOT_HANDOFF     0xfc0000
                    158: #define        MXGEFW_BOOT_DUMMY_RDMA  0xfc01c0
                    159: 
                    160: #define        MXGEFW_ETH_CMD          0xf80000
                    161: #define        MXGEFW_ETH_SEND_4       0x200000
                    162: #define        MXGEFW_ETH_SEND_1       0x240000
                    163: #define        MXGEFW_ETH_SEND_2       0x280000
                    164: #define        MXGEFW_ETH_SEND_3       0x2c0000
                    165: #define        MXGEFW_ETH_RECV_SMALL   0x300000
                    166: #define        MXGEFW_ETH_RECV_BIG     0x340000
                    167: #define        MXGEFW_ETH_SEND_GO      0x380000
                    168: #define        MXGEFW_ETH_SEND_STOP    0x3C0000
                    169: 
                    170: #define        MXGEFW_ETH_SEND(n)              (0x200000 + (((n) & 0x03) * 0x40000))
                    171: #define        MXGEFW_ETH_SEND_OFFSET(n)       (MXGEFW_ETH_SEND(n) - MXGEFW_ETH_SEND_4)
                    172: 
                    173: enum myri10ge_mcp_cmd_type {
                    174:   MXGEFW_CMD_NONE = 0,
                    175:   /* Reset the mcp, it is left in a safe state, waiting
                    176:      for the driver to set all its parameters */
                    177:   MXGEFW_CMD_RESET = 1,
                    178: 
                    179:   /* get the version number of the current firmware..
                    180:      (may be available in the eeprom strings..? */
                    181:   MXGEFW_GET_MCP_VERSION = 2,
                    182: 
                    183: 
                    184:   /* Parameters which must be set by the driver before it can
                    185:      issue MXGEFW_CMD_ETHERNET_UP. They persist until the next
                    186:      MXGEFW_CMD_RESET is issued */
                    187: 
                    188:   MXGEFW_CMD_SET_INTRQ_DMA = 3,
                    189:   /* data0 = LSW of the host address
                    190:    * data1 = MSW of the host address
                    191:    * data2 = slice number if multiple slices are used
                    192:    */
                    193: 
                    194:   MXGEFW_CMD_SET_BIG_BUFFER_SIZE = 4,  /* in bytes, power of 2 */
                    195:   MXGEFW_CMD_SET_SMALL_BUFFER_SIZE = 5,        /* in bytes */
                    196: 
                    197: 
                    198:   /* Parameters which refer to lanai SRAM addresses where the
                    199:      driver must issue PIO writes for various things */
                    200: 
                    201:   MXGEFW_CMD_GET_SEND_OFFSET = 6,
                    202:   MXGEFW_CMD_GET_SMALL_RX_OFFSET = 7,
                    203:   MXGEFW_CMD_GET_BIG_RX_OFFSET = 8,
                    204:   /* data0 = slice number if multiple slices are used */
                    205: 
                    206:   MXGEFW_CMD_GET_IRQ_ACK_OFFSET = 9,
                    207:   MXGEFW_CMD_GET_IRQ_DEASSERT_OFFSET = 10,
                    208: 
                    209:   /* Parameters which refer to rings stored on the MCP,
                    210:      and whose size is controlled by the mcp */
                    211: 
                    212:   MXGEFW_CMD_GET_SEND_RING_SIZE = 11,  /* in bytes */
                    213:   MXGEFW_CMD_GET_RX_RING_SIZE = 12,    /* in bytes */
                    214: 
                    215:   /* Parameters which refer to rings stored in the host,
                    216:      and whose size is controlled by the host.  Note that
                    217:      all must be physically contiguous and must contain
                    218:      a power of 2 number of entries.  */
                    219: 
                    220:   MXGEFW_CMD_SET_INTRQ_SIZE = 13,      /* in bytes */
                    221: #define MXGEFW_CMD_SET_INTRQ_SIZE_FLAG_NO_STRICT_SIZE_CHECK  (1 << 31)
                    222: 
                    223:   /* command to bring ethernet interface up.  Above parameters
                    224:      (plus mtu & mac address) must have been exchanged prior
                    225:      to issuing this command  */
                    226:   MXGEFW_CMD_ETHERNET_UP = 14,
                    227: 
                    228:   /* command to bring ethernet interface down.  No further sends
                    229:      or receives may be processed until an MXGEFW_CMD_ETHERNET_UP
                    230:      is issued, and all interrupt queues must be flushed prior
                    231:      to ack'ing this command */
                    232: 
                    233:   MXGEFW_CMD_ETHERNET_DOWN = 15,
                    234: 
                    235:   /* commands the driver may issue live, without resetting
                    236:      the nic.  Note that increasing the mtu "live" should
                    237:      only be done if the driver has already supplied buffers
                    238:      sufficiently large to handle the new mtu.  Decreasing
                    239:      the mtu live is safe */
                    240: 
                    241:   MXGEFW_CMD_SET_MTU = 16,
                    242:   MXGEFW_CMD_GET_INTR_COAL_DELAY_OFFSET = 17,  /* in microseconds */
                    243:   MXGEFW_CMD_SET_STATS_INTERVAL = 18,   /* in microseconds */
                    244:   MXGEFW_CMD_SET_STATS_DMA_OBSOLETE = 19, /* replaced by SET_STATS_DMA_V2 */
                    245: 
                    246:   MXGEFW_ENABLE_PROMISC = 20,
                    247:   MXGEFW_DISABLE_PROMISC = 21,
                    248:   MXGEFW_SET_MAC_ADDRESS = 22,
                    249: 
                    250:   MXGEFW_ENABLE_FLOW_CONTROL = 23,
                    251:   MXGEFW_DISABLE_FLOW_CONTROL = 24,
                    252: 
                    253:   /* do a DMA test
                    254:      data0,data1 = DMA address
                    255:      data2       = RDMA length (MSH), WDMA length (LSH)
                    256:      command return data = repetitions (MSH), 0.5-ms ticks (LSH)
                    257:   */
                    258:   MXGEFW_DMA_TEST = 25,
                    259: 
                    260:   MXGEFW_ENABLE_ALLMULTI = 26,
                    261:   MXGEFW_DISABLE_ALLMULTI = 27,
                    262: 
                    263:   /* returns MXGEFW_CMD_ERROR_MULTICAST
                    264:      if there is no room in the cache
                    265:      data0,MSH(data1) = multicast group address */
                    266:   MXGEFW_JOIN_MULTICAST_GROUP = 28,
                    267:   /* returns MXGEFW_CMD_ERROR_MULTICAST
                    268:      if the address is not in the cache,
                    269:      or is equal to FF-FF-FF-FF-FF-FF
                    270:      data0,MSH(data1) = multicast group address */
                    271:   MXGEFW_LEAVE_MULTICAST_GROUP = 29,
                    272:   MXGEFW_LEAVE_ALL_MULTICAST_GROUPS = 30,
                    273: 
                    274:   MXGEFW_CMD_SET_STATS_DMA_V2 = 31,
                    275:   /* data0, data1 = bus addr,
                    276:    * data2 = sizeof(struct mcp_irq_data) from driver point of view, allows
                    277:    * adding new stuff to mcp_irq_data without changing the ABI
                    278:    *
                    279:    * If multiple slices are used, data2 contains both the size of the
                    280:    * structure (in the lower 16 bits) and the slice number
                    281:    * (in the upper 16 bits).
                    282:    */
                    283: 
                    284:   MXGEFW_CMD_UNALIGNED_TEST = 32,
                    285:   /* same than DMA_TEST (same args) but abort with UNALIGNED on unaligned
                    286:      chipset */
                    287: 
                    288:   MXGEFW_CMD_UNALIGNED_STATUS = 33,
                    289:   /* return data = boolean, true if the chipset is known to be unaligned */
                    290: 
                    291:   MXGEFW_CMD_ALWAYS_USE_N_BIG_BUFFERS = 34,
                    292:   /* data0 = number of big buffers to use.  It must be 0 or a power of 2.
                    293:    * 0 indicates that the NIC consumes as many buffers as they are required
                    294:    * for packet. This is the default behavior.
                    295:    * A power of 2 number indicates that the NIC always uses the specified
                    296:    * number of buffers for each big receive packet.
                    297:    * It is up to the driver to ensure that this value is big enough for
                    298:    * the NIC to be able to receive maximum-sized packets.
                    299:    */
                    300: 
                    301:   MXGEFW_CMD_GET_MAX_RSS_QUEUES = 35,
                    302:   MXGEFW_CMD_ENABLE_RSS_QUEUES = 36,
                    303:   /* data0 = number of slices n (0, 1, ..., n-1) to enable
                    304:    * data1 = interrupt mode | use of multiple transmit queues.
                    305:    * 0=share one INTx/MSI.
                    306:    * 1=use one MSI-X per queue.
                    307:    * If all queues share one interrupt, the driver must have set
                    308:    * RSS_SHARED_INTERRUPT_DMA before enabling queues.
                    309:    * 2=enable both receive and send queues.
                    310:    * Without this bit set, only one send queue (slice 0's send queue)
                    311:    * is enabled.  The receive queues are always enabled.
                    312:    */
                    313: #define MXGEFW_SLICE_INTR_MODE_SHARED          0x0
                    314: #define MXGEFW_SLICE_INTR_MODE_ONE_PER_SLICE   0x1
                    315: #define MXGEFW_SLICE_ENABLE_MULTIPLE_TX_QUEUES 0x2
                    316: 
                    317:   MXGEFW_CMD_GET_RSS_SHARED_INTERRUPT_MASK_OFFSET = 37,
                    318:   MXGEFW_CMD_SET_RSS_SHARED_INTERRUPT_DMA = 38,
                    319:   /* data0, data1 = bus address lsw, msw */
                    320:   MXGEFW_CMD_GET_RSS_TABLE_OFFSET = 39,
                    321:   /* get the offset of the indirection table */
                    322:   MXGEFW_CMD_SET_RSS_TABLE_SIZE = 40,
                    323:   /* set the size of the indirection table */
                    324:   MXGEFW_CMD_GET_RSS_KEY_OFFSET = 41,
                    325:   /* get the offset of the secret key */
                    326:   MXGEFW_CMD_RSS_KEY_UPDATED = 42,
                    327:   /* tell nic that the secret key's been updated */
                    328:   MXGEFW_CMD_SET_RSS_ENABLE = 43,
                    329:   /* data0 = enable/disable rss
                    330:    * 0: disable rss.  nic does not distribute receive packets.
                    331:    * 1: enable rss.  nic distributes receive packets among queues.
                    332:    * data1 = hash type
                    333:    * 1: IPV4            (required by RSS)
                    334:    * 2: TCP_IPV4        (required by RSS)
                    335:    * 3: IPV4 | TCP_IPV4 (required by RSS)
                    336:    * 4: source port
                    337:    * 5: source port + destination port
                    338:    */
                    339: #define MXGEFW_RSS_HASH_TYPE_IPV4      0x1
                    340: #define MXGEFW_RSS_HASH_TYPE_TCP_IPV4  0x2
                    341: #define MXGEFW_RSS_HASH_TYPE_SRC_PORT  0x4
                    342: #define MXGEFW_RSS_HASH_TYPE_SRC_DST_PORT 0x5
                    343: #define MXGEFW_RSS_HASH_TYPE_MAX 0x5
                    344: 
                    345:   MXGEFW_CMD_GET_MAX_TSO6_HDR_SIZE = 44,
                    346:   /* Return data = the max. size of the entire headers of a IPv6 TSO packet.
                    347:    * If the header size of a IPv6 TSO packet is larger than the specified
                    348:    * value, then the driver must not use TSO.
                    349:    * This size restriction only applies to IPv6 TSO.
                    350:    * For IPv4 TSO, the maximum size of the headers is fixed, and the NIC
                    351:    * always has enough header buffer to store maximum-sized headers.
                    352:    */
                    353: 
                    354:   MXGEFW_CMD_SET_TSO_MODE = 45,
                    355:   /* data0 = TSO mode.
                    356:    * 0: Linux/FreeBSD style (NIC default)
                    357:    * 1: NDIS/NetBSD style
                    358:    */
                    359: #define MXGEFW_TSO_MODE_LINUX  0
                    360: #define MXGEFW_TSO_MODE_NDIS   1
                    361: 
                    362:   MXGEFW_CMD_MDIO_READ = 46,
                    363:   /* data0 = dev_addr (PMA/PMD or PCS ...), data1 = register/addr */
                    364:   MXGEFW_CMD_MDIO_WRITE = 47,
                    365:   /* data0 = dev_addr,  data1 = register/addr, data2 = value  */
                    366: 
                    367:   MXGEFW_CMD_I2C_READ = 48,
                    368:   /* Starts to get a fresh copy of one byte or of the module i2c table, the
                    369:    * obtained data is cached inside the xaui-xfi chip :
                    370:    *   data0 :  0 => get one byte, 1=> get 256 bytes
                    371:    *   data1 :  If data0 == 0: location to refresh
                    372:    *               bit 7:0  register location
                    373:    *               bit 8:15 is the i2c slave addr (0 is interpreted as 0xA1)
                    374:    *               bit 23:16 is the i2c bus number (for multi-port NICs)
                    375:    *            If data0 == 1: unused
                    376:    * The operation might take ~1ms for a single byte or ~65ms when refreshing all 256 bytes
                    377:    * During the i2c operation,  MXGEFW_CMD_I2C_READ or MXGEFW_CMD_I2C_BYTE attempts
                    378:    *  will return MXGEFW_CMD_ERROR_BUSY
                    379:    */
                    380:   MXGEFW_CMD_I2C_BYTE = 49,
                    381:   /* Return the last obtained copy of a given byte in the xfp i2c table
                    382:    * (copy cached during the last relevant MXGEFW_CMD_I2C_READ)
                    383:    *   data0 : index of the desired table entry
                    384:    *  Return data = the byte stored at the requested index in the table
                    385:    */
                    386: 
                    387:   MXGEFW_CMD_GET_VPUMP_OFFSET = 50,
                    388:   /* Return data = NIC memory offset of mcp_vpump_public_global */
                    389:   MXGEFW_CMD_RESET_VPUMP = 51,
                    390:   /* Resets the VPUMP state */
                    391: 
                    392:   MXGEFW_CMD_SET_RSS_MCP_SLOT_TYPE = 52,
                    393:   /* data0 = mcp_slot type to use.
                    394:    * 0 = the default 4B mcp_slot
                    395:    * 1 = 8B mcp_slot_8
                    396:    */
                    397: #define MXGEFW_RSS_MCP_SLOT_TYPE_MIN        0
                    398: #define MXGEFW_RSS_MCP_SLOT_TYPE_WITH_HASH  1
                    399: 
                    400:   MXGEFW_CMD_SET_THROTTLE_FACTOR = 53,
                    401:   /* set the throttle factor for ethp_z8e
                    402:      data0 = throttle_factor
                    403:      throttle_factor = 256 * pcie-raw-speed / tx_speed
                    404:      tx_speed = 256 * pcie-raw-speed / throttle_factor
                    405: 
                    406:      For PCI-E x8: pcie-raw-speed == 16Gb/s
                    407:      For PCI-E x4: pcie-raw-speed == 8Gb/s
                    408: 
                    409:      ex1: throttle_factor == 0x1a0 (416), tx_speed == 1.23GB/s == 9.846 Gb/s
                    410:      ex2: throttle_factor == 0x200 (512), tx_speed == 1.0GB/s == 8 Gb/s
                    411: 
                    412:      with tx_boundary == 2048, max-throttle-factor == 8191 => min-speed == 500Mb/s
                    413:      with tx_boundary == 4096, max-throttle-factor == 4095 => min-speed == 1Gb/s
                    414:   */
                    415: 
                    416:   MXGEFW_CMD_VPUMP_UP = 54,
                    417:   /* Allocates VPump Connection, Send Request and Zero copy buffer address tables */
                    418:   MXGEFW_CMD_GET_VPUMP_CLK = 55,
                    419:   /* Get the lanai clock */
                    420: 
                    421:   MXGEFW_CMD_GET_DCA_OFFSET = 56,
                    422:   /* offset of dca control for WDMAs */
                    423: 
                    424:   /* VMWare NetQueue commands */
                    425:   MXGEFW_CMD_NETQ_GET_FILTERS_PER_QUEUE = 57,
                    426:   MXGEFW_CMD_NETQ_ADD_FILTER = 58,
                    427:   /* data0 = filter_id << 16 | queue << 8 | type */
                    428:   /* data1 = MS4 of MAC Addr */
                    429:   /* data2 = LS2_MAC << 16 | VLAN_tag */
                    430:   MXGEFW_CMD_NETQ_DEL_FILTER = 59,
                    431:   /* data0 = filter_id */
                    432:   MXGEFW_CMD_NETQ_QUERY1 = 60,
                    433:   MXGEFW_CMD_NETQ_QUERY2 = 61,
                    434:   MXGEFW_CMD_NETQ_QUERY3 = 62,
                    435:   MXGEFW_CMD_NETQ_QUERY4 = 63,
                    436: 
                    437:   MXGEFW_CMD_RELAX_RXBUFFER_ALIGNMENT = 64,
                    438:   /* When set, small receive buffers can cross page boundaries.
                    439:    * Both small and big receive buffers may start at any address.
                    440:    * This option has performance implications, so use with caution.
                    441:    */
                    442: };
                    443: typedef enum myri10ge_mcp_cmd_type myri10ge_mcp_cmd_type_t;
                    444: 
                    445: 
                    446: enum myri10ge_mcp_cmd_status {
                    447:   MXGEFW_CMD_OK = 0,
                    448:   MXGEFW_CMD_UNKNOWN = 1,
                    449:   MXGEFW_CMD_ERROR_RANGE = 2,
                    450:   MXGEFW_CMD_ERROR_BUSY = 3,
                    451:   MXGEFW_CMD_ERROR_EMPTY = 4,
                    452:   MXGEFW_CMD_ERROR_CLOSED = 5,
                    453:   MXGEFW_CMD_ERROR_HASH_ERROR = 6,
                    454:   MXGEFW_CMD_ERROR_BAD_PORT = 7,
                    455:   MXGEFW_CMD_ERROR_RESOURCES = 8,
                    456:   MXGEFW_CMD_ERROR_MULTICAST = 9,
                    457:   MXGEFW_CMD_ERROR_UNALIGNED = 10,
                    458:   MXGEFW_CMD_ERROR_NO_MDIO = 11,
                    459:   MXGEFW_CMD_ERROR_I2C_FAILURE = 12,
                    460:   MXGEFW_CMD_ERROR_I2C_ABSENT = 13,
                    461:   MXGEFW_CMD_ERROR_BAD_PCIE_LINK = 14
                    462: };
                    463: typedef enum myri10ge_mcp_cmd_status myri10ge_mcp_cmd_status_t;
                    464: 
                    465: 
                    466: #define MXGEFW_OLD_IRQ_DATA_LEN 40
                    467: 
                    468: struct mcp_irq_data {
                    469:   /* add new counters at the beginning */
                    470:   uint32_t future_use[1];
                    471:   uint32_t dropped_pause;
                    472:   uint32_t dropped_unicast_filtered;
                    473:   uint32_t dropped_bad_crc32;
                    474:   uint32_t dropped_bad_phy;
                    475:   uint32_t dropped_multicast_filtered;
                    476: /* 40 Bytes */
                    477:   uint32_t send_done_count;
                    478: 
                    479: #define MXGEFW_LINK_DOWN 0
                    480: #define MXGEFW_LINK_UP 1
                    481: #define MXGEFW_LINK_MYRINET 2
                    482: #define MXGEFW_LINK_UNKNOWN 3
                    483:   uint32_t link_up;
                    484:   uint32_t dropped_link_overflow;
                    485:   uint32_t dropped_link_error_or_filtered;
                    486:   uint32_t dropped_runt;
                    487:   uint32_t dropped_overrun;
                    488:   uint32_t dropped_no_small_buffer;
                    489:   uint32_t dropped_no_big_buffer;
                    490:   uint32_t rdma_tags_available;
                    491: 
                    492:   uint8_t tx_stopped;
                    493:   uint8_t link_down;
                    494:   uint8_t stats_updated;
                    495:   uint8_t valid;
                    496: };
                    497: typedef struct mcp_irq_data mcp_irq_data_t;
                    498: 
                    499: #ifdef MXGEFW_NDIS
                    500: /* Exclusively used by NDIS drivers */
                    501: struct mcp_rss_shared_interrupt {
                    502:   uint8_t pad[2];
                    503:   uint8_t queue;
                    504:   uint8_t valid;
                    505: };
                    506: #endif
                    507: 
                    508: /* definitions for NETQ filter type */
                    509: #define MXGEFW_NETQ_FILTERTYPE_NONE 0
                    510: #define MXGEFW_NETQ_FILTERTYPE_MACADDR 1
                    511: #define MXGEFW_NETQ_FILTERTYPE_VLAN 2
                    512: #define MXGEFW_NETQ_FILTERTYPE_VLANMACADDR 3
                    513: 
                    514: #endif /* _myri10ge_mcp_h */

unix.superglobalmegacorp.com

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