0001
0002
0003
0004 #ifndef _VNIC_DEVCMD_H_
0005 #define _VNIC_DEVCMD_H_
0006
0007 #define _CMD_NBITS 14
0008 #define _CMD_VTYPEBITS 10
0009 #define _CMD_FLAGSBITS 6
0010 #define _CMD_DIRBITS 2
0011
0012 #define _CMD_NMASK ((1 << _CMD_NBITS)-1)
0013 #define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1)
0014 #define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1)
0015 #define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1)
0016
0017 #define _CMD_NSHIFT 0
0018 #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
0019 #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
0020 #define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
0021
0022
0023
0024
0025 #define _CMD_DIR_NONE 0U
0026 #define _CMD_DIR_WRITE 1U
0027 #define _CMD_DIR_READ 2U
0028 #define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ)
0029
0030
0031
0032
0033 #define _CMD_FLAGS_NONE 0U
0034 #define _CMD_FLAGS_NOWAIT 1U
0035
0036
0037
0038
0039 #define _CMD_VTYPE_NONE 0U
0040 #define _CMD_VTYPE_ENET 1U
0041 #define _CMD_VTYPE_FC 2U
0042 #define _CMD_VTYPE_SCSI 4U
0043 #define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
0044
0045
0046
0047
0048 #define _CMDCF(dir, flags, vtype, nr) \
0049 (((dir) << _CMD_DIRSHIFT) | \
0050 ((flags) << _CMD_FLAGSSHIFT) | \
0051 ((vtype) << _CMD_VTYPESHIFT) | \
0052 ((nr) << _CMD_NSHIFT))
0053 #define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr)
0054 #define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
0055
0056
0057
0058
0059 #define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
0060 #define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
0061 #define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
0062 #define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
0063
0064 enum vnic_devcmd_cmd {
0065 CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
0066
0067
0068 CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
0069
0070
0071
0072
0073 CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
0074
0075
0076 CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
0077
0078
0079
0080 CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
0081
0082
0083 CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093 CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
0094
0095
0096 CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
0097
0098
0099
0100 CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
0101
0102
0103 CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
0104
0105
0106 CMD_INIT = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
0107
0108
0109 CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
0110
0111
0112 CMD_ENABLE_WAIT = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
0113
0114
0115 CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
0116
0117
0118 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
0119
0120
0121
0122
0123 CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
0124
0125
0126 CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
0127
0128
0129
0130
0131 CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
0132
0133
0134
0135
0136
0137
0138 CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
0139 };
0140
0141
0142 #define CMD_OPENF_OPROM 0x1
0143
0144
0145 #define CMD_INITF_DEFAULT_MAC 0x1
0146
0147
0148 #define CMD_PFILTER_DIRECTED 0x01
0149 #define CMD_PFILTER_MULTICAST 0x02
0150 #define CMD_PFILTER_BROADCAST 0x04
0151 #define CMD_PFILTER_PROMISCUOUS 0x08
0152 #define CMD_PFILTER_ALL_MULTICAST 0x10
0153
0154 enum vnic_devcmd_status {
0155 STAT_NONE = 0,
0156 STAT_BUSY = 1 << 0,
0157 STAT_ERROR = 1 << 1,
0158 };
0159
0160 enum vnic_devcmd_error {
0161 ERR_SUCCESS = 0,
0162 ERR_EINVAL = 1,
0163 ERR_EFAULT = 2,
0164 ERR_EPERM = 3,
0165 ERR_EBUSY = 4,
0166 ERR_ECMDUNKNOWN = 5,
0167 ERR_EBADSTATE = 6,
0168 ERR_ENOMEM = 7,
0169 ERR_ETIMEDOUT = 8,
0170 ERR_ELINKDOWN = 9,
0171 };
0172
0173 struct vnic_devcmd_fw_info {
0174 char fw_version[32];
0175 char fw_build[32];
0176 char hw_version[32];
0177 char hw_serial_number[32];
0178 };
0179
0180 struct vnic_devcmd_notify {
0181 u32 csum;
0182
0183 u32 link_state;
0184 u32 port_speed;
0185 u32 mtu;
0186 u32 msglvl;
0187 u32 uif;
0188 u32 status;
0189 u32 error;
0190 u32 link_down_cnt;
0191 };
0192 #define VNIC_STF_FATAL_ERR 0x0001
0193
0194 struct vnic_devcmd_provinfo {
0195 u8 oui[3];
0196 u8 type;
0197 u8 data[];
0198 };
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214 #define VNIC_DEVCMD_NARGS 15
0215 struct vnic_devcmd {
0216 u32 status;
0217 u32 cmd;
0218 u64 args[VNIC_DEVCMD_NARGS];
0219 };
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232 #define DEVCMD2_FNORESULT 0x1
0233
0234 #define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS
0235 struct vnic_devcmd2 {
0236 u16 pad;
0237 u16 flags;
0238 u32 cmd;
0239 u64 args[VNIC_DEVCMD2_NARGS];
0240 };
0241
0242 #define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS
0243 struct devcmd2_result {
0244 u64 results[VNIC_DEVCMD2_NRESULTS];
0245 u32 pad;
0246 u16 completed_index;
0247 u8 error;
0248 u8 color;
0249 };
0250
0251 #define DEVCMD2_RING_SIZE 32
0252 #define DEVCMD2_DESC_SIZE 128
0253
0254 #define DEVCMD2_RESULTS_SIZE_MAX ((1 << 16) - 1)
0255
0256 #endif