vnic_devcmd.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright 2008 Cisco Systems, Inc. All rights reserved.
  4. * Copyright 2007 Nuova Systems, Inc. All rights reserved.
  5. */
  6. #ifndef _VNIC_DEVCMD_H_
  7. #define _VNIC_DEVCMD_H_
  8. #define _CMD_NBITS 14
  9. #define _CMD_VTYPEBITS 10
  10. #define _CMD_FLAGSBITS 6
  11. #define _CMD_DIRBITS 2
  12. #define _CMD_NMASK ((1 << _CMD_NBITS)-1)
  13. #define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1)
  14. #define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1)
  15. #define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1)
  16. #define _CMD_NSHIFT 0
  17. #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
  18. #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
  19. #define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
  20. /*
  21. * Direction bits (from host perspective).
  22. */
  23. #define _CMD_DIR_NONE 0U
  24. #define _CMD_DIR_WRITE 1U
  25. #define _CMD_DIR_READ 2U
  26. #define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ)
  27. /*
  28. * Flag bits.
  29. */
  30. #define _CMD_FLAGS_NONE 0U
  31. #define _CMD_FLAGS_NOWAIT 1U
  32. /*
  33. * vNIC type bits.
  34. */
  35. #define _CMD_VTYPE_NONE 0U
  36. #define _CMD_VTYPE_ENET 1U
  37. #define _CMD_VTYPE_FC 2U
  38. #define _CMD_VTYPE_SCSI 4U
  39. #define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
  40. /*
  41. * Used to create cmds..
  42. */
  43. #define _CMDCF(dir, flags, vtype, nr) \
  44. (((dir) << _CMD_DIRSHIFT) | \
  45. ((flags) << _CMD_FLAGSSHIFT) | \
  46. ((vtype) << _CMD_VTYPESHIFT) | \
  47. ((nr) << _CMD_NSHIFT))
  48. #define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr)
  49. #define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
  50. /*
  51. * Used to decode cmds..
  52. */
  53. #define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
  54. #define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
  55. #define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
  56. #define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
  57. enum vnic_devcmd_cmd {
  58. CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
  59. /* mcpu fw info in mem: (u64)a0=paddr to struct vnic_devcmd_fw_info */
  60. CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
  61. /* dev-specific block member:
  62. * in: (u16)a0=offset,(u8)a1=size
  63. * out: a0=value */
  64. CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
  65. /* stats clear */
  66. CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
  67. /* stats dump in mem: (u64)a0=paddr to stats area,
  68. * (u16)a1=sizeof stats area */
  69. CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
  70. /* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */
  71. CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
  72. /* hang detection notification */
  73. CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
  74. /* MAC address in (u48)a0 */
  75. CMD_MAC_ADDR = _CMDC(_CMD_DIR_READ,
  76. _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
  77. /* disable/enable promisc mode: (u8)a0=0/1 */
  78. /***** XXX DEPRECATED *****/
  79. CMD_PROMISC_MODE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 10),
  80. /* disable/enable all-multi mode: (u8)a0=0/1 */
  81. /***** XXX DEPRECATED *****/
  82. CMD_ALLMULTI_MODE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 11),
  83. /* add addr from (u48)a0 */
  84. CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE,
  85. _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
  86. /* del addr from (u48)a0 */
  87. CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE,
  88. _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
  89. /* add VLAN id in (u16)a0 */
  90. CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
  91. /* del VLAN id in (u16)a0 */
  92. CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
  93. /* nic_cfg in (u32)a0 */
  94. CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
  95. /* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */
  96. CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
  97. /* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */
  98. CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
  99. /* initiate softreset */
  100. CMD_SOFT_RESET = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
  101. /* softreset status:
  102. * out: a0=0 reset complete, a0=1 reset in progress */
  103. CMD_SOFT_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
  104. /* set struct vnic_devcmd_notify buffer in mem:
  105. * in:
  106. * (u64)a0=paddr to notify (set paddr=0 to unset)
  107. * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
  108. * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
  109. * out:
  110. * (u32)a1 = effective size
  111. */
  112. CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
  113. /* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct,
  114. * (u8)a1=PXENV_UNDI_xxx */
  115. CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
  116. /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
  117. CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
  118. /* open status:
  119. * out: a0=0 open complete, a0=1 open in progress */
  120. CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
  121. /* close vnic */
  122. CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
  123. /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
  124. CMD_INIT = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
  125. /* variant of CMD_INIT, with provisioning info
  126. * (u64)a0=paddr of vnic_devcmd_provinfo
  127. * (u32)a1=sizeof provision info
  128. */
  129. CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
  130. /* enable virtual link */
  131. CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
  132. /* disable virtual link */
  133. CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
  134. /* stats dump all vnics on uplink in mem: (u64)a0=paddr (u32)a1=uif */
  135. CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
  136. /* init status:
  137. * out: a0=0 init complete, a0=1 init in progress
  138. * if a0=0, a1=errno */
  139. CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
  140. /* INT13 API: (u64)a0=paddr to vnic_int13_params struct
  141. * (u8)a1=INT13_CMD_xxx */
  142. CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
  143. /* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */
  144. CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
  145. /* undo initialize of virtual link */
  146. CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
  147. /* check fw capability of a cmd:
  148. * in: (u32)a0=cmd
  149. * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */
  150. CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
  151. /* persistent binding info
  152. * in: (u64)a0=paddr of arg
  153. * (u32)a1=CMD_PERBI_XXX */
  154. CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
  155. /* Interrupt Assert Register functionality
  156. * in: (u16)a0=interrupt number to assert
  157. */
  158. CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
  159. /* initiate hangreset, like softreset after hang detected */
  160. CMD_HANG_RESET = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
  161. /* hangreset status:
  162. * out: a0=0 reset complete, a0=1 reset in progress */
  163. CMD_HANG_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
  164. /*
  165. * Set hw ingress packet vlan rewrite mode:
  166. * in: (u32)a0=new vlan rewrite mode
  167. * out: (u32)a0=old vlan rewrite mode */
  168. CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
  169. /*
  170. * in: (u16)a0=bdf of target vnic
  171. * (u32)a1=cmd to proxy
  172. * a2-a15=args to cmd in a1
  173. * out: (u32)a0=status of proxied cmd
  174. * a1-a15=out args of proxied cmd */
  175. CMD_PROXY_BY_BDF = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
  176. /*
  177. * As for BY_BDF except a0 is index of hvnlink subordinate vnic
  178. * or SR-IOV virtual vnic
  179. */
  180. CMD_PROXY_BY_INDEX = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
  181. /*
  182. * For HPP toggle:
  183. * adapter-info-get
  184. * in: (u64)a0=phsical address of buffer passed in from caller.
  185. * (u16)a1=size of buffer specified in a0.
  186. * out: (u64)a0=phsical address of buffer passed in from caller.
  187. * (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or
  188. * 0 if no VIF-CONFIG-INFO TLV was ever received. */
  189. CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
  190. /*
  191. * INT13 API: (u64)a0=paddr to vnic_int13_params struct
  192. * (u32)a1=INT13_CMD_xxx
  193. */
  194. CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45),
  195. /*
  196. * Set default vlan:
  197. * in: (u16)a0=new default vlan
  198. * (u16)a1=zero for overriding vlan with param a0,
  199. * non-zero for resetting vlan to the default
  200. * out: (u16)a0=old default vlan
  201. */
  202. CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
  203. /* init_prov_info2:
  204. * Variant of CMD_INIT_PROV_INFO, where it will not try to enable
  205. * the vnic until CMD_ENABLE2 is issued.
  206. * (u64)a0=paddr of vnic_devcmd_provinfo
  207. * (u32)a1=sizeof provision info
  208. */
  209. CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
  210. /* enable2:
  211. * (u32)a0=0 ==> standby
  212. * =CMD_ENABLE2_ACTIVE ==> active
  213. */
  214. CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
  215. /*
  216. * cmd_status:
  217. * Returns the status of the specified command
  218. * Input:
  219. * a0 = command for which status is being queried.
  220. * Possible values are:
  221. * CMD_SOFT_RESET
  222. * CMD_HANG_RESET
  223. * CMD_OPEN
  224. * CMD_INIT
  225. * CMD_INIT_PROV_INFO
  226. * CMD_DEINIT
  227. * CMD_INIT_PROV_INFO2
  228. * CMD_ENABLE2
  229. * Output:
  230. * if status == STAT_ERROR
  231. * a0 = ERR_ENOTSUPPORTED - status for command in a0 is
  232. * not supported
  233. * if status == STAT_NONE
  234. * a0 = status of the devcmd specified in a0 as follows.
  235. * ERR_SUCCESS - command in a0 completed successfully
  236. * ERR_EINPROGRESS - command in a0 is still in progress
  237. */
  238. CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
  239. /*
  240. * Returns interrupt coalescing timer conversion factors.
  241. * After calling this devcmd, ENIC driver can convert
  242. * interrupt coalescing timer in usec into CPU cycles as follows:
  243. *
  244. * intr_timer_cycles = intr_timer_usec * multiplier / divisor
  245. *
  246. * Interrupt coalescing timer in usecs can be be converted/obtained
  247. * from CPU cycles as follows:
  248. *
  249. * intr_timer_usec = intr_timer_cycles * divisor / multiplier
  250. *
  251. * in: none
  252. * out: (u32)a0 = multiplier
  253. * (u32)a1 = divisor
  254. * (u32)a2 = maximum timer value in usec
  255. */
  256. CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
  257. /*
  258. * ISCSI DUMP API:
  259. * in: (u64)a0=paddr of the param or param itself
  260. * (u32)a1=ISCSI_CMD_xxx
  261. */
  262. CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51),
  263. /*
  264. * ISCSI DUMP STATUS API:
  265. * in: (u32)a0=cmd tag
  266. * in: (u32)a1=ISCSI_CMD_xxx
  267. * out: (u32)a0=cmd status
  268. */
  269. CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52),
  270. /*
  271. * Subvnic migration from MQ <--> VF.
  272. * Enable the LIF migration from MQ to VF and vice versa. MQ and VF
  273. * indexes are statically bound at the time of initialization.
  274. * Based on the
  275. * direction of migration, the resources of either MQ or the VF shall
  276. * be attached to the LIF.
  277. * in: (u32)a0=Direction of Migration
  278. * 0=> Migrate to VF
  279. * 1=> Migrate to MQ
  280. * (u32)a1=VF index (MQ index)
  281. */
  282. CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53),
  283. /*
  284. * Register / Deregister the notification block for MQ subvnics
  285. * in:
  286. * (u64)a0=paddr to notify (set paddr=0 to unset)
  287. * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
  288. * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
  289. * out:
  290. * (u32)a1 = effective size
  291. */
  292. CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54),
  293. /*
  294. * Set the predefined mac address as default
  295. * in:
  296. * (u48)a0=mac addr
  297. */
  298. CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
  299. /* Update the provisioning info of the given VIF
  300. * (u64)a0=paddr of vnic_devcmd_provinfo
  301. * (u32)a1=sizeof provision info
  302. */
  303. CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
  304. /*
  305. * Initialization for the devcmd2 interface.
  306. * in: (u64) a0=host result buffer physical address
  307. * in: (u16) a1=number of entries in result buffer
  308. */
  309. CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
  310. };
  311. /* flags for CMD_OPEN */
  312. #define CMD_OPENF_OPROM 0x1 /* open coming from option rom */
  313. #define CMD_OPENF_RQ_ENABLE_THEN_POST 0x2
  314. /* flags for CMD_INIT */
  315. #define CMD_INITF_DEFAULT_MAC 0x1 /* init with default mac addr */
  316. /* flags for CMD_PACKET_FILTER */
  317. #define CMD_PFILTER_DIRECTED 0x01
  318. #define CMD_PFILTER_MULTICAST 0x02
  319. #define CMD_PFILTER_BROADCAST 0x04
  320. #define CMD_PFILTER_PROMISCUOUS 0x08
  321. #define CMD_PFILTER_ALL_MULTICAST 0x10
  322. enum vnic_devcmd_status {
  323. STAT_NONE = 0,
  324. STAT_BUSY = 1 << 0, /* cmd in progress */
  325. STAT_ERROR = 1 << 1, /* last cmd caused error (code in a0) */
  326. };
  327. enum vnic_devcmd_error {
  328. ERR_SUCCESS = 0,
  329. ERR_EINVAL = 1,
  330. ERR_EFAULT = 2,
  331. ERR_EPERM = 3,
  332. ERR_EBUSY = 4,
  333. ERR_ECMDUNKNOWN = 5,
  334. ERR_EBADSTATE = 6,
  335. ERR_ENOMEM = 7,
  336. ERR_ETIMEDOUT = 8,
  337. ERR_ELINKDOWN = 9,
  338. };
  339. struct vnic_devcmd_fw_info {
  340. char fw_version[32];
  341. char fw_build[32];
  342. char hw_version[32];
  343. char hw_serial_number[32];
  344. };
  345. struct vnic_devcmd_notify {
  346. u32 csum; /* checksum over following words */
  347. u32 link_state; /* link up == 1 */
  348. u32 port_speed; /* effective port speed (rate limit) */
  349. u32 mtu; /* MTU */
  350. u32 msglvl; /* requested driver msg lvl */
  351. u32 uif; /* uplink interface */
  352. u32 status; /* status bits (see VNIC_STF_*) */
  353. u32 error; /* error code (see ERR_*) for first ERR */
  354. u32 link_down_cnt; /* running count of link down transitions */
  355. };
  356. #define VNIC_STF_FATAL_ERR 0x0001 /* fatal fw error */
  357. struct vnic_devcmd_provinfo {
  358. u8 oui[3];
  359. u8 type;
  360. u8 data[];
  361. };
  362. /*
  363. * Writing cmd register causes STAT_BUSY to get set in status register.
  364. * When cmd completes, STAT_BUSY will be cleared.
  365. *
  366. * If cmd completed successfully STAT_ERROR will be clear
  367. * and args registers contain cmd-specific results.
  368. *
  369. * If cmd error, STAT_ERROR will be set and args[0] contains error code.
  370. *
  371. * status register is read-only. While STAT_BUSY is set,
  372. * all other register contents are read-only.
  373. */
  374. /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
  375. #define VNIC_DEVCMD_NARGS 15
  376. struct vnic_devcmd {
  377. u32 status; /* RO */
  378. u32 cmd; /* RW */
  379. u64 args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian) */
  380. };
  381. /*
  382. * Version 2 of the interface.
  383. *
  384. * Some things are carried over, notably the vnic_devcmd_cmd enum.
  385. */
  386. /*
  387. * Flags for vnic_devcmd2.flags
  388. */
  389. #define DEVCMD2_FNORESULT 0x1 /* Don't copy result to host */
  390. #define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS
  391. struct vnic_devcmd2 {
  392. u16 pad;
  393. u16 flags;
  394. u32 cmd; /* same command #defines as original */
  395. u64 args[VNIC_DEVCMD2_NARGS];
  396. };
  397. #define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS
  398. struct devcmd2_result {
  399. u64 results[VNIC_DEVCMD2_NRESULTS];
  400. u32 pad;
  401. u16 completed_index; /* into copy WQ */
  402. u8 error; /* same error codes as original */
  403. u8 color; /* 0 or 1 as with completion queues */
  404. };
  405. #define DEVCMD2_RING_SIZE 32
  406. #define DEVCMD2_DESC_SIZE 128
  407. #define DEVCMD2_RESULTS_SIZE_MAX ((1 << 16) - 1)
  408. #endif /* _VNIC_DEVCMD_H_ */