xref: /freebsd/sys/dev/enic/vnic_devcmd.h (revision 9c067b84)
19c067b84SDoug Ambrisko /* SPDX-License-Identifier: BSD-3-Clause
29c067b84SDoug Ambrisko  * Copyright 2008-2017 Cisco Systems, Inc.  All rights reserved.
39c067b84SDoug Ambrisko  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
49c067b84SDoug Ambrisko  */
59c067b84SDoug Ambrisko 
69c067b84SDoug Ambrisko #ifndef _VNIC_DEVCMD_H_
79c067b84SDoug Ambrisko #define _VNIC_DEVCMD_H_
89c067b84SDoug Ambrisko 
99c067b84SDoug Ambrisko #define _CMD_NBITS	14
109c067b84SDoug Ambrisko #define _CMD_VTYPEBITS	10
119c067b84SDoug Ambrisko #define _CMD_FLAGSBITS	6
129c067b84SDoug Ambrisko #define _CMD_DIRBITS	2
139c067b84SDoug Ambrisko 
149c067b84SDoug Ambrisko #define _CMD_NMASK	((1 << _CMD_NBITS)-1)
159c067b84SDoug Ambrisko #define _CMD_VTYPEMASK	((1 << _CMD_VTYPEBITS)-1)
169c067b84SDoug Ambrisko #define _CMD_FLAGSMASK  ((1 << _CMD_FLAGSBITS)-1)
179c067b84SDoug Ambrisko #define _CMD_DIRMASK	((1 << _CMD_DIRBITS)-1)
189c067b84SDoug Ambrisko 
199c067b84SDoug Ambrisko #define _CMD_NSHIFT	0
209c067b84SDoug Ambrisko #define _CMD_VTYPESHIFT	(_CMD_NSHIFT+_CMD_NBITS)
219c067b84SDoug Ambrisko #define _CMD_FLAGSSHIFT	(_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
229c067b84SDoug Ambrisko #define _CMD_DIRSHIFT	(_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
239c067b84SDoug Ambrisko 
249c067b84SDoug Ambrisko /*
259c067b84SDoug Ambrisko  * Direction bits (from host perspective).
269c067b84SDoug Ambrisko  */
279c067b84SDoug Ambrisko #define _CMD_DIR_NONE	0U
289c067b84SDoug Ambrisko #define _CMD_DIR_WRITE	1U
299c067b84SDoug Ambrisko #define _CMD_DIR_READ	2U
309c067b84SDoug Ambrisko #define _CMD_DIR_RW	(_CMD_DIR_WRITE | _CMD_DIR_READ)
319c067b84SDoug Ambrisko 
329c067b84SDoug Ambrisko /*
339c067b84SDoug Ambrisko  * Flag bits.
349c067b84SDoug Ambrisko  */
359c067b84SDoug Ambrisko #define _CMD_FLAGS_NONE 0U
369c067b84SDoug Ambrisko #define _CMD_FLAGS_NOWAIT 1U
379c067b84SDoug Ambrisko 
389c067b84SDoug Ambrisko /*
399c067b84SDoug Ambrisko  * vNIC type bits.
409c067b84SDoug Ambrisko  */
419c067b84SDoug Ambrisko #define _CMD_VTYPE_NONE	0U
429c067b84SDoug Ambrisko #define _CMD_VTYPE_ENET	1U
439c067b84SDoug Ambrisko #define _CMD_VTYPE_FC	2U
449c067b84SDoug Ambrisko #define _CMD_VTYPE_SCSI	4U
459c067b84SDoug Ambrisko #define _CMD_VTYPE_ALL	(_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
469c067b84SDoug Ambrisko 
479c067b84SDoug Ambrisko /*
489c067b84SDoug Ambrisko  * Used to create cmds..
499c067b84SDoug Ambrisko  */
509c067b84SDoug Ambrisko #define _CMDCF(dir, flags, vtype, nr)  \
519c067b84SDoug Ambrisko 	(((dir)   << _CMD_DIRSHIFT) |  \
529c067b84SDoug Ambrisko 	((flags) << _CMD_FLAGSSHIFT) | \
539c067b84SDoug Ambrisko 	((vtype) << _CMD_VTYPESHIFT) | \
549c067b84SDoug Ambrisko 	((nr)    << _CMD_NSHIFT))
559c067b84SDoug Ambrisko #define _CMDC(dir, vtype, nr)	_CMDCF(dir, 0, vtype, nr)
569c067b84SDoug Ambrisko #define _CMDCNW(dir, vtype, nr)	_CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
579c067b84SDoug Ambrisko 
589c067b84SDoug Ambrisko /*
599c067b84SDoug Ambrisko  * Used to decode cmds..
609c067b84SDoug Ambrisko  */
619c067b84SDoug Ambrisko #define _CMD_DIR(cmd)	(((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
629c067b84SDoug Ambrisko #define _CMD_FLAGS(cmd)	(((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
639c067b84SDoug Ambrisko #define _CMD_VTYPE(cmd)	(((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
649c067b84SDoug Ambrisko #define _CMD_N(cmd)	(((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
659c067b84SDoug Ambrisko 
669c067b84SDoug Ambrisko #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
679c067b84SDoug Ambrisko 
689c067b84SDoug Ambrisko enum vnic_devcmd_cmd {
699c067b84SDoug Ambrisko 	CMD_NONE                = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
709c067b84SDoug Ambrisko 
719c067b84SDoug Ambrisko 	/*
729c067b84SDoug Ambrisko 	 * mcpu fw info in mem:
739c067b84SDoug Ambrisko 	 * in:
749c067b84SDoug Ambrisko 	 *   (u64)a0=paddr to struct vnic_devcmd_fw_info
759c067b84SDoug Ambrisko 	 * action:
769c067b84SDoug Ambrisko 	 *   Fills in struct vnic_devcmd_fw_info (128 bytes)
779c067b84SDoug Ambrisko 	 * note:
789c067b84SDoug Ambrisko 	 *   An old definition of CMD_MCPU_FW_INFO
799c067b84SDoug Ambrisko 	 */
809c067b84SDoug Ambrisko 	CMD_MCPU_FW_INFO_OLD    = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
819c067b84SDoug Ambrisko 
829c067b84SDoug Ambrisko 	/*
839c067b84SDoug Ambrisko 	 * mcpu fw info in mem:
849c067b84SDoug Ambrisko 	 * in:
859c067b84SDoug Ambrisko 	 *   (u64)a0=paddr to struct vnic_devcmd_fw_info
869c067b84SDoug Ambrisko 	 *   (u16)a1=size of the structure
879c067b84SDoug Ambrisko 	 * out:
889c067b84SDoug Ambrisko 	 *	 (u16)a1=0                          for in:a1 = 0,
899c067b84SDoug Ambrisko 	 *	         data size actually written for other values.
909c067b84SDoug Ambrisko 	 * action:
919c067b84SDoug Ambrisko 	 *   Fills in first 128 bytes of vnic_devcmd_fw_info for in:a1 = 0,
929c067b84SDoug Ambrisko 	 *            first in:a1 bytes               for 0 < in:a1 <= 132,
939c067b84SDoug Ambrisko 	 *            132 bytes                       for other values of in:a1.
949c067b84SDoug Ambrisko 	 * note:
959c067b84SDoug Ambrisko 	 *   CMD_MCPU_FW_INFO and CMD_MCPU_FW_INFO_OLD have the same enum 1
969c067b84SDoug Ambrisko 	 *   for source compatibility.
979c067b84SDoug Ambrisko 	 */
989c067b84SDoug Ambrisko 	CMD_MCPU_FW_INFO        = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1),
999c067b84SDoug Ambrisko 
1009c067b84SDoug Ambrisko 	/* dev-specific block member:
1019c067b84SDoug Ambrisko 	 *    in: (u16)a0=offset,(u8)a1=size
1029c067b84SDoug Ambrisko 	 *    out: a0=value
1039c067b84SDoug Ambrisko 	 */
1049c067b84SDoug Ambrisko 	CMD_DEV_SPEC            = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
1059c067b84SDoug Ambrisko 
1069c067b84SDoug Ambrisko 	/* stats clear */
1079c067b84SDoug Ambrisko 	CMD_STATS_CLEAR         = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
1089c067b84SDoug Ambrisko 
1099c067b84SDoug Ambrisko 	/* stats dump in mem: (u64)a0=paddr to stats area,
1109c067b84SDoug Ambrisko 	 *                    (u16)a1=sizeof stats area */
1119c067b84SDoug Ambrisko 	CMD_STATS_DUMP          = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
1129c067b84SDoug Ambrisko 
1139c067b84SDoug Ambrisko 	/* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */
1149c067b84SDoug Ambrisko 	CMD_PACKET_FILTER	= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7),
1159c067b84SDoug Ambrisko 
1169c067b84SDoug Ambrisko 	/* set Rx packet filter for all: (u32)a0=filters (see CMD_PFILTER_*) */
1179c067b84SDoug Ambrisko 	CMD_PACKET_FILTER_ALL   = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
1189c067b84SDoug Ambrisko 
1199c067b84SDoug Ambrisko 	/* hang detection notification */
1209c067b84SDoug Ambrisko 	CMD_HANG_NOTIFY         = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
1219c067b84SDoug Ambrisko 
1229c067b84SDoug Ambrisko 	/* MAC address in (u48)a0 */
1239c067b84SDoug Ambrisko 	CMD_MAC_ADDR            = _CMDC(_CMD_DIR_READ,
1249c067b84SDoug Ambrisko 					_CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
1259c067b84SDoug Ambrisko #define CMD_GET_MAC_ADDR CMD_MAC_ADDR   /* some uses are aliased */
1269c067b84SDoug Ambrisko 
1279c067b84SDoug Ambrisko 	/* add addr from (u48)a0 */
1289c067b84SDoug Ambrisko 	CMD_ADDR_ADD            = _CMDCNW(_CMD_DIR_WRITE,
1299c067b84SDoug Ambrisko 					_CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
1309c067b84SDoug Ambrisko 
1319c067b84SDoug Ambrisko 	/* del addr from (u48)a0 */
1329c067b84SDoug Ambrisko 	CMD_ADDR_DEL            = _CMDCNW(_CMD_DIR_WRITE,
1339c067b84SDoug Ambrisko 					_CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
1349c067b84SDoug Ambrisko 
1359c067b84SDoug Ambrisko 	/* add VLAN id in (u16)a0 */
1369c067b84SDoug Ambrisko 	CMD_VLAN_ADD            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
1379c067b84SDoug Ambrisko 
1389c067b84SDoug Ambrisko 	/* del VLAN id in (u16)a0 */
1399c067b84SDoug Ambrisko 	CMD_VLAN_DEL            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
1409c067b84SDoug Ambrisko 
1419c067b84SDoug Ambrisko 	/*
1429c067b84SDoug Ambrisko 	 * nic_cfg in (u32)a0
1439c067b84SDoug Ambrisko 	 *
1449c067b84SDoug Ambrisko 	 * Capability query:
1459c067b84SDoug Ambrisko 	 * out: (u64) a0= 1 if a1 is valid
1469c067b84SDoug Ambrisko 	 *      (u64) a1= (NIC_CFG bits supported) | (flags << 32)
1479c067b84SDoug Ambrisko 	 *                              (flags are CMD_NIC_CFG_CAPF_xxx)
1489c067b84SDoug Ambrisko 	 */
1499c067b84SDoug Ambrisko 	CMD_NIC_CFG             = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
1509c067b84SDoug Ambrisko 
1519c067b84SDoug Ambrisko 	/*
1529c067b84SDoug Ambrisko 	 * nic_cfg_chk  (same as nic_cfg, but may return error)
1539c067b84SDoug Ambrisko 	 * in (u32)a0
1549c067b84SDoug Ambrisko 	 *
1559c067b84SDoug Ambrisko 	 * Capability query:
1569c067b84SDoug Ambrisko 	 * out: (u64) a0= 1 if a1 is valid
1579c067b84SDoug Ambrisko 	 *      (u64) a1= (NIC_CFG bits supported) | (flags << 32)
1589c067b84SDoug Ambrisko 	 *                              (flags are CMD_NIC_CFG_CAPF_xxx)
1599c067b84SDoug Ambrisko 	 */
1609c067b84SDoug Ambrisko 	CMD_NIC_CFG_CHK         = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
1619c067b84SDoug Ambrisko 
1629c067b84SDoug Ambrisko 	/* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */
1639c067b84SDoug Ambrisko 	CMD_RSS_KEY             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
1649c067b84SDoug Ambrisko 
1659c067b84SDoug Ambrisko 	/* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */
1669c067b84SDoug Ambrisko 	CMD_RSS_CPU             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
1679c067b84SDoug Ambrisko 
1689c067b84SDoug Ambrisko 	/* initiate softreset */
1699c067b84SDoug Ambrisko 	CMD_SOFT_RESET          = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
1709c067b84SDoug Ambrisko 
1719c067b84SDoug Ambrisko 	/* softreset status:
1729c067b84SDoug Ambrisko 	 *    out: a0=0 reset complete, a0=1 reset in progress */
1739c067b84SDoug Ambrisko 	CMD_SOFT_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
1749c067b84SDoug Ambrisko 
1759c067b84SDoug Ambrisko 	/* set struct vnic_devcmd_notify buffer in mem:
1769c067b84SDoug Ambrisko 	 * in:
1779c067b84SDoug Ambrisko 	 *   (u64)a0=paddr to notify (set paddr=0 to unset)
1789c067b84SDoug Ambrisko 	 *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
1799c067b84SDoug Ambrisko 	 *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
1809c067b84SDoug Ambrisko 	 * out:
1819c067b84SDoug Ambrisko 	 *   (u32)a1 = effective size
1829c067b84SDoug Ambrisko 	 */
1839c067b84SDoug Ambrisko 	CMD_NOTIFY              = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
1849c067b84SDoug Ambrisko 
1859c067b84SDoug Ambrisko 	/* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct,
1869c067b84SDoug Ambrisko 	 *           (u8)a1=PXENV_UNDI_xxx */
1879c067b84SDoug Ambrisko 	CMD_UNDI                = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
1889c067b84SDoug Ambrisko 
1899c067b84SDoug Ambrisko 	/* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
1909c067b84SDoug Ambrisko 	CMD_OPEN		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
1919c067b84SDoug Ambrisko 
1929c067b84SDoug Ambrisko 	/* open status:
1939c067b84SDoug Ambrisko 	 *    out: a0=0 open complete, a0=1 open in progress */
1949c067b84SDoug Ambrisko 	CMD_OPEN_STATUS		= _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
1959c067b84SDoug Ambrisko 
1969c067b84SDoug Ambrisko 	/* close vnic */
1979c067b84SDoug Ambrisko 	CMD_CLOSE		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
1989c067b84SDoug Ambrisko 
1999c067b84SDoug Ambrisko 	/* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
2009c067b84SDoug Ambrisko /***** Replaced by CMD_INIT *****/
2019c067b84SDoug Ambrisko 	CMD_INIT_v1		= _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
2029c067b84SDoug Ambrisko 
2039c067b84SDoug Ambrisko 	/* variant of CMD_INIT, with provisioning info
2049c067b84SDoug Ambrisko 	 *     (u64)a0=paddr of vnic_devcmd_provinfo
2059c067b84SDoug Ambrisko 	 *     (u32)a1=sizeof provision info */
2069c067b84SDoug Ambrisko 	CMD_INIT_PROV_INFO	= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
2079c067b84SDoug Ambrisko 
2089c067b84SDoug Ambrisko 	/* enable virtual link */
2099c067b84SDoug Ambrisko 	CMD_ENABLE		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
2109c067b84SDoug Ambrisko 
2119c067b84SDoug Ambrisko 	/* enable virtual link, waiting variant. */
2129c067b84SDoug Ambrisko 	CMD_ENABLE_WAIT		= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
2139c067b84SDoug Ambrisko 
2149c067b84SDoug Ambrisko 	/* disable virtual link */
2159c067b84SDoug Ambrisko 	CMD_DISABLE		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
2169c067b84SDoug Ambrisko 
2179c067b84SDoug Ambrisko 	/* stats dump sum of all vnic stats on same uplink in mem:
2189c067b84SDoug Ambrisko 	 *     (u64)a0=paddr
2199c067b84SDoug Ambrisko 	 *     (u16)a1=sizeof stats area */
2209c067b84SDoug Ambrisko 	CMD_STATS_DUMP_ALL	= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
2219c067b84SDoug Ambrisko 
2229c067b84SDoug Ambrisko 	/* init status:
2239c067b84SDoug Ambrisko 	 *    out: a0=0 init complete, a0=1 init in progress
2249c067b84SDoug Ambrisko 	 *         if a0=0, a1=errno */
2259c067b84SDoug Ambrisko 	CMD_INIT_STATUS		= _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
2269c067b84SDoug Ambrisko 
2279c067b84SDoug Ambrisko 	/* INT13 API: (u64)a0=paddr to vnic_int13_params struct
2289c067b84SDoug Ambrisko 	 *            (u32)a1=INT13_CMD_xxx */
2299c067b84SDoug Ambrisko 	CMD_INT13               = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
2309c067b84SDoug Ambrisko 
2319c067b84SDoug Ambrisko 	/* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */
2329c067b84SDoug Ambrisko 	CMD_LOGICAL_UPLINK      = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
2339c067b84SDoug Ambrisko 
2349c067b84SDoug Ambrisko 	/* undo initialize of virtual link */
2359c067b84SDoug Ambrisko 	CMD_DEINIT		= _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
2369c067b84SDoug Ambrisko 
2379c067b84SDoug Ambrisko 	/* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
2389c067b84SDoug Ambrisko 	CMD_INIT		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35),
2399c067b84SDoug Ambrisko 
2409c067b84SDoug Ambrisko 	/* check fw capability of a cmd:
2419c067b84SDoug Ambrisko 	 * in:  (u32)a0=cmd
2429c067b84SDoug Ambrisko 	 * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */
2439c067b84SDoug Ambrisko 	CMD_CAPABILITY		= _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
2449c067b84SDoug Ambrisko 
2459c067b84SDoug Ambrisko 	/* persistent binding info
2469c067b84SDoug Ambrisko 	 * in:  (u64)a0=paddr of arg
2479c067b84SDoug Ambrisko 	 *      (u32)a1=CMD_PERBI_XXX */
2489c067b84SDoug Ambrisko 	CMD_PERBI		= _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
2499c067b84SDoug Ambrisko 
2509c067b84SDoug Ambrisko 	/* Interrupt Assert Register functionality
2519c067b84SDoug Ambrisko 	 * in: (u16)a0=interrupt number to assert
2529c067b84SDoug Ambrisko 	 */
2539c067b84SDoug Ambrisko 	CMD_IAR			= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
2549c067b84SDoug Ambrisko 
2559c067b84SDoug Ambrisko 	/* initiate hangreset, like softreset after hang detected */
2569c067b84SDoug Ambrisko 	CMD_HANG_RESET		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
2579c067b84SDoug Ambrisko 
2589c067b84SDoug Ambrisko 	/* hangreset status:
2599c067b84SDoug Ambrisko 	 *    out: a0=0 reset complete, a0=1 reset in progress */
2609c067b84SDoug Ambrisko 	CMD_HANG_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
2619c067b84SDoug Ambrisko 
2629c067b84SDoug Ambrisko 	/*
2639c067b84SDoug Ambrisko 	 * Set hw ingress packet vlan rewrite mode:
2649c067b84SDoug Ambrisko 	 * in:  (u32)a0=new vlan rewrite mode
2659c067b84SDoug Ambrisko 	 * out: (u32)a0=old vlan rewrite mode */
2669c067b84SDoug Ambrisko 	CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
2679c067b84SDoug Ambrisko 
2689c067b84SDoug Ambrisko 	/*
2699c067b84SDoug Ambrisko 	 * in:  (u16)a0=bdf of target vnic
2709c067b84SDoug Ambrisko 	 *      (u32)a1=cmd to proxy
2719c067b84SDoug Ambrisko 	 *      a2-a15=args to cmd in a1
2729c067b84SDoug Ambrisko 	 * out: (u32)a0=status of proxied cmd
2739c067b84SDoug Ambrisko 	 *      a1-a15=out args of proxied cmd */
2749c067b84SDoug Ambrisko 	CMD_PROXY_BY_BDF =	_CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
2759c067b84SDoug Ambrisko 
2769c067b84SDoug Ambrisko 	/*
2779c067b84SDoug Ambrisko 	 * As for BY_BDF except a0 is index of hvnlink subordinate vnic
2789c067b84SDoug Ambrisko 	 * or SR-IOV virtual vnic
2799c067b84SDoug Ambrisko 	 */
2809c067b84SDoug Ambrisko 	CMD_PROXY_BY_INDEX =    _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
2819c067b84SDoug Ambrisko 
2829c067b84SDoug Ambrisko 	/*
2839c067b84SDoug Ambrisko 	 * For HPP toggle:
2849c067b84SDoug Ambrisko 	 * adapter-info-get
2859c067b84SDoug Ambrisko 	 * in:  (u64)a0=phsical address of buffer passed in from caller.
2869c067b84SDoug Ambrisko 	 *      (u16)a1=size of buffer specified in a0.
2879c067b84SDoug Ambrisko 	 * out: (u64)a0=phsical address of buffer passed in from caller.
2889c067b84SDoug Ambrisko 	 *      (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or
2899c067b84SDoug Ambrisko 	 *              0 if no VIF-CONFIG-INFO TLV was ever received. */
2909c067b84SDoug Ambrisko 	CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
2919c067b84SDoug Ambrisko 
2929c067b84SDoug Ambrisko 	/*
2939c067b84SDoug Ambrisko 	 * INT13 API: (u64)a0=paddr to vnic_int13_params struct
2949c067b84SDoug Ambrisko 	 *            (u32)a1=INT13_CMD_xxx
2959c067b84SDoug Ambrisko 	 */
2969c067b84SDoug Ambrisko 	CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45),
2979c067b84SDoug Ambrisko 
2989c067b84SDoug Ambrisko 	/*
2999c067b84SDoug Ambrisko 	 * Set default vlan:
3009c067b84SDoug Ambrisko 	 * in: (u16)a0=new default vlan
3019c067b84SDoug Ambrisko 	 *     (u16)a1=zero for overriding vlan with param a0,
3029c067b84SDoug Ambrisko 	 *		       non-zero for resetting vlan to the default
3039c067b84SDoug Ambrisko 	 * out: (u16)a0=old default vlan
3049c067b84SDoug Ambrisko 	 */
3059c067b84SDoug Ambrisko 	CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
3069c067b84SDoug Ambrisko 
3079c067b84SDoug Ambrisko 	/* init_prov_info2:
3089c067b84SDoug Ambrisko 	 * Variant of CMD_INIT_PROV_INFO, where it will not try to enable
3099c067b84SDoug Ambrisko 	 * the vnic until CMD_ENABLE2 is issued.
3109c067b84SDoug Ambrisko 	 *     (u64)a0=paddr of vnic_devcmd_provinfo
3119c067b84SDoug Ambrisko 	 *     (u32)a1=sizeof provision info */
3129c067b84SDoug Ambrisko 	CMD_INIT_PROV_INFO2  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
3139c067b84SDoug Ambrisko 
3149c067b84SDoug Ambrisko 	/* enable2:
3159c067b84SDoug Ambrisko 	 *      (u32)a0=0                  ==> standby
3169c067b84SDoug Ambrisko 	 *             =CMD_ENABLE2_ACTIVE ==> active
3179c067b84SDoug Ambrisko 	 */
3189c067b84SDoug Ambrisko 	CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
3199c067b84SDoug Ambrisko 
3209c067b84SDoug Ambrisko 	/*
3219c067b84SDoug Ambrisko 	 * cmd_status:
3229c067b84SDoug Ambrisko 	 *     Returns the status of the specified command
3239c067b84SDoug Ambrisko 	 * Input:
3249c067b84SDoug Ambrisko 	 *     a0 = command for which status is being queried.
3259c067b84SDoug Ambrisko 	 *          Possible values are:
3269c067b84SDoug Ambrisko 	 *              CMD_SOFT_RESET
3279c067b84SDoug Ambrisko 	 *              CMD_HANG_RESET
3289c067b84SDoug Ambrisko 	 *              CMD_OPEN
3299c067b84SDoug Ambrisko 	 *              CMD_INIT
3309c067b84SDoug Ambrisko 	 *              CMD_INIT_PROV_INFO
3319c067b84SDoug Ambrisko 	 *              CMD_DEINIT
3329c067b84SDoug Ambrisko 	 *              CMD_INIT_PROV_INFO2
3339c067b84SDoug Ambrisko 	 *              CMD_ENABLE2
3349c067b84SDoug Ambrisko 	 * Output:
3359c067b84SDoug Ambrisko 	 *     if status == STAT_ERROR
3369c067b84SDoug Ambrisko 	 *        a0 = ERR_ENOTSUPPORTED - status for command in a0 is
3379c067b84SDoug Ambrisko 	 *                                 not supported
3389c067b84SDoug Ambrisko 	 *     if status == STAT_NONE
3399c067b84SDoug Ambrisko 	 *        a0 = status of the devcmd specified in a0 as follows.
3409c067b84SDoug Ambrisko 	 *             ERR_SUCCESS   - command in a0 completed successfully
3419c067b84SDoug Ambrisko 	 *             ERR_EINPROGRESS - command in a0 is still in progress
3429c067b84SDoug Ambrisko 	 */
3439c067b84SDoug Ambrisko 	CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
3449c067b84SDoug Ambrisko 
3459c067b84SDoug Ambrisko 	/*
3469c067b84SDoug Ambrisko 	 * Returns interrupt coalescing timer conversion factors.
3479c067b84SDoug Ambrisko 	 * After calling this devcmd, ENIC driver can convert
3489c067b84SDoug Ambrisko 	 * interrupt coalescing timer in usec into CPU cycles as follows:
3499c067b84SDoug Ambrisko 	 *
3509c067b84SDoug Ambrisko 	 *   intr_timer_cycles = intr_timer_usec * multiplier / divisor
3519c067b84SDoug Ambrisko 	 *
3529c067b84SDoug Ambrisko 	 * Interrupt coalescing timer in usecs can be be converted/obtained
3539c067b84SDoug Ambrisko 	 * from CPU cycles as follows:
3549c067b84SDoug Ambrisko 	 *
3559c067b84SDoug Ambrisko 	 *   intr_timer_usec = intr_timer_cycles * divisor / multiplier
3569c067b84SDoug Ambrisko 	 *
3579c067b84SDoug Ambrisko 	 * in: none
3589c067b84SDoug Ambrisko 	 * out: (u32)a0 = multiplier
3599c067b84SDoug Ambrisko 	 *      (u32)a1 = divisor
3609c067b84SDoug Ambrisko 	 *      (u32)a2 = maximum timer value in usec
3619c067b84SDoug Ambrisko 	 */
3629c067b84SDoug Ambrisko 	CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
3639c067b84SDoug Ambrisko 
3649c067b84SDoug Ambrisko 	/*
3659c067b84SDoug Ambrisko 	 * ISCSI DUMP API:
3669c067b84SDoug Ambrisko 	 * in: (u64)a0=paddr of the param or param itself
3679c067b84SDoug Ambrisko 	 *     (u32)a1=ISCSI_CMD_xxx
3689c067b84SDoug Ambrisko 	 */
3699c067b84SDoug Ambrisko 	CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51),
3709c067b84SDoug Ambrisko 
3719c067b84SDoug Ambrisko 	/*
3729c067b84SDoug Ambrisko 	 * ISCSI DUMP STATUS API:
3739c067b84SDoug Ambrisko 	 * in: (u32)a0=cmd tag
3749c067b84SDoug Ambrisko 	 * in: (u32)a1=ISCSI_CMD_xxx
3759c067b84SDoug Ambrisko 	 * out: (u32)a0=cmd status
3769c067b84SDoug Ambrisko 	 */
3779c067b84SDoug Ambrisko 	CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52),
3789c067b84SDoug Ambrisko 
3799c067b84SDoug Ambrisko 	/*
3809c067b84SDoug Ambrisko 	 * Subvnic migration from MQ <--> VF.
3819c067b84SDoug Ambrisko 	 * Enable the LIF migration from MQ to VF and vice versa. MQ and VF
3829c067b84SDoug Ambrisko 	 * indexes are statically bound at the time of initialization.
3839c067b84SDoug Ambrisko 	 * Based on the direction of migration, the resources of either MQ or
3849c067b84SDoug Ambrisko 	 * the VF shall be attached to the LIF.
3859c067b84SDoug Ambrisko 	 * in:        (u32)a0=Direction of Migration
3869c067b84SDoug Ambrisko 	 *					0=> Migrate to VF
3879c067b84SDoug Ambrisko 	 *					1=> Migrate to MQ
3889c067b84SDoug Ambrisko 	 *            (u32)a1=VF index (MQ index)
3899c067b84SDoug Ambrisko 	 */
3909c067b84SDoug Ambrisko 	CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53),
3919c067b84SDoug Ambrisko 
3929c067b84SDoug Ambrisko 	/*
3939c067b84SDoug Ambrisko 	 * Register / Deregister the notification block for MQ subvnics
3949c067b84SDoug Ambrisko 	 * in:
3959c067b84SDoug Ambrisko 	 *   (u64)a0=paddr to notify (set paddr=0 to unset)
3969c067b84SDoug Ambrisko 	 *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
3979c067b84SDoug Ambrisko 	 *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
3989c067b84SDoug Ambrisko 	 * out:
3999c067b84SDoug Ambrisko 	 *   (u32)a1 = effective size
4009c067b84SDoug Ambrisko 	 */
4019c067b84SDoug Ambrisko 	CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54),
4029c067b84SDoug Ambrisko 
4039c067b84SDoug Ambrisko 	/*
4049c067b84SDoug Ambrisko 	 * Set the predefined mac address as default
4059c067b84SDoug Ambrisko 	 * in:
4069c067b84SDoug Ambrisko 	 *   (u48)a0=mac addr
4079c067b84SDoug Ambrisko 	 */
4089c067b84SDoug Ambrisko 	CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
4099c067b84SDoug Ambrisko 
4109c067b84SDoug Ambrisko 	/* Update the provisioning info of the given VIF
4119c067b84SDoug Ambrisko 	 *     (u64)a0=paddr of vnic_devcmd_provinfo
4129c067b84SDoug Ambrisko 	 *     (u32)a1=sizeof provision info */
4139c067b84SDoug Ambrisko 	CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
4149c067b84SDoug Ambrisko 
4159c067b84SDoug Ambrisko 	/*
4169c067b84SDoug Ambrisko 	 * Initialization for the devcmd2 interface.
4179c067b84SDoug Ambrisko 	 * in: (u64) a0=host result buffer physical address
4189c067b84SDoug Ambrisko 	 * in: (u16) a1=number of entries in result buffer
4199c067b84SDoug Ambrisko 	 */
4209c067b84SDoug Ambrisko 	CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57),
4219c067b84SDoug Ambrisko 
4229c067b84SDoug Ambrisko 	/*
4239c067b84SDoug Ambrisko 	 * Add a filter.
4249c067b84SDoug Ambrisko 	 * in: (u64) a0= filter address
4259c067b84SDoug Ambrisko 	 *     (u32) a1= size of filter
4269c067b84SDoug Ambrisko 	 * out: (u32) a0=filter identifier
4279c067b84SDoug Ambrisko 	 *
4289c067b84SDoug Ambrisko 	 * Capability query:
4299c067b84SDoug Ambrisko 	 * out: (u64) a0= 1 if capability query supported
4309c067b84SDoug Ambrisko 	 *      (u64) a1= MAX filter type supported
4319c067b84SDoug Ambrisko 	 */
4329c067b84SDoug Ambrisko 	CMD_ADD_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 58),
4339c067b84SDoug Ambrisko 
4349c067b84SDoug Ambrisko 	/*
4359c067b84SDoug Ambrisko 	 * Delete a filter.
4369c067b84SDoug Ambrisko 	 * in: (u32) a0=filter identifier
4379c067b84SDoug Ambrisko 	 */
4389c067b84SDoug Ambrisko 	CMD_DEL_FILTER = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 59),
4399c067b84SDoug Ambrisko 
4409c067b84SDoug Ambrisko 	/*
4419c067b84SDoug Ambrisko 	 * Enable a Queue Pair in User space NIC
4429c067b84SDoug Ambrisko 	 * in: (u32) a0=Queue Pair number
4439c067b84SDoug Ambrisko 	 *     (u32) a1= command
4449c067b84SDoug Ambrisko 	 */
4459c067b84SDoug Ambrisko 	CMD_QP_ENABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 60),
4469c067b84SDoug Ambrisko 
4479c067b84SDoug Ambrisko 	/*
4489c067b84SDoug Ambrisko 	 * Disable a Queue Pair in User space NIC
4499c067b84SDoug Ambrisko 	 * in: (u32) a0=Queue Pair number
4509c067b84SDoug Ambrisko 	 *     (u32) a1= command
4519c067b84SDoug Ambrisko 	 */
4529c067b84SDoug Ambrisko 	CMD_QP_DISABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 61),
4539c067b84SDoug Ambrisko 
4549c067b84SDoug Ambrisko 	/*
4559c067b84SDoug Ambrisko 	 * Stats dump Queue Pair in User space NIC
4569c067b84SDoug Ambrisko 	 * in: (u32) a0=Queue Pair number
4579c067b84SDoug Ambrisko 	 *     (u64) a1=host buffer addr for status dump
4589c067b84SDoug Ambrisko 	 *     (u32) a2=length of the buffer
4599c067b84SDoug Ambrisko 	 */
4609c067b84SDoug Ambrisko 	CMD_QP_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 62),
4619c067b84SDoug Ambrisko 
4629c067b84SDoug Ambrisko 	/*
4639c067b84SDoug Ambrisko 	 * Clear stats for Queue Pair in User space NIC
4649c067b84SDoug Ambrisko 	 * in: (u32) a0=Queue Pair number
4659c067b84SDoug Ambrisko 	 */
4669c067b84SDoug Ambrisko 	CMD_QP_STATS_CLEAR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 63),
4679c067b84SDoug Ambrisko 
4689c067b84SDoug Ambrisko 	/*
4699c067b84SDoug Ambrisko 	 * UEFI BOOT API: (u64)a0= UEFI FLS_CMD_xxx
4709c067b84SDoug Ambrisko 	 * (ui64)a1= paddr for the info buffer
4719c067b84SDoug Ambrisko 	 */
4729c067b84SDoug Ambrisko 	CMD_FC_REQ = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 64),
4739c067b84SDoug Ambrisko 
4749c067b84SDoug Ambrisko 	/*
4759c067b84SDoug Ambrisko 	 * Return the iSCSI config details required by the EFI Option ROM
4769c067b84SDoug Ambrisko 	 * in:  (u32) a0=0 Get Boot Info for PXE eNIC as per pxe_boot_config_t
4779c067b84SDoug Ambrisko 	 *            a0=1 Get Boot info for iSCSI enic as per
4789c067b84SDoug Ambrisko 	 *            iscsi_boot_efi_cfg_t
4799c067b84SDoug Ambrisko 	 * in:  (u64) a1=Host address where iSCSI config info is returned
4809c067b84SDoug Ambrisko 	 */
4819c067b84SDoug Ambrisko 	CMD_VNIC_BOOT_CONFIG_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 65),
4829c067b84SDoug Ambrisko 
4839c067b84SDoug Ambrisko 	/*
4849c067b84SDoug Ambrisko 	 * Create a Queue Pair (RoCE)
4859c067b84SDoug Ambrisko 	 * in: (u32) a0 = Queue Pair number
4869c067b84SDoug Ambrisko 	 *     (u32) a1 = Remote QP
4879c067b84SDoug Ambrisko 	 *     (u32) a2 = RDMA-RQ
4889c067b84SDoug Ambrisko 	 *     (u16) a3 = RQ Res Group
4899c067b84SDoug Ambrisko 	 *     (u16) a4 = SQ Res Group
4909c067b84SDoug Ambrisko 	 *     (u32) a5 = Protection Domain
4919c067b84SDoug Ambrisko 	 *     (u64) a6 = Remote MAC
4929c067b84SDoug Ambrisko 	 *     (u32) a7 = start PSN
4939c067b84SDoug Ambrisko 	 *     (u16) a8 = MSS
4949c067b84SDoug Ambrisko 	 *     (u32) a9 = protocol version
4959c067b84SDoug Ambrisko 	 */
4969c067b84SDoug Ambrisko 	CMD_RDMA_QP_CREATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 66),
4979c067b84SDoug Ambrisko 
4989c067b84SDoug Ambrisko 	/*
4999c067b84SDoug Ambrisko 	 * Delete a Queue Pair (RoCE)
5009c067b84SDoug Ambrisko 	 * in: (u32) a0 = Queue Pair number
5019c067b84SDoug Ambrisko 	 */
5029c067b84SDoug Ambrisko 	CMD_RDMA_QP_DELETE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 67),
5039c067b84SDoug Ambrisko 
5049c067b84SDoug Ambrisko 	/*
5059c067b84SDoug Ambrisko 	 * Retrieve a Queue Pair's status information (RoCE)
5069c067b84SDoug Ambrisko 	 * in: (u32) a0 = Queue Pair number
5079c067b84SDoug Ambrisko 	 *     (u64) a1 = host buffer addr for QP status struct
5089c067b84SDoug Ambrisko 	 *     (u32) a2 = length of the buffer
5099c067b84SDoug Ambrisko 	 */
5109c067b84SDoug Ambrisko 	CMD_RDMA_QP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 68),
5119c067b84SDoug Ambrisko 
5129c067b84SDoug Ambrisko 	/*
5139c067b84SDoug Ambrisko 	 * Use this devcmd for agreeing on the highest common version supported
5149c067b84SDoug Ambrisko 	 * by both driver and fw for by features who need such a facility.
5159c067b84SDoug Ambrisko 	 *  in:  (u64) a0 = feature (driver requests for the supported versions
5169c067b84SDoug Ambrisko 	 *                  on this feature)
5179c067b84SDoug Ambrisko 	 *  out: (u64) a0 = bitmap of all supported versions for that feature
5189c067b84SDoug Ambrisko 	 */
5199c067b84SDoug Ambrisko 	CMD_GET_SUPP_FEATURE_VER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 69),
5209c067b84SDoug Ambrisko 
5219c067b84SDoug Ambrisko 	/*
5229c067b84SDoug Ambrisko 	 * Initialize the RDMA notification work queue
5239c067b84SDoug Ambrisko 	 * in: (u64) a0 = host buffer address
5249c067b84SDoug Ambrisko 	 * in: (u16) a1 = number of entries in buffer
5259c067b84SDoug Ambrisko 	 * in: (u16) a2 = resource group number
5269c067b84SDoug Ambrisko 	 * in: (u16) a3 = CQ number to post completion
5279c067b84SDoug Ambrisko 	 */
5289c067b84SDoug Ambrisko 	CMD_RDMA_INIT_INFO_BUF = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 70),
5299c067b84SDoug Ambrisko 
5309c067b84SDoug Ambrisko 	/*
5319c067b84SDoug Ambrisko 	 * De-init the RDMA notification work queue
5329c067b84SDoug Ambrisko 	 * in: (u64) a0=resource group number
5339c067b84SDoug Ambrisko 	 */
5349c067b84SDoug Ambrisko 	CMD_RDMA_DEINIT_INFO_BUF = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 71),
5359c067b84SDoug Ambrisko 
5369c067b84SDoug Ambrisko 	/*
5379c067b84SDoug Ambrisko 	 * Control (Enable/Disable) overlay offloads on the given vnic
5389c067b84SDoug Ambrisko 	 * in: (u8) a0 = OVERLAY_FEATURE_NVGRE : NVGRE
5399c067b84SDoug Ambrisko 	 *          a0 = OVERLAY_FEATURE_VXLAN : VxLAN
5409c067b84SDoug Ambrisko 	 * in: (u8) a1 = OVERLAY_OFFLOAD_ENABLE : Enable or
5419c067b84SDoug Ambrisko 	 *          a1 = OVERLAY_OFFLOAD_DISABLE : Disable or
5429c067b84SDoug Ambrisko 	 *          a1 = OVERLAY_OFFLOAD_ENABLE_V2 : Enable with version 2
5439c067b84SDoug Ambrisko 	 */
5449c067b84SDoug Ambrisko 	CMD_OVERLAY_OFFLOAD_CTRL =
5459c067b84SDoug Ambrisko 				_CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 72),
5469c067b84SDoug Ambrisko 
5479c067b84SDoug Ambrisko 	/*
5489c067b84SDoug Ambrisko 	 * Configuration of overlay offloads feature on a given vNIC
5499c067b84SDoug Ambrisko 	 * in: (u8) a0 = OVERLAY_CFG_VXLAN_PORT_UPDATE : VxLAN
5509c067b84SDoug Ambrisko 	 * in: (u16) a1 = unsigned short int port information
5519c067b84SDoug Ambrisko 	 */
5529c067b84SDoug Ambrisko 	CMD_OVERLAY_OFFLOAD_CFG = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 73),
5539c067b84SDoug Ambrisko 
5549c067b84SDoug Ambrisko 	/*
5559c067b84SDoug Ambrisko 	 * Return the configured name for the device
5569c067b84SDoug Ambrisko 	 * in: (u64) a0=Host address where the name is copied
5579c067b84SDoug Ambrisko 	 *     (u32) a1=Size of the buffer
5589c067b84SDoug Ambrisko 	 */
5599c067b84SDoug Ambrisko 	CMD_GET_CONFIG_NAME = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 74),
5609c067b84SDoug Ambrisko 
5619c067b84SDoug Ambrisko 	/*
5629c067b84SDoug Ambrisko 	 * Enable group interrupt for the VF
5639c067b84SDoug Ambrisko 	 * in: (u32) a0 = GRPINTR_ENABLE : enable
5649c067b84SDoug Ambrisko 	 *           a0 = GRPINTR_DISABLE : disable
5659c067b84SDoug Ambrisko 	 *           a0 = GRPINTR_UPD_VECT: update group vector addr
5669c067b84SDoug Ambrisko 	 * in: (u32) a1 = interrupt group count
5679c067b84SDoug Ambrisko 	 * in: (u64) a2 = Start of host buffer address for DMAing group
5689c067b84SDoug Ambrisko 	 *           vector bitmap
5699c067b84SDoug Ambrisko 	 * in: (u64) a3 = Stride between group vectors
5709c067b84SDoug Ambrisko 	 */
5719c067b84SDoug Ambrisko 	CMD_CONFIG_GRPINTR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 75),
5729c067b84SDoug Ambrisko 
5739c067b84SDoug Ambrisko 	/*
5749c067b84SDoug Ambrisko 	 * Set cq arrary base and size in a list of consective wqs and
5759c067b84SDoug Ambrisko 	 * rqs for a device
5769c067b84SDoug Ambrisko 	 * in: (u16) a0 = the wq relative index in the device.
5779c067b84SDoug Ambrisko 	 *		-1 indicates skipping wq configuration
5789c067b84SDoug Ambrisko 	 * in: (u16) a1 = the wcq relative index in the device
5799c067b84SDoug Ambrisko 	 * in: (u16) a2 = the rq relative index in the device
5809c067b84SDoug Ambrisko 	 *		-1 indicates skipping rq configuration
5819c067b84SDoug Ambrisko 	 * in: (u16) a3 = the rcq relative index in the device
5829c067b84SDoug Ambrisko 	 */
5839c067b84SDoug Ambrisko 	CMD_CONFIG_CQ_ARRAY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 76),
5849c067b84SDoug Ambrisko 
5859c067b84SDoug Ambrisko 	/*
5869c067b84SDoug Ambrisko 	 * Add an advanced filter.
5879c067b84SDoug Ambrisko 	 * in: (u64) a0= filter address
5889c067b84SDoug Ambrisko 	 *     (u32) a1= size of filter
5899c067b84SDoug Ambrisko 	 * out: (u32) a0=filter identifier
5909c067b84SDoug Ambrisko 	 *
5919c067b84SDoug Ambrisko 	 * Capability query:
5929c067b84SDoug Ambrisko 	 * in:  (u64) a1= supported filter capability exchange modes
5939c067b84SDoug Ambrisko 	 * out: (u64) a0= 1 if capability query supported
5949c067b84SDoug Ambrisko 	 *      if (u64) a1 = 0: a1 = MAX filter type supported
5959c067b84SDoug Ambrisko 	 *      if (u64) a1 & FILTER_CAP_MODE_V1_FLAG:
5969c067b84SDoug Ambrisko 	 *                       a1 = bitmask of supported filters
5979c067b84SDoug Ambrisko 	 *                       a2 = FILTER_CAP_MODE_V1
5989c067b84SDoug Ambrisko 	 *                       a3 = bitmask of supported actions
5999c067b84SDoug Ambrisko 	 */
6009c067b84SDoug Ambrisko 	CMD_ADD_ADV_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 77),
6019c067b84SDoug Ambrisko 
6029c067b84SDoug Ambrisko 	/*
6039c067b84SDoug Ambrisko 	 * Allocate a counter for use with CMD_ADD_FILTER
6049c067b84SDoug Ambrisko 	 * out:(u32) a0 = counter index
6059c067b84SDoug Ambrisko 	 */
6069c067b84SDoug Ambrisko 	CMD_COUNTER_ALLOC = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ENET, 85),
6079c067b84SDoug Ambrisko 
6089c067b84SDoug Ambrisko 	/*
6099c067b84SDoug Ambrisko 	 * Free a counter
6109c067b84SDoug Ambrisko 	 * in: (u32) a0 = counter_id
6119c067b84SDoug Ambrisko 	 */
6129c067b84SDoug Ambrisko 	CMD_COUNTER_FREE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 86),
6139c067b84SDoug Ambrisko 
6149c067b84SDoug Ambrisko 	/*
6159c067b84SDoug Ambrisko 	 * Read a counter
6169c067b84SDoug Ambrisko 	 * in: (u32) a0 = counter_id
6179c067b84SDoug Ambrisko 	 *     (u32) a1 = clear counter if non-zero
6189c067b84SDoug Ambrisko 	 * out:(u64) a0 = packet count
6199c067b84SDoug Ambrisko 	 *     (u64) a1 = byte count
6209c067b84SDoug Ambrisko 	 */
6219c067b84SDoug Ambrisko 	CMD_COUNTER_QUERY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 87),
6229c067b84SDoug Ambrisko 
6239c067b84SDoug Ambrisko 	/*
6249c067b84SDoug Ambrisko 	 * Configure periodic counter DMA.  This will trigger an immediate
6259c067b84SDoug Ambrisko 	 * DMA of the counters (unless period == 0), and then schedule a DMA
6269c067b84SDoug Ambrisko 	 * of the counters every <period> seconds until disdabled.
6279c067b84SDoug Ambrisko 	 * Each new COUNTER_DMA_CONFIG will override all previous commands on
6289c067b84SDoug Ambrisko 	 * this vnic.
6299c067b84SDoug Ambrisko 	 * Setting a2 (period) = 0 will disable periodic DMAs
6309c067b84SDoug Ambrisko 	 * If a0 (num_counters) != 0, an immediate DMA will always be done,
6319c067b84SDoug Ambrisko 	 * irrespective of the value in a2.
6329c067b84SDoug Ambrisko 	 * in: (u32) a0 = number of counters to DMA
6339c067b84SDoug Ambrisko 	 *     (u64) a1 = host target DMA address
6349c067b84SDoug Ambrisko 	 *     (u32) a2 = DMA period in milliseconds (0 to disable)
6359c067b84SDoug Ambrisko 	 */
6369c067b84SDoug Ambrisko 	CMD_COUNTER_DMA_CONFIG = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 88),
6379c067b84SDoug Ambrisko #define VNIC_COUNTER_DMA_MIN_PERIOD 500
6389c067b84SDoug Ambrisko 
6399c067b84SDoug Ambrisko 	/*
6409c067b84SDoug Ambrisko 	 * Clear all counters on a vnic
6419c067b84SDoug Ambrisko 	 */
6429c067b84SDoug Ambrisko 	CMD_COUNTER_CLEAR_ALL = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ENET, 89),
6439c067b84SDoug Ambrisko };
6449c067b84SDoug Ambrisko 
6459c067b84SDoug Ambrisko /* Modes for exchanging advanced filter capabilities. The modes supported by
6469c067b84SDoug Ambrisko  * the driver are passed in the CMD_ADD_ADV_FILTER capability command and the
6479c067b84SDoug Ambrisko  * mode selected is returned.
6489c067b84SDoug Ambrisko  *    V0: the maximum filter type supported is returned
6499c067b84SDoug Ambrisko  *    V1: bitmasks of supported filters and actions are returned
6509c067b84SDoug Ambrisko  */
6519c067b84SDoug Ambrisko enum filter_cap_mode {
6529c067b84SDoug Ambrisko 	FILTER_CAP_MODE_V0 = 0,  /* Must always be 0 for legacy drivers */
6539c067b84SDoug Ambrisko 	FILTER_CAP_MODE_V1 = 1,
6549c067b84SDoug Ambrisko };
6559c067b84SDoug Ambrisko #define FILTER_CAP_MODE_V1_FLAG (1 << FILTER_CAP_MODE_V1)
6569c067b84SDoug Ambrisko 
6579c067b84SDoug Ambrisko /* CMD_ENABLE2 flags */
6589c067b84SDoug Ambrisko #define CMD_ENABLE2_STANDBY 0x0
6599c067b84SDoug Ambrisko #define CMD_ENABLE2_ACTIVE  0x1
6609c067b84SDoug Ambrisko 
6619c067b84SDoug Ambrisko /* flags for CMD_OPEN */
6629c067b84SDoug Ambrisko #define CMD_OPENF_OPROM		0x1	/* open coming from option rom */
6639c067b84SDoug Ambrisko #define CMD_OPENF_IG_DESCCACHE	0x2	/* Do not flush IG DESC cache */
6649c067b84SDoug Ambrisko 
6659c067b84SDoug Ambrisko /* flags for CMD_INIT */
6669c067b84SDoug Ambrisko #define CMD_INITF_DEFAULT_MAC	0x1	/* init with default mac addr */
6679c067b84SDoug Ambrisko 
6689c067b84SDoug Ambrisko /* flags for CMD_NIC_CFG */
6699c067b84SDoug Ambrisko #define CMD_NIC_CFG_CAPF_UDP_WEAK	(1ULL << 0) /* Bodega-style UDP RSS */
6709c067b84SDoug Ambrisko 
6719c067b84SDoug Ambrisko /* flags for CMD_PACKET_FILTER */
6729c067b84SDoug Ambrisko #define CMD_PFILTER_DIRECTED		0x01
6739c067b84SDoug Ambrisko #define CMD_PFILTER_MULTICAST		0x02
6749c067b84SDoug Ambrisko #define CMD_PFILTER_BROADCAST		0x04
6759c067b84SDoug Ambrisko #define CMD_PFILTER_PROMISCUOUS		0x08
6769c067b84SDoug Ambrisko #define CMD_PFILTER_ALL_MULTICAST	0x10
6779c067b84SDoug Ambrisko 
6789c067b84SDoug Ambrisko /* Commands for CMD_QP_ENABLE/CM_QP_DISABLE */
6799c067b84SDoug Ambrisko #define CMD_QP_RQWQ                     0x0
6809c067b84SDoug Ambrisko 
6819c067b84SDoug Ambrisko /* rewrite modes for CMD_IG_VLAN_REWRITE_MODE */
6829c067b84SDoug Ambrisko #define IG_VLAN_REWRITE_MODE_DEFAULT_TRUNK              0
6839c067b84SDoug Ambrisko #define IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN         1
6849c067b84SDoug Ambrisko #define IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN  2
6859c067b84SDoug Ambrisko #define IG_VLAN_REWRITE_MODE_PASS_THRU                  3
6869c067b84SDoug Ambrisko 
6879c067b84SDoug Ambrisko enum vnic_devcmd_status {
6889c067b84SDoug Ambrisko 	STAT_NONE = 0,
6899c067b84SDoug Ambrisko 	STAT_BUSY = 1 << 0,	/* cmd in progress */
6909c067b84SDoug Ambrisko 	STAT_ERROR = 1 << 1,	/* last cmd caused error (code in a0) */
6919c067b84SDoug Ambrisko 	STAT_FAILOVER = 1 << 2, /* always set on vnics in pci standby state
6929c067b84SDoug Ambrisko 				 * if seen a failover to the standby happened
6939c067b84SDoug Ambrisko 				 */
6949c067b84SDoug Ambrisko };
6959c067b84SDoug Ambrisko 
6969c067b84SDoug Ambrisko enum vnic_devcmd_error {
6979c067b84SDoug Ambrisko 	ERR_SUCCESS = 0,
6989c067b84SDoug Ambrisko 	ERR_EINVAL = 1,
6999c067b84SDoug Ambrisko 	ERR_EFAULT = 2,
7009c067b84SDoug Ambrisko 	ERR_EPERM = 3,
7019c067b84SDoug Ambrisko 	ERR_EBUSY = 4,
7029c067b84SDoug Ambrisko 	ERR_ECMDUNKNOWN = 5,
7039c067b84SDoug Ambrisko 	ERR_EBADSTATE = 6,
7049c067b84SDoug Ambrisko 	ERR_ENOMEM = 7,
7059c067b84SDoug Ambrisko 	ERR_ETIMEDOUT = 8,
7069c067b84SDoug Ambrisko 	ERR_ELINKDOWN = 9,
7079c067b84SDoug Ambrisko 	ERR_EMAXRES = 10,
7089c067b84SDoug Ambrisko 	ERR_ENOTSUPPORTED = 11,
7099c067b84SDoug Ambrisko 	ERR_EINPROGRESS = 12,
7109c067b84SDoug Ambrisko 	ERR_MAX
7119c067b84SDoug Ambrisko };
7129c067b84SDoug Ambrisko 
7139c067b84SDoug Ambrisko /*
7149c067b84SDoug Ambrisko  * note: hw_version and asic_rev refer to the same thing,
7159c067b84SDoug Ambrisko  *       but have different formats. hw_version is
7169c067b84SDoug Ambrisko  *       a 32-byte string (e.g. "A2") and asic_rev is
7179c067b84SDoug Ambrisko  *       a 16-bit integer (e.g. 0xA2).
7189c067b84SDoug Ambrisko  */
7199c067b84SDoug Ambrisko struct vnic_devcmd_fw_info {
7209c067b84SDoug Ambrisko 	char fw_version[32];
7219c067b84SDoug Ambrisko 	char fw_build[32];
7229c067b84SDoug Ambrisko 	char hw_version[32];
7239c067b84SDoug Ambrisko 	char hw_serial_number[32];
7249c067b84SDoug Ambrisko 	u16 asic_type;
7259c067b84SDoug Ambrisko 	u16 asic_rev;
7269c067b84SDoug Ambrisko };
7279c067b84SDoug Ambrisko 
7289c067b84SDoug Ambrisko enum fwinfo_asic_type {
7299c067b84SDoug Ambrisko 	FWINFO_ASIC_TYPE_UNKNOWN,
7309c067b84SDoug Ambrisko 	FWINFO_ASIC_TYPE_PALO,
7319c067b84SDoug Ambrisko 	FWINFO_ASIC_TYPE_SERENO,
7329c067b84SDoug Ambrisko 	FWINFO_ASIC_TYPE_CRUZ,
7339c067b84SDoug Ambrisko };
7349c067b84SDoug Ambrisko 
7359c067b84SDoug Ambrisko struct vnic_devcmd_notify {
7369c067b84SDoug Ambrisko 	u32 csum;		/* checksum over following words */
7379c067b84SDoug Ambrisko 
7389c067b84SDoug Ambrisko 	u32 link_state;		/* link up == 1 */
7399c067b84SDoug Ambrisko 	u32 port_speed;		/* effective port speed (rate limit) */
7409c067b84SDoug Ambrisko 	u32 mtu;		/* MTU */
7419c067b84SDoug Ambrisko 	u32 msglvl;		/* requested driver msg lvl */
7429c067b84SDoug Ambrisko 	u32 uif;		/* uplink interface */
7439c067b84SDoug Ambrisko 	u32 status;		/* status bits (see VNIC_STF_*) */
7449c067b84SDoug Ambrisko 	u32 error;		/* error code (see ERR_*) for first ERR */
7459c067b84SDoug Ambrisko 	u32 link_down_cnt;	/* running count of link down transitions */
7469c067b84SDoug Ambrisko 	u32 perbi_rebuild_cnt;	/* running count of perbi rebuilds */
7479c067b84SDoug Ambrisko };
7489c067b84SDoug Ambrisko #define VNIC_STF_FATAL_ERR	0x0001	/* fatal fw error */
7499c067b84SDoug Ambrisko #define VNIC_STF_STD_PAUSE	0x0002	/* standard link-level pause on */
7509c067b84SDoug Ambrisko #define VNIC_STF_PFC_PAUSE	0x0004	/* priority flow control pause on */
7519c067b84SDoug Ambrisko /* all supported status flags */
7529c067b84SDoug Ambrisko #define VNIC_STF_ALL		(VNIC_STF_FATAL_ERR |\
7539c067b84SDoug Ambrisko 				 VNIC_STF_STD_PAUSE |\
7549c067b84SDoug Ambrisko 				 VNIC_STF_PFC_PAUSE |\
7559c067b84SDoug Ambrisko 				 0)
7569c067b84SDoug Ambrisko 
7579c067b84SDoug Ambrisko struct vnic_devcmd_provinfo {
7589c067b84SDoug Ambrisko 	u8 oui[3];
7599c067b84SDoug Ambrisko 	u8 type;
7609c067b84SDoug Ambrisko 	u8 data[0];
7619c067b84SDoug Ambrisko };
7629c067b84SDoug Ambrisko 
7639c067b84SDoug Ambrisko /*
7649c067b84SDoug Ambrisko  * These are used in flags field of different filters to denote
7659c067b84SDoug Ambrisko  * valid fields used.
7669c067b84SDoug Ambrisko  */
7679c067b84SDoug Ambrisko #define FILTER_FIELD_VALID(fld) (1 << (fld - 1))
7689c067b84SDoug Ambrisko 
7699c067b84SDoug Ambrisko #define FILTER_FIELD_USNIC_VLAN    FILTER_FIELD_VALID(1)
7709c067b84SDoug Ambrisko #define FILTER_FIELD_USNIC_ETHTYPE FILTER_FIELD_VALID(2)
7719c067b84SDoug Ambrisko #define FILTER_FIELD_USNIC_PROTO   FILTER_FIELD_VALID(3)
7729c067b84SDoug Ambrisko #define FILTER_FIELD_USNIC_ID      FILTER_FIELD_VALID(4)
7739c067b84SDoug Ambrisko 
7749c067b84SDoug Ambrisko #define FILTER_FIELDS_USNIC (FILTER_FIELD_USNIC_VLAN | \
7759c067b84SDoug Ambrisko 			     FILTER_FIELD_USNIC_ETHTYPE | \
7769c067b84SDoug Ambrisko 			     FILTER_FIELD_USNIC_PROTO | \
7779c067b84SDoug Ambrisko 			     FILTER_FIELD_USNIC_ID)
7789c067b84SDoug Ambrisko 
7799c067b84SDoug Ambrisko struct filter_usnic_id {
7809c067b84SDoug Ambrisko 	u32 flags;
7819c067b84SDoug Ambrisko 	u16 vlan;
7829c067b84SDoug Ambrisko 	u16 ethtype;
7839c067b84SDoug Ambrisko 	u8 proto_version;
7849c067b84SDoug Ambrisko 	u32 usnic_id;
7859c067b84SDoug Ambrisko } __attribute__((packed));
7869c067b84SDoug Ambrisko 
7879c067b84SDoug Ambrisko #define FILTER_FIELD_5TUP_PROTO  FILTER_FIELD_VALID(1)
7889c067b84SDoug Ambrisko #define FILTER_FIELD_5TUP_SRC_AD FILTER_FIELD_VALID(2)
7899c067b84SDoug Ambrisko #define FILTER_FIELD_5TUP_DST_AD FILTER_FIELD_VALID(3)
7909c067b84SDoug Ambrisko #define FILTER_FIELD_5TUP_SRC_PT FILTER_FIELD_VALID(4)
7919c067b84SDoug Ambrisko #define FILTER_FIELD_5TUP_DST_PT FILTER_FIELD_VALID(5)
7929c067b84SDoug Ambrisko 
7939c067b84SDoug Ambrisko #define FILTER_FIELDS_IPV4_5TUPLE (FILTER_FIELD_5TUP_PROTO | \
7949c067b84SDoug Ambrisko 				   FILTER_FIELD_5TUP_SRC_AD | \
7959c067b84SDoug Ambrisko 				   FILTER_FIELD_5TUP_DST_AD | \
7969c067b84SDoug Ambrisko 				   FILTER_FIELD_5TUP_SRC_PT | \
7979c067b84SDoug Ambrisko 				   FILTER_FIELD_5TUP_DST_PT)
7989c067b84SDoug Ambrisko 
7999c067b84SDoug Ambrisko /* Enums for the protocol field. */
8009c067b84SDoug Ambrisko enum protocol_e {
8019c067b84SDoug Ambrisko 	PROTO_UDP = 0,
8029c067b84SDoug Ambrisko 	PROTO_TCP = 1,
8039c067b84SDoug Ambrisko 	PROTO_IPV4 = 2,
8049c067b84SDoug Ambrisko 	PROTO_IPV6 = 3
8059c067b84SDoug Ambrisko };
8069c067b84SDoug Ambrisko 
8079c067b84SDoug Ambrisko struct filter_ipv4_5tuple {
8089c067b84SDoug Ambrisko 	u32 flags;
8099c067b84SDoug Ambrisko 	u32 protocol;
8109c067b84SDoug Ambrisko 	u32 src_addr;
8119c067b84SDoug Ambrisko 	u32 dst_addr;
8129c067b84SDoug Ambrisko 	u16 src_port;
8139c067b84SDoug Ambrisko 	u16 dst_port;
8149c067b84SDoug Ambrisko } __attribute__((packed));
8159c067b84SDoug Ambrisko 
8169c067b84SDoug Ambrisko #define FILTER_FIELD_VMQ_VLAN   FILTER_FIELD_VALID(1)
8179c067b84SDoug Ambrisko #define FILTER_FIELD_VMQ_MAC    FILTER_FIELD_VALID(2)
8189c067b84SDoug Ambrisko 
8199c067b84SDoug Ambrisko #define FILTER_FIELDS_MAC_VLAN (FILTER_FIELD_VMQ_VLAN | \
8209c067b84SDoug Ambrisko 				FILTER_FIELD_VMQ_MAC)
8219c067b84SDoug Ambrisko 
8229c067b84SDoug Ambrisko #define FILTER_FIELDS_NVGRE    FILTER_FIELD_VMQ_MAC
8239c067b84SDoug Ambrisko 
8249c067b84SDoug Ambrisko struct filter_mac_vlan {
8259c067b84SDoug Ambrisko 	u32 flags;
8269c067b84SDoug Ambrisko 	u16 vlan;
8279c067b84SDoug Ambrisko 	u8 mac_addr[6];
8289c067b84SDoug Ambrisko } __attribute__((packed));
8299c067b84SDoug Ambrisko 
8309c067b84SDoug Ambrisko #define FILTER_FIELD_VLAN_IP_3TUP_VLAN      FILTER_FIELD_VALID(1)
8319c067b84SDoug Ambrisko #define FILTER_FIELD_VLAN_IP_3TUP_L3_PROTO  FILTER_FIELD_VALID(2)
8329c067b84SDoug Ambrisko #define FILTER_FIELD_VLAN_IP_3TUP_DST_AD    FILTER_FIELD_VALID(3)
8339c067b84SDoug Ambrisko #define FILTER_FIELD_VLAN_IP_3TUP_L4_PROTO  FILTER_FIELD_VALID(4)
8349c067b84SDoug Ambrisko #define FILTER_FIELD_VLAN_IP_3TUP_DST_PT    FILTER_FIELD_VALID(5)
8359c067b84SDoug Ambrisko 
8369c067b84SDoug Ambrisko #define FILTER_FIELDS_VLAN_IP_3TUP (FILTER_FIELD_VLAN_IP_3TUP_VLAN | \
8379c067b84SDoug Ambrisko 				    FILTER_FIELD_VLAN_IP_3TUP_L3_PROTO | \
8389c067b84SDoug Ambrisko 				    FILTER_FIELD_VLAN_IP_3TUP_DST_AD | \
8399c067b84SDoug Ambrisko 				    FILTER_FIELD_VLAN_IP_3TUP_L4_PROTO | \
8409c067b84SDoug Ambrisko 				    FILTER_FIELD_VLAN_IP_3TUP_DST_PT)
8419c067b84SDoug Ambrisko 
8429c067b84SDoug Ambrisko struct filter_vlan_ip_3tuple {
8439c067b84SDoug Ambrisko 	u32 flags;
8449c067b84SDoug Ambrisko 	u16 vlan;
8459c067b84SDoug Ambrisko 	u16 l3_protocol;
8469c067b84SDoug Ambrisko 	union {
8479c067b84SDoug Ambrisko 		u32 dst_addr_v4;
8489c067b84SDoug Ambrisko 		u8 dst_addr_v6[16];
8499c067b84SDoug Ambrisko 	} u;
8509c067b84SDoug Ambrisko 	u32 l4_protocol;
8519c067b84SDoug Ambrisko 	u16 dst_port;
8529c067b84SDoug Ambrisko } __attribute__((packed));
8539c067b84SDoug Ambrisko 
8549c067b84SDoug Ambrisko #define FILTER_GENERIC_1_BYTES 64
8559c067b84SDoug Ambrisko 
8569c067b84SDoug Ambrisko enum filter_generic_1_layer {
8579c067b84SDoug Ambrisko 	FILTER_GENERIC_1_L2,
8589c067b84SDoug Ambrisko 	FILTER_GENERIC_1_L3,
8599c067b84SDoug Ambrisko 	FILTER_GENERIC_1_L4,
8609c067b84SDoug Ambrisko 	FILTER_GENERIC_1_L5,
8619c067b84SDoug Ambrisko 	FILTER_GENERIC_1_NUM_LAYERS
8629c067b84SDoug Ambrisko };
8639c067b84SDoug Ambrisko 
8649c067b84SDoug Ambrisko #define FILTER_GENERIC_1_IPV4       (1 << 0)
8659c067b84SDoug Ambrisko #define FILTER_GENERIC_1_IPV6       (1 << 1)
8669c067b84SDoug Ambrisko #define FILTER_GENERIC_1_UDP        (1 << 2)
8679c067b84SDoug Ambrisko #define FILTER_GENERIC_1_TCP        (1 << 3)
8689c067b84SDoug Ambrisko #define FILTER_GENERIC_1_TCP_OR_UDP (1 << 4)
8699c067b84SDoug Ambrisko #define FILTER_GENERIC_1_IP4SUM_OK  (1 << 5)
8709c067b84SDoug Ambrisko #define FILTER_GENERIC_1_L4SUM_OK   (1 << 6)
8719c067b84SDoug Ambrisko #define FILTER_GENERIC_1_IPFRAG     (1 << 7)
8729c067b84SDoug Ambrisko 
8739c067b84SDoug Ambrisko #define FILTER_GENERIC_1_KEY_LEN 64
8749c067b84SDoug Ambrisko 
8759c067b84SDoug Ambrisko /*
8769c067b84SDoug Ambrisko  * Version 1 of generic filter specification
8779c067b84SDoug Ambrisko  * position is only 16 bits, reserving positions > 64k to be used by firmware
8789c067b84SDoug Ambrisko  */
8799c067b84SDoug Ambrisko struct filter_generic_1 {
8809c067b84SDoug Ambrisko 	u16 position;       /* lower position comes first */
8819c067b84SDoug Ambrisko 	u32 mask_flags;
8829c067b84SDoug Ambrisko 	u32 val_flags;
8839c067b84SDoug Ambrisko 	u16 mask_vlan;
8849c067b84SDoug Ambrisko 	u16 val_vlan;
8859c067b84SDoug Ambrisko 	struct {
8869c067b84SDoug Ambrisko 		u8 mask[FILTER_GENERIC_1_KEY_LEN]; /* 0 bit means "don't care"*/
8879c067b84SDoug Ambrisko 		u8 val[FILTER_GENERIC_1_KEY_LEN];
8889c067b84SDoug Ambrisko 	} __attribute__((packed)) layer[FILTER_GENERIC_1_NUM_LAYERS];
8899c067b84SDoug Ambrisko } __attribute__((packed));
8909c067b84SDoug Ambrisko 
8919c067b84SDoug Ambrisko /* Specifies the filter_action type. */
8929c067b84SDoug Ambrisko enum {
8939c067b84SDoug Ambrisko 	FILTER_ACTION_RQ_STEERING = 0,
8949c067b84SDoug Ambrisko 	FILTER_ACTION_V2 = 1,
8959c067b84SDoug Ambrisko 	FILTER_ACTION_MAX
8969c067b84SDoug Ambrisko };
8979c067b84SDoug Ambrisko 
8989c067b84SDoug Ambrisko struct filter_action {
8999c067b84SDoug Ambrisko 	u32 type;
9009c067b84SDoug Ambrisko 	union {
9019c067b84SDoug Ambrisko 		u32 rq_idx;
9029c067b84SDoug Ambrisko 	} u;
9039c067b84SDoug Ambrisko } __attribute__((packed));
9049c067b84SDoug Ambrisko 
9059c067b84SDoug Ambrisko #define FILTER_ACTION_RQ_STEERING_FLAG	(1 << 0)
9069c067b84SDoug Ambrisko #define FILTER_ACTION_FILTER_ID_FLAG	(1 << 1)
9079c067b84SDoug Ambrisko #define FILTER_ACTION_DROP_FLAG		(1 << 2)
9089c067b84SDoug Ambrisko #define FILTER_ACTION_COUNTER_FLAG      (1 << 3)
9099c067b84SDoug Ambrisko #define FILTER_ACTION_V2_ALL		(FILTER_ACTION_RQ_STEERING_FLAG \
9109c067b84SDoug Ambrisko 					 | FILTER_ACTION_FILTER_ID_FLAG \
9119c067b84SDoug Ambrisko 					 | FILTER_ACTION_DROP_FLAG \
9129c067b84SDoug Ambrisko 					 | FILTER_ACTION_COUNTER_FLAG)
9139c067b84SDoug Ambrisko 
9149c067b84SDoug Ambrisko /* Version 2 of filter action must be a strict extension of struct filter_action
9159c067b84SDoug Ambrisko  * where the first fields exactly match in size and meaning.
9169c067b84SDoug Ambrisko  */
9179c067b84SDoug Ambrisko struct filter_action_v2 {
9189c067b84SDoug Ambrisko 	u32 type;
9199c067b84SDoug Ambrisko 	u32 rq_idx;
9209c067b84SDoug Ambrisko 	u32 flags;                     /* use FILTER_ACTION_XXX_FLAG defines */
9219c067b84SDoug Ambrisko 	u16 filter_id;
9229c067b84SDoug Ambrisko 	u32 counter_index;
9239c067b84SDoug Ambrisko 	uint8_t reserved[28];         /* for future expansion */
9249c067b84SDoug Ambrisko } __attribute__((packed));
9259c067b84SDoug Ambrisko 
9269c067b84SDoug Ambrisko /* Specifies the filter type. */
9279c067b84SDoug Ambrisko enum filter_type {
9289c067b84SDoug Ambrisko 	FILTER_USNIC_ID = 0,
9299c067b84SDoug Ambrisko 	FILTER_IPV4_5TUPLE = 1,
9309c067b84SDoug Ambrisko 	FILTER_MAC_VLAN = 2,
9319c067b84SDoug Ambrisko 	FILTER_VLAN_IP_3TUPLE = 3,
9329c067b84SDoug Ambrisko 	FILTER_NVGRE_VMQ = 4,
9339c067b84SDoug Ambrisko 	FILTER_USNIC_IP = 5,
9349c067b84SDoug Ambrisko 	FILTER_DPDK_1 = 6,
9359c067b84SDoug Ambrisko 	FILTER_MAX
9369c067b84SDoug Ambrisko };
9379c067b84SDoug Ambrisko 
9389c067b84SDoug Ambrisko #define FILTER_USNIC_ID_FLAG		(1 << FILTER_USNIC_ID)
9399c067b84SDoug Ambrisko #define FILTER_IPV4_5TUPLE_FLAG		(1 << FILTER_IPV4_5TUPLE)
9409c067b84SDoug Ambrisko #define FILTER_MAC_VLAN_FLAG		(1 << FILTER_MAC_VLAN)
9419c067b84SDoug Ambrisko #define FILTER_VLAN_IP_3TUPLE_FLAG	(1 << FILTER_VLAN_IP_3TUPLE)
9429c067b84SDoug Ambrisko #define FILTER_NVGRE_VMQ_FLAG		(1 << FILTER_NVGRE_VMQ)
9439c067b84SDoug Ambrisko #define FILTER_USNIC_IP_FLAG		(1 << FILTER_USNIC_IP)
9449c067b84SDoug Ambrisko #define FILTER_DPDK_1_FLAG		(1 << FILTER_DPDK_1)
9459c067b84SDoug Ambrisko #define FILTER_V1_ALL			(FILTER_USNIC_ID_FLAG | \
9469c067b84SDoug Ambrisko 					FILTER_IPV4_5TUPLE_FLAG | \
9479c067b84SDoug Ambrisko 					FILTER_MAC_VLAN_FLAG | \
9489c067b84SDoug Ambrisko 					FILTER_VLAN_IP_3TUPLE_FLAG | \
9499c067b84SDoug Ambrisko 					FILTER_NVGRE_VMQ_FLAG | \
9509c067b84SDoug Ambrisko 					FILTER_USNIC_IP_FLAG | \
9519c067b84SDoug Ambrisko 					FILTER_DPDK_1_FLAG)
9529c067b84SDoug Ambrisko 
9539c067b84SDoug Ambrisko struct filter {
9549c067b84SDoug Ambrisko 	u32 type;
9559c067b84SDoug Ambrisko 	union {
9569c067b84SDoug Ambrisko 		struct filter_usnic_id usnic;
9579c067b84SDoug Ambrisko 		struct filter_ipv4_5tuple ipv4;
9589c067b84SDoug Ambrisko 		struct filter_mac_vlan mac_vlan;
9599c067b84SDoug Ambrisko 		struct filter_vlan_ip_3tuple vlan_3tuple;
9609c067b84SDoug Ambrisko 	} u;
9619c067b84SDoug Ambrisko } __attribute__((packed));
9629c067b84SDoug Ambrisko 
9639c067b84SDoug Ambrisko /*
9649c067b84SDoug Ambrisko  * This is a strict superset of "struct filter" and exists only
9659c067b84SDoug Ambrisko  * because many drivers use "sizeof (struct filter)" in deciding TLV size.
9669c067b84SDoug Ambrisko  * This new, larger struct filter would cause any code that uses that method
9679c067b84SDoug Ambrisko  * to not work with older firmware, so we add filter_v2 to hold the
9689c067b84SDoug Ambrisko  * new filter types.  Drivers should use vnic_filter_size() to determine
9699c067b84SDoug Ambrisko  * the TLV size instead of sizeof (struct fiter_v2) to guard against future
9709c067b84SDoug Ambrisko  * growth.
9719c067b84SDoug Ambrisko  */
9729c067b84SDoug Ambrisko struct filter_v2 {
9739c067b84SDoug Ambrisko 	u32 type;
9749c067b84SDoug Ambrisko 	union {
9759c067b84SDoug Ambrisko 		struct filter_usnic_id usnic;
9769c067b84SDoug Ambrisko 		struct filter_ipv4_5tuple ipv4;
9779c067b84SDoug Ambrisko 		struct filter_mac_vlan mac_vlan;
9789c067b84SDoug Ambrisko 		struct filter_vlan_ip_3tuple vlan_3tuple;
9799c067b84SDoug Ambrisko 		struct filter_generic_1 generic_1;
9809c067b84SDoug Ambrisko 	} u;
9819c067b84SDoug Ambrisko } __attribute__((packed));
9829c067b84SDoug Ambrisko 
9839c067b84SDoug Ambrisko enum {
9849c067b84SDoug Ambrisko 	CLSF_TLV_FILTER = 0,
9859c067b84SDoug Ambrisko 	CLSF_TLV_ACTION = 1,
9869c067b84SDoug Ambrisko };
9879c067b84SDoug Ambrisko 
9889c067b84SDoug Ambrisko struct filter_tlv {
9899c067b84SDoug Ambrisko 	uint32_t type;
9909c067b84SDoug Ambrisko 	uint32_t length;
9919c067b84SDoug Ambrisko 	uint32_t val[0];
9929c067b84SDoug Ambrisko };
9939c067b84SDoug Ambrisko 
9949c067b84SDoug Ambrisko /* Data for CMD_ADD_FILTER is 2 TLV and filter + action structs */
9959c067b84SDoug Ambrisko #define FILTER_MAX_BUF_SIZE 100
9969c067b84SDoug Ambrisko #define FILTER_V2_MAX_BUF_SIZE (sizeof(struct filter_v2) + \
9979c067b84SDoug Ambrisko 	sizeof(struct filter_action_v2) + \
9989c067b84SDoug Ambrisko 	(2 * sizeof(struct filter_tlv)))
9999c067b84SDoug Ambrisko 
10009c067b84SDoug Ambrisko /*
10019c067b84SDoug Ambrisko  * Compute actual structure size given filter type.  To be "future-proof,"
10029c067b84SDoug Ambrisko  * drivers should use this instead of "sizeof (struct filter_v2)" when
10039c067b84SDoug Ambrisko  * computing length for TLV.
10049c067b84SDoug Ambrisko  */
10059c067b84SDoug Ambrisko static inline uint32_t
vnic_filter_size(struct filter_v2 * fp)10069c067b84SDoug Ambrisko vnic_filter_size(struct filter_v2 *fp)
10079c067b84SDoug Ambrisko {
10089c067b84SDoug Ambrisko 	uint32_t size;
10099c067b84SDoug Ambrisko 
10109c067b84SDoug Ambrisko 	switch (fp->type) {
10119c067b84SDoug Ambrisko 	case FILTER_USNIC_ID:
10129c067b84SDoug Ambrisko 		size = sizeof(fp->u.usnic);
10139c067b84SDoug Ambrisko 		break;
10149c067b84SDoug Ambrisko 	case FILTER_IPV4_5TUPLE:
10159c067b84SDoug Ambrisko 		size = sizeof(fp->u.ipv4);
10169c067b84SDoug Ambrisko 		break;
10179c067b84SDoug Ambrisko 	case FILTER_MAC_VLAN:
10189c067b84SDoug Ambrisko 	case FILTER_NVGRE_VMQ:
10199c067b84SDoug Ambrisko 		size = sizeof(fp->u.mac_vlan);
10209c067b84SDoug Ambrisko 		break;
10219c067b84SDoug Ambrisko 	case FILTER_VLAN_IP_3TUPLE:
10229c067b84SDoug Ambrisko 		size = sizeof(fp->u.vlan_3tuple);
10239c067b84SDoug Ambrisko 		break;
10249c067b84SDoug Ambrisko 	case FILTER_USNIC_IP:
10259c067b84SDoug Ambrisko 	case FILTER_DPDK_1:
10269c067b84SDoug Ambrisko 		size = sizeof(fp->u.generic_1);
10279c067b84SDoug Ambrisko 		break;
10289c067b84SDoug Ambrisko 	default:
10299c067b84SDoug Ambrisko 		size = sizeof(fp->u);
10309c067b84SDoug Ambrisko 		break;
10319c067b84SDoug Ambrisko 	}
10329c067b84SDoug Ambrisko 	size += sizeof(fp->type);
10339c067b84SDoug Ambrisko 	return size;
10349c067b84SDoug Ambrisko }
10359c067b84SDoug Ambrisko 
10369c067b84SDoug Ambrisko enum {
10379c067b84SDoug Ambrisko 	CLSF_ADD = 0,
10389c067b84SDoug Ambrisko 	CLSF_DEL = 1,
10399c067b84SDoug Ambrisko };
10409c067b84SDoug Ambrisko 
10419c067b84SDoug Ambrisko /*
10429c067b84SDoug Ambrisko  * Get the action structure size given action type. To be "future-proof,"
10439c067b84SDoug Ambrisko  * drivers should use this instead of "sizeof (struct filter_action_v2)"
10449c067b84SDoug Ambrisko  * when computing length for TLV.
10459c067b84SDoug Ambrisko  */
10469c067b84SDoug Ambrisko static inline uint32_t
vnic_action_size(struct filter_action_v2 * fap)10479c067b84SDoug Ambrisko vnic_action_size(struct filter_action_v2 *fap)
10489c067b84SDoug Ambrisko {
10499c067b84SDoug Ambrisko 	uint32_t size;
10509c067b84SDoug Ambrisko 
10519c067b84SDoug Ambrisko 	switch (fap->type) {
10529c067b84SDoug Ambrisko 	case FILTER_ACTION_RQ_STEERING:
10539c067b84SDoug Ambrisko 		size = sizeof(struct filter_action);
10549c067b84SDoug Ambrisko 		break;
10559c067b84SDoug Ambrisko 	case FILTER_ACTION_V2:
10569c067b84SDoug Ambrisko 		size = sizeof(struct filter_action_v2);
10579c067b84SDoug Ambrisko 		break;
10589c067b84SDoug Ambrisko 	default:
10599c067b84SDoug Ambrisko 		size = sizeof(struct filter_action);
10609c067b84SDoug Ambrisko 		break;
10619c067b84SDoug Ambrisko 	}
10629c067b84SDoug Ambrisko 	return size;
10639c067b84SDoug Ambrisko }
10649c067b84SDoug Ambrisko 
10659c067b84SDoug Ambrisko /*
10669c067b84SDoug Ambrisko  * Writing cmd register causes STAT_BUSY to get set in status register.
10679c067b84SDoug Ambrisko  * When cmd completes, STAT_BUSY will be cleared.
10689c067b84SDoug Ambrisko  *
10699c067b84SDoug Ambrisko  * If cmd completed successfully STAT_ERROR will be clear
10709c067b84SDoug Ambrisko  * and args registers contain cmd-specific results.
10719c067b84SDoug Ambrisko  *
10729c067b84SDoug Ambrisko  * If cmd error, STAT_ERROR will be set and args[0] contains error code.
10739c067b84SDoug Ambrisko  *
10749c067b84SDoug Ambrisko  * status register is read-only.  While STAT_BUSY is set,
10759c067b84SDoug Ambrisko  * all other register contents are read-only.
10769c067b84SDoug Ambrisko  */
10779c067b84SDoug Ambrisko 
10789c067b84SDoug Ambrisko /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
10799c067b84SDoug Ambrisko #define VNIC_DEVCMD_NARGS 15
10809c067b84SDoug Ambrisko struct vnic_devcmd {
10819c067b84SDoug Ambrisko 	u32 status;			/* RO */
10829c067b84SDoug Ambrisko 	u32 cmd;			/* RW */
10839c067b84SDoug Ambrisko 	u64 args[VNIC_DEVCMD_NARGS];	/* RW cmd args (little-endian) */
10849c067b84SDoug Ambrisko };
10859c067b84SDoug Ambrisko 
10869c067b84SDoug Ambrisko #define DEVCMD_STATUS 	0
10879c067b84SDoug Ambrisko #define DEVCMD_CMD      4
10889c067b84SDoug Ambrisko #define DEVCMD_ARGS(x)  (8 + (VNIC_DEVCMD_NARGS * x))
10899c067b84SDoug Ambrisko 
10909c067b84SDoug Ambrisko /*
10919c067b84SDoug Ambrisko  * Version 2 of the interface.
10929c067b84SDoug Ambrisko  *
10939c067b84SDoug Ambrisko  * Some things are carried over, notably the vnic_devcmd_cmd enum.
10949c067b84SDoug Ambrisko  */
10959c067b84SDoug Ambrisko 
10969c067b84SDoug Ambrisko /*
10979c067b84SDoug Ambrisko  * Flags for vnic_devcmd2.flags
10989c067b84SDoug Ambrisko  */
10999c067b84SDoug Ambrisko 
11009c067b84SDoug Ambrisko #define DEVCMD2_FNORESULT       0x1     /* Don't copy result to host */
11019c067b84SDoug Ambrisko 
11029c067b84SDoug Ambrisko #define VNIC_DEVCMD2_NARGS      VNIC_DEVCMD_NARGS
11039c067b84SDoug Ambrisko struct vnic_devcmd2 {
11049c067b84SDoug Ambrisko 	u16 pad;
11059c067b84SDoug Ambrisko 	u16 flags;
11069c067b84SDoug Ambrisko 	u32 cmd;                /* same command #defines as original */
11079c067b84SDoug Ambrisko 	u64 args[VNIC_DEVCMD2_NARGS];
11089c067b84SDoug Ambrisko };
11099c067b84SDoug Ambrisko 
11109c067b84SDoug Ambrisko #define VNIC_DEVCMD2_NRESULTS   VNIC_DEVCMD_NARGS
11119c067b84SDoug Ambrisko struct devcmd2_result {
11129c067b84SDoug Ambrisko 	u64 results[VNIC_DEVCMD2_NRESULTS];
11139c067b84SDoug Ambrisko 	u32 pad;
11149c067b84SDoug Ambrisko 	u16 completed_index;    /* into copy WQ */
11159c067b84SDoug Ambrisko 	u8  error;              /* same error codes as original */
11169c067b84SDoug Ambrisko 	u8  color;              /* 0 or 1 as with completion queues */
11179c067b84SDoug Ambrisko };
11189c067b84SDoug Ambrisko 
11199c067b84SDoug Ambrisko #define DEVCMD2_RING_SIZE   32
11209c067b84SDoug Ambrisko #define DEVCMD2_DESC_SIZE   128
11219c067b84SDoug Ambrisko 
11229c067b84SDoug Ambrisko #define DEVCMD2_RESULTS_SIZE_MAX   ((1 << 16) - 1)
11239c067b84SDoug Ambrisko 
11249c067b84SDoug Ambrisko /* Overlay related definitions */
11259c067b84SDoug Ambrisko 
11269c067b84SDoug Ambrisko /*
11279c067b84SDoug Ambrisko  * This enum lists the flag associated with each of the overlay features
11289c067b84SDoug Ambrisko  */
11299c067b84SDoug Ambrisko typedef enum {
11309c067b84SDoug Ambrisko 	OVERLAY_FEATURE_NVGRE = 1,
11319c067b84SDoug Ambrisko 	OVERLAY_FEATURE_VXLAN,
11329c067b84SDoug Ambrisko 	OVERLAY_FEATURE_MAX,
11339c067b84SDoug Ambrisko } overlay_feature_t;
11349c067b84SDoug Ambrisko 
11359c067b84SDoug Ambrisko #define OVERLAY_OFFLOAD_ENABLE          0
11369c067b84SDoug Ambrisko #define OVERLAY_OFFLOAD_DISABLE         1
11379c067b84SDoug Ambrisko #define OVERLAY_OFFLOAD_ENABLE_V2       2
11389c067b84SDoug Ambrisko 
11399c067b84SDoug Ambrisko #define OVERLAY_CFG_VXLAN_PORT_UPDATE 0
11409c067b84SDoug Ambrisko 
11419c067b84SDoug Ambrisko /*
11429c067b84SDoug Ambrisko  * Use this enum to get the supported versions for each of these features
11439c067b84SDoug Ambrisko  * If you need to use the devcmd_get_supported_feature_version(), add
11449c067b84SDoug Ambrisko  * the new feature into this enum and install function handler in devcmd.c
11459c067b84SDoug Ambrisko  */
11469c067b84SDoug Ambrisko typedef enum {
11479c067b84SDoug Ambrisko 	VIC_FEATURE_VXLAN,
11489c067b84SDoug Ambrisko 	VIC_FEATURE_RDMA,
11499c067b84SDoug Ambrisko 	VIC_FEATURE_MAX,
11509c067b84SDoug Ambrisko } vic_feature_t;
11519c067b84SDoug Ambrisko 
11529c067b84SDoug Ambrisko /*
11539c067b84SDoug Ambrisko  * These flags are used in args[1] of devcmd CMD_GET_SUPP_FEATURE_VER
11549c067b84SDoug Ambrisko  * to indicate the host driver about the VxLAN and Multi WQ features
11559c067b84SDoug Ambrisko  * supported
11569c067b84SDoug Ambrisko  */
11579c067b84SDoug Ambrisko #define FEATURE_VXLAN_IPV6_INNER	(1 << 0)
11589c067b84SDoug Ambrisko #define FEATURE_VXLAN_IPV6_OUTER	(1 << 1)
11599c067b84SDoug Ambrisko #define FEATURE_VXLAN_MULTI_WQ		(1 << 2)
11609c067b84SDoug Ambrisko 
11619c067b84SDoug Ambrisko #define FEATURE_VXLAN_IPV6		(FEATURE_VXLAN_IPV6_INNER | \
11629c067b84SDoug Ambrisko 					 FEATURE_VXLAN_IPV6_OUTER)
11639c067b84SDoug Ambrisko 
11649c067b84SDoug Ambrisko /*
11659c067b84SDoug Ambrisko  * CMD_CONFIG_GRPINTR subcommands
11669c067b84SDoug Ambrisko  */
11679c067b84SDoug Ambrisko typedef enum {
11689c067b84SDoug Ambrisko 	GRPINTR_ENABLE = 1,
11699c067b84SDoug Ambrisko 	GRPINTR_DISABLE,
11709c067b84SDoug Ambrisko 	GRPINTR_UPD_VECT,
11719c067b84SDoug Ambrisko } grpintr_subcmd_t;
11729c067b84SDoug Ambrisko 
11739c067b84SDoug Ambrisko /*
11749c067b84SDoug Ambrisko  * Structure for counter DMA
11759c067b84SDoug Ambrisko  * (DMAed by CMD_COUNTER_DMA_CONFIG)
11769c067b84SDoug Ambrisko  */
11779c067b84SDoug Ambrisko struct vnic_counter_counts {
11789c067b84SDoug Ambrisko 	u64 vcc_packets;
11799c067b84SDoug Ambrisko 	u64 vcc_bytes;
11809c067b84SDoug Ambrisko };
11819c067b84SDoug Ambrisko 
11829c067b84SDoug Ambrisko #endif /* _VNIC_DEVCMD_H_ */
1183