|
@@ -878,6 +878,81 @@ be_read_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+static u32 be_get_msg_level(struct net_device *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;
|
|
|
+}
|
|
|
+
|
|
|
+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 < cfgs->num_modules; i++) {
|
|
|
+ for (j = 0; j < cfgs->module[i].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)
|
|
|
+{
|
|
|
+ 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)
|
|
|
+ return;
|
|
|
+
|
|
|
+ if ((level & NETIF_MSG_HW) != (adapter->msg_enable & NETIF_MSG_HW))
|
|
|
+ be_set_fw_log_level(adapter, level & NETIF_MSG_HW ?
|
|
|
+ FW_LOG_LEVEL_DEFAULT : FW_LOG_LEVEL_FATAL);
|
|
|
+ adapter->msg_enable = level;
|
|
|
+
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
const struct ethtool_ops be_ethtool_ops = {
|
|
|
.get_settings = be_get_settings,
|
|
|
.get_drvinfo = be_get_drvinfo,
|
|
@@ -893,6 +968,8 @@ const struct ethtool_ops be_ethtool_ops = {
|
|
|
.set_pauseparam = be_set_pauseparam,
|
|
|
.get_strings = be_get_stat_strings,
|
|
|
.set_phys_id = be_set_phys_id,
|
|
|
+ .get_msglevel = be_get_msg_level,
|
|
|
+ .set_msglevel = be_set_msg_level,
|
|
|
.get_sset_count = be_get_sset_count,
|
|
|
.get_ethtool_stats = be_get_ethtool_stats,
|
|
|
.get_regs_len = be_get_reg_len,
|