aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index 3b665f16d2aa..7d51d4733890 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -65,7 +65,22 @@ static struct be_cmd_priv_map cmd_priv_map[] = {
65 CMD_SUBSYSTEM_COMMON, 65 CMD_SUBSYSTEM_COMMON,
66 BE_PRIV_LNKMGMT | BE_PRIV_VHADM | 66 BE_PRIV_LNKMGMT | BE_PRIV_VHADM |
67 BE_PRIV_DEVCFG | BE_PRIV_DEVSEC 67 BE_PRIV_DEVCFG | BE_PRIV_DEVSEC
68 } 68 },
69 {
70 OPCODE_LOWLEVEL_HOST_DDR_DMA,
71 CMD_SUBSYSTEM_LOWLEVEL,
72 BE_PRIV_DEVCFG | BE_PRIV_DEVSEC
73 },
74 {
75 OPCODE_LOWLEVEL_LOOPBACK_TEST,
76 CMD_SUBSYSTEM_LOWLEVEL,
77 BE_PRIV_DEVCFG | BE_PRIV_DEVSEC
78 },
79 {
80 OPCODE_LOWLEVEL_SET_LOOPBACK_MODE,
81 CMD_SUBSYSTEM_LOWLEVEL,
82 BE_PRIV_DEVCFG | BE_PRIV_DEVSEC
83 },
69}; 84};
70 85
71static bool be_cmd_allowed(struct be_adapter *adapter, u8 opcode, u8 subsystem) 86static bool be_cmd_allowed(struct be_adapter *adapter, u8 opcode, u8 subsystem)
@@ -3169,6 +3184,10 @@ int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num,
3169 struct be_cmd_req_set_lmode *req; 3184 struct be_cmd_req_set_lmode *req;
3170 int status; 3185 int status;
3171 3186
3187 if (!be_cmd_allowed(adapter, OPCODE_LOWLEVEL_SET_LOOPBACK_MODE,
3188 CMD_SUBSYSTEM_LOWLEVEL))
3189 return -EPERM;
3190
3172 spin_lock_bh(&adapter->mcc_lock); 3191 spin_lock_bh(&adapter->mcc_lock);
3173 3192
3174 wrb = wrb_from_mccq(adapter); 3193 wrb = wrb_from_mccq(adapter);
@@ -3214,6 +3233,10 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
3214 struct be_cmd_resp_loopback_test *resp; 3233 struct be_cmd_resp_loopback_test *resp;
3215 int status; 3234 int status;
3216 3235
3236 if (!be_cmd_allowed(adapter, OPCODE_LOWLEVEL_LOOPBACK_TEST,
3237 CMD_SUBSYSTEM_LOWLEVEL))
3238 return -EPERM;
3239
3217 spin_lock_bh(&adapter->mcc_lock); 3240 spin_lock_bh(&adapter->mcc_lock);
3218 3241
3219 wrb = wrb_from_mccq(adapter); 3242 wrb = wrb_from_mccq(adapter);
@@ -3260,6 +3283,10 @@ int be_cmd_ddr_dma_test(struct be_adapter *adapter, u64 pattern,
3260 int status; 3283 int status;
3261 int i, j = 0; 3284 int i, j = 0;
3262 3285
3286 if (!be_cmd_allowed(adapter, OPCODE_LOWLEVEL_HOST_DDR_DMA,
3287 CMD_SUBSYSTEM_LOWLEVEL))
3288 return -EPERM;
3289
3263 spin_lock_bh(&adapter->mcc_lock); 3290 spin_lock_bh(&adapter->mcc_lock);
3264 3291
3265 wrb = wrb_from_mccq(adapter); 3292 wrb = wrb_from_mccq(adapter);