1*e6550b3eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2a6a5580cSJeff Kirsher /*
3a6a5580cSJeff Kirsher  * Copyright 2008-2010 Cisco Systems, Inc.  All rights reserved.
4a6a5580cSJeff Kirsher  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
5a6a5580cSJeff Kirsher  */
6a6a5580cSJeff Kirsher 
7a6a5580cSJeff Kirsher #ifndef _VNIC_DEVCMD_H_
8a6a5580cSJeff Kirsher #define _VNIC_DEVCMD_H_
9a6a5580cSJeff Kirsher 
10a6a5580cSJeff Kirsher #define _CMD_NBITS      14
11a6a5580cSJeff Kirsher #define _CMD_VTYPEBITS	10
12a6a5580cSJeff Kirsher #define _CMD_FLAGSBITS  6
13a6a5580cSJeff Kirsher #define _CMD_DIRBITS	2
14a6a5580cSJeff Kirsher 
15a6a5580cSJeff Kirsher #define _CMD_NMASK      ((1 << _CMD_NBITS)-1)
16a6a5580cSJeff Kirsher #define _CMD_VTYPEMASK  ((1 << _CMD_VTYPEBITS)-1)
17a6a5580cSJeff Kirsher #define _CMD_FLAGSMASK  ((1 << _CMD_FLAGSBITS)-1)
18a6a5580cSJeff Kirsher #define _CMD_DIRMASK    ((1 << _CMD_DIRBITS)-1)
19a6a5580cSJeff Kirsher 
20a6a5580cSJeff Kirsher #define _CMD_NSHIFT     0
21a6a5580cSJeff Kirsher #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
22a6a5580cSJeff Kirsher #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
23a6a5580cSJeff Kirsher #define _CMD_DIRSHIFT   (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
24a6a5580cSJeff Kirsher 
25a6a5580cSJeff Kirsher /*
26a6a5580cSJeff Kirsher  * Direction bits (from host perspective).
27a6a5580cSJeff Kirsher  */
28a6a5580cSJeff Kirsher #define _CMD_DIR_NONE   0U
29a6a5580cSJeff Kirsher #define _CMD_DIR_WRITE  1U
30a6a5580cSJeff Kirsher #define _CMD_DIR_READ   2U
31a6a5580cSJeff Kirsher #define _CMD_DIR_RW     (_CMD_DIR_WRITE | _CMD_DIR_READ)
32a6a5580cSJeff Kirsher 
33a6a5580cSJeff Kirsher /*
34a6a5580cSJeff Kirsher  * Flag bits.
35a6a5580cSJeff Kirsher  */
36a6a5580cSJeff Kirsher #define _CMD_FLAGS_NONE 0U
37a6a5580cSJeff Kirsher #define _CMD_FLAGS_NOWAIT 1U
38a6a5580cSJeff Kirsher 
39a6a5580cSJeff Kirsher /*
40a6a5580cSJeff Kirsher  * vNIC type bits.
41a6a5580cSJeff Kirsher  */
42a6a5580cSJeff Kirsher #define _CMD_VTYPE_NONE  0U
43a6a5580cSJeff Kirsher #define _CMD_VTYPE_ENET  1U
44a6a5580cSJeff Kirsher #define _CMD_VTYPE_FC    2U
45a6a5580cSJeff Kirsher #define _CMD_VTYPE_SCSI  4U
46a6a5580cSJeff Kirsher #define _CMD_VTYPE_ALL   (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
47a6a5580cSJeff Kirsher 
48a6a5580cSJeff Kirsher /*
49a6a5580cSJeff Kirsher  * Used to create cmds..
50a6a5580cSJeff Kirsher */
51a6a5580cSJeff Kirsher #define _CMDCF(dir, flags, vtype, nr)  \
52a6a5580cSJeff Kirsher 	(((dir)   << _CMD_DIRSHIFT) | \
53a6a5580cSJeff Kirsher 	((flags) << _CMD_FLAGSSHIFT) | \
54a6a5580cSJeff Kirsher 	((vtype) << _CMD_VTYPESHIFT) | \
55a6a5580cSJeff Kirsher 	((nr)    << _CMD_NSHIFT))
56a6a5580cSJeff Kirsher #define _CMDC(dir, vtype, nr)    _CMDCF(dir, 0, vtype, nr)
57a6a5580cSJeff Kirsher #define _CMDCNW(dir, vtype, nr)  _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
58a6a5580cSJeff Kirsher 
59a6a5580cSJeff Kirsher /*
60a6a5580cSJeff Kirsher  * Used to decode cmds..
61a6a5580cSJeff Kirsher */
62a6a5580cSJeff Kirsher #define _CMD_DIR(cmd)            (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
63a6a5580cSJeff Kirsher #define _CMD_FLAGS(cmd)          (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
64a6a5580cSJeff Kirsher #define _CMD_VTYPE(cmd)          (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
65a6a5580cSJeff Kirsher #define _CMD_N(cmd)              (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
66a6a5580cSJeff Kirsher 
67a6a5580cSJeff Kirsher enum vnic_devcmd_cmd {
68a6a5580cSJeff Kirsher 	CMD_NONE                = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
69a6a5580cSJeff Kirsher 
70a6a5580cSJeff Kirsher 	/*
71a6a5580cSJeff Kirsher 	 * mcpu fw info in mem:
72a6a5580cSJeff Kirsher 	 * in:
73a6a5580cSJeff Kirsher 	 *   (u64)a0=paddr to struct vnic_devcmd_fw_info
74a6a5580cSJeff Kirsher 	 * action:
75a6a5580cSJeff Kirsher 	 *   Fills in struct vnic_devcmd_fw_info (128 bytes)
76a6a5580cSJeff Kirsher 	 * note:
77a6a5580cSJeff Kirsher 	 *   An old definition of CMD_MCPU_FW_INFO
78a6a5580cSJeff Kirsher 	 */
79a6a5580cSJeff Kirsher 	CMD_MCPU_FW_INFO_OLD    = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
80a6a5580cSJeff Kirsher 
81a6a5580cSJeff Kirsher 	/*
82a6a5580cSJeff Kirsher 	 * mcpu fw info in mem:
83a6a5580cSJeff Kirsher 	 * in:
84a6a5580cSJeff Kirsher 	 *   (u64)a0=paddr to struct vnic_devcmd_fw_info
85a6a5580cSJeff Kirsher 	 *   (u16)a1=size of the structure
86a6a5580cSJeff Kirsher 	 * out:
87a6a5580cSJeff Kirsher 	 *	 (u16)a1=0                          for in:a1 = 0,
88a6a5580cSJeff Kirsher 	 *	         data size actually written for other values.
89a6a5580cSJeff Kirsher 	 * action:
90a6a5580cSJeff Kirsher 	 *   Fills in first 128 bytes of vnic_devcmd_fw_info for in:a1 = 0,
91a6a5580cSJeff Kirsher 	 *            first in:a1 bytes               for 0 < in:a1 <= 132,
92a6a5580cSJeff Kirsher 	 *            132 bytes                       for other values of in:a1.
93a6a5580cSJeff Kirsher 	 * note:
94a6a5580cSJeff Kirsher 	 *   CMD_MCPU_FW_INFO and CMD_MCPU_FW_INFO_OLD have the same enum 1
95a6a5580cSJeff Kirsher 	 *   for source compatibility.
96a6a5580cSJeff Kirsher 	 */
97a6a5580cSJeff Kirsher 	CMD_MCPU_FW_INFO        = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1),
98a6a5580cSJeff Kirsher 
99a6a5580cSJeff Kirsher 	/* dev-specific block member:
100a6a5580cSJeff Kirsher 	 *    in: (u16)a0=offset,(u8)a1=size
101a6a5580cSJeff Kirsher 	 *    out: a0=value */
102a6a5580cSJeff Kirsher 	CMD_DEV_SPEC            = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
103a6a5580cSJeff Kirsher 
104a6a5580cSJeff Kirsher 	/* stats clear */
105a6a5580cSJeff Kirsher 	CMD_STATS_CLEAR         = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
106a6a5580cSJeff Kirsher 
107a6a5580cSJeff Kirsher 	/* stats dump in mem: (u64)a0=paddr to stats area,
108a6a5580cSJeff Kirsher 	 *                    (u16)a1=sizeof stats area */
109a6a5580cSJeff Kirsher 	CMD_STATS_DUMP          = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
110a6a5580cSJeff Kirsher 
111a6a5580cSJeff Kirsher 	/* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */
112a6a5580cSJeff Kirsher 	CMD_PACKET_FILTER	= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7),
113a6a5580cSJeff Kirsher 
114a6a5580cSJeff Kirsher 	/* set Rx packet filter for all: (u32)a0=filters (see CMD_PFILTER_*) */
115a6a5580cSJeff Kirsher 	CMD_PACKET_FILTER_ALL   = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
116a6a5580cSJeff Kirsher 
117a6a5580cSJeff Kirsher 	/* hang detection notification */
118a6a5580cSJeff Kirsher 	CMD_HANG_NOTIFY         = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
119a6a5580cSJeff Kirsher 
120a6a5580cSJeff Kirsher 	/* MAC address in (u48)a0 */
121b13423eeSRoopa Prabhu 	CMD_GET_MAC_ADDR        = _CMDC(_CMD_DIR_READ,
122a6a5580cSJeff Kirsher 					_CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
123a6a5580cSJeff Kirsher 
124a6a5580cSJeff Kirsher 	/* add addr from (u48)a0 */
125a6a5580cSJeff Kirsher 	CMD_ADDR_ADD            = _CMDCNW(_CMD_DIR_WRITE,
126a6a5580cSJeff Kirsher 					_CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
127a6a5580cSJeff Kirsher 
128a6a5580cSJeff Kirsher 	/* del addr from (u48)a0 */
129a6a5580cSJeff Kirsher 	CMD_ADDR_DEL            = _CMDCNW(_CMD_DIR_WRITE,
130a6a5580cSJeff Kirsher 					_CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
131a6a5580cSJeff Kirsher 
132a6a5580cSJeff Kirsher 	/* add VLAN id in (u16)a0 */
133a6a5580cSJeff Kirsher 	CMD_VLAN_ADD            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
134a6a5580cSJeff Kirsher 
135a6a5580cSJeff Kirsher 	/* del VLAN id in (u16)a0 */
136a6a5580cSJeff Kirsher 	CMD_VLAN_DEL            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
137a6a5580cSJeff Kirsher 
1384016a7f1SGovindarajulu Varadarajan 	/* nic_cfg (no wait, always succeeds)
1394016a7f1SGovindarajulu Varadarajan 	 * in: (u32)a0
1404016a7f1SGovindarajulu Varadarajan 	 *
1414016a7f1SGovindarajulu Varadarajan 	 * Capability query:
1424016a7f1SGovindarajulu Varadarajan 	 * out: (u64) a0 = 1 if a1 is valid
1434016a7f1SGovindarajulu Varadarajan 	 *	(u64) a1 = (NIC_CFG bits supported) | (flags << 32)
1444016a7f1SGovindarajulu Varadarajan 	 *
1454016a7f1SGovindarajulu Varadarajan 	 * flags are CMD_NIC_CFG_CAPF_xxx
1464016a7f1SGovindarajulu Varadarajan 	 */
147a6a5580cSJeff Kirsher 	CMD_NIC_CFG             = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
1484016a7f1SGovindarajulu Varadarajan 	/* nic_cfg_chk (will return error if flags are invalid)
1494016a7f1SGovindarajulu Varadarajan 	 * in: (u32)a0
1504016a7f1SGovindarajulu Varadarajan 	 *
1514016a7f1SGovindarajulu Varadarajan 	 * Capability query:
1524016a7f1SGovindarajulu Varadarajan 	 * out: (u64) a0 = 1 if a1 is valid
1534016a7f1SGovindarajulu Varadarajan 	 *	(u64) a1 = (NIC_CFG bits supported) | (flags << 32)
1544016a7f1SGovindarajulu Varadarajan 	 *
1554016a7f1SGovindarajulu Varadarajan 	 * flags are CMD_NIC_CFG_CAPF_xxx
1564016a7f1SGovindarajulu Varadarajan 	 */
1574016a7f1SGovindarajulu Varadarajan 	CMD_NIC_CFG_CHK		= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
158a6a5580cSJeff Kirsher 
159a6a5580cSJeff Kirsher 	/* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */
160a6a5580cSJeff Kirsher 	CMD_RSS_KEY             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
161a6a5580cSJeff Kirsher 
162a6a5580cSJeff Kirsher 	/* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */
163a6a5580cSJeff Kirsher 	CMD_RSS_CPU             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
164a6a5580cSJeff Kirsher 
165a6a5580cSJeff Kirsher 	/* initiate softreset */
166a6a5580cSJeff Kirsher 	CMD_SOFT_RESET          = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
167a6a5580cSJeff Kirsher 
168a6a5580cSJeff Kirsher 	/* softreset status:
169a6a5580cSJeff Kirsher 	 *    out: a0=0 reset complete, a0=1 reset in progress */
170a6a5580cSJeff Kirsher 	CMD_SOFT_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
171a6a5580cSJeff Kirsher 
172a6a5580cSJeff Kirsher 	/* set struct vnic_devcmd_notify buffer in mem:
173a6a5580cSJeff Kirsher 	 * in:
174a6a5580cSJeff Kirsher 	 *   (u64)a0=paddr to notify (set paddr=0 to unset)
175a6a5580cSJeff Kirsher 	 *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
176a6a5580cSJeff Kirsher 	 *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
177a6a5580cSJeff Kirsher 	 * out:
178a6a5580cSJeff Kirsher 	 *   (u32)a1 = effective size
179a6a5580cSJeff Kirsher 	 */
180a6a5580cSJeff Kirsher 	CMD_NOTIFY              = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
181a6a5580cSJeff Kirsher 
182a6a5580cSJeff Kirsher 	/* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct,
183a6a5580cSJeff Kirsher 	 *           (u8)a1=PXENV_UNDI_xxx */
184a6a5580cSJeff Kirsher 	CMD_UNDI                = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
185a6a5580cSJeff Kirsher 
186a6a5580cSJeff Kirsher 	/* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
187a6a5580cSJeff Kirsher 	CMD_OPEN		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
188a6a5580cSJeff Kirsher 
189a6a5580cSJeff Kirsher 	/* open status:
190a6a5580cSJeff Kirsher 	 *    out: a0=0 open complete, a0=1 open in progress */
191a6a5580cSJeff Kirsher 	CMD_OPEN_STATUS		= _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
192a6a5580cSJeff Kirsher 
193a6a5580cSJeff Kirsher 	/* close vnic */
194a6a5580cSJeff Kirsher 	CMD_CLOSE		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
195a6a5580cSJeff Kirsher 
196a6a5580cSJeff Kirsher 	/* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
197a6a5580cSJeff Kirsher /***** Replaced by CMD_INIT *****/
198a6a5580cSJeff Kirsher 	CMD_INIT_v1		= _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
199a6a5580cSJeff Kirsher 
200a6a5580cSJeff Kirsher 	/* variant of CMD_INIT, with provisioning info
201a6a5580cSJeff Kirsher 	 *     (u64)a0=paddr of vnic_devcmd_provinfo
202a6a5580cSJeff Kirsher 	 *     (u32)a1=sizeof provision info */
203a6a5580cSJeff Kirsher 	CMD_INIT_PROV_INFO	= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
204a6a5580cSJeff Kirsher 
205a6a5580cSJeff Kirsher 	/* enable virtual link */
206a6a5580cSJeff Kirsher 	CMD_ENABLE		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
207a6a5580cSJeff Kirsher 
208a6a5580cSJeff Kirsher 	/* enable virtual link, waiting variant. */
209a6a5580cSJeff Kirsher 	CMD_ENABLE_WAIT		= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
210a6a5580cSJeff Kirsher 
211a6a5580cSJeff Kirsher 	/* disable virtual link */
212a6a5580cSJeff Kirsher 	CMD_DISABLE		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
213a6a5580cSJeff Kirsher 
214a6a5580cSJeff Kirsher 	/* stats dump sum of all vnic stats on same uplink in mem:
215a6a5580cSJeff Kirsher 	 *     (u64)a0=paddr
216a6a5580cSJeff Kirsher 	 *     (u16)a1=sizeof stats area */
217a6a5580cSJeff Kirsher 	CMD_STATS_DUMP_ALL	= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
218a6a5580cSJeff Kirsher 
219a6a5580cSJeff Kirsher 	/* init status:
220a6a5580cSJeff Kirsher 	 *    out: a0=0 init complete, a0=1 init in progress
221a6a5580cSJeff Kirsher 	 *         if a0=0, a1=errno */
222a6a5580cSJeff Kirsher 	CMD_INIT_STATUS		= _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
223a6a5580cSJeff Kirsher 
224a6a5580cSJeff Kirsher 	/* INT13 API: (u64)a0=paddr to vnic_int13_params struct
225a6a5580cSJeff Kirsher 	 *            (u32)a1=INT13_CMD_xxx */
226a6a5580cSJeff Kirsher 	CMD_INT13               = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
227a6a5580cSJeff Kirsher 
228a6a5580cSJeff Kirsher 	/* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */
229a6a5580cSJeff Kirsher 	CMD_LOGICAL_UPLINK      = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
230a6a5580cSJeff Kirsher 
231a6a5580cSJeff Kirsher 	/* undo initialize of virtual link */
232a6a5580cSJeff Kirsher 	CMD_DEINIT		= _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
233a6a5580cSJeff Kirsher 
234a6a5580cSJeff Kirsher 	/* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
235a6a5580cSJeff Kirsher 	CMD_INIT		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35),
236a6a5580cSJeff Kirsher 
237a6a5580cSJeff Kirsher 	/* check fw capability of a cmd:
238a6a5580cSJeff Kirsher 	 * in:  (u32)a0=cmd
239a6a5580cSJeff Kirsher 	 * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */
240a6a5580cSJeff Kirsher 	CMD_CAPABILITY		= _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
241a6a5580cSJeff Kirsher 
242a6a5580cSJeff Kirsher 	/* persistent binding info
243a6a5580cSJeff Kirsher 	 * in:  (u64)a0=paddr of arg
244a6a5580cSJeff Kirsher 	 *      (u32)a1=CMD_PERBI_XXX */
245a6a5580cSJeff Kirsher 	CMD_PERBI		= _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
246a6a5580cSJeff Kirsher 
247a6a5580cSJeff Kirsher 	/* Interrupt Assert Register functionality
248a6a5580cSJeff Kirsher 	 * in: (u16)a0=interrupt number to assert
249a6a5580cSJeff Kirsher 	 */
250a6a5580cSJeff Kirsher 	CMD_IAR			= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
251a6a5580cSJeff Kirsher 
252a6a5580cSJeff Kirsher 	/* initiate hangreset, like softreset after hang detected */
253a6a5580cSJeff Kirsher 	CMD_HANG_RESET		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
254a6a5580cSJeff Kirsher 
255a6a5580cSJeff Kirsher 	/* hangreset status:
256a6a5580cSJeff Kirsher 	 *    out: a0=0 reset complete, a0=1 reset in progress */
257a6a5580cSJeff Kirsher 	CMD_HANG_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
258a6a5580cSJeff Kirsher 
259a6a5580cSJeff Kirsher 	/*
260a6a5580cSJeff Kirsher 	 * Set hw ingress packet vlan rewrite mode:
261a6a5580cSJeff Kirsher 	 * in:  (u32)a0=new vlan rewrite mode
262a6a5580cSJeff Kirsher 	 * out: (u32)a0=old vlan rewrite mode */
263a6a5580cSJeff Kirsher 	CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
264a6a5580cSJeff Kirsher 
265a6a5580cSJeff Kirsher 	/*
266a6a5580cSJeff Kirsher 	 * in:  (u16)a0=bdf of target vnic
267a6a5580cSJeff Kirsher 	 *      (u32)a1=cmd to proxy
268a6a5580cSJeff Kirsher 	 *      a2-a15=args to cmd in a1
269a6a5580cSJeff Kirsher 	 * out: (u32)a0=status of proxied cmd
270a6a5580cSJeff Kirsher 	 *      a1-a15=out args of proxied cmd */
271a6a5580cSJeff Kirsher 	CMD_PROXY_BY_BDF =	_CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
272a6a5580cSJeff Kirsher 
273a6a5580cSJeff Kirsher 	/*
274a6a5580cSJeff Kirsher 	 * As for BY_BDF except a0 is index of hvnlink subordinate vnic
275a6a5580cSJeff Kirsher 	 * or SR-IOV virtual vnic
276a6a5580cSJeff Kirsher 	 */
277a6a5580cSJeff Kirsher 	CMD_PROXY_BY_INDEX =    _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
278a6a5580cSJeff Kirsher 
279a6a5580cSJeff Kirsher 	/*
280a6a5580cSJeff Kirsher 	 * For HPP toggle:
281a6a5580cSJeff Kirsher 	 * adapter-info-get
282a6a5580cSJeff Kirsher 	 * in:  (u64)a0=phsical address of buffer passed in from caller.
283a6a5580cSJeff Kirsher 	 *      (u16)a1=size of buffer specified in a0.
284a6a5580cSJeff Kirsher 	 * out: (u64)a0=phsical address of buffer passed in from caller.
285a6a5580cSJeff Kirsher 	 *      (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or
286a6a5580cSJeff Kirsher 	 *              0 if no VIF-CONFIG-INFO TLV was ever received. */
287a6a5580cSJeff Kirsher 	CMD_CONFIG_INFO_GET     = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
288a6a5580cSJeff Kirsher 
28992e2b469SNeel Patel 	/* INT13 API: (u64)a0=paddr to vnic_int13_params struct
29092e2b469SNeel Patel 	 *            (u32)a1=INT13_CMD_xxx
29192e2b469SNeel Patel 	 */
29292e2b469SNeel Patel 	CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45),
29392e2b469SNeel Patel 
29492e2b469SNeel Patel 	/* Set default vlan:
29592e2b469SNeel Patel 	 * in: (u16)a0=new default vlan
29692e2b469SNeel Patel 	 *     (u16)a1=zero for overriding vlan with param a0,
29792e2b469SNeel Patel 	 *		       non-zero for resetting vlan to the default
29892e2b469SNeel Patel 	 * out: (u16)a0=old default vlan
29992e2b469SNeel Patel 	 */
30092e2b469SNeel Patel 	CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
30192e2b469SNeel Patel 
302a6a5580cSJeff Kirsher 	/* init_prov_info2:
303a6a5580cSJeff Kirsher 	 * Variant of CMD_INIT_PROV_INFO, where it will not try to enable
304a6a5580cSJeff Kirsher 	 * the vnic until CMD_ENABLE2 is issued.
305a6a5580cSJeff Kirsher 	 *     (u64)a0=paddr of vnic_devcmd_provinfo
30692e2b469SNeel Patel 	 *     (u32)a1=sizeof provision info
30792e2b469SNeel Patel 	 */
308a6a5580cSJeff Kirsher 	CMD_INIT_PROV_INFO2  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
309a6a5580cSJeff Kirsher 
310a6a5580cSJeff Kirsher 	/* enable2:
311a6a5580cSJeff Kirsher 	 *      (u32)a0=0                  ==> standby
312a6a5580cSJeff Kirsher 	 *             =CMD_ENABLE2_ACTIVE ==> active
313a6a5580cSJeff Kirsher 	 */
314a6a5580cSJeff Kirsher 	CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
315a6a5580cSJeff Kirsher 
316a6a5580cSJeff Kirsher 	/*
317a6a5580cSJeff Kirsher 	 * cmd_status:
318a6a5580cSJeff Kirsher 	 *     Returns the status of the specified command
319a6a5580cSJeff Kirsher 	 * Input:
320a6a5580cSJeff Kirsher 	 *     a0 = command for which status is being queried.
321a6a5580cSJeff Kirsher 	 *          Possible values are:
322a6a5580cSJeff Kirsher 	 *              CMD_SOFT_RESET
323a6a5580cSJeff Kirsher 	 *              CMD_HANG_RESET
324a6a5580cSJeff Kirsher 	 *              CMD_OPEN
325a6a5580cSJeff Kirsher 	 *              CMD_INIT
326a6a5580cSJeff Kirsher 	 *              CMD_INIT_PROV_INFO
327a6a5580cSJeff Kirsher 	 *              CMD_DEINIT
328a6a5580cSJeff Kirsher 	 *              CMD_INIT_PROV_INFO2
329a6a5580cSJeff Kirsher 	 *              CMD_ENABLE2
330a6a5580cSJeff Kirsher 	 * Output:
331a6a5580cSJeff Kirsher 	 *     if status == STAT_ERROR
332a6a5580cSJeff Kirsher 	 *        a0 = ERR_ENOTSUPPORTED - status for command in a0 is
333a6a5580cSJeff Kirsher 	 *                                 not supported
334a6a5580cSJeff Kirsher 	 *     if status == STAT_NONE
335a6a5580cSJeff Kirsher 	 *        a0 = status of the devcmd specified in a0 as follows.
336a6a5580cSJeff Kirsher 	 *             ERR_SUCCESS   - command in a0 completed successfully
337a6a5580cSJeff Kirsher 	 *             ERR_EINPROGRESS - command in a0 is still in progress
338a6a5580cSJeff Kirsher 	 */
339a6a5580cSJeff Kirsher 	CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
340a6a5580cSJeff Kirsher 
341a6a5580cSJeff Kirsher 	/*
342a6a5580cSJeff Kirsher 	 * Returns interrupt coalescing timer conversion factors.
343a6a5580cSJeff Kirsher 	 * After calling this devcmd, ENIC driver can convert
344a6a5580cSJeff Kirsher 	 * interrupt coalescing timer in usec into CPU cycles as follows:
345a6a5580cSJeff Kirsher 	 *
346a6a5580cSJeff Kirsher 	 *   intr_timer_cycles = intr_timer_usec * multiplier / divisor
347a6a5580cSJeff Kirsher 	 *
348a6a5580cSJeff Kirsher 	 * Interrupt coalescing timer in usecs can be obtained from
349a6a5580cSJeff Kirsher 	 * CPU cycles as follows:
350a6a5580cSJeff Kirsher 	 *
351a6a5580cSJeff Kirsher 	 *   intr_timer_usec = intr_timer_cycles * divisor / multiplier
352a6a5580cSJeff Kirsher 	 *
353a6a5580cSJeff Kirsher 	 * in: none
354a6a5580cSJeff Kirsher 	 * out: (u32)a0 = multiplier
355a6a5580cSJeff Kirsher 	 *      (u32)a1 = divisor
356a6a5580cSJeff Kirsher 	 *      (u32)a2 = maximum timer value in usec
357a6a5580cSJeff Kirsher 	 */
358a6a5580cSJeff Kirsher 	CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
359d6c81bc6SRoopa Prabhu 
360d6c81bc6SRoopa Prabhu 	/*
36192e2b469SNeel Patel 	 * Set the predefined mac address as default
362d6c81bc6SRoopa Prabhu 	 * in:
363d6c81bc6SRoopa Prabhu 	 *   (u48)a0 = mac addr
364d6c81bc6SRoopa Prabhu 	 */
365d6c81bc6SRoopa Prabhu 	CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
36692e2b469SNeel Patel 
36792e2b469SNeel Patel 	/* Update the provisioning info of the given VIF
36892e2b469SNeel Patel 	 *     (u64)a0=paddr of vnic_devcmd_provinfo
36992e2b469SNeel Patel 	 *     (u32)a1=sizeof provision info
37092e2b469SNeel Patel 	 */
37192e2b469SNeel Patel 	CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
37292e2b469SNeel Patel 
373fda3f52bSGovindarajulu Varadarajan 	/* Initialization for the devcmd2 interface.
374fda3f52bSGovindarajulu Varadarajan 	 * in: (u64) a0 = host result buffer physical address
375fda3f52bSGovindarajulu Varadarajan 	 * in: (u16) a1 = number of entries in result buffer
376fda3f52bSGovindarajulu Varadarajan 	 */
377fda3f52bSGovindarajulu Varadarajan 	CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57),
378fda3f52bSGovindarajulu Varadarajan 
37992e2b469SNeel Patel 	/* Add a filter.
38092e2b469SNeel Patel 	 * in: (u64) a0= filter address
38192e2b469SNeel Patel 	 *     (u32) a1= size of filter
38292e2b469SNeel Patel 	 * out: (u32) a0=filter identifier
38392e2b469SNeel Patel 	 */
38492e2b469SNeel Patel 	CMD_ADD_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 58),
38592e2b469SNeel Patel 
38692e2b469SNeel Patel 	/* Delete a filter.
38792e2b469SNeel Patel 	 * in: (u32) a0=filter identifier
38892e2b469SNeel Patel 	 */
38992e2b469SNeel Patel 	CMD_DEL_FILTER = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 59),
39092e2b469SNeel Patel 
39192e2b469SNeel Patel 	/* Enable a Queue Pair in User space NIC
39292e2b469SNeel Patel 	 * in: (u32) a0=Queue Pair number
39392e2b469SNeel Patel 	 *     (u32) a1= command
39492e2b469SNeel Patel 	 */
39592e2b469SNeel Patel 	CMD_QP_ENABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 60),
39692e2b469SNeel Patel 
39792e2b469SNeel Patel 	/* Disable a Queue Pair in User space NIC
39892e2b469SNeel Patel 	 * in: (u32) a0=Queue Pair number
39992e2b469SNeel Patel 	 *     (u32) a1= command
40092e2b469SNeel Patel 	 */
40192e2b469SNeel Patel 	CMD_QP_DISABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 61),
40292e2b469SNeel Patel 
40392e2b469SNeel Patel 	/* Stats dump Queue Pair in User space NIC
40492e2b469SNeel Patel 	 * in: (u32) a0=Queue Pair number
40592e2b469SNeel Patel 	 *     (u64) a1=host buffer addr for status dump
40692e2b469SNeel Patel 	 *     (u32) a2=length of the buffer
40792e2b469SNeel Patel 	 */
40892e2b469SNeel Patel 	CMD_QP_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 62),
40992e2b469SNeel Patel 
41092e2b469SNeel Patel 	/* Clear stats for Queue Pair in User space NIC
41192e2b469SNeel Patel 	 * in: (u32) a0=Queue Pair number
41292e2b469SNeel Patel 	 */
41392e2b469SNeel Patel 	CMD_QP_STATS_CLEAR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 63),
414ca029179SGovindarajulu Varadarajan 
415ca029179SGovindarajulu Varadarajan 	/* Use this devcmd for agreeing on the highest common version supported
416ca029179SGovindarajulu Varadarajan 	 * by both driver and fw for features who need such a facility.
417ca029179SGovindarajulu Varadarajan 	 * in:	(u64) a0 = feature (driver requests for the supported versions
418ca029179SGovindarajulu Varadarajan 	 *	on this feature)
419ca029179SGovindarajulu Varadarajan 	 * out: (u64) a0 = bitmap of all supported versions for that feature
420ca029179SGovindarajulu Varadarajan 	 */
421ca029179SGovindarajulu Varadarajan 	CMD_GET_SUPP_FEATURE_VER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 69),
422ca029179SGovindarajulu Varadarajan 
423ca029179SGovindarajulu Varadarajan 	/* Control (Enable/Disable) overlay offloads on the given vnic
424ca029179SGovindarajulu Varadarajan 	 * in: (u8) a0 = OVERLAY_FEATURE_NVGRE : NVGRE
425ca029179SGovindarajulu Varadarajan 	 *	    a0 = OVERLAY_FEATURE_VXLAN : VxLAN
426ca029179SGovindarajulu Varadarajan 	 * in: (u8) a1 = OVERLAY_OFFLOAD_ENABLE : Enable or
427ca029179SGovindarajulu Varadarajan 	 *	    a1 = OVERLAY_OFFLOAD_DISABLE : Disable or
428ca029179SGovindarajulu Varadarajan 	 *	    a1 = OVERLAY_OFFLOAD_ENABLE_V2 : Enable with version 2
429ca029179SGovindarajulu Varadarajan 	 */
430ca029179SGovindarajulu Varadarajan 	CMD_OVERLAY_OFFLOAD_CTRL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 72),
431ca029179SGovindarajulu Varadarajan 
432ca029179SGovindarajulu Varadarajan 	/* Configuration of overlay offloads feature on a given vNIC
433ca029179SGovindarajulu Varadarajan 	 * in: (u8) a0 = DEVCMD_OVERLAY_NVGRE : NVGRE
434ca029179SGovindarajulu Varadarajan 	 *	    a0 = DEVCMD_OVERLAY_VXLAN : VxLAN
435ca029179SGovindarajulu Varadarajan 	 * in: (u8) a1 = VXLAN_PORT_UPDATE : VxLAN
436ca029179SGovindarajulu Varadarajan 	 * in: (u16) a2 = unsigned short int port information
437ca029179SGovindarajulu Varadarajan 	 */
438ca029179SGovindarajulu Varadarajan 	CMD_OVERLAY_OFFLOAD_CFG = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 73),
439a6a5580cSJeff Kirsher };
440a6a5580cSJeff Kirsher 
441a6a5580cSJeff Kirsher /* CMD_ENABLE2 flags */
44292e2b469SNeel Patel #define CMD_ENABLE2_STANDBY 0x0
443a6a5580cSJeff Kirsher #define CMD_ENABLE2_ACTIVE  0x1
444a6a5580cSJeff Kirsher 
445a6a5580cSJeff Kirsher /* flags for CMD_OPEN */
446a6a5580cSJeff Kirsher #define CMD_OPENF_OPROM		0x1	/* open coming from option rom */
4475de0c022SGovindarajulu Varadarajan #define CMD_OPENF_IG_DESCCACHE	0x2	/* Do not flush IG DESC cache */
448a6a5580cSJeff Kirsher 
449a6a5580cSJeff Kirsher /* flags for CMD_INIT */
450a6a5580cSJeff Kirsher #define CMD_INITF_DEFAULT_MAC	0x1	/* init with default mac addr */
451a6a5580cSJeff Kirsher 
452a6a5580cSJeff Kirsher /* flags for CMD_PACKET_FILTER */
453a6a5580cSJeff Kirsher #define CMD_PFILTER_DIRECTED		0x01
454a6a5580cSJeff Kirsher #define CMD_PFILTER_MULTICAST		0x02
455a6a5580cSJeff Kirsher #define CMD_PFILTER_BROADCAST		0x04
456a6a5580cSJeff Kirsher #define CMD_PFILTER_PROMISCUOUS		0x08
457a6a5580cSJeff Kirsher #define CMD_PFILTER_ALL_MULTICAST	0x10
458a6a5580cSJeff Kirsher 
45992e2b469SNeel Patel /* Commands for CMD_QP_ENABLE/CM_QP_DISABLE */
46092e2b469SNeel Patel #define CMD_QP_RQWQ                     0x0
46192e2b469SNeel Patel 
462a6a5580cSJeff Kirsher /* rewrite modes for CMD_IG_VLAN_REWRITE_MODE */
463a6a5580cSJeff Kirsher #define IG_VLAN_REWRITE_MODE_DEFAULT_TRUNK              0
464a6a5580cSJeff Kirsher #define IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN         1
465a6a5580cSJeff Kirsher #define IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN  2
466a6a5580cSJeff Kirsher #define IG_VLAN_REWRITE_MODE_PASS_THRU                  3
467a6a5580cSJeff Kirsher 
468a6a5580cSJeff Kirsher enum vnic_devcmd_status {
469a6a5580cSJeff Kirsher 	STAT_NONE = 0,
470a6a5580cSJeff Kirsher 	STAT_BUSY = 1 << 0,	/* cmd in progress */
471a6a5580cSJeff Kirsher 	STAT_ERROR = 1 << 1,	/* last cmd caused error (code in a0) */
472a6a5580cSJeff Kirsher };
473a6a5580cSJeff Kirsher 
474a6a5580cSJeff Kirsher enum vnic_devcmd_error {
475a6a5580cSJeff Kirsher 	ERR_SUCCESS = 0,
476a6a5580cSJeff Kirsher 	ERR_EINVAL = 1,
477a6a5580cSJeff Kirsher 	ERR_EFAULT = 2,
478a6a5580cSJeff Kirsher 	ERR_EPERM = 3,
479a6a5580cSJeff Kirsher 	ERR_EBUSY = 4,
480a6a5580cSJeff Kirsher 	ERR_ECMDUNKNOWN = 5,
481a6a5580cSJeff Kirsher 	ERR_EBADSTATE = 6,
482a6a5580cSJeff Kirsher 	ERR_ENOMEM = 7,
483a6a5580cSJeff Kirsher 	ERR_ETIMEDOUT = 8,
484a6a5580cSJeff Kirsher 	ERR_ELINKDOWN = 9,
485a6a5580cSJeff Kirsher 	ERR_EMAXRES = 10,
486a6a5580cSJeff Kirsher 	ERR_ENOTSUPPORTED = 11,
487a6a5580cSJeff Kirsher 	ERR_EINPROGRESS = 12,
48892e2b469SNeel Patel 	ERR_MAX
489a6a5580cSJeff Kirsher };
490a6a5580cSJeff Kirsher 
491a6a5580cSJeff Kirsher /*
492a6a5580cSJeff Kirsher  * note: hw_version and asic_rev refer to the same thing,
493a6a5580cSJeff Kirsher  *       but have different formats. hw_version is
494a6a5580cSJeff Kirsher  *       a 32-byte string (e.g. "A2") and asic_rev is
495a6a5580cSJeff Kirsher  *       a 16-bit integer (e.g. 0xA2).
496a6a5580cSJeff Kirsher  */
497a6a5580cSJeff Kirsher struct vnic_devcmd_fw_info {
498a6a5580cSJeff Kirsher 	char fw_version[32];
499a6a5580cSJeff Kirsher 	char fw_build[32];
500a6a5580cSJeff Kirsher 	char hw_version[32];
501a6a5580cSJeff Kirsher 	char hw_serial_number[32];
502a6a5580cSJeff Kirsher 	u16 asic_type;
503a6a5580cSJeff Kirsher 	u16 asic_rev;
504a6a5580cSJeff Kirsher };
505a6a5580cSJeff Kirsher 
506a6a5580cSJeff Kirsher struct vnic_devcmd_notify {
507a6a5580cSJeff Kirsher 	u32 csum;		/* checksum over following words */
508a6a5580cSJeff Kirsher 
509a6a5580cSJeff Kirsher 	u32 link_state;		/* link up == 1 */
510a6a5580cSJeff Kirsher 	u32 port_speed;		/* effective port speed (rate limit) */
511a6a5580cSJeff Kirsher 	u32 mtu;		/* MTU */
512a6a5580cSJeff Kirsher 	u32 msglvl;		/* requested driver msg lvl */
513a6a5580cSJeff Kirsher 	u32 uif;		/* uplink interface */
514a6a5580cSJeff Kirsher 	u32 status;		/* status bits (see VNIC_STF_*) */
515a6a5580cSJeff Kirsher 	u32 error;		/* error code (see ERR_*) for first ERR */
516a6a5580cSJeff Kirsher 	u32 link_down_cnt;	/* running count of link down transitions */
517a6a5580cSJeff Kirsher 	u32 perbi_rebuild_cnt;	/* running count of perbi rebuilds */
518a6a5580cSJeff Kirsher };
519a6a5580cSJeff Kirsher #define VNIC_STF_FATAL_ERR	0x0001	/* fatal fw error */
520a6a5580cSJeff Kirsher #define VNIC_STF_STD_PAUSE	0x0002	/* standard link-level pause on */
521a6a5580cSJeff Kirsher #define VNIC_STF_PFC_PAUSE	0x0004	/* priority flow control pause on */
522a6a5580cSJeff Kirsher /* all supported status flags */
523a6a5580cSJeff Kirsher #define VNIC_STF_ALL		(VNIC_STF_FATAL_ERR |\
524a6a5580cSJeff Kirsher 				 VNIC_STF_STD_PAUSE |\
525a6a5580cSJeff Kirsher 				 VNIC_STF_PFC_PAUSE |\
526a6a5580cSJeff Kirsher 				 0)
527a6a5580cSJeff Kirsher 
528a6a5580cSJeff Kirsher struct vnic_devcmd_provinfo {
529a6a5580cSJeff Kirsher 	u8 oui[3];
530a6a5580cSJeff Kirsher 	u8 type;
531d1c73cbdSGustavo A. R. Silva 	u8 data[];
532a6a5580cSJeff Kirsher };
533a6a5580cSJeff Kirsher 
53492e2b469SNeel Patel /* These are used in flags field of different filters to denote
53592e2b469SNeel Patel  * valid fields used.
53692e2b469SNeel Patel  */
53792e2b469SNeel Patel #define FILTER_FIELD_VALID(fld) (1 << (fld - 1))
53892e2b469SNeel Patel 
53992e2b469SNeel Patel #define FILTER_FIELDS_USNIC ( \
54092e2b469SNeel Patel 			FILTER_FIELD_VALID(1) | \
54192e2b469SNeel Patel 			FILTER_FIELD_VALID(2) | \
54292e2b469SNeel Patel 			FILTER_FIELD_VALID(3) | \
54392e2b469SNeel Patel 			FILTER_FIELD_VALID(4))
54492e2b469SNeel Patel 
54592e2b469SNeel Patel #define FILTER_FIELDS_IPV4_5TUPLE ( \
54692e2b469SNeel Patel 			FILTER_FIELD_VALID(1) | \
54792e2b469SNeel Patel 			FILTER_FIELD_VALID(2) | \
54892e2b469SNeel Patel 			FILTER_FIELD_VALID(3) | \
54992e2b469SNeel Patel 			FILTER_FIELD_VALID(4) | \
55092e2b469SNeel Patel 			FILTER_FIELD_VALID(5))
55192e2b469SNeel Patel 
55292e2b469SNeel Patel #define FILTER_FIELDS_MAC_VLAN ( \
55392e2b469SNeel Patel 			FILTER_FIELD_VALID(1) | \
55492e2b469SNeel Patel 			FILTER_FIELD_VALID(2))
55592e2b469SNeel Patel 
55692e2b469SNeel Patel #define FILTER_FIELD_USNIC_VLAN    FILTER_FIELD_VALID(1)
55792e2b469SNeel Patel #define FILTER_FIELD_USNIC_ETHTYPE FILTER_FIELD_VALID(2)
55892e2b469SNeel Patel #define FILTER_FIELD_USNIC_PROTO   FILTER_FIELD_VALID(3)
55992e2b469SNeel Patel #define FILTER_FIELD_USNIC_ID      FILTER_FIELD_VALID(4)
56092e2b469SNeel Patel 
56192e2b469SNeel Patel struct filter_usnic_id {
56292e2b469SNeel Patel 	u32 flags;
56392e2b469SNeel Patel 	u16 vlan;
56492e2b469SNeel Patel 	u16 ethtype;
56592e2b469SNeel Patel 	u8 proto_version;
56692e2b469SNeel Patel 	u32 usnic_id;
56792e2b469SNeel Patel } __packed;
56892e2b469SNeel Patel 
56992e2b469SNeel Patel #define FILTER_FIELD_5TUP_PROTO  FILTER_FIELD_VALID(1)
57092e2b469SNeel Patel #define FILTER_FIELD_5TUP_SRC_AD FILTER_FIELD_VALID(2)
57192e2b469SNeel Patel #define FILTER_FIELD_5TUP_DST_AD FILTER_FIELD_VALID(3)
57292e2b469SNeel Patel #define FILTER_FIELD_5TUP_SRC_PT FILTER_FIELD_VALID(4)
57392e2b469SNeel Patel #define FILTER_FIELD_5TUP_DST_PT FILTER_FIELD_VALID(5)
57492e2b469SNeel Patel 
57592e2b469SNeel Patel /* Enums for the protocol field. */
57692e2b469SNeel Patel enum protocol_e {
57792e2b469SNeel Patel 	PROTO_UDP = 0,
57892e2b469SNeel Patel 	PROTO_TCP = 1,
57992e2b469SNeel Patel };
58092e2b469SNeel Patel 
58192e2b469SNeel Patel struct filter_ipv4_5tuple {
58292e2b469SNeel Patel 	u32 flags;
58392e2b469SNeel Patel 	u32 protocol;
58492e2b469SNeel Patel 	u32 src_addr;
58592e2b469SNeel Patel 	u32 dst_addr;
58692e2b469SNeel Patel 	u16 src_port;
58792e2b469SNeel Patel 	u16 dst_port;
58892e2b469SNeel Patel } __packed;
58992e2b469SNeel Patel 
59092e2b469SNeel Patel #define FILTER_FIELD_VMQ_VLAN   FILTER_FIELD_VALID(1)
59192e2b469SNeel Patel #define FILTER_FIELD_VMQ_MAC    FILTER_FIELD_VALID(2)
59292e2b469SNeel Patel 
59392e2b469SNeel Patel struct filter_mac_vlan {
59492e2b469SNeel Patel 	u32 flags;
59592e2b469SNeel Patel 	u16 vlan;
59692e2b469SNeel Patel 	u8 mac_addr[6];
59792e2b469SNeel Patel } __packed;
59892e2b469SNeel Patel 
59992e2b469SNeel Patel /* Specifies the filter_action type. */
60092e2b469SNeel Patel enum {
60192e2b469SNeel Patel 	FILTER_ACTION_RQ_STEERING = 0,
60292e2b469SNeel Patel 	FILTER_ACTION_MAX
60392e2b469SNeel Patel };
60492e2b469SNeel Patel 
60592e2b469SNeel Patel struct filter_action {
60692e2b469SNeel Patel 	u32 type;
60792e2b469SNeel Patel 	union {
60892e2b469SNeel Patel 		u32 rq_idx;
60992e2b469SNeel Patel 	} u;
61092e2b469SNeel Patel } __packed;
61192e2b469SNeel Patel 
61292e2b469SNeel Patel /* Specifies the filter type. */
61392e2b469SNeel Patel enum filter_type {
61492e2b469SNeel Patel 	FILTER_USNIC_ID = 0,
61592e2b469SNeel Patel 	FILTER_IPV4_5TUPLE = 1,
61692e2b469SNeel Patel 	FILTER_MAC_VLAN = 2,
61792e2b469SNeel Patel 	FILTER_MAX
61892e2b469SNeel Patel };
61992e2b469SNeel Patel 
62092e2b469SNeel Patel struct filter {
62192e2b469SNeel Patel 	u32 type;
62292e2b469SNeel Patel 	union {
62392e2b469SNeel Patel 		struct filter_usnic_id usnic;
62492e2b469SNeel Patel 		struct filter_ipv4_5tuple ipv4;
62592e2b469SNeel Patel 		struct filter_mac_vlan mac_vlan;
62692e2b469SNeel Patel 	} u;
62792e2b469SNeel Patel } __packed;
62892e2b469SNeel Patel 
62992e2b469SNeel Patel enum {
63092e2b469SNeel Patel 	CLSF_TLV_FILTER = 0,
63192e2b469SNeel Patel 	CLSF_TLV_ACTION = 1,
63292e2b469SNeel Patel };
63392e2b469SNeel Patel 
63492e2b469SNeel Patel /* Maximum size of buffer to CMD_ADD_FILTER */
63592e2b469SNeel Patel #define FILTER_MAX_BUF_SIZE 100
63692e2b469SNeel Patel 
63792e2b469SNeel Patel struct filter_tlv {
638d1c73cbdSGustavo A. R. Silva 	u32 type;
639d1c73cbdSGustavo A. R. Silva 	u32 length;
640d1c73cbdSGustavo A. R. Silva 	u32 val[];
64192e2b469SNeel Patel };
64292e2b469SNeel Patel 
64363118527SGovindarajulu Varadarajan enum {
64463118527SGovindarajulu Varadarajan 	CLSF_ADD = 0,
64563118527SGovindarajulu Varadarajan 	CLSF_DEL = 1,
64663118527SGovindarajulu Varadarajan };
64763118527SGovindarajulu Varadarajan 
648a6a5580cSJeff Kirsher /*
649a6a5580cSJeff Kirsher  * Writing cmd register causes STAT_BUSY to get set in status register.
650a6a5580cSJeff Kirsher  * When cmd completes, STAT_BUSY will be cleared.
651a6a5580cSJeff Kirsher  *
652a6a5580cSJeff Kirsher  * If cmd completed successfully STAT_ERROR will be clear
653a6a5580cSJeff Kirsher  * and args registers contain cmd-specific results.
654a6a5580cSJeff Kirsher  *
655a6a5580cSJeff Kirsher  * If cmd error, STAT_ERROR will be set and args[0] contains error code.
656a6a5580cSJeff Kirsher  *
657a6a5580cSJeff Kirsher  * status register is read-only.  While STAT_BUSY is set,
658a6a5580cSJeff Kirsher  * all other register contents are read-only.
659a6a5580cSJeff Kirsher  */
660a6a5580cSJeff Kirsher 
661a6a5580cSJeff Kirsher /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
662a6a5580cSJeff Kirsher #define VNIC_DEVCMD_NARGS 15
663a6a5580cSJeff Kirsher struct vnic_devcmd {
664a6a5580cSJeff Kirsher 	u32 status;			/* RO */
665a6a5580cSJeff Kirsher 	u32 cmd;			/* RW */
666a6a5580cSJeff Kirsher 	u64 args[VNIC_DEVCMD_NARGS];	/* RW cmd args (little-endian) */
667a6a5580cSJeff Kirsher };
668a6a5580cSJeff Kirsher 
669373fb087SGovindarajulu Varadarajan #define DEVCMD2_FNORESULT	0x1	/* Don't copy result to host */
670373fb087SGovindarajulu Varadarajan 
671fda3f52bSGovindarajulu Varadarajan #define VNIC_DEVCMD2_NARGS	VNIC_DEVCMD_NARGS
672fda3f52bSGovindarajulu Varadarajan struct vnic_devcmd2 {
673fda3f52bSGovindarajulu Varadarajan 	u16 pad;
674fda3f52bSGovindarajulu Varadarajan 	u16 flags;
675fda3f52bSGovindarajulu Varadarajan 	u32 cmd;
676fda3f52bSGovindarajulu Varadarajan 	u64 args[VNIC_DEVCMD2_NARGS];
677fda3f52bSGovindarajulu Varadarajan };
678fda3f52bSGovindarajulu Varadarajan 
679fda3f52bSGovindarajulu Varadarajan #define VNIC_DEVCMD2_NRESULTS	VNIC_DEVCMD_NARGS
680fda3f52bSGovindarajulu Varadarajan struct devcmd2_result {
681fda3f52bSGovindarajulu Varadarajan 	u64 results[VNIC_DEVCMD2_NRESULTS];
682fda3f52bSGovindarajulu Varadarajan 	u32 pad;
683fda3f52bSGovindarajulu Varadarajan 	u16 completed_index;
684fda3f52bSGovindarajulu Varadarajan 	u8  error;
685fda3f52bSGovindarajulu Varadarajan 	u8  color;
686fda3f52bSGovindarajulu Varadarajan };
687fda3f52bSGovindarajulu Varadarajan 
688373fb087SGovindarajulu Varadarajan #define DEVCMD2_RING_SIZE	32
689373fb087SGovindarajulu Varadarajan #define DEVCMD2_DESC_SIZE	128
690373fb087SGovindarajulu Varadarajan 
691ca029179SGovindarajulu Varadarajan enum overlay_feature_t {
692ca029179SGovindarajulu Varadarajan 	OVERLAY_FEATURE_NVGRE = 1,
693ca029179SGovindarajulu Varadarajan 	OVERLAY_FEATURE_VXLAN,
694ca029179SGovindarajulu Varadarajan 	OVERLAY_FEATURE_MAX,
695ca029179SGovindarajulu Varadarajan };
696ca029179SGovindarajulu Varadarajan 
697ca029179SGovindarajulu Varadarajan enum overlay_ofld_cmd {
698ca029179SGovindarajulu Varadarajan 	OVERLAY_OFFLOAD_ENABLE,
699ca029179SGovindarajulu Varadarajan 	OVERLAY_OFFLOAD_DISABLE,
700ca029179SGovindarajulu Varadarajan 	OVERLAY_OFFLOAD_ENABLE_P2,
701ca029179SGovindarajulu Varadarajan 	OVERLAY_OFFLOAD_MAX,
702ca029179SGovindarajulu Varadarajan };
703ca029179SGovindarajulu Varadarajan 
704ca029179SGovindarajulu Varadarajan #define OVERLAY_CFG_VXLAN_PORT_UPDATE	0
705ca029179SGovindarajulu Varadarajan 
706d1179094SGovindarajulu Varadarajan #define ENIC_VXLAN_INNER_IPV6		BIT(0)
707d1179094SGovindarajulu Varadarajan #define ENIC_VXLAN_OUTER_IPV6		BIT(1)
7087e24c642SGovindarajulu Varadarajan #define ENIC_VXLAN_MULTI_WQ		BIT(2)
709d1179094SGovindarajulu Varadarajan 
710ca029179SGovindarajulu Varadarajan /* Use this enum to get the supported versions for each of these features
711ca029179SGovindarajulu Varadarajan  * If you need to use the devcmd_get_supported_feature_version(), add
712ca029179SGovindarajulu Varadarajan  * the new feature into this enum and install function handler in devcmd.c
713ca029179SGovindarajulu Varadarajan  */
714ca029179SGovindarajulu Varadarajan enum vic_feature_t {
715ca029179SGovindarajulu Varadarajan 	VIC_FEATURE_VXLAN,
716ca029179SGovindarajulu Varadarajan 	VIC_FEATURE_RDMA,
717ca029179SGovindarajulu Varadarajan 	VIC_FEATURE_VXLAN_PATCH,
718ca029179SGovindarajulu Varadarajan 	VIC_FEATURE_MAX,
719ca029179SGovindarajulu Varadarajan };
720ca029179SGovindarajulu Varadarajan 
721a6a5580cSJeff Kirsher #endif /* _VNIC_DEVCMD_H_ */
722