00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 FILE_LICENCE ( GPL2_ONLY );
00020
00021 #ifndef _myri10ge_mcp_h
00022 #define _myri10ge_mcp_h
00023
00024 #define MXGEFW_VERSION_MAJOR 1
00025 #define MXGEFW_VERSION_MINOR 4
00026
00027 #ifdef MXGEFW
00028 #ifndef _stdint_h_
00029 typedef signed char int8_t;
00030 typedef signed short int16_t;
00031 typedef signed int int32_t;
00032 typedef signed long long int64_t;
00033 typedef unsigned char uint8_t;
00034 typedef unsigned short uint16_t;
00035 typedef unsigned int uint32_t;
00036 typedef unsigned long long uint64_t;
00037 #endif
00038 #endif
00039
00040
00041 struct mcp_dma_addr {
00042 uint32_t high;
00043 uint32_t low;
00044 };
00045 typedef struct mcp_dma_addr mcp_dma_addr_t;
00046
00047
00048 struct mcp_slot {
00049 uint16_t checksum;
00050 uint16_t length;
00051 };
00052 typedef struct mcp_slot mcp_slot_t;
00053
00054 #ifdef MXGEFW_NDIS
00055
00056 struct mcp_slot_8 {
00057
00058
00059
00060 uint32_t hash;
00061 uint16_t checksum;
00062 uint16_t length;
00063 };
00064 typedef struct mcp_slot_8 mcp_slot_8_t;
00065
00066
00067 #define MXGEFW_RSS_HASH_NULL (0 << 14)
00068 #define MXGEFW_RSS_HASH_IPV4 (1 << 14)
00069 #define MXGEFW_RSS_HASH_TCP_IPV4 (2 << 14)
00070 #define MXGEFW_RSS_HASH_MASK (3 << 14)
00071 #endif
00072
00073
00074 struct mcp_cmd {
00075 uint32_t cmd;
00076 uint32_t data0;
00077
00078 uint32_t data1;
00079 uint32_t data2;
00080
00081 struct mcp_dma_addr response_addr;
00082
00083 uint8_t pad[40];
00084 };
00085 typedef struct mcp_cmd mcp_cmd_t;
00086
00087
00088 struct mcp_cmd_response {
00089 uint32_t data;
00090 uint32_t result;
00091 };
00092 typedef struct mcp_cmd_response mcp_cmd_response_t;
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 #define MXGEFW_FLAGS_SMALL 0x1
00113 #define MXGEFW_FLAGS_TSO_HDR 0x1
00114 #define MXGEFW_FLAGS_FIRST 0x2
00115 #define MXGEFW_FLAGS_ALIGN_ODD 0x4
00116 #define MXGEFW_FLAGS_CKSUM 0x8
00117 #define MXGEFW_FLAGS_TSO_LAST 0x8
00118 #define MXGEFW_FLAGS_NO_TSO 0x10
00119 #define MXGEFW_FLAGS_TSO_CHOP 0x10
00120 #define MXGEFW_FLAGS_TSO_PLD 0x20
00121
00122 #define MXGEFW_SEND_SMALL_SIZE 1520
00123 #define MXGEFW_MAX_MTU 9400
00124
00125 union mcp_pso_or_cumlen {
00126 uint16_t pseudo_hdr_offset;
00127 uint16_t cum_len;
00128 };
00129 typedef union mcp_pso_or_cumlen mcp_pso_or_cumlen_t;
00130
00131 #define MXGEFW_MAX_SEND_DESC 12
00132 #define MXGEFW_PAD 2
00133
00134
00135 struct mcp_kreq_ether_send {
00136 uint32_t addr_high;
00137 uint32_t addr_low;
00138 uint16_t pseudo_hdr_offset;
00139 uint16_t length;
00140 uint8_t pad;
00141 uint8_t rdma_count;
00142 uint8_t cksum_offset;
00143 uint8_t flags;
00144 };
00145 typedef struct mcp_kreq_ether_send mcp_kreq_ether_send_t;
00146
00147
00148 struct mcp_kreq_ether_recv {
00149 uint32_t addr_high;
00150 uint32_t addr_low;
00151 };
00152 typedef struct mcp_kreq_ether_recv mcp_kreq_ether_recv_t;
00153
00154
00155
00156
00157 #define MXGEFW_BOOT_HANDOFF 0xfc0000
00158 #define MXGEFW_BOOT_DUMMY_RDMA 0xfc01c0
00159
00160 #define MXGEFW_ETH_CMD 0xf80000
00161 #define MXGEFW_ETH_SEND_4 0x200000
00162 #define MXGEFW_ETH_SEND_1 0x240000
00163 #define MXGEFW_ETH_SEND_2 0x280000
00164 #define MXGEFW_ETH_SEND_3 0x2c0000
00165 #define MXGEFW_ETH_RECV_SMALL 0x300000
00166 #define MXGEFW_ETH_RECV_BIG 0x340000
00167 #define MXGEFW_ETH_SEND_GO 0x380000
00168 #define MXGEFW_ETH_SEND_STOP 0x3C0000
00169
00170 #define MXGEFW_ETH_SEND(n) (0x200000 + (((n) & 0x03) * 0x40000))
00171 #define MXGEFW_ETH_SEND_OFFSET(n) (MXGEFW_ETH_SEND(n) - MXGEFW_ETH_SEND_4)
00172
00173 enum myri10ge_mcp_cmd_type {
00174 MXGEFW_CMD_NONE = 0,
00175
00176
00177 MXGEFW_CMD_RESET = 1,
00178
00179
00180
00181 MXGEFW_GET_MCP_VERSION = 2,
00182
00183
00184
00185
00186
00187
00188 MXGEFW_CMD_SET_INTRQ_DMA = 3,
00189
00190
00191
00192
00193
00194 MXGEFW_CMD_SET_BIG_BUFFER_SIZE = 4,
00195 MXGEFW_CMD_SET_SMALL_BUFFER_SIZE = 5,
00196
00197
00198
00199
00200
00201 MXGEFW_CMD_GET_SEND_OFFSET = 6,
00202 MXGEFW_CMD_GET_SMALL_RX_OFFSET = 7,
00203 MXGEFW_CMD_GET_BIG_RX_OFFSET = 8,
00204
00205
00206 MXGEFW_CMD_GET_IRQ_ACK_OFFSET = 9,
00207 MXGEFW_CMD_GET_IRQ_DEASSERT_OFFSET = 10,
00208
00209
00210
00211
00212 MXGEFW_CMD_GET_SEND_RING_SIZE = 11,
00213 MXGEFW_CMD_GET_RX_RING_SIZE = 12,
00214
00215
00216
00217
00218
00219
00220 MXGEFW_CMD_SET_INTRQ_SIZE = 13,
00221 #define MXGEFW_CMD_SET_INTRQ_SIZE_FLAG_NO_STRICT_SIZE_CHECK (1 << 31)
00222
00223
00224
00225
00226 MXGEFW_CMD_ETHERNET_UP = 14,
00227
00228
00229
00230
00231
00232
00233 MXGEFW_CMD_ETHERNET_DOWN = 15,
00234
00235
00236
00237
00238
00239
00240
00241 MXGEFW_CMD_SET_MTU = 16,
00242 MXGEFW_CMD_GET_INTR_COAL_DELAY_OFFSET = 17,
00243 MXGEFW_CMD_SET_STATS_INTERVAL = 18,
00244 MXGEFW_CMD_SET_STATS_DMA_OBSOLETE = 19,
00245
00246 MXGEFW_ENABLE_PROMISC = 20,
00247 MXGEFW_DISABLE_PROMISC = 21,
00248 MXGEFW_SET_MAC_ADDRESS = 22,
00249
00250 MXGEFW_ENABLE_FLOW_CONTROL = 23,
00251 MXGEFW_DISABLE_FLOW_CONTROL = 24,
00252
00253
00254
00255
00256
00257
00258 MXGEFW_DMA_TEST = 25,
00259
00260 MXGEFW_ENABLE_ALLMULTI = 26,
00261 MXGEFW_DISABLE_ALLMULTI = 27,
00262
00263
00264
00265
00266 MXGEFW_JOIN_MULTICAST_GROUP = 28,
00267
00268
00269
00270
00271 MXGEFW_LEAVE_MULTICAST_GROUP = 29,
00272 MXGEFW_LEAVE_ALL_MULTICAST_GROUPS = 30,
00273
00274 MXGEFW_CMD_SET_STATS_DMA_V2 = 31,
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 MXGEFW_CMD_UNALIGNED_TEST = 32,
00285
00286
00287
00288 MXGEFW_CMD_UNALIGNED_STATUS = 33,
00289
00290
00291 MXGEFW_CMD_ALWAYS_USE_N_BIG_BUFFERS = 34,
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301 MXGEFW_CMD_GET_MAX_RSS_QUEUES = 35,
00302 MXGEFW_CMD_ENABLE_RSS_QUEUES = 36,
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313 #define MXGEFW_SLICE_INTR_MODE_SHARED 0x0
00314 #define MXGEFW_SLICE_INTR_MODE_ONE_PER_SLICE 0x1
00315 #define MXGEFW_SLICE_ENABLE_MULTIPLE_TX_QUEUES 0x2
00316
00317 MXGEFW_CMD_GET_RSS_SHARED_INTERRUPT_MASK_OFFSET = 37,
00318 MXGEFW_CMD_SET_RSS_SHARED_INTERRUPT_DMA = 38,
00319
00320 MXGEFW_CMD_GET_RSS_TABLE_OFFSET = 39,
00321
00322 MXGEFW_CMD_SET_RSS_TABLE_SIZE = 40,
00323
00324 MXGEFW_CMD_GET_RSS_KEY_OFFSET = 41,
00325
00326 MXGEFW_CMD_RSS_KEY_UPDATED = 42,
00327
00328 MXGEFW_CMD_SET_RSS_ENABLE = 43,
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339 #define MXGEFW_RSS_HASH_TYPE_IPV4 0x1
00340 #define MXGEFW_RSS_HASH_TYPE_TCP_IPV4 0x2
00341 #define MXGEFW_RSS_HASH_TYPE_SRC_PORT 0x4
00342 #define MXGEFW_RSS_HASH_TYPE_SRC_DST_PORT 0x5
00343 #define MXGEFW_RSS_HASH_TYPE_MAX 0x5
00344
00345 MXGEFW_CMD_GET_MAX_TSO6_HDR_SIZE = 44,
00346
00347
00348
00349
00350
00351
00352
00353
00354 MXGEFW_CMD_SET_TSO_MODE = 45,
00355
00356
00357
00358
00359 #define MXGEFW_TSO_MODE_LINUX 0
00360 #define MXGEFW_TSO_MODE_NDIS 1
00361
00362 MXGEFW_CMD_MDIO_READ = 46,
00363
00364 MXGEFW_CMD_MDIO_WRITE = 47,
00365
00366
00367 MXGEFW_CMD_I2C_READ = 48,
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380 MXGEFW_CMD_I2C_BYTE = 49,
00381
00382
00383
00384
00385
00386
00387 MXGEFW_CMD_GET_VPUMP_OFFSET = 50,
00388
00389 MXGEFW_CMD_RESET_VPUMP = 51,
00390
00391
00392 MXGEFW_CMD_SET_RSS_MCP_SLOT_TYPE = 52,
00393
00394
00395
00396
00397 #define MXGEFW_RSS_MCP_SLOT_TYPE_MIN 0
00398 #define MXGEFW_RSS_MCP_SLOT_TYPE_WITH_HASH 1
00399
00400 MXGEFW_CMD_SET_THROTTLE_FACTOR = 53,
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416 MXGEFW_CMD_VPUMP_UP = 54,
00417
00418 MXGEFW_CMD_GET_VPUMP_CLK = 55,
00419
00420
00421 MXGEFW_CMD_GET_DCA_OFFSET = 56,
00422
00423
00424
00425 MXGEFW_CMD_NETQ_GET_FILTERS_PER_QUEUE = 57,
00426 MXGEFW_CMD_NETQ_ADD_FILTER = 58,
00427
00428
00429
00430 MXGEFW_CMD_NETQ_DEL_FILTER = 59,
00431
00432 MXGEFW_CMD_NETQ_QUERY1 = 60,
00433 MXGEFW_CMD_NETQ_QUERY2 = 61,
00434 MXGEFW_CMD_NETQ_QUERY3 = 62,
00435 MXGEFW_CMD_NETQ_QUERY4 = 63,
00436
00437 MXGEFW_CMD_RELAX_RXBUFFER_ALIGNMENT = 64,
00438
00439
00440
00441
00442 };
00443 typedef enum myri10ge_mcp_cmd_type myri10ge_mcp_cmd_type_t;
00444
00445
00446 enum myri10ge_mcp_cmd_status {
00447 MXGEFW_CMD_OK = 0,
00448 MXGEFW_CMD_UNKNOWN = 1,
00449 MXGEFW_CMD_ERROR_RANGE = 2,
00450 MXGEFW_CMD_ERROR_BUSY = 3,
00451 MXGEFW_CMD_ERROR_EMPTY = 4,
00452 MXGEFW_CMD_ERROR_CLOSED = 5,
00453 MXGEFW_CMD_ERROR_HASH_ERROR = 6,
00454 MXGEFW_CMD_ERROR_BAD_PORT = 7,
00455 MXGEFW_CMD_ERROR_RESOURCES = 8,
00456 MXGEFW_CMD_ERROR_MULTICAST = 9,
00457 MXGEFW_CMD_ERROR_UNALIGNED = 10,
00458 MXGEFW_CMD_ERROR_NO_MDIO = 11,
00459 MXGEFW_CMD_ERROR_I2C_FAILURE = 12,
00460 MXGEFW_CMD_ERROR_I2C_ABSENT = 13,
00461 MXGEFW_CMD_ERROR_BAD_PCIE_LINK = 14
00462 };
00463 typedef enum myri10ge_mcp_cmd_status myri10ge_mcp_cmd_status_t;
00464
00465
00466 #define MXGEFW_OLD_IRQ_DATA_LEN 40
00467
00468 struct mcp_irq_data {
00469
00470 uint32_t future_use[1];
00471 uint32_t dropped_pause;
00472 uint32_t dropped_unicast_filtered;
00473 uint32_t dropped_bad_crc32;
00474 uint32_t dropped_bad_phy;
00475 uint32_t dropped_multicast_filtered;
00476
00477 uint32_t send_done_count;
00478
00479 #define MXGEFW_LINK_DOWN 0
00480 #define MXGEFW_LINK_UP 1
00481 #define MXGEFW_LINK_MYRINET 2
00482 #define MXGEFW_LINK_UNKNOWN 3
00483 uint32_t link_up;
00484 uint32_t dropped_link_overflow;
00485 uint32_t dropped_link_error_or_filtered;
00486 uint32_t dropped_runt;
00487 uint32_t dropped_overrun;
00488 uint32_t dropped_no_small_buffer;
00489 uint32_t dropped_no_big_buffer;
00490 uint32_t rdma_tags_available;
00491
00492 uint8_t tx_stopped;
00493 uint8_t link_down;
00494 uint8_t stats_updated;
00495 uint8_t valid;
00496 };
00497 typedef struct mcp_irq_data mcp_irq_data_t;
00498
00499 #ifdef MXGEFW_NDIS
00500
00501 struct mcp_rss_shared_interrupt {
00502 uint8_t pad[2];
00503 uint8_t queue;
00504 uint8_t valid;
00505 };
00506 #endif
00507
00508
00509 #define MXGEFW_NETQ_FILTERTYPE_NONE 0
00510 #define MXGEFW_NETQ_FILTERTYPE_MACADDR 1
00511 #define MXGEFW_NETQ_FILTERTYPE_VLAN 2
00512 #define MXGEFW_NETQ_FILTERTYPE_VLANMACADDR 3
00513
00514 #endif