Commit e96a41eb authored by David S. Miller's avatar David S. Miller

Merge branch 'be2net'

Sathya Perla says:

====================
be2net: patch set

The following patch set is best suited for net-next as it
contains code-cleanup, support for newer versions of FW cmds and
a few minor fixes. Please apply. Thanks!
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 286ab723 5e511018
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#include "be_hw.h" #include "be_hw.h"
#include "be_roce.h" #include "be_roce.h"
#define DRV_VER "4.9.224.0u" #define DRV_VER "10.0.600.0u"
#define DRV_NAME "be2net" #define DRV_NAME "be2net"
#define BE_NAME "Emulex BladeEngine2" #define BE_NAME "Emulex BladeEngine2"
#define BE3_NAME "Emulex BladeEngine3" #define BE3_NAME "Emulex BladeEngine3"
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#define OC_NAME_BE OC_NAME "(be3)" #define OC_NAME_BE OC_NAME "(be3)"
#define OC_NAME_LANCER OC_NAME "(Lancer)" #define OC_NAME_LANCER OC_NAME "(Lancer)"
#define OC_NAME_SH OC_NAME "(Skyhawk)" #define OC_NAME_SH OC_NAME "(Skyhawk)"
#define DRV_DESC "Emulex OneConnect 10Gbps NIC Driver" #define DRV_DESC "Emulex OneConnect NIC Driver"
#define BE_VENDOR_ID 0x19a2 #define BE_VENDOR_ID 0x19a2
#define EMULEX_VENDOR_ID 0x10df #define EMULEX_VENDOR_ID 0x10df
...@@ -283,7 +283,6 @@ struct be_rx_compl_info { ...@@ -283,7 +283,6 @@ struct be_rx_compl_info {
u32 rss_hash; u32 rss_hash;
u16 vlan_tag; u16 vlan_tag;
u16 pkt_size; u16 pkt_size;
u16 rxq_idx;
u16 port; u16 port;
u8 vlanf; u8 vlanf;
u8 num_rcvd; u8 num_rcvd;
...@@ -493,7 +492,7 @@ struct be_adapter { ...@@ -493,7 +492,7 @@ struct be_adapter {
u16 pvid; u16 pvid;
struct phy_info phy; struct phy_info phy;
u8 wol_cap; u8 wol_cap;
bool wol; bool wol_en;
u32 uc_macs; /* Count of secondary UC MAC programmed */ u32 uc_macs; /* Count of secondary UC MAC programmed */
u16 asic_rev; u16 asic_rev;
u16 qnq_vid; u16 qnq_vid;
......
...@@ -1101,23 +1101,22 @@ static int be_cmd_mccq_ext_create(struct be_adapter *adapter, ...@@ -1101,23 +1101,22 @@ static int be_cmd_mccq_ext_create(struct be_adapter *adapter,
OPCODE_COMMON_MCC_CREATE_EXT, sizeof(*req), wrb, NULL); OPCODE_COMMON_MCC_CREATE_EXT, sizeof(*req), wrb, NULL);
req->num_pages = cpu_to_le16(PAGES_4K_SPANNED(q_mem->va, q_mem->size)); req->num_pages = cpu_to_le16(PAGES_4K_SPANNED(q_mem->va, q_mem->size));
if (lancer_chip(adapter)) { if (BEx_chip(adapter)) {
req->hdr.version = 1;
req->cq_id = cpu_to_le16(cq->id);
AMAP_SET_BITS(struct amap_mcc_context_lancer, ring_size, ctxt,
be_encoded_q_len(mccq->len));
AMAP_SET_BITS(struct amap_mcc_context_lancer, valid, ctxt, 1);
AMAP_SET_BITS(struct amap_mcc_context_lancer, async_cq_id,
ctxt, cq->id);
AMAP_SET_BITS(struct amap_mcc_context_lancer, async_cq_valid,
ctxt, 1);
} else {
AMAP_SET_BITS(struct amap_mcc_context_be, valid, ctxt, 1); AMAP_SET_BITS(struct amap_mcc_context_be, valid, ctxt, 1);
AMAP_SET_BITS(struct amap_mcc_context_be, ring_size, ctxt, AMAP_SET_BITS(struct amap_mcc_context_be, ring_size, ctxt,
be_encoded_q_len(mccq->len)); be_encoded_q_len(mccq->len));
AMAP_SET_BITS(struct amap_mcc_context_be, cq_id, ctxt, cq->id); AMAP_SET_BITS(struct amap_mcc_context_be, cq_id, ctxt, cq->id);
} else {
req->hdr.version = 1;
req->cq_id = cpu_to_le16(cq->id);
AMAP_SET_BITS(struct amap_mcc_context_v1, ring_size, ctxt,
be_encoded_q_len(mccq->len));
AMAP_SET_BITS(struct amap_mcc_context_v1, valid, ctxt, 1);
AMAP_SET_BITS(struct amap_mcc_context_v1, async_cq_id,
ctxt, cq->id);
AMAP_SET_BITS(struct amap_mcc_context_v1, async_cq_valid,
ctxt, 1);
} }
/* Subscribe to Link State and Group 5 Events(bits 1 and 5 set) */ /* Subscribe to Link State and Group 5 Events(bits 1 and 5 set) */
...@@ -1187,7 +1186,7 @@ int be_cmd_mccq_create(struct be_adapter *adapter, ...@@ -1187,7 +1186,7 @@ int be_cmd_mccq_create(struct be_adapter *adapter,
int status; int status;
status = be_cmd_mccq_ext_create(adapter, mccq, cq); status = be_cmd_mccq_ext_create(adapter, mccq, cq);
if (status && !lancer_chip(adapter)) { if (status && BEx_chip(adapter)) {
dev_warn(&adapter->pdev->dev, "Upgrade to F/W ver 2.102.235.0 " dev_warn(&adapter->pdev->dev, "Upgrade to F/W ver 2.102.235.0 "
"or newer to avoid conflicting priorities between NIC " "or newer to avoid conflicting priorities between NIC "
"and FCoE traffic"); "and FCoE traffic");
...@@ -2692,6 +2691,13 @@ int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege, ...@@ -2692,6 +2691,13 @@ int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege,
struct be_cmd_resp_get_fn_privileges *resp = struct be_cmd_resp_get_fn_privileges *resp =
embedded_payload(wrb); embedded_payload(wrb);
*privilege = le32_to_cpu(resp->privilege_mask); *privilege = le32_to_cpu(resp->privilege_mask);
/* In UMC mode FW does not return right privileges.
* Override with correct privilege equivalent to PF.
*/
if (BEx_chip(adapter) && be_is_mc(adapter) &&
be_physfn(adapter))
*privilege = MAX_PRIVILEGES;
} }
err: err:
...@@ -2736,7 +2742,8 @@ int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges, ...@@ -2736,7 +2742,8 @@ int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges,
* If pmac_id is returned, pmac_id_valid is returned as true * If pmac_id is returned, pmac_id_valid is returned as true
*/ */
int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
bool *pmac_id_valid, u32 *pmac_id, u8 domain) bool *pmac_id_valid, u32 *pmac_id, u32 if_handle,
u8 domain)
{ {
struct be_mcc_wrb *wrb; struct be_mcc_wrb *wrb;
struct be_cmd_req_get_mac_list *req; struct be_cmd_req_get_mac_list *req;
...@@ -2774,7 +2781,7 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, ...@@ -2774,7 +2781,7 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
req->mac_type = MAC_ADDRESS_TYPE_NETWORK; req->mac_type = MAC_ADDRESS_TYPE_NETWORK;
if (*pmac_id_valid) { if (*pmac_id_valid) {
req->mac_id = cpu_to_le32(*pmac_id); req->mac_id = cpu_to_le32(*pmac_id);
req->iface_id = cpu_to_le16(adapter->if_handle); req->iface_id = cpu_to_le16(if_handle);
req->perm_override = 0; req->perm_override = 0;
} else { } else {
req->perm_override = 1; req->perm_override = 1;
...@@ -2827,17 +2834,21 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, ...@@ -2827,17 +2834,21 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
return status; return status;
} }
int be_cmd_get_active_mac(struct be_adapter *adapter, u32 curr_pmac_id, u8 *mac) int be_cmd_get_active_mac(struct be_adapter *adapter, u32 curr_pmac_id, u8 *mac,
u32 if_handle, bool active, u32 domain)
{ {
bool active = true;
if (!active)
be_cmd_get_mac_from_list(adapter, mac, &active, &curr_pmac_id,
if_handle, domain);
if (BEx_chip(adapter)) if (BEx_chip(adapter))
return be_cmd_mac_addr_query(adapter, mac, false, return be_cmd_mac_addr_query(adapter, mac, false,
adapter->if_handle, curr_pmac_id); if_handle, curr_pmac_id);
else else
/* Fetch the MAC address using pmac_id */ /* Fetch the MAC address using pmac_id */
return be_cmd_get_mac_from_list(adapter, mac, &active, return be_cmd_get_mac_from_list(adapter, mac, &active,
&curr_pmac_id, 0); &curr_pmac_id,
if_handle, domain);
} }
int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac)
...@@ -2856,7 +2867,7 @@ int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) ...@@ -2856,7 +2867,7 @@ int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac)
adapter->if_handle, 0); adapter->if_handle, 0);
} else { } else {
status = be_cmd_get_mac_from_list(adapter, mac, &pmac_valid, status = be_cmd_get_mac_from_list(adapter, mac, &pmac_valid,
NULL, 0); NULL, adapter->if_handle, 0);
} }
return status; return status;
...@@ -2917,7 +2928,8 @@ int be_cmd_set_mac(struct be_adapter *adapter, u8 *mac, int if_id, u32 dom) ...@@ -2917,7 +2928,8 @@ int be_cmd_set_mac(struct be_adapter *adapter, u8 *mac, int if_id, u32 dom)
int status; int status;
status = be_cmd_get_mac_from_list(adapter, old_mac, &active_mac, status = be_cmd_get_mac_from_list(adapter, old_mac, &active_mac,
&pmac_id, dom); &pmac_id, if_id, dom);
if (!status && active_mac) if (!status && active_mac)
be_cmd_pmac_del(adapter, if_id, pmac_id, dom); be_cmd_pmac_del(adapter, if_id, pmac_id, dom);
...@@ -2997,7 +3009,7 @@ int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid, ...@@ -2997,7 +3009,7 @@ int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid,
ctxt, intf_id); ctxt, intf_id);
AMAP_SET_BITS(struct amap_get_hsw_req_context, pvid_valid, ctxt, 1); AMAP_SET_BITS(struct amap_get_hsw_req_context, pvid_valid, ctxt, 1);
if (!BEx_chip(adapter)) { if (!BEx_chip(adapter) && mode) {
AMAP_SET_BITS(struct amap_get_hsw_req_context, interface_id, AMAP_SET_BITS(struct amap_get_hsw_req_context, interface_id,
ctxt, adapter->hba_port_num); ctxt, adapter->hba_port_num);
AMAP_SET_BITS(struct amap_get_hsw_req_context, pport, ctxt, 1); AMAP_SET_BITS(struct amap_get_hsw_req_context, pport, ctxt, 1);
...@@ -3028,14 +3040,16 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) ...@@ -3028,14 +3040,16 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
{ {
struct be_mcc_wrb *wrb; struct be_mcc_wrb *wrb;
struct be_cmd_req_acpi_wol_magic_config_v1 *req; struct be_cmd_req_acpi_wol_magic_config_v1 *req;
int status; int status = 0;
int payload_len = sizeof(*req);
struct be_dma_mem cmd; struct be_dma_mem cmd;
if (!be_cmd_allowed(adapter, OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG, if (!be_cmd_allowed(adapter, OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG,
CMD_SUBSYSTEM_ETH)) CMD_SUBSYSTEM_ETH))
return -EPERM; return -EPERM;
if (be_is_wol_excluded(adapter))
return status;
if (mutex_lock_interruptible(&adapter->mbox_lock)) if (mutex_lock_interruptible(&adapter->mbox_lock))
return -1; return -1;
...@@ -3060,7 +3074,7 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) ...@@ -3060,7 +3074,7 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH, be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH,
OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG, OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG,
payload_len, wrb, &cmd); sizeof(*req), wrb, &cmd);
req->hdr.version = 1; req->hdr.version = 1;
req->query_options = BE_GET_WOL_CAP; req->query_options = BE_GET_WOL_CAP;
...@@ -3070,13 +3084,9 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) ...@@ -3070,13 +3084,9 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
struct be_cmd_resp_acpi_wol_magic_config_v1 *resp; struct be_cmd_resp_acpi_wol_magic_config_v1 *resp;
resp = (struct be_cmd_resp_acpi_wol_magic_config_v1 *) cmd.va; resp = (struct be_cmd_resp_acpi_wol_magic_config_v1 *) cmd.va;
/* the command could succeed misleadingly on old f/w
* which is not aware of the V1 version. fake an error. */
if (resp->hdr.response_length < payload_len) {
status = -1;
goto err;
}
adapter->wol_cap = resp->wol_settings; adapter->wol_cap = resp->wol_settings;
if (adapter->wol_cap & BE_WOL_CAP)
adapter->wol_en = true;
} }
err: err:
mutex_unlock(&adapter->mbox_lock); mutex_unlock(&adapter->mbox_lock);
...@@ -3085,6 +3095,76 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) ...@@ -3085,6 +3095,76 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
return status; return status;
} }
int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level)
{
struct be_dma_mem extfat_cmd;
struct be_fat_conf_params *cfgs;
int status;
int i, j;
memset(&extfat_cmd, 0, sizeof(struct be_dma_mem));
extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps);
extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size,
&extfat_cmd.dma);
if (!extfat_cmd.va)
return -ENOMEM;
status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd);
if (status)
goto err;
cfgs = (struct be_fat_conf_params *)
(extfat_cmd.va + sizeof(struct be_cmd_resp_hdr));
for (i = 0; i < le32_to_cpu(cfgs->num_modules); i++) {
u32 num_modes = le32_to_cpu(cfgs->module[i].num_modes);
for (j = 0; j < num_modes; j++) {
if (cfgs->module[i].trace_lvl[j].mode == MODE_UART)
cfgs->module[i].trace_lvl[j].dbg_lvl =
cpu_to_le32(level);
}
}
status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs);
err:
pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va,
extfat_cmd.dma);
return status;
}
int be_cmd_get_fw_log_level(struct be_adapter *adapter)
{
struct be_dma_mem extfat_cmd;
struct be_fat_conf_params *cfgs;
int status, j;
int level = 0;
memset(&extfat_cmd, 0, sizeof(struct be_dma_mem));
extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps);
extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size,
&extfat_cmd.dma);
if (!extfat_cmd.va) {
dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n",
__func__);
goto err;
}
status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd);
if (!status) {
cfgs = (struct be_fat_conf_params *)(extfat_cmd.va +
sizeof(struct be_cmd_resp_hdr));
for (j = 0; j < le32_to_cpu(cfgs->module[0].num_modes); j++) {
if (cfgs->module[0].trace_lvl[j].mode == MODE_UART)
level = cfgs->module[0].trace_lvl[j].dbg_lvl;
}
}
pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va,
extfat_cmd.dma);
err:
return level;
}
int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter, int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter,
struct be_dma_mem *cmd) struct be_dma_mem *cmd)
{ {
...@@ -3609,6 +3689,40 @@ int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable) ...@@ -3609,6 +3689,40 @@ int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable)
return status; return status;
} }
/* Uses MBOX */
int be_cmd_get_active_profile(struct be_adapter *adapter, u16 *profile_id)
{
struct be_cmd_req_get_active_profile *req;
struct be_mcc_wrb *wrb;
int status;
if (mutex_lock_interruptible(&adapter->mbox_lock))
return -1;
wrb = wrb_from_mbox(adapter);
if (!wrb) {
status = -EBUSY;
goto err;
}
req = embedded_payload(wrb);
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
OPCODE_COMMON_GET_ACTIVE_PROFILE, sizeof(*req),
wrb, NULL);
status = be_mbox_notify_wait(adapter);
if (!status) {
struct be_cmd_resp_get_active_profile *resp =
embedded_payload(wrb);
*profile_id = le16_to_cpu(resp->active_profile_id);
}
err:
mutex_unlock(&adapter->mbox_lock);
return status;
}
int be_roce_mcc_cmd(void *netdev_handle, void *wrb_payload, int be_roce_mcc_cmd(void *netdev_handle, void *wrb_payload,
int wrb_payload_size, u16 *cmd_status, u16 *ext_status) int wrb_payload_size, u16 *cmd_status, u16 *ext_status)
{ {
......
...@@ -216,6 +216,7 @@ struct be_mcc_mailbox { ...@@ -216,6 +216,7 @@ struct be_mcc_mailbox {
#define OPCODE_COMMON_GET_FUNC_CONFIG 160 #define OPCODE_COMMON_GET_FUNC_CONFIG 160
#define OPCODE_COMMON_GET_PROFILE_CONFIG 164 #define OPCODE_COMMON_GET_PROFILE_CONFIG 164
#define OPCODE_COMMON_SET_PROFILE_CONFIG 165 #define OPCODE_COMMON_SET_PROFILE_CONFIG 165
#define OPCODE_COMMON_GET_ACTIVE_PROFILE 167
#define OPCODE_COMMON_SET_HSW_CONFIG 153 #define OPCODE_COMMON_SET_HSW_CONFIG 153
#define OPCODE_COMMON_GET_FN_PRIVILEGES 170 #define OPCODE_COMMON_GET_FN_PRIVILEGES 170
#define OPCODE_COMMON_READ_OBJECT 171 #define OPCODE_COMMON_READ_OBJECT 171
...@@ -452,7 +453,7 @@ struct amap_mcc_context_be { ...@@ -452,7 +453,7 @@ struct amap_mcc_context_be {
u8 rsvd2[32]; u8 rsvd2[32];
} __packed; } __packed;
struct amap_mcc_context_lancer { struct amap_mcc_context_v1 {
u8 async_cq_id[16]; u8 async_cq_id[16];
u8 ring_size[4]; u8 ring_size[4];
u8 rsvd0[12]; u8 rsvd0[12];
...@@ -476,7 +477,7 @@ struct be_cmd_req_mcc_ext_create { ...@@ -476,7 +477,7 @@ struct be_cmd_req_mcc_ext_create {
u16 num_pages; u16 num_pages;
u16 cq_id; u16 cq_id;
u32 async_event_bitmap[1]; u32 async_event_bitmap[1];
u8 context[sizeof(struct amap_mcc_context_be) / 8]; u8 context[sizeof(struct amap_mcc_context_v1) / 8];
struct phys_addr pages[8]; struct phys_addr pages[8];
} __packed; } __packed;
...@@ -1097,6 +1098,14 @@ struct be_cmd_resp_query_fw_cfg { ...@@ -1097,6 +1098,14 @@ struct be_cmd_resp_query_fw_cfg {
u32 function_caps; u32 function_caps;
}; };
/* Is BE in a multi-channel mode */
static inline bool be_is_mc(struct be_adapter *adapter)
{
return adapter->function_mode & FLEX10_MODE ||
adapter->function_mode & VNIC_MODE ||
adapter->function_mode & UMC_ENABLED;
}
/******************** RSS Config ****************************************/ /******************** RSS Config ****************************************/
/* RSS type Input parameters used to compute RX hash /* RSS type Input parameters used to compute RX hash
* RSS_ENABLE_IPV4 SRC IPv4, DST IPv4 * RSS_ENABLE_IPV4 SRC IPv4, DST IPv4
...@@ -1917,6 +1926,17 @@ struct be_cmd_resp_set_profile_config { ...@@ -1917,6 +1926,17 @@ struct be_cmd_resp_set_profile_config {
struct be_cmd_resp_hdr hdr; struct be_cmd_resp_hdr hdr;
}; };
struct be_cmd_req_get_active_profile {
struct be_cmd_req_hdr hdr;
u32 rsvd;
} __packed;
struct be_cmd_resp_get_active_profile {
struct be_cmd_resp_hdr hdr;
u16 active_profile_id;
u16 next_profile_id;
} __packed;
struct be_cmd_enable_disable_vf { struct be_cmd_enable_disable_vf {
struct be_cmd_req_hdr hdr; struct be_cmd_req_hdr hdr;
u8 enable; u8 enable;
...@@ -2037,8 +2057,10 @@ int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege, ...@@ -2037,8 +2057,10 @@ int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege,
int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges, int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges,
u32 vf_num); u32 vf_num);
int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
bool *pmac_id_active, u32 *pmac_id, u8 domain); bool *pmac_id_active, u32 *pmac_id,
int be_cmd_get_active_mac(struct be_adapter *adapter, u32 pmac_id, u8 *mac); u32 if_handle, u8 domain);
int be_cmd_get_active_mac(struct be_adapter *adapter, u32 pmac_id, u8 *mac,
u32 if_handle, bool active, u32 domain);
int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac); int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac);
int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array, u8 mac_count, int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array, u8 mac_count,
u32 domain); u32 domain);
...@@ -2048,6 +2070,8 @@ int be_cmd_set_hsw_config(struct be_adapter *adapter, u16 pvid, u32 domain, ...@@ -2048,6 +2070,8 @@ int be_cmd_set_hsw_config(struct be_adapter *adapter, u16 pvid, u32 domain,
int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid, u32 domain, int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid, u32 domain,
u16 intf_id, u8 *mode); u16 intf_id, u8 *mode);
int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter); int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter);
int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level);
int be_cmd_get_fw_log_level(struct be_adapter *adapter);
int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter, int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter,
struct be_dma_mem *cmd); struct be_dma_mem *cmd);
int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter, int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter,
...@@ -2063,6 +2087,7 @@ int be_cmd_get_func_config(struct be_adapter *adapter, ...@@ -2063,6 +2087,7 @@ int be_cmd_get_func_config(struct be_adapter *adapter,
int be_cmd_get_profile_config(struct be_adapter *adapter, int be_cmd_get_profile_config(struct be_adapter *adapter,
struct be_resources *res, u8 domain); struct be_resources *res, u8 domain);
int be_cmd_set_profile_config(struct be_adapter *adapter, u32 bps, u8 domain); int be_cmd_set_profile_config(struct be_adapter *adapter, u32 bps, u8 domain);
int be_cmd_get_active_profile(struct be_adapter *adapter, u16 *profile);
int be_cmd_get_if_id(struct be_adapter *adapter, struct be_vf_cfg *vf_cfg, int be_cmd_get_if_id(struct be_adapter *adapter, struct be_vf_cfg *vf_cfg,
int vf_num); int vf_num);
int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain); int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain);
......
...@@ -713,12 +713,13 @@ be_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) ...@@ -713,12 +713,13 @@ be_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
{ {
struct be_adapter *adapter = netdev_priv(netdev); struct be_adapter *adapter = netdev_priv(netdev);
if (be_is_wol_supported(adapter)) { if (adapter->wol_cap & BE_WOL_CAP) {
wol->supported |= WAKE_MAGIC; wol->supported |= WAKE_MAGIC;
if (adapter->wol) if (adapter->wol_en)
wol->wolopts |= WAKE_MAGIC; wol->wolopts |= WAKE_MAGIC;
} else } else {
wol->wolopts = 0; wol->wolopts = 0;
}
memset(&wol->sopass, 0, sizeof(wol->sopass)); memset(&wol->sopass, 0, sizeof(wol->sopass));
} }
...@@ -730,15 +731,15 @@ be_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) ...@@ -730,15 +731,15 @@ be_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
if (wol->wolopts & ~WAKE_MAGIC) if (wol->wolopts & ~WAKE_MAGIC)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (!be_is_wol_supported(adapter)) { if (!(adapter->wol_cap & BE_WOL_CAP)) {
dev_warn(&adapter->pdev->dev, "WOL not supported\n"); dev_warn(&adapter->pdev->dev, "WOL not supported\n");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
if (wol->wolopts & WAKE_MAGIC) if (wol->wolopts & WAKE_MAGIC)
adapter->wol = true; adapter->wol_en = true;
else else
adapter->wol = false; adapter->wol_en = false;
return 0; return 0;
} }
...@@ -904,73 +905,21 @@ static u32 be_get_msg_level(struct net_device *netdev) ...@@ -904,73 +905,21 @@ static u32 be_get_msg_level(struct net_device *netdev)
{ {
struct be_adapter *adapter = netdev_priv(netdev); struct be_adapter *adapter = netdev_priv(netdev);
if (lancer_chip(adapter)) {
dev_err(&adapter->pdev->dev, "Operation not supported\n");
return -EOPNOTSUPP;
}
return adapter->msg_enable; return adapter->msg_enable;
} }
static void be_set_fw_log_level(struct be_adapter *adapter, u32 level)
{
struct be_dma_mem extfat_cmd;
struct be_fat_conf_params *cfgs;
int status;
int i, j;
memset(&extfat_cmd, 0, sizeof(struct be_dma_mem));
extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps);
extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size,
&extfat_cmd.dma);
if (!extfat_cmd.va) {
dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n",
__func__);
goto err;
}
status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd);
if (!status) {
cfgs = (struct be_fat_conf_params *)(extfat_cmd.va +
sizeof(struct be_cmd_resp_hdr));
for (i = 0; i < le32_to_cpu(cfgs->num_modules); i++) {
u32 num_modes = le32_to_cpu(cfgs->module[i].num_modes);
for (j = 0; j < num_modes; j++) {
if (cfgs->module[i].trace_lvl[j].mode ==
MODE_UART)
cfgs->module[i].trace_lvl[j].dbg_lvl =
cpu_to_le32(level);
}
}
status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd,
cfgs);
if (status)
dev_err(&adapter->pdev->dev,
"Message level set failed\n");
} else {
dev_err(&adapter->pdev->dev, "Message level get failed\n");
}
pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va,
extfat_cmd.dma);
err:
return;
}
static void be_set_msg_level(struct net_device *netdev, u32 level) static void be_set_msg_level(struct net_device *netdev, u32 level)
{ {
struct be_adapter *adapter = netdev_priv(netdev); struct be_adapter *adapter = netdev_priv(netdev);
if (lancer_chip(adapter)) {
dev_err(&adapter->pdev->dev, "Operation not supported\n");
return;
}
if (adapter->msg_enable == level) if (adapter->msg_enable == level)
return; return;
if ((level & NETIF_MSG_HW) != (adapter->msg_enable & NETIF_MSG_HW)) if ((level & NETIF_MSG_HW) != (adapter->msg_enable & NETIF_MSG_HW))
be_set_fw_log_level(adapter, level & NETIF_MSG_HW ? if (BEx_chip(adapter))
FW_LOG_LEVEL_DEFAULT : FW_LOG_LEVEL_FATAL); be_cmd_set_fw_log_level(adapter, level & NETIF_MSG_HW ?
FW_LOG_LEVEL_DEFAULT :
FW_LOG_LEVEL_FATAL);
adapter->msg_enable = level; adapter->msg_enable = level;
return; return;
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment