0001
0002
0003
0004
0005
0006 #ifndef _VNIC_DEVCMD_H_
0007 #define _VNIC_DEVCMD_H_
0008
0009 #define _CMD_NBITS 14
0010 #define _CMD_VTYPEBITS 10
0011 #define _CMD_FLAGSBITS 6
0012 #define _CMD_DIRBITS 2
0013
0014 #define _CMD_NMASK ((1 << _CMD_NBITS)-1)
0015 #define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1)
0016 #define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1)
0017 #define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1)
0018
0019 #define _CMD_NSHIFT 0
0020 #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
0021 #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
0022 #define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
0023
0024
0025
0026
0027 #define _CMD_DIR_NONE 0U
0028 #define _CMD_DIR_WRITE 1U
0029 #define _CMD_DIR_READ 2U
0030 #define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ)
0031
0032
0033
0034
0035 #define _CMD_FLAGS_NONE 0U
0036 #define _CMD_FLAGS_NOWAIT 1U
0037
0038
0039
0040
0041 #define _CMD_VTYPE_NONE 0U
0042 #define _CMD_VTYPE_ENET 1U
0043 #define _CMD_VTYPE_FC 2U
0044 #define _CMD_VTYPE_SCSI 4U
0045 #define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
0046
0047
0048
0049
0050 #define _CMDCF(dir, flags, vtype, nr) \
0051 (((dir) << _CMD_DIRSHIFT) | \
0052 ((flags) << _CMD_FLAGSSHIFT) | \
0053 ((vtype) << _CMD_VTYPESHIFT) | \
0054 ((nr) << _CMD_NSHIFT))
0055 #define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr)
0056 #define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
0057
0058
0059
0060
0061 #define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
0062 #define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
0063 #define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
0064 #define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
0065
0066 enum vnic_devcmd_cmd {
0067 CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
0068
0069
0070 CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
0071
0072
0073
0074
0075 CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
0076
0077
0078 CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
0079
0080
0081
0082 CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
0083
0084
0085 CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
0086
0087
0088 CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
0089
0090
0091 CMD_MAC_ADDR = _CMDC(_CMD_DIR_READ,
0092 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
0093
0094
0095
0096 CMD_PROMISC_MODE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 10),
0097
0098
0099
0100 CMD_ALLMULTI_MODE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 11),
0101
0102
0103 CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE,
0104 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
0105
0106
0107 CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE,
0108 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
0109
0110
0111 CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
0112
0113
0114 CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
0115
0116
0117 CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
0118
0119
0120 CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
0121
0122
0123 CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
0124
0125
0126 CMD_SOFT_RESET = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
0127
0128
0129
0130 CMD_SOFT_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140 CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
0141
0142
0143
0144 CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
0145
0146
0147 CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
0148
0149
0150
0151 CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
0152
0153
0154 CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
0155
0156
0157 CMD_INIT = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
0158
0159
0160
0161
0162
0163 CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
0164
0165
0166 CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
0167
0168
0169 CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
0170
0171
0172 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
0173
0174
0175
0176
0177 CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
0178
0179
0180
0181 CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
0182
0183
0184 CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
0185
0186
0187 CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
0188
0189
0190
0191
0192 CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
0193
0194
0195
0196
0197 CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
0198
0199
0200
0201
0202 CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
0203
0204
0205 CMD_HANG_RESET = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
0206
0207
0208
0209 CMD_HANG_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
0210
0211
0212
0213
0214
0215 CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
0216
0217
0218
0219
0220
0221
0222
0223 CMD_PROXY_BY_BDF = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
0224
0225
0226
0227
0228
0229 CMD_PROXY_BY_INDEX = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239 CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
0240
0241
0242
0243
0244
0245 CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45),
0246
0247
0248
0249
0250
0251
0252
0253
0254 CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
0255
0256
0257
0258
0259
0260
0261
0262 CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
0263
0264
0265
0266
0267
0268 CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293 CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312 CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
0313
0314
0315
0316
0317
0318
0319 CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51),
0320
0321
0322
0323
0324
0325
0326
0327 CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52),
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341 CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53),
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352 CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54),
0353
0354
0355
0356
0357
0358
0359 CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
0360
0361
0362
0363
0364
0365 CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
0366
0367
0368
0369
0370
0371
0372 CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
0373 };
0374
0375
0376 #define CMD_OPENF_OPROM 0x1
0377
0378 #define CMD_OPENF_RQ_ENABLE_THEN_POST 0x2
0379
0380
0381 #define CMD_INITF_DEFAULT_MAC 0x1
0382
0383
0384 #define CMD_PFILTER_DIRECTED 0x01
0385 #define CMD_PFILTER_MULTICAST 0x02
0386 #define CMD_PFILTER_BROADCAST 0x04
0387 #define CMD_PFILTER_PROMISCUOUS 0x08
0388 #define CMD_PFILTER_ALL_MULTICAST 0x10
0389
0390 enum vnic_devcmd_status {
0391 STAT_NONE = 0,
0392 STAT_BUSY = 1 << 0,
0393 STAT_ERROR = 1 << 1,
0394 };
0395
0396 enum vnic_devcmd_error {
0397 ERR_SUCCESS = 0,
0398 ERR_EINVAL = 1,
0399 ERR_EFAULT = 2,
0400 ERR_EPERM = 3,
0401 ERR_EBUSY = 4,
0402 ERR_ECMDUNKNOWN = 5,
0403 ERR_EBADSTATE = 6,
0404 ERR_ENOMEM = 7,
0405 ERR_ETIMEDOUT = 8,
0406 ERR_ELINKDOWN = 9,
0407 };
0408
0409 struct vnic_devcmd_fw_info {
0410 char fw_version[32];
0411 char fw_build[32];
0412 char hw_version[32];
0413 char hw_serial_number[32];
0414 };
0415
0416 struct vnic_devcmd_notify {
0417 u32 csum;
0418
0419 u32 link_state;
0420 u32 port_speed;
0421 u32 mtu;
0422 u32 msglvl;
0423 u32 uif;
0424 u32 status;
0425 u32 error;
0426 u32 link_down_cnt;
0427 };
0428 #define VNIC_STF_FATAL_ERR 0x0001
0429
0430 struct vnic_devcmd_provinfo {
0431 u8 oui[3];
0432 u8 type;
0433 u8 data[];
0434 };
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450 #define VNIC_DEVCMD_NARGS 15
0451 struct vnic_devcmd {
0452 u32 status;
0453 u32 cmd;
0454 u64 args[VNIC_DEVCMD_NARGS];
0455 };
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467 #define DEVCMD2_FNORESULT 0x1
0468
0469 #define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS
0470
0471 struct vnic_devcmd2 {
0472 u16 pad;
0473 u16 flags;
0474 u32 cmd;
0475 u64 args[VNIC_DEVCMD2_NARGS];
0476 };
0477
0478 #define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS
0479 struct devcmd2_result {
0480 u64 results[VNIC_DEVCMD2_NRESULTS];
0481 u32 pad;
0482 u16 completed_index;
0483 u8 error;
0484 u8 color;
0485 };
0486
0487 #define DEVCMD2_RING_SIZE 32
0488 #define DEVCMD2_DESC_SIZE 128
0489
0490 #define DEVCMD2_RESULTS_SIZE_MAX ((1 << 16) - 1)
0491
0492 #endif