.. | .. |
---|
170 | 170 | |
---|
171 | 171 | /* variant of CMD_INIT, with provisioning info |
---|
172 | 172 | * (u64)a0=paddr of vnic_devcmd_provinfo |
---|
173 | | - * (u32)a1=sizeof provision info */ |
---|
| 173 | + * (u32)a1=sizeof provision info |
---|
| 174 | + */ |
---|
174 | 175 | CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27), |
---|
175 | 176 | |
---|
176 | 177 | /* enable virtual link */ |
---|
.. | .. |
---|
262 | 263 | * non-zero for resetting vlan to the default |
---|
263 | 264 | * out: (u16)a0=old default vlan |
---|
264 | 265 | */ |
---|
265 | | - CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46) |
---|
| 266 | + CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46), |
---|
| 267 | + |
---|
| 268 | + /* init_prov_info2: |
---|
| 269 | + * Variant of CMD_INIT_PROV_INFO, where it will not try to enable |
---|
| 270 | + * the vnic until CMD_ENABLE2 is issued. |
---|
| 271 | + * (u64)a0=paddr of vnic_devcmd_provinfo |
---|
| 272 | + * (u32)a1=sizeof provision info |
---|
| 273 | + */ |
---|
| 274 | + CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47), |
---|
| 275 | + |
---|
| 276 | + /* enable2: |
---|
| 277 | + * (u32)a0=0 ==> standby |
---|
| 278 | + * =CMD_ENABLE2_ACTIVE ==> active |
---|
| 279 | + */ |
---|
| 280 | + CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48), |
---|
| 281 | + |
---|
| 282 | + /* |
---|
| 283 | + * cmd_status: |
---|
| 284 | + * Returns the status of the specified command |
---|
| 285 | + * Input: |
---|
| 286 | + * a0 = command for which status is being queried. |
---|
| 287 | + * Possible values are: |
---|
| 288 | + * CMD_SOFT_RESET |
---|
| 289 | + * CMD_HANG_RESET |
---|
| 290 | + * CMD_OPEN |
---|
| 291 | + * CMD_INIT |
---|
| 292 | + * CMD_INIT_PROV_INFO |
---|
| 293 | + * CMD_DEINIT |
---|
| 294 | + * CMD_INIT_PROV_INFO2 |
---|
| 295 | + * CMD_ENABLE2 |
---|
| 296 | + * Output: |
---|
| 297 | + * if status == STAT_ERROR |
---|
| 298 | + * a0 = ERR_ENOTSUPPORTED - status for command in a0 is |
---|
| 299 | + * not supported |
---|
| 300 | + * if status == STAT_NONE |
---|
| 301 | + * a0 = status of the devcmd specified in a0 as follows. |
---|
| 302 | + * ERR_SUCCESS - command in a0 completed successfully |
---|
| 303 | + * ERR_EINPROGRESS - command in a0 is still in progress |
---|
| 304 | + */ |
---|
| 305 | + CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49), |
---|
| 306 | + |
---|
| 307 | + /* |
---|
| 308 | + * Returns interrupt coalescing timer conversion factors. |
---|
| 309 | + * After calling this devcmd, ENIC driver can convert |
---|
| 310 | + * interrupt coalescing timer in usec into CPU cycles as follows: |
---|
| 311 | + * |
---|
| 312 | + * intr_timer_cycles = intr_timer_usec * multiplier / divisor |
---|
| 313 | + * |
---|
| 314 | + * Interrupt coalescing timer in usecs can be be converted/obtained |
---|
| 315 | + * from CPU cycles as follows: |
---|
| 316 | + * |
---|
| 317 | + * intr_timer_usec = intr_timer_cycles * divisor / multiplier |
---|
| 318 | + * |
---|
| 319 | + * in: none |
---|
| 320 | + * out: (u32)a0 = multiplier |
---|
| 321 | + * (u32)a1 = divisor |
---|
| 322 | + * (u32)a2 = maximum timer value in usec |
---|
| 323 | + */ |
---|
| 324 | + CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50), |
---|
| 325 | + |
---|
| 326 | + /* |
---|
| 327 | + * ISCSI DUMP API: |
---|
| 328 | + * in: (u64)a0=paddr of the param or param itself |
---|
| 329 | + * (u32)a1=ISCSI_CMD_xxx |
---|
| 330 | + */ |
---|
| 331 | + CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51), |
---|
| 332 | + |
---|
| 333 | + /* |
---|
| 334 | + * ISCSI DUMP STATUS API: |
---|
| 335 | + * in: (u32)a0=cmd tag |
---|
| 336 | + * in: (u32)a1=ISCSI_CMD_xxx |
---|
| 337 | + * out: (u32)a0=cmd status |
---|
| 338 | + */ |
---|
| 339 | + CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52), |
---|
| 340 | + |
---|
| 341 | + /* |
---|
| 342 | + * Subvnic migration from MQ <--> VF. |
---|
| 343 | + * Enable the LIF migration from MQ to VF and vice versa. MQ and VF |
---|
| 344 | + * indexes are statically bound at the time of initialization. |
---|
| 345 | + * Based on the |
---|
| 346 | + * direction of migration, the resources of either MQ or the VF shall |
---|
| 347 | + * be attached to the LIF. |
---|
| 348 | + * in: (u32)a0=Direction of Migration |
---|
| 349 | + * 0=> Migrate to VF |
---|
| 350 | + * 1=> Migrate to MQ |
---|
| 351 | + * (u32)a1=VF index (MQ index) |
---|
| 352 | + */ |
---|
| 353 | + CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53), |
---|
| 354 | + |
---|
| 355 | + /* |
---|
| 356 | + * Register / Deregister the notification block for MQ subvnics |
---|
| 357 | + * in: |
---|
| 358 | + * (u64)a0=paddr to notify (set paddr=0 to unset) |
---|
| 359 | + * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) |
---|
| 360 | + * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr) |
---|
| 361 | + * out: |
---|
| 362 | + * (u32)a1 = effective size |
---|
| 363 | + */ |
---|
| 364 | + CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54), |
---|
| 365 | + |
---|
| 366 | + /* |
---|
| 367 | + * Set the predefined mac address as default |
---|
| 368 | + * in: |
---|
| 369 | + * (u48)a0=mac addr |
---|
| 370 | + */ |
---|
| 371 | + CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55), |
---|
| 372 | + |
---|
| 373 | + /* Update the provisioning info of the given VIF |
---|
| 374 | + * (u64)a0=paddr of vnic_devcmd_provinfo |
---|
| 375 | + * (u32)a1=sizeof provision info |
---|
| 376 | + */ |
---|
| 377 | + CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56), |
---|
| 378 | + |
---|
| 379 | + /* |
---|
| 380 | + * Initialization for the devcmd2 interface. |
---|
| 381 | + * in: (u64) a0=host result buffer physical address |
---|
| 382 | + * in: (u16) a1=number of entries in result buffer |
---|
| 383 | + */ |
---|
| 384 | + CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57) |
---|
266 | 385 | }; |
---|
267 | 386 | |
---|
268 | 387 | /* flags for CMD_OPEN */ |
---|
269 | 388 | #define CMD_OPENF_OPROM 0x1 /* open coming from option rom */ |
---|
| 389 | + |
---|
| 390 | +#define CMD_OPENF_RQ_ENABLE_THEN_POST 0x2 |
---|
270 | 391 | |
---|
271 | 392 | /* flags for CMD_INIT */ |
---|
272 | 393 | #define CMD_INITF_DEFAULT_MAC 0x1 /* init with default mac addr */ |
---|
.. | .. |
---|
321 | 442 | struct vnic_devcmd_provinfo { |
---|
322 | 443 | u8 oui[3]; |
---|
323 | 444 | u8 type; |
---|
324 | | - u8 data[0]; |
---|
| 445 | + u8 data[]; |
---|
325 | 446 | }; |
---|
326 | 447 | |
---|
327 | 448 | /* |
---|
.. | .. |
---|
345 | 466 | u64 args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian) */ |
---|
346 | 467 | }; |
---|
347 | 468 | |
---|
| 469 | +/* |
---|
| 470 | + * Version 2 of the interface. |
---|
| 471 | + * |
---|
| 472 | + * Some things are carried over, notably the vnic_devcmd_cmd enum. |
---|
| 473 | + */ |
---|
| 474 | + |
---|
| 475 | +/* |
---|
| 476 | + * Flags for vnic_devcmd2.flags |
---|
| 477 | + */ |
---|
| 478 | + |
---|
| 479 | +#define DEVCMD2_FNORESULT 0x1 /* Don't copy result to host */ |
---|
| 480 | + |
---|
| 481 | +#define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS |
---|
| 482 | + |
---|
| 483 | +struct vnic_devcmd2 { |
---|
| 484 | + u16 pad; |
---|
| 485 | + u16 flags; |
---|
| 486 | + u32 cmd; /* same command #defines as original */ |
---|
| 487 | + u64 args[VNIC_DEVCMD2_NARGS]; |
---|
| 488 | +}; |
---|
| 489 | + |
---|
| 490 | +#define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS |
---|
| 491 | +struct devcmd2_result { |
---|
| 492 | + u64 results[VNIC_DEVCMD2_NRESULTS]; |
---|
| 493 | + u32 pad; |
---|
| 494 | + u16 completed_index; /* into copy WQ */ |
---|
| 495 | + u8 error; /* same error codes as original */ |
---|
| 496 | + u8 color; /* 0 or 1 as with completion queues */ |
---|
| 497 | +}; |
---|
| 498 | + |
---|
| 499 | +#define DEVCMD2_RING_SIZE 32 |
---|
| 500 | +#define DEVCMD2_DESC_SIZE 128 |
---|
| 501 | + |
---|
| 502 | +#define DEVCMD2_RESULTS_SIZE_MAX ((1 << 16) - 1) |
---|
| 503 | + |
---|
348 | 504 | #endif /* _VNIC_DEVCMD_H_ */ |
---|