OSDN Git Service

bnxt_en: Add a driver specific gre_ver_check devlink parameter.
authorVasundhara Volam <vasundhara-v.volam@broadcom.com>
Thu, 4 Oct 2018 05:43:50 +0000 (11:13 +0530)
committerDavid S. Miller <davem@davemloft.net>
Thu, 4 Oct 2018 20:49:43 +0000 (13:49 -0700)
This patch adds following driver-specific permanent mode boolean
parameter.

gre_ver_check - Generic Routing Encapsulation(GRE) version check
will be enabled in the device. If disabled, device skips version
checking for GRE packets.

Cc: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h

index de7e74a..8a10e01 100644 (file)
@@ -21,6 +21,11 @@ static const struct devlink_ops bnxt_dl_ops = {
 #endif /* CONFIG_BNXT_SRIOV */
 };
 
+enum bnxt_dl_param_id {
+       BNXT_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
+       BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK,
+};
+
 static const struct bnxt_dl_nvm_param nvm_params[] = {
        {DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV, NVM_OFF_ENABLE_SRIOV,
         BNXT_NVM_SHARED_CFG, 1},
@@ -30,6 +35,8 @@ static const struct bnxt_dl_nvm_param nvm_params[] = {
         NVM_OFF_MSIX_VEC_PER_PF_MAX, BNXT_NVM_SHARED_CFG, 10},
        {DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
         NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7},
+       {BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
+        BNXT_NVM_SHARED_CFG, 1},
 };
 
 static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
@@ -112,9 +119,15 @@ static int bnxt_dl_nvm_param_get(struct devlink *dl, u32 id,
 {
        struct hwrm_nvm_get_variable_input req = {0};
        struct bnxt *bp = bnxt_get_bp_from_dl(dl);
+       int rc;
 
        bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_NVM_GET_VARIABLE, -1, -1);
-       return bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
+       rc = bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
+       if (!rc)
+               if (id == BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK)
+                       ctx->val.vbool = !ctx->val.vbool;
+
+       return rc;
 }
 
 static int bnxt_dl_nvm_param_set(struct devlink *dl, u32 id,
@@ -124,6 +137,10 @@ static int bnxt_dl_nvm_param_set(struct devlink *dl, u32 id,
        struct bnxt *bp = bnxt_get_bp_from_dl(dl);
 
        bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_NVM_SET_VARIABLE, -1, -1);
+
+       if (id == BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK)
+               ctx->val.vbool = !ctx->val.vbool;
+
        return bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
 }
 
@@ -164,6 +181,11 @@ static const struct devlink_param bnxt_dl_params[] = {
                              BIT(DEVLINK_PARAM_CMODE_PERMANENT),
                              bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
                              bnxt_dl_msix_validate),
+       DEVLINK_PARAM_DRIVER(BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK,
+                            "gre_ver_check", DEVLINK_PARAM_TYPE_BOOL,
+                            BIT(DEVLINK_PARAM_CMODE_PERMANENT),
+                            bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
+                            NULL),
 };
 
 int bnxt_dl_register(struct bnxt *bp)
index 2bfd082..5b6b2c7 100644 (file)
@@ -36,6 +36,7 @@ static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
 #define NVM_OFF_MSIX_VEC_PER_PF_MAX    108
 #define NVM_OFF_MSIX_VEC_PER_PF_MIN    114
 #define NVM_OFF_IGNORE_ARI             164
+#define NVM_OFF_DIS_GRE_VER_CHECK      171
 #define NVM_OFF_ENABLE_SRIOV           401
 
 #define BNXT_MSIX_VEC_MAX      1280