diff options
Diffstat (limited to 'drivers/net/benet/be_cmds.c')
-rw-r--r-- | drivers/net/benet/be_cmds.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c index 0db28b411e87..bf2dc269de12 100644 --- a/drivers/net/benet/be_cmds.c +++ b/drivers/net/benet/be_cmds.c | |||
@@ -71,7 +71,7 @@ static int be_mcc_compl_process(struct be_adapter *adapter, | |||
71 | if (compl_status == MCC_STATUS_SUCCESS) { | 71 | if (compl_status == MCC_STATUS_SUCCESS) { |
72 | if (compl->tag0 == OPCODE_ETH_GET_STATISTICS) { | 72 | if (compl->tag0 == OPCODE_ETH_GET_STATISTICS) { |
73 | struct be_cmd_resp_get_stats *resp = | 73 | struct be_cmd_resp_get_stats *resp = |
74 | adapter->stats.cmd.va; | 74 | adapter->stats_cmd.va; |
75 | be_dws_le_to_cpu(&resp->hw_stats, | 75 | be_dws_le_to_cpu(&resp->hw_stats, |
76 | sizeof(resp->hw_stats)); | 76 | sizeof(resp->hw_stats)); |
77 | netdev_stats_update(adapter); | 77 | netdev_stats_update(adapter); |
@@ -754,7 +754,7 @@ int be_cmd_txq_create(struct be_adapter *adapter, | |||
754 | /* Uses mbox */ | 754 | /* Uses mbox */ |
755 | int be_cmd_rxq_create(struct be_adapter *adapter, | 755 | int be_cmd_rxq_create(struct be_adapter *adapter, |
756 | struct be_queue_info *rxq, u16 cq_id, u16 frag_size, | 756 | struct be_queue_info *rxq, u16 cq_id, u16 frag_size, |
757 | u16 max_frame_size, u32 if_id, u32 rss) | 757 | u16 max_frame_size, u32 if_id, u32 rss, u8 *rss_id) |
758 | { | 758 | { |
759 | struct be_mcc_wrb *wrb; | 759 | struct be_mcc_wrb *wrb; |
760 | struct be_cmd_req_eth_rx_create *req; | 760 | struct be_cmd_req_eth_rx_create *req; |
@@ -785,6 +785,7 @@ int be_cmd_rxq_create(struct be_adapter *adapter, | |||
785 | struct be_cmd_resp_eth_rx_create *resp = embedded_payload(wrb); | 785 | struct be_cmd_resp_eth_rx_create *resp = embedded_payload(wrb); |
786 | rxq->id = le16_to_cpu(resp->id); | 786 | rxq->id = le16_to_cpu(resp->id); |
787 | rxq->created = true; | 787 | rxq->created = true; |
788 | *rss_id = resp->rss_id; | ||
788 | } | 789 | } |
789 | 790 | ||
790 | spin_unlock(&adapter->mbox_lock); | 791 | spin_unlock(&adapter->mbox_lock); |
@@ -1259,7 +1260,8 @@ err: | |||
1259 | } | 1260 | } |
1260 | 1261 | ||
1261 | /* Uses mbox */ | 1262 | /* Uses mbox */ |
1262 | int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num, u32 *mode) | 1263 | int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num, |
1264 | u32 *mode, u32 *caps) | ||
1263 | { | 1265 | { |
1264 | struct be_mcc_wrb *wrb; | 1266 | struct be_mcc_wrb *wrb; |
1265 | struct be_cmd_req_query_fw_cfg *req; | 1267 | struct be_cmd_req_query_fw_cfg *req; |
@@ -1281,6 +1283,7 @@ int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num, u32 *mode) | |||
1281 | struct be_cmd_resp_query_fw_cfg *resp = embedded_payload(wrb); | 1283 | struct be_cmd_resp_query_fw_cfg *resp = embedded_payload(wrb); |
1282 | *port_num = le32_to_cpu(resp->phys_port); | 1284 | *port_num = le32_to_cpu(resp->phys_port); |
1283 | *mode = le32_to_cpu(resp->function_mode); | 1285 | *mode = le32_to_cpu(resp->function_mode); |
1286 | *caps = le32_to_cpu(resp->function_caps); | ||
1284 | } | 1287 | } |
1285 | 1288 | ||
1286 | spin_unlock(&adapter->mbox_lock); | 1289 | spin_unlock(&adapter->mbox_lock); |
@@ -1311,6 +1314,37 @@ int be_cmd_reset_function(struct be_adapter *adapter) | |||
1311 | return status; | 1314 | return status; |
1312 | } | 1315 | } |
1313 | 1316 | ||
1317 | int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, u16 table_size) | ||
1318 | { | ||
1319 | struct be_mcc_wrb *wrb; | ||
1320 | struct be_cmd_req_rss_config *req; | ||
1321 | u32 myhash[10]; | ||
1322 | int status; | ||
1323 | |||
1324 | spin_lock(&adapter->mbox_lock); | ||
1325 | |||
1326 | wrb = wrb_from_mbox(adapter); | ||
1327 | req = embedded_payload(wrb); | ||
1328 | |||
1329 | be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0, | ||
1330 | OPCODE_ETH_RSS_CONFIG); | ||
1331 | |||
1332 | be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH, | ||
1333 | OPCODE_ETH_RSS_CONFIG, sizeof(*req)); | ||
1334 | |||
1335 | req->if_id = cpu_to_le32(adapter->if_handle); | ||
1336 | req->enable_rss = cpu_to_le16(RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4); | ||
1337 | req->cpu_table_size_log2 = cpu_to_le16(fls(table_size) - 1); | ||
1338 | memcpy(req->cpu_table, rsstable, table_size); | ||
1339 | memcpy(req->hash, myhash, sizeof(myhash)); | ||
1340 | be_dws_cpu_to_le(req->hash, sizeof(req->hash)); | ||
1341 | |||
1342 | status = be_mbox_notify_wait(adapter); | ||
1343 | |||
1344 | spin_unlock(&adapter->mbox_lock); | ||
1345 | return status; | ||
1346 | } | ||
1347 | |||
1314 | /* Uses sync mcc */ | 1348 | /* Uses sync mcc */ |
1315 | int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, | 1349 | int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, |
1316 | u8 bcn, u8 sts, u8 state) | 1350 | u8 bcn, u8 sts, u8 state) |