Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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