Annotation of qemu/roms/ipxe/src/drivers/net/myri10ge_mcp.h, revision 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.