0001
0002 #ifndef __MYRI10GE_MCP_H__
0003 #define __MYRI10GE_MCP_H__
0004
0005 #define MXGEFW_VERSION_MAJOR 1
0006 #define MXGEFW_VERSION_MINOR 4
0007
0008
0009 struct mcp_dma_addr {
0010 __be32 high;
0011 __be32 low;
0012 };
0013
0014
0015 struct mcp_slot {
0016 __sum16 checksum;
0017 __be16 length;
0018 };
0019
0020
0021 struct mcp_cmd {
0022 __be32 cmd;
0023 __be32 data0;
0024
0025 __be32 data1;
0026 __be32 data2;
0027
0028 struct mcp_dma_addr response_addr;
0029
0030 u8 pad[40];
0031 };
0032
0033
0034 struct mcp_cmd_response {
0035 __be32 data;
0036 __be32 result;
0037 };
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054 #define MXGEFW_FLAGS_SMALL 0x1
0055 #define MXGEFW_FLAGS_TSO_HDR 0x1
0056 #define MXGEFW_FLAGS_FIRST 0x2
0057 #define MXGEFW_FLAGS_ALIGN_ODD 0x4
0058 #define MXGEFW_FLAGS_CKSUM 0x8
0059 #define MXGEFW_FLAGS_TSO_LAST 0x8
0060 #define MXGEFW_FLAGS_NO_TSO 0x10
0061 #define MXGEFW_FLAGS_TSO_CHOP 0x10
0062 #define MXGEFW_FLAGS_TSO_PLD 0x20
0063
0064 #define MXGEFW_SEND_SMALL_SIZE 1520
0065 #define MXGEFW_MAX_MTU 9400
0066
0067 union mcp_pso_or_cumlen {
0068 u16 pseudo_hdr_offset;
0069 u16 cum_len;
0070 };
0071
0072 #define MXGEFW_MAX_SEND_DESC 12
0073 #define MXGEFW_PAD 2
0074
0075
0076 struct mcp_kreq_ether_send {
0077 __be32 addr_high;
0078 __be32 addr_low;
0079 __be16 pseudo_hdr_offset;
0080 __be16 length;
0081 u8 pad;
0082 u8 rdma_count;
0083 u8 cksum_offset;
0084 u8 flags;
0085 };
0086
0087
0088 struct mcp_kreq_ether_recv {
0089 __be32 addr_high;
0090 __be32 addr_low;
0091 };
0092
0093
0094
0095 #define MXGEFW_BOOT_HANDOFF 0xfc0000
0096 #define MXGEFW_BOOT_DUMMY_RDMA 0xfc01c0
0097
0098 #define MXGEFW_ETH_CMD 0xf80000
0099 #define MXGEFW_ETH_SEND_4 0x200000
0100 #define MXGEFW_ETH_SEND_1 0x240000
0101 #define MXGEFW_ETH_SEND_2 0x280000
0102 #define MXGEFW_ETH_SEND_3 0x2c0000
0103 #define MXGEFW_ETH_RECV_SMALL 0x300000
0104 #define MXGEFW_ETH_RECV_BIG 0x340000
0105 #define MXGEFW_ETH_SEND_GO 0x380000
0106 #define MXGEFW_ETH_SEND_STOP 0x3C0000
0107
0108 #define MXGEFW_ETH_SEND(n) (0x200000 + (((n) & 0x03) * 0x40000))
0109 #define MXGEFW_ETH_SEND_OFFSET(n) (MXGEFW_ETH_SEND(n) - MXGEFW_ETH_SEND_4)
0110
0111 enum myri10ge_mcp_cmd_type {
0112 MXGEFW_CMD_NONE = 0,
0113
0114
0115 MXGEFW_CMD_RESET = 1,
0116
0117
0118
0119 MXGEFW_GET_MCP_VERSION = 2,
0120
0121
0122
0123
0124
0125 MXGEFW_CMD_SET_INTRQ_DMA = 3,
0126
0127
0128
0129
0130
0131 MXGEFW_CMD_SET_BIG_BUFFER_SIZE = 4,
0132 MXGEFW_CMD_SET_SMALL_BUFFER_SIZE = 5,
0133
0134
0135
0136
0137 MXGEFW_CMD_GET_SEND_OFFSET = 6,
0138 MXGEFW_CMD_GET_SMALL_RX_OFFSET = 7,
0139 MXGEFW_CMD_GET_BIG_RX_OFFSET = 8,
0140
0141
0142 MXGEFW_CMD_GET_IRQ_ACK_OFFSET = 9,
0143 MXGEFW_CMD_GET_IRQ_DEASSERT_OFFSET = 10,
0144
0145
0146
0147
0148 MXGEFW_CMD_GET_SEND_RING_SIZE = 11,
0149 MXGEFW_CMD_GET_RX_RING_SIZE = 12,
0150
0151
0152
0153
0154
0155
0156 MXGEFW_CMD_SET_INTRQ_SIZE = 13,
0157 #define MXGEFW_CMD_SET_INTRQ_SIZE_FLAG_NO_STRICT_SIZE_CHECK (1 << 31)
0158
0159
0160
0161
0162 MXGEFW_CMD_ETHERNET_UP = 14,
0163
0164
0165
0166
0167
0168
0169 MXGEFW_CMD_ETHERNET_DOWN = 15,
0170
0171
0172
0173
0174
0175
0176
0177 MXGEFW_CMD_SET_MTU = 16,
0178 MXGEFW_CMD_GET_INTR_COAL_DELAY_OFFSET = 17,
0179 MXGEFW_CMD_SET_STATS_INTERVAL = 18,
0180 MXGEFW_CMD_SET_STATS_DMA_OBSOLETE = 19,
0181
0182 MXGEFW_ENABLE_PROMISC = 20,
0183 MXGEFW_DISABLE_PROMISC = 21,
0184 MXGEFW_SET_MAC_ADDRESS = 22,
0185
0186 MXGEFW_ENABLE_FLOW_CONTROL = 23,
0187 MXGEFW_DISABLE_FLOW_CONTROL = 24,
0188
0189
0190
0191
0192
0193
0194 MXGEFW_DMA_TEST = 25,
0195
0196 MXGEFW_ENABLE_ALLMULTI = 26,
0197 MXGEFW_DISABLE_ALLMULTI = 27,
0198
0199
0200
0201
0202 MXGEFW_JOIN_MULTICAST_GROUP = 28,
0203
0204
0205
0206
0207 MXGEFW_LEAVE_MULTICAST_GROUP = 29,
0208 MXGEFW_LEAVE_ALL_MULTICAST_GROUPS = 30,
0209
0210 MXGEFW_CMD_SET_STATS_DMA_V2 = 31,
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220 MXGEFW_CMD_UNALIGNED_TEST = 32,
0221
0222
0223
0224 MXGEFW_CMD_UNALIGNED_STATUS = 33,
0225
0226
0227 MXGEFW_CMD_ALWAYS_USE_N_BIG_BUFFERS = 34,
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237 MXGEFW_CMD_GET_MAX_RSS_QUEUES = 35,
0238 MXGEFW_CMD_ENABLE_RSS_QUEUES = 36,
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249 #define MXGEFW_SLICE_INTR_MODE_SHARED 0x0
0250 #define MXGEFW_SLICE_INTR_MODE_ONE_PER_SLICE 0x1
0251 #define MXGEFW_SLICE_ENABLE_MULTIPLE_TX_QUEUES 0x2
0252
0253 MXGEFW_CMD_GET_RSS_SHARED_INTERRUPT_MASK_OFFSET = 37,
0254 MXGEFW_CMD_SET_RSS_SHARED_INTERRUPT_DMA = 38,
0255
0256 MXGEFW_CMD_GET_RSS_TABLE_OFFSET = 39,
0257
0258 MXGEFW_CMD_SET_RSS_TABLE_SIZE = 40,
0259
0260 MXGEFW_CMD_GET_RSS_KEY_OFFSET = 41,
0261
0262 MXGEFW_CMD_RSS_KEY_UPDATED = 42,
0263
0264 MXGEFW_CMD_SET_RSS_ENABLE = 43,
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275 #define MXGEFW_RSS_HASH_TYPE_IPV4 0x1
0276 #define MXGEFW_RSS_HASH_TYPE_TCP_IPV4 0x2
0277 #define MXGEFW_RSS_HASH_TYPE_SRC_PORT 0x4
0278 #define MXGEFW_RSS_HASH_TYPE_SRC_DST_PORT 0x5
0279 #define MXGEFW_RSS_HASH_TYPE_MAX 0x5
0280
0281 MXGEFW_CMD_GET_MAX_TSO6_HDR_SIZE = 44,
0282
0283
0284
0285
0286
0287
0288
0289
0290 MXGEFW_CMD_SET_TSO_MODE = 45,
0291
0292
0293
0294
0295 #define MXGEFW_TSO_MODE_LINUX 0
0296 #define MXGEFW_TSO_MODE_NDIS 1
0297
0298 MXGEFW_CMD_MDIO_READ = 46,
0299
0300 MXGEFW_CMD_MDIO_WRITE = 47,
0301
0302
0303 MXGEFW_CMD_I2C_READ = 48,
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316 MXGEFW_CMD_I2C_BYTE = 49,
0317
0318
0319
0320
0321
0322
0323 MXGEFW_CMD_GET_VPUMP_OFFSET = 50,
0324
0325 MXGEFW_CMD_RESET_VPUMP = 51,
0326
0327
0328 MXGEFW_CMD_SET_RSS_MCP_SLOT_TYPE = 52,
0329
0330
0331
0332
0333 #define MXGEFW_RSS_MCP_SLOT_TYPE_MIN 0
0334 #define MXGEFW_RSS_MCP_SLOT_TYPE_WITH_HASH 1
0335
0336 MXGEFW_CMD_SET_THROTTLE_FACTOR = 53,
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352 MXGEFW_CMD_VPUMP_UP = 54,
0353
0354 MXGEFW_CMD_GET_VPUMP_CLK = 55,
0355
0356
0357 MXGEFW_CMD_GET_DCA_OFFSET = 56,
0358
0359
0360
0361 MXGEFW_CMD_NETQ_GET_FILTERS_PER_QUEUE = 57,
0362 MXGEFW_CMD_NETQ_ADD_FILTER = 58,
0363
0364
0365
0366 MXGEFW_CMD_NETQ_DEL_FILTER = 59,
0367
0368 MXGEFW_CMD_NETQ_QUERY1 = 60,
0369 MXGEFW_CMD_NETQ_QUERY2 = 61,
0370 MXGEFW_CMD_NETQ_QUERY3 = 62,
0371 MXGEFW_CMD_NETQ_QUERY4 = 63,
0372
0373 MXGEFW_CMD_RELAX_RXBUFFER_ALIGNMENT = 64,
0374
0375
0376
0377
0378 };
0379
0380 enum myri10ge_mcp_cmd_status {
0381 MXGEFW_CMD_OK = 0,
0382 MXGEFW_CMD_UNKNOWN = 1,
0383 MXGEFW_CMD_ERROR_RANGE = 2,
0384 MXGEFW_CMD_ERROR_BUSY = 3,
0385 MXGEFW_CMD_ERROR_EMPTY = 4,
0386 MXGEFW_CMD_ERROR_CLOSED = 5,
0387 MXGEFW_CMD_ERROR_HASH_ERROR = 6,
0388 MXGEFW_CMD_ERROR_BAD_PORT = 7,
0389 MXGEFW_CMD_ERROR_RESOURCES = 8,
0390 MXGEFW_CMD_ERROR_MULTICAST = 9,
0391 MXGEFW_CMD_ERROR_UNALIGNED = 10,
0392 MXGEFW_CMD_ERROR_NO_MDIO = 11,
0393 MXGEFW_CMD_ERROR_I2C_FAILURE = 12,
0394 MXGEFW_CMD_ERROR_I2C_ABSENT = 13,
0395 MXGEFW_CMD_ERROR_BAD_PCIE_LINK = 14
0396 };
0397
0398 #define MXGEFW_OLD_IRQ_DATA_LEN 40
0399
0400 struct mcp_irq_data {
0401
0402 __be32 future_use[1];
0403 __be32 dropped_pause;
0404 __be32 dropped_unicast_filtered;
0405 __be32 dropped_bad_crc32;
0406 __be32 dropped_bad_phy;
0407 __be32 dropped_multicast_filtered;
0408
0409 __be32 send_done_count;
0410
0411 #define MXGEFW_LINK_DOWN 0
0412 #define MXGEFW_LINK_UP 1
0413 #define MXGEFW_LINK_MYRINET 2
0414 #define MXGEFW_LINK_UNKNOWN 3
0415 __be32 link_up;
0416 __be32 dropped_link_overflow;
0417 __be32 dropped_link_error_or_filtered;
0418 __be32 dropped_runt;
0419 __be32 dropped_overrun;
0420 __be32 dropped_no_small_buffer;
0421 __be32 dropped_no_big_buffer;
0422 __be32 rdma_tags_available;
0423
0424 u8 tx_stopped;
0425 u8 link_down;
0426 u8 stats_updated;
0427 u8 valid;
0428 };
0429
0430
0431 #define MXGEFW_NETQ_FILTERTYPE_NONE 0
0432 #define MXGEFW_NETQ_FILTERTYPE_MACADDR 1
0433 #define MXGEFW_NETQ_FILTERTYPE_VLAN 2
0434 #define MXGEFW_NETQ_FILTERTYPE_VLANMACADDR 3
0435
0436 #endif