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