| 47 | } |
| 48 | |
| 49 | static void |
| 50 | bnxt_process_default_vnic_change(struct bnxt *bp, |
| 51 | struct hwrm_async_event_cmpl *async_cmp) |
| 52 | { |
| 53 | uint16_t vnic_state, vf_fid, vf_id; |
| 54 | struct bnxt_representor *vf_rep_bp; |
| 55 | struct rte_eth_dev *eth_dev; |
| 56 | bool vfr_found = false; |
| 57 | uint32_t event_data; |
| 58 | |
| 59 | if (!BNXT_TRUFLOW_EN(bp)) |
| 60 | return; |
| 61 | |
| 62 | PMD_DRV_LOG(INFO, "Default vnic change async event received\n"); |
| 63 | event_data = rte_le_to_cpu_32(async_cmp->event_data1); |
| 64 | |
| 65 | vnic_state = (event_data & BNXT_DEFAULT_VNIC_STATE_MASK) >> |
| 66 | BNXT_DEFAULT_VNIC_STATE_SFT; |
| 67 | if (vnic_state != BNXT_DEFAULT_VNIC_ALLOC) |
| 68 | return; |
| 69 | |
| 70 | if (!bp->rep_info) |
| 71 | return; |
| 72 | |
| 73 | vf_fid = (event_data & BNXT_DEFAULT_VNIC_CHANGE_VF_ID_MASK) >> |
| 74 | BNXT_DEFAULT_VNIC_CHANGE_VF_ID_SFT; |
| 75 | PMD_DRV_LOG(INFO, "async event received vf_id 0x%x\n", vf_fid); |
| 76 | |
| 77 | for (vf_id = 0; vf_id < BNXT_MAX_VF_REPS(bp); vf_id++) { |
| 78 | eth_dev = bp->rep_info[vf_id].vfr_eth_dev; |
| 79 | if (!eth_dev) |
| 80 | continue; |
| 81 | vf_rep_bp = eth_dev->data->dev_private; |
| 82 | if (vf_rep_bp && |
| 83 | vf_rep_bp->fw_fid == vf_fid) { |
| 84 | vfr_found = true; |
| 85 | break; |
| 86 | } |
| 87 | } |
| 88 | if (!vfr_found) |
| 89 | return; |
| 90 | |
| 91 | bnxt_rep_dev_start_op(eth_dev); |
| 92 | } |
| 93 | |
| 94 | static void bnxt_handle_event_error_report(struct bnxt *bp, |
| 95 | uint32_t data1, |
no test coverage detected