diff options
| author | Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> | 2018-12-19 13:03:21 -0500 |
|---|---|---|
| committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2019-01-15 12:54:59 -0500 |
| commit | 1f9c7840e81ad81dd99cf5ad74843316b935402f (patch) | |
| tree | bc3e46b4a961409344b32f3764de23dd12215fba /drivers/net | |
| parent | 3d505147178b9f310008da4fad14743824d235a9 (diff) | |
ice: Refactor a few Tx scheduler functions
The following functions were refactored to call a new common function,
ice_aqc_send_sched_elem_cmd():
- ice_aq_add_sched_elems()
- ice_aq_delete_sched_elems()
- ice_aq_move_sched_elems()
- ice_aq_query_sched_elems()
- ice_aq_cfg_sched_elems()
- ice_aq_suspend_sched_elems()
- ice_aq_resume_sched_elems()
Signed-off-by: Greg Priest <greg.priest@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | 22 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_sched.c | 122 |
2 files changed, 53 insertions, 91 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h index fcdcd80b18e7..4c7e3af07254 100644 --- a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h +++ b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | |||
| @@ -657,8 +657,13 @@ struct ice_aqc_get_topo { | |||
| 657 | 657 | ||
| 658 | /* Update TSE (indirect 0x0403) | 658 | /* Update TSE (indirect 0x0403) |
| 659 | * Get TSE (indirect 0x0404) | 659 | * Get TSE (indirect 0x0404) |
| 660 | * Add TSE (indirect 0x0401) | ||
| 661 | * Delete TSE (indirect 0x040F) | ||
| 662 | * Move TSE (indirect 0x0408) | ||
| 663 | * Suspend Nodes (indirect 0x0409) | ||
| 664 | * Resume Nodes (indirect 0x040A) | ||
| 660 | */ | 665 | */ |
| 661 | struct ice_aqc_get_cfg_elem { | 666 | struct ice_aqc_sched_elem_cmd { |
| 662 | __le16 num_elem_req; /* Used by commands */ | 667 | __le16 num_elem_req; /* Used by commands */ |
| 663 | __le16 num_elem_resp; /* Used by responses */ | 668 | __le16 num_elem_resp; /* Used by responses */ |
| 664 | __le32 reserved; | 669 | __le32 reserved; |
| @@ -674,18 +679,6 @@ struct ice_aqc_suspend_resume_elem { | |||
| 674 | __le32 teid[1]; | 679 | __le32 teid[1]; |
| 675 | }; | 680 | }; |
| 676 | 681 | ||
| 677 | /* Add TSE (indirect 0x0401) | ||
| 678 | * Delete TSE (indirect 0x040F) | ||
| 679 | * Move TSE (indirect 0x0408) | ||
| 680 | */ | ||
| 681 | struct ice_aqc_add_move_delete_elem { | ||
| 682 | __le16 num_grps_req; | ||
| 683 | __le16 num_grps_updated; | ||
| 684 | __le32 reserved; | ||
| 685 | __le32 addr_high; | ||
| 686 | __le32 addr_low; | ||
| 687 | }; | ||
| 688 | |||
| 689 | struct ice_aqc_elem_info_bw { | 682 | struct ice_aqc_elem_info_bw { |
| 690 | __le16 bw_profile_idx; | 683 | __le16 bw_profile_idx; |
| 691 | __le16 bw_alloc; | 684 | __le16 bw_alloc; |
| @@ -1344,9 +1337,8 @@ struct ice_aq_desc { | |||
| 1344 | struct ice_aqc_get_sw_cfg get_sw_conf; | 1337 | struct ice_aqc_get_sw_cfg get_sw_conf; |
| 1345 | struct ice_aqc_sw_rules sw_rules; | 1338 | struct ice_aqc_sw_rules sw_rules; |
| 1346 | struct ice_aqc_get_topo get_topo; | 1339 | struct ice_aqc_get_topo get_topo; |
| 1347 | struct ice_aqc_get_cfg_elem get_update_elem; | 1340 | struct ice_aqc_sched_elem_cmd sched_elem_cmd; |
| 1348 | struct ice_aqc_query_txsched_res query_sched_res; | 1341 | struct ice_aqc_query_txsched_res query_sched_res; |
| 1349 | struct ice_aqc_add_move_delete_elem add_move_delete_elem; | ||
| 1350 | struct ice_aqc_nvm nvm; | 1342 | struct ice_aqc_nvm nvm; |
| 1351 | struct ice_aqc_pf_vf_msg virt; | 1343 | struct ice_aqc_pf_vf_msg virt; |
| 1352 | struct ice_aqc_get_set_rss_lut get_set_rss_lut; | 1344 | struct ice_aqc_get_set_rss_lut get_set_rss_lut; |
diff --git a/drivers/net/ethernet/intel/ice/ice_sched.c b/drivers/net/ethernet/intel/ice/ice_sched.c index a1681853df2e..99d51990bd54 100644 --- a/drivers/net/ethernet/intel/ice/ice_sched.c +++ b/drivers/net/ethernet/intel/ice/ice_sched.c | |||
| @@ -85,37 +85,59 @@ ice_sched_find_node_by_teid(struct ice_sched_node *start_node, u32 teid) | |||
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | /** | 87 | /** |
| 88 | * ice_aq_query_sched_elems - query scheduler elements | 88 | * ice_aqc_send_sched_elem_cmd - send scheduling elements cmd |
| 89 | * @hw: pointer to the hw struct | 89 | * @hw: pointer to the hw struct |
| 90 | * @elems_req: number of elements to query | 90 | * @cmd_opc: cmd opcode |
| 91 | * @elems_req: number of elements to request | ||
| 91 | * @buf: pointer to buffer | 92 | * @buf: pointer to buffer |
| 92 | * @buf_size: buffer size in bytes | 93 | * @buf_size: buffer size in bytes |
| 93 | * @elems_ret: returns total number of elements returned | 94 | * @elems_resp: returns total number of elements response |
| 94 | * @cd: pointer to command details structure or NULL | 95 | * @cd: pointer to command details structure or NULL |
| 95 | * | 96 | * |
| 96 | * Query scheduling elements (0x0404) | 97 | * This function sends a scheduling elements cmd (cmd_opc) |
| 97 | */ | 98 | */ |
| 98 | static enum ice_status | 99 | static enum ice_status |
| 99 | ice_aq_query_sched_elems(struct ice_hw *hw, u16 elems_req, | 100 | ice_aqc_send_sched_elem_cmd(struct ice_hw *hw, enum ice_adminq_opc cmd_opc, |
| 100 | struct ice_aqc_get_elem *buf, u16 buf_size, | 101 | u16 elems_req, void *buf, u16 buf_size, |
| 101 | u16 *elems_ret, struct ice_sq_cd *cd) | 102 | u16 *elems_resp, struct ice_sq_cd *cd) |
| 102 | { | 103 | { |
| 103 | struct ice_aqc_get_cfg_elem *cmd; | 104 | struct ice_aqc_sched_elem_cmd *cmd; |
| 104 | struct ice_aq_desc desc; | 105 | struct ice_aq_desc desc; |
| 105 | enum ice_status status; | 106 | enum ice_status status; |
| 106 | 107 | ||
| 107 | cmd = &desc.params.get_update_elem; | 108 | cmd = &desc.params.sched_elem_cmd; |
| 108 | ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_get_sched_elems); | 109 | ice_fill_dflt_direct_cmd_desc(&desc, cmd_opc); |
| 109 | cmd->num_elem_req = cpu_to_le16(elems_req); | 110 | cmd->num_elem_req = cpu_to_le16(elems_req); |
| 110 | desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); | 111 | desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); |
| 111 | status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); | 112 | status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); |
| 112 | if (!status && elems_ret) | 113 | if (!status && elems_resp) |
| 113 | *elems_ret = le16_to_cpu(cmd->num_elem_resp); | 114 | *elems_resp = le16_to_cpu(cmd->num_elem_resp); |
| 114 | 115 | ||
| 115 | return status; | 116 | return status; |
| 116 | } | 117 | } |
| 117 | 118 | ||
| 118 | /** | 119 | /** |
| 120 | * ice_aq_query_sched_elems - query scheduler elements | ||
| 121 | * @hw: pointer to the hw struct | ||
| 122 | * @elems_req: number of elements to query | ||
| 123 | * @buf: pointer to buffer | ||
| 124 | * @buf_size: buffer size in bytes | ||
| 125 | * @elems_ret: returns total number of elements returned | ||
| 126 | * @cd: pointer to command details structure or NULL | ||
| 127 | * | ||
| 128 | * Query scheduling elements (0x0404) | ||
| 129 | */ | ||
| 130 | static enum ice_status | ||
| 131 | ice_aq_query_sched_elems(struct ice_hw *hw, u16 elems_req, | ||
| 132 | struct ice_aqc_get_elem *buf, u16 buf_size, | ||
| 133 | u16 *elems_ret, struct ice_sq_cd *cd) | ||
| 134 | { | ||
| 135 | return ice_aqc_send_sched_elem_cmd(hw, ice_aqc_opc_get_sched_elems, | ||
| 136 | elems_req, (void *)buf, buf_size, | ||
| 137 | elems_ret, cd); | ||
| 138 | } | ||
| 139 | |||
| 140 | /** | ||
| 119 | * ice_sched_query_elem - query element information from hw | 141 | * ice_sched_query_elem - query element information from hw |
| 120 | * @hw: pointer to the hw struct | 142 | * @hw: pointer to the hw struct |
| 121 | * @node_teid: node teid to be queried | 143 | * @node_teid: node teid to be queried |
| @@ -218,20 +240,9 @@ ice_aq_delete_sched_elems(struct ice_hw *hw, u16 grps_req, | |||
| 218 | struct ice_aqc_delete_elem *buf, u16 buf_size, | 240 | struct ice_aqc_delete_elem *buf, u16 buf_size, |
| 219 | u16 *grps_del, struct ice_sq_cd *cd) | 241 | u16 *grps_del, struct ice_sq_cd *cd) |
| 220 | { | 242 | { |
| 221 | struct ice_aqc_add_move_delete_elem *cmd; | 243 | return ice_aqc_send_sched_elem_cmd(hw, ice_aqc_opc_delete_sched_elems, |
| 222 | struct ice_aq_desc desc; | 244 | grps_req, (void *)buf, buf_size, |
| 223 | enum ice_status status; | 245 | grps_del, cd); |
| 224 | |||
| 225 | cmd = &desc.params.add_move_delete_elem; | ||
| 226 | ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_delete_sched_elems); | ||
| 227 | desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); | ||
| 228 | cmd->num_grps_req = cpu_to_le16(grps_req); | ||
| 229 | |||
| 230 | status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); | ||
| 231 | if (!status && grps_del) | ||
| 232 | *grps_del = le16_to_cpu(cmd->num_grps_updated); | ||
| 233 | |||
| 234 | return status; | ||
| 235 | } | 246 | } |
| 236 | 247 | ||
| 237 | /** | 248 | /** |
| @@ -442,52 +453,9 @@ ice_aq_add_sched_elems(struct ice_hw *hw, u16 grps_req, | |||
| 442 | struct ice_aqc_add_elem *buf, u16 buf_size, | 453 | struct ice_aqc_add_elem *buf, u16 buf_size, |
| 443 | u16 *grps_added, struct ice_sq_cd *cd) | 454 | u16 *grps_added, struct ice_sq_cd *cd) |
| 444 | { | 455 | { |
| 445 | struct ice_aqc_add_move_delete_elem *cmd; | 456 | return ice_aqc_send_sched_elem_cmd(hw, ice_aqc_opc_add_sched_elems, |
| 446 | struct ice_aq_desc desc; | 457 | grps_req, (void *)buf, buf_size, |
| 447 | enum ice_status status; | 458 | grps_added, cd); |
| 448 | |||
| 449 | cmd = &desc.params.add_move_delete_elem; | ||
| 450 | ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_add_sched_elems); | ||
| 451 | desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); | ||
| 452 | |||
| 453 | cmd->num_grps_req = cpu_to_le16(grps_req); | ||
| 454 | status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); | ||
| 455 | if (!status && grps_added) | ||
| 456 | *grps_added = le16_to_cpu(cmd->num_grps_updated); | ||
| 457 | |||
| 458 | return status; | ||
| 459 | } | ||
| 460 | |||
| 461 | /** | ||
| 462 | * ice_suspend_resume_elems - suspend/resume scheduler elements | ||
| 463 | * @hw: pointer to the hw struct | ||
| 464 | * @elems_req: number of elements to suspend | ||
| 465 | * @buf: pointer to buffer | ||
| 466 | * @buf_size: buffer size in bytes | ||
| 467 | * @elems_ret: returns total number of elements suspended | ||
| 468 | * @cd: pointer to command details structure or NULL | ||
| 469 | * @cmd_code: command code for suspend or resume | ||
| 470 | * | ||
| 471 | * suspend/resume scheduler elements | ||
| 472 | */ | ||
| 473 | static enum ice_status | ||
| 474 | ice_suspend_resume_elems(struct ice_hw *hw, u16 elems_req, | ||
| 475 | struct ice_aqc_suspend_resume_elem *buf, u16 buf_size, | ||
| 476 | u16 *elems_ret, struct ice_sq_cd *cd, | ||
| 477 | enum ice_adminq_opc cmd_code) | ||
| 478 | { | ||
| 479 | struct ice_aqc_get_cfg_elem *cmd; | ||
| 480 | struct ice_aq_desc desc; | ||
| 481 | enum ice_status status; | ||
| 482 | |||
| 483 | cmd = &desc.params.get_update_elem; | ||
| 484 | ice_fill_dflt_direct_cmd_desc(&desc, cmd_code); | ||
| 485 | cmd->num_elem_req = cpu_to_le16(elems_req); | ||
| 486 | desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); | ||
| 487 | status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); | ||
| 488 | if (!status && elems_ret) | ||
| 489 | *elems_ret = le16_to_cpu(cmd->num_elem_resp); | ||
| 490 | return status; | ||
| 491 | } | 459 | } |
| 492 | 460 | ||
| 493 | /** | 461 | /** |
| @@ -506,8 +474,9 @@ ice_aq_suspend_sched_elems(struct ice_hw *hw, u16 elems_req, | |||
| 506 | struct ice_aqc_suspend_resume_elem *buf, | 474 | struct ice_aqc_suspend_resume_elem *buf, |
| 507 | u16 buf_size, u16 *elems_ret, struct ice_sq_cd *cd) | 475 | u16 buf_size, u16 *elems_ret, struct ice_sq_cd *cd) |
| 508 | { | 476 | { |
| 509 | return ice_suspend_resume_elems(hw, elems_req, buf, buf_size, elems_ret, | 477 | return ice_aqc_send_sched_elem_cmd(hw, ice_aqc_opc_suspend_sched_elems, |
| 510 | cd, ice_aqc_opc_suspend_sched_elems); | 478 | elems_req, (void *)buf, buf_size, |
| 479 | elems_ret, cd); | ||
| 511 | } | 480 | } |
| 512 | 481 | ||
| 513 | /** | 482 | /** |
| @@ -526,8 +495,9 @@ ice_aq_resume_sched_elems(struct ice_hw *hw, u16 elems_req, | |||
| 526 | struct ice_aqc_suspend_resume_elem *buf, | 495 | struct ice_aqc_suspend_resume_elem *buf, |
| 527 | u16 buf_size, u16 *elems_ret, struct ice_sq_cd *cd) | 496 | u16 buf_size, u16 *elems_ret, struct ice_sq_cd *cd) |
| 528 | { | 497 | { |
| 529 | return ice_suspend_resume_elems(hw, elems_req, buf, buf_size, elems_ret, | 498 | return ice_aqc_send_sched_elem_cmd(hw, ice_aqc_opc_resume_sched_elems, |
| 530 | cd, ice_aqc_opc_resume_sched_elems); | 499 | elems_req, (void *)buf, buf_size, |
| 500 | elems_ret, cd); | ||
| 531 | } | 501 | } |
| 532 | 502 | ||
| 533 | /** | 503 | /** |
