mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-04 12:54:37 +08:00
liquidio: fix for vf mac addr command sent to nic firmware
Change to support host<->firmware command return value. Fix for vf mac addr state command. 1. Added support for firmware commands to return a value: - previously, the returned code overlapped with host codes, thus commands were only returning 0 (success) or -1 (interpreted as timeout) - per 'response_manager.h', the error codes are split into two fields (major/minor) now, firmware commands are grouped into their own 'major' group, separate from the host's 'major' group, which allow f/w commands to return any 16-bit value 2. The command to set vf mac addr was logging a success message even if command failed. Now command uses a callback function to log the status message. 3. The command to set vf mac addr was not logging a message when set via the host 'ip' command. Now, the callback function will log an appropriate message. Signed-off-by: Rick Farrington <ricardo.farrington@cavium.com> Signed-off-by: Felix Manlunas <felix.manlunas@cavium.com> Signed-off-by: Derek Chickles <derek.chickles@cavium.com> Signed-off-by: Satanand Burla <satananda.burla@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
71dbc3414c
commit
9549c6c872
@ -131,11 +131,20 @@ void liquidio_link_ctrl_cmd_completion(void *nctrl_ptr)
|
||||
|
||||
case OCTNET_CMD_CHANGE_MACADDR:
|
||||
mac = ((u8 *)&nctrl->udd[0]) + 2;
|
||||
netif_info(lio, probe, lio->netdev,
|
||||
"MACAddr changed to %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
|
||||
mac[0], mac[1],
|
||||
mac[2], mac[3],
|
||||
mac[4], mac[5]);
|
||||
if (nctrl->ncmd.s.param1) {
|
||||
/* vfidx is 0 based, but vf_num (param1) is 1 based */
|
||||
int vfidx = nctrl->ncmd.s.param1 - 1;
|
||||
bool mac_is_admin_assigned = nctrl->ncmd.s.param2;
|
||||
|
||||
if (mac_is_admin_assigned)
|
||||
netif_info(lio, probe, lio->netdev,
|
||||
"MAC Address %pM is configured for VF %d\n",
|
||||
mac, vfidx);
|
||||
} else {
|
||||
netif_info(lio, probe, lio->netdev,
|
||||
" MACAddr changed to %pM\n",
|
||||
mac);
|
||||
}
|
||||
break;
|
||||
|
||||
case OCTNET_CMD_CHANGE_MTU:
|
||||
|
@ -3619,7 +3619,8 @@ static int __liquidio_set_vf_mac(struct net_device *netdev, int vfidx,
|
||||
nctrl.ncmd.s.param2 = (is_admin_assigned ? 1 : 0);
|
||||
nctrl.ncmd.s.more = 1;
|
||||
nctrl.iq_no = lio->linfo.txpciq[0].s.q_no;
|
||||
nctrl.cb_fn = 0;
|
||||
nctrl.netpndev = (u64)netdev;
|
||||
nctrl.cb_fn = liquidio_link_ctrl_cmd_completion;
|
||||
nctrl.wait_time = LIO_CMD_WAIT_TM;
|
||||
|
||||
nctrl.udd[0] = 0;
|
||||
|
@ -101,8 +101,15 @@ int lio_process_ordered_list(struct octeon_device *octeon_dev,
|
||||
if ((status64 & 0xff) != 0xff) {
|
||||
octeon_swap_8B_data(&status64, 1);
|
||||
if (((status64 & 0xff) != 0xff)) {
|
||||
status = (u32)(status64 &
|
||||
0xffffffffULL);
|
||||
/* retrieve 16-bit firmware status */
|
||||
status = (u32)(status64 & 0xffffULL);
|
||||
if (status) {
|
||||
status =
|
||||
FIRMWARE_STATUS_CODE(status);
|
||||
} else {
|
||||
/* i.e. no error */
|
||||
status = OCTEON_REQUEST_DONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (force_quit || (sc->timeout &&
|
||||
|
@ -78,6 +78,8 @@ enum {
|
||||
|
||||
/*------------ Error codes used by host driver -----------------*/
|
||||
#define DRIVER_MAJOR_ERROR_CODE 0x0000
|
||||
/*------ Error codes used by firmware (bits 15..0 set by firmware */
|
||||
#define FIRMWARE_MAJOR_ERROR_CODE 0x0001
|
||||
|
||||
/** A value of 0x00000000 indicates no error i.e. success */
|
||||
#define DRIVER_ERROR_NONE 0x00000000
|
||||
@ -116,6 +118,9 @@ enum {
|
||||
|
||||
};
|
||||
|
||||
#define FIRMWARE_STATUS_CODE(status) \
|
||||
((FIRMWARE_MAJOR_ERROR_CODE << 16) | (status))
|
||||
|
||||
/** Initialize the response lists. The number of response lists to create is
|
||||
* given by count.
|
||||
* @param octeon_dev - the octeon device structure.
|
||||
|
Loading…
Reference in New Issue
Block a user