diff options
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.c | 29 |
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 | ||
71 | static bool be_cmd_allowed(struct be_adapter *adapter, u8 opcode, u8 subsystem) | 86 | static 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); |