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 2014 Cisco Systems, Inc.  All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * This program is free software; you may redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * it under the terms of the GNU General Public License as published by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * the Free Software Foundation; version 2 of the License.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * SOFTWARE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  */
^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) 	/* nic_cfg in (u32)a0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	CMD_NIC_CFG             = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	/* set struct vnic_devcmd_notify buffer in mem:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	 * in:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	 *   (u64)a0=paddr to notify (set paddr=0 to unset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	 *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	 *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	 * out:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	 *   (u32)a1 = effective size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	CMD_NOTIFY              = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	/* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	CMD_OPEN		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	/* open status:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	 *    out: a0=0 open complete, a0=1 open in progress */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	CMD_OPEN_STATUS		= _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	/* close vnic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	CMD_CLOSE		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	/* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	CMD_INIT		= _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	/* enable virtual link */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	CMD_ENABLE		= _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	/* enable virtual link, waiting variant. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	CMD_ENABLE_WAIT		= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	/* disable virtual link */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	CMD_DISABLE		= _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	/* stats dump all vnics on uplink in mem: (u64)a0=paddr (u32)a1=uif */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	CMD_STATS_DUMP_ALL	= _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	/* init status:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	 *    out: a0=0 init complete, a0=1 init in progress
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	 *         if a0=0, a1=errno */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	CMD_INIT_STATUS		= _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	/* undo initialize of virtual link */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	CMD_DEINIT		= _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	/* check fw capability of a cmd:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	 * in:  (u32)a0=cmd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	 * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	CMD_CAPABILITY      = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	 * Initialization for the devcmd2 interface.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	 * in: (u64) a0=host result buffer physical address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	 * in: (u16) a1=number of entries in result buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) /* flags for CMD_OPEN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define CMD_OPENF_OPROM		0x1	/* open coming from option rom */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) /* flags for CMD_INIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define CMD_INITF_DEFAULT_MAC	0x1	/* init with default mac addr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) /* flags for CMD_PACKET_FILTER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define CMD_PFILTER_DIRECTED		0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define CMD_PFILTER_MULTICAST		0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define CMD_PFILTER_BROADCAST		0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define CMD_PFILTER_PROMISCUOUS		0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define CMD_PFILTER_ALL_MULTICAST	0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) enum vnic_devcmd_status {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	STAT_NONE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	STAT_BUSY = 1 << 0,	/* cmd in progress */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	STAT_ERROR = 1 << 1,	/* last cmd caused error (code in a0) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) enum vnic_devcmd_error {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	ERR_SUCCESS = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	ERR_EINVAL = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	ERR_EFAULT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	ERR_EPERM = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	ERR_EBUSY = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	ERR_ECMDUNKNOWN = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	ERR_EBADSTATE = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	ERR_ENOMEM = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	ERR_ETIMEDOUT = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	ERR_ELINKDOWN = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) struct vnic_devcmd_fw_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	char fw_version[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	char fw_build[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	char hw_version[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	char hw_serial_number[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) struct vnic_devcmd_notify {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	u32 csum;		/* checksum over following words */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	u32 link_state;		/* link up == 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	u32 port_speed;		/* effective port speed (rate limit) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	u32 mtu;		/* MTU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	u32 msglvl;		/* requested driver msg lvl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	u32 uif;		/* uplink interface */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	u32 status;		/* status bits (see VNIC_STF_*) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	u32 error;		/* error code (see ERR_*) for first ERR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	u32 link_down_cnt;	/* running count of link down transitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define VNIC_STF_FATAL_ERR	0x0001	/* fatal fw error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) struct vnic_devcmd_provinfo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	u8 oui[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	u8 data[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)  * Writing cmd register causes STAT_BUSY to get set in status register.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)  * When cmd completes, STAT_BUSY will be cleared.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)  * If cmd completed successfully STAT_ERROR will be clear
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)  * and args registers contain cmd-specific results.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)  * If cmd error, STAT_ERROR will be set and args[0] contains error code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)  * status register is read-only.  While STAT_BUSY is set,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)  * all other register contents are read-only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define VNIC_DEVCMD_NARGS 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) struct vnic_devcmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	u32 status;			/* RO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	u32 cmd;			/* RW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	u64 args[VNIC_DEVCMD_NARGS];	/* RW cmd args (little-endian) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)  * Version 2 of the interface.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)  * Some things are carried over, notably the vnic_devcmd_cmd enum.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)  * Flags for vnic_devcmd2.flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define DEVCMD2_FNORESULT       0x1     /* Don't copy result to host */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #define VNIC_DEVCMD2_NARGS      VNIC_DEVCMD_NARGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) struct vnic_devcmd2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	u16 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	u32 cmd;                /* same command #defines as original */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	u64 args[VNIC_DEVCMD2_NARGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define VNIC_DEVCMD2_NRESULTS   VNIC_DEVCMD_NARGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) struct devcmd2_result {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	u64 results[VNIC_DEVCMD2_NRESULTS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	u16 completed_index;    /* into copy WQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	u8  error;              /* same error codes as original */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	u8  color;              /* 0 or 1 as with completion queues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #define DEVCMD2_RING_SIZE   32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define DEVCMD2_DESC_SIZE   128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define DEVCMD2_RESULTS_SIZE_MAX   ((1 << 16) - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #endif /* _VNIC_DEVCMD_H_ */