Lines Matching +full:tcam +full:- +full:based

1 // SPDX-License-Identifier: GPL-2.0
9 * boost tcam entries. The metadata labels names that match the following
26 * ice_verify_pkg - verify package
41 if (pkg->pkg_format_ver.major != ICE_PKG_FMT_VER_MAJ || in ice_verify_pkg()
42 pkg->pkg_format_ver.minor != ICE_PKG_FMT_VER_MNR || in ice_verify_pkg()
43 pkg->pkg_format_ver.update != ICE_PKG_FMT_VER_UPD || in ice_verify_pkg()
44 pkg->pkg_format_ver.draft != ICE_PKG_FMT_VER_DFT) in ice_verify_pkg()
48 seg_count = le32_to_cpu(pkg->seg_count); in ice_verify_pkg()
58 u32 off = le32_to_cpu(pkg->seg_offset[i]); in ice_verify_pkg()
68 if (len < off + le32_to_cpu(seg->seg_size)) in ice_verify_pkg()
76 * ice_free_seg - free package segment pointer
84 if (hw->pkg_copy) { in ice_free_seg()
85 devm_kfree(ice_hw_to_dev(hw), hw->pkg_copy); in ice_free_seg()
86 hw->pkg_copy = NULL; in ice_free_seg()
87 hw->pkg_size = 0; in ice_free_seg()
89 hw->seg = NULL; in ice_free_seg()
93 * ice_chk_pkg_version - check package version for compatibility with driver
103 if (pkg_ver->major > ICE_PKG_SUPP_VER_MAJ || in ice_chk_pkg_version()
104 (pkg_ver->major == ICE_PKG_SUPP_VER_MAJ && in ice_chk_pkg_version()
105 pkg_ver->minor > ICE_PKG_SUPP_VER_MNR)) in ice_chk_pkg_version()
107 else if (pkg_ver->major < ICE_PKG_SUPP_VER_MAJ || in ice_chk_pkg_version()
108 (pkg_ver->major == ICE_PKG_SUPP_VER_MAJ && in ice_chk_pkg_version()
109 pkg_ver->minor < ICE_PKG_SUPP_VER_MNR)) in ice_chk_pkg_version()
127 hdr = (struct ice_buf_hdr *)buf->buf; in ice_pkg_val_buf()
129 section_count = le16_to_cpu(hdr->section_count); in ice_pkg_val_buf()
133 data_end = le16_to_cpu(hdr->data_end); in ice_pkg_val_buf()
149 (ice_seg->device_table + le32_to_cpu(ice_seg->device_table_count)); in ice_find_buf_table()
151 return (__force struct ice_buf_table *)(nvms->vers + in ice_find_buf_table()
152 le32_to_cpu(nvms->table_count)); in ice_find_buf_table()
161 * call is made with the ice_seg parameter non-NULL; on subsequent calls,
171 state->buf_table = ice_find_buf_table(ice_seg); in ice_pkg_enum_buf()
172 if (!state->buf_table) in ice_pkg_enum_buf()
175 state->buf_idx = 0; in ice_pkg_enum_buf()
176 return ice_pkg_val_buf(state->buf_table->buf_array); in ice_pkg_enum_buf()
179 if (++state->buf_idx < le32_to_cpu(state->buf_table->buf_count)) in ice_pkg_enum_buf()
180 return ice_pkg_val_buf(state->buf_table->buf_array + in ice_pkg_enum_buf()
181 state->buf_idx); in ice_pkg_enum_buf()
197 if (!ice_seg && !state->buf) in ice_pkg_advance_sect()
200 if (!ice_seg && state->buf) in ice_pkg_advance_sect()
201 if (++state->sect_idx < le16_to_cpu(state->buf->section_count)) in ice_pkg_advance_sect()
204 state->buf = ice_pkg_enum_buf(ice_seg, state); in ice_pkg_advance_sect()
205 if (!state->buf) in ice_pkg_advance_sect()
209 state->sect_idx = 0; in ice_pkg_advance_sect()
220 * ice segment. The first call is made with the ice_seg parameter non-NULL;
231 state->type = sect_type; in ice_pkg_enum_section()
237 while (state->buf->section_entry[state->sect_idx].type != in ice_pkg_enum_section()
238 cpu_to_le32(state->type)) in ice_pkg_enum_section()
243 offset = le16_to_cpu(state->buf->section_entry[state->sect_idx].offset); in ice_pkg_enum_section()
247 size = le16_to_cpu(state->buf->section_entry[state->sect_idx].size); in ice_pkg_enum_section()
255 state->sect_type = in ice_pkg_enum_section()
256 le32_to_cpu(state->buf->section_entry[state->sect_idx].type); in ice_pkg_enum_section()
259 state->sect = in ice_pkg_enum_section()
260 ((u8 *)state->buf) + in ice_pkg_enum_section()
261 le16_to_cpu(state->buf->section_entry[state->sect_idx].offset); in ice_pkg_enum_section()
263 return state->sect; in ice_pkg_enum_section()
275 * the ice segment. The first call is made with the ice_seg parameter non-NULL;
306 state->entry_idx = 0; in ice_pkg_enum_entry()
307 state->handler = handler; in ice_pkg_enum_entry()
309 state->entry_idx++; in ice_pkg_enum_entry()
312 if (!state->handler) in ice_pkg_enum_entry()
316 entry = state->handler(state->sect_type, state->sect, state->entry_idx, in ice_pkg_enum_entry()
323 state->entry_idx = 0; in ice_pkg_enum_entry()
324 entry = state->handler(state->sect_type, state->sect, in ice_pkg_enum_entry()
325 state->entry_idx, offset); in ice_pkg_enum_entry()
349 if (index >= le16_to_cpu(fv_section->count)) in ice_sw_fv_handler()
357 *offset = le16_to_cpu(fv_section->base_offset) + index; in ice_sw_fv_handler()
358 return fv_section->fv + index; in ice_sw_fv_handler()
362 * ice_get_prof_index_max - get the max profile index for used profile
380 if (!hw->seg) in ice_get_prof_index_max()
381 return -EINVAL; in ice_get_prof_index_max()
383 ice_seg = hw->seg; in ice_get_prof_index_max()
395 for (j = 0; j < hw->blk[ICE_BLK_SW].es.fvw; j++) in ice_get_prof_index_max()
396 if (fv->ew[j].prot_id != ICE_PROT_INVALID || in ice_get_prof_index_max()
397 fv->ew[j].off != ICE_FV_OFFSET_INVAL) in ice_get_prof_index_max()
406 hw->switch_info->max_used_prof_index = max_prof_index; in ice_get_prof_index_max()
412 * ice_get_ddp_pkg_state - get DDP pkg state after download
419 if (hw->pkg_ver.major == hw->active_pkg_ver.major && in ice_get_ddp_pkg_state()
420 hw->pkg_ver.minor == hw->active_pkg_ver.minor && in ice_get_ddp_pkg_state()
421 hw->pkg_ver.update == hw->active_pkg_ver.update && in ice_get_ddp_pkg_state()
422 hw->pkg_ver.draft == hw->active_pkg_ver.draft && in ice_get_ddp_pkg_state()
423 !memcmp(hw->pkg_name, hw->active_pkg_name, sizeof(hw->pkg_name))) { in ice_get_ddp_pkg_state()
428 } else if (hw->active_pkg_ver.major != ICE_PKG_SUPP_VER_MAJ || in ice_get_ddp_pkg_state()
429 hw->active_pkg_ver.minor != ICE_PKG_SUPP_VER_MNR) { in ice_get_ddp_pkg_state()
431 } else if (hw->active_pkg_ver.major == ICE_PKG_SUPP_VER_MAJ && in ice_get_ddp_pkg_state()
432 hw->active_pkg_ver.minor == ICE_PKG_SUPP_VER_MNR) { in ice_get_ddp_pkg_state()
440 * ice_init_pkg_regs - initialize additional package registers
449 /* setup Switch block input mask, which is 48-bits in two parts */ in ice_init_pkg_regs()
458 * @index: index of the Marker PType TCAM entry to be returned
459 * @offset: pointer to receive absolute offset, always 0 for ptype TCAM sections
462 * Handles enumeration of individual Marker PType TCAM entries.
479 if (index >= le16_to_cpu(marker_ptype->count)) in ice_marker_ptype_tcam_handler()
482 return marker_ptype->tcam + index; in ice_marker_ptype_tcam_handler()
493 if (hw->dvm_upd.count < ICE_DVM_MAX_ENTRIES) { in ice_add_dvm_hint()
494 hw->dvm_upd.tbl[hw->dvm_upd.count].boost_addr = val; in ice_add_dvm_hint()
495 hw->dvm_upd.tbl[hw->dvm_upd.count].enable = enable; in ice_add_dvm_hint()
496 hw->dvm_upd.count++; in ice_add_dvm_hint()
508 if (hw->tnl.count < ICE_TUNNEL_MAX_ENTRIES) { in ice_add_tunnel_hint()
519 * character ('0' - '7') will be located where our in ice_add_tunnel_hint()
522 if ((label_name[len] - '0') == hw->pf_id) { in ice_add_tunnel_hint()
523 hw->tnl.tbl[hw->tnl.count].type = tnls[i].type; in ice_add_tunnel_hint()
524 hw->tnl.tbl[hw->tnl.count].valid = false; in ice_add_tunnel_hint()
525 hw->tnl.tbl[hw->tnl.count].boost_addr = val; in ice_add_tunnel_hint()
526 hw->tnl.tbl[hw->tnl.count].port = 0; in ice_add_tunnel_hint()
527 hw->tnl.count++; in ice_add_tunnel_hint()
559 if (index >= le16_to_cpu(labels->count)) in ice_label_enum_handler()
562 return labels->label + index; in ice_label_enum_handler()
591 *value = le16_to_cpu(label->value); in ice_enum_labels()
592 return label->name; in ice_enum_labels()
599 * @index: index of the boost TCAM entry to be returned
600 * @offset: pointer to receive absolute offset, always 0 for boost TCAM sections
603 * Handles enumeration of individual boost TCAM entries.
623 if (index >= le16_to_cpu(boost->count)) in ice_boost_tcam_handler()
626 return boost->tcam + index; in ice_boost_tcam_handler()
631 * @ice_seg: pointer to the ice segment (non-NULL)
632 * @addr: Boost TCAM address of entry to search for
635 * Finds a particular Boost TCAM entry and returns a pointer to that entry
642 struct ice_boost_tcam_entry *tcam; in ice_find_boost_entry() local
648 return -EINVAL; in ice_find_boost_entry()
651 tcam = ice_pkg_enum_entry(ice_seg, &state, in ice_find_boost_entry()
654 if (tcam && le16_to_cpu(tcam->addr) == addr) { in ice_find_boost_entry()
655 *entry = tcam; in ice_find_boost_entry()
660 } while (tcam); in ice_find_boost_entry()
663 return -EIO; in ice_find_boost_entry()
667 * ice_is_init_pkg_successful - check if DDP init was successful
699 buf->data_end = in ice_pkg_buf_alloc()
725 * ice_get_sw_prof_type - determine switch profile type
741 for (i = 0; i < hw->blk[ICE_BLK_SW].es.fvw; i++) { in ice_get_sw_prof_type()
743 if (fv->ew[i].prot_id == (u8)ICE_PROT_UDP_OF && in ice_get_sw_prof_type()
744 fv->ew[i].off == ICE_VNI_OFFSET) in ice_get_sw_prof_type()
748 if (fv->ew[i].prot_id == (u8)ICE_PROT_GRE_OF) in ice_get_sw_prof_type()
756 * ice_get_sw_fv_bitmap - Get switch field vector bitmap based on profile type
775 ice_seg = hw->seg; in ice_get_sw_fv_bitmap()
820 if (!lkups->n_val_words || !hw->seg) in ice_get_sw_fv_list()
821 return -EINVAL; in ice_get_sw_fv_list()
823 ice_seg = hw->seg; in ice_get_sw_fv_list()
839 for (i = 0; i < lkups->n_val_words; i++) { in ice_get_sw_fv_list()
842 for (j = 0; j < hw->blk[ICE_BLK_SW].es.fvw; j++) in ice_get_sw_fv_list()
843 if (fv->ew[j].prot_id == in ice_get_sw_fv_list()
844 lkups->fv_words[i].prot_id && in ice_get_sw_fv_list()
845 fv->ew[j].off == lkups->fv_words[i].off) in ice_get_sw_fv_list()
847 if (j >= hw->blk[ICE_BLK_SW].es.fvw) in ice_get_sw_fv_list()
849 if (i + 1 == lkups->n_val_words) { in ice_get_sw_fv_list()
854 fvl->fv_ptr = fv; in ice_get_sw_fv_list()
855 fvl->profile_id = offset; in ice_get_sw_fv_list()
856 list_add(&fvl->list_entry, fv_list); in ice_get_sw_fv_list()
864 return -EIO; in ice_get_sw_fv_list()
871 list_del(&fvl->list_entry); in ice_get_sw_fv_list()
875 return -ENOMEM; in ice_get_sw_fv_list()
879 * ice_init_prof_result_bm - Initialize the profile result index bitmap
890 if (!hw->seg) in ice_init_prof_result_bm()
893 ice_seg = hw->seg; in ice_init_prof_result_bm()
904 bitmap_zero(hw->switch_info->prof_res_bm[off], in ice_init_prof_result_bm()
912 if (fv->ew[i].prot_id == ICE_PROT_INVALID && in ice_init_prof_result_bm()
913 fv->ew[i].off == ICE_FV_OFFSET_INVAL) in ice_init_prof_result_bm()
914 set_bit(i, hw->switch_info->prof_res_bm[off]); in ice_init_prof_result_bm()
950 return -EINVAL; in ice_pkg_buf_reserve_section()
952 buf = (struct ice_buf_hdr *)&bld->buf; in ice_pkg_buf_reserve_section()
955 section_count = le16_to_cpu(buf->section_count); in ice_pkg_buf_reserve_section()
957 return -EIO; in ice_pkg_buf_reserve_section()
959 if (bld->reserved_section_table_entries + count > ICE_MAX_S_COUNT) in ice_pkg_buf_reserve_section()
960 return -EIO; in ice_pkg_buf_reserve_section()
961 bld->reserved_section_table_entries += count; in ice_pkg_buf_reserve_section()
963 data_end = le16_to_cpu(buf->data_end) + in ice_pkg_buf_reserve_section()
965 buf->data_end = cpu_to_le16(data_end); in ice_pkg_buf_reserve_section()
991 buf = (struct ice_buf_hdr *)&bld->buf; in ice_pkg_buf_alloc_section()
994 data_end = le16_to_cpu(buf->data_end); in ice_pkg_buf_alloc_section()
1003 sect_count = le16_to_cpu(buf->section_count); in ice_pkg_buf_alloc_section()
1004 if (sect_count < bld->reserved_section_table_entries) { in ice_pkg_buf_alloc_section()
1007 buf->section_entry[sect_count].offset = cpu_to_le16(data_end); in ice_pkg_buf_alloc_section()
1008 buf->section_entry[sect_count].size = cpu_to_le16(size); in ice_pkg_buf_alloc_section()
1009 buf->section_entry[sect_count].type = cpu_to_le32(type); in ice_pkg_buf_alloc_section()
1012 buf->data_end = cpu_to_le16(data_end); in ice_pkg_buf_alloc_section()
1014 buf->section_count = cpu_to_le16(sect_count + 1); in ice_pkg_buf_alloc_section()
1065 * least one active section - otherwise, the buffer is not legal and should
1076 buf = (struct ice_buf_hdr *)&bld->buf; in ice_pkg_buf_get_active_sections()
1077 return le16_to_cpu(buf->section_count); in ice_pkg_buf_get_active_sections()
1091 return &bld->buf; in ice_pkg_buf()
1119 * 0 - Means the caller has acquired the global config lock
1121 * -EALREADY - Indicates another driver has already written the
1136 else if (status == -EALREADY) in ice_acquire_global_cfg_lock()
1186 cmd->flags |= ICE_AQC_DOWNLOAD_PKG_LAST_BUF; in ice_aq_download_pkg()
1189 if (status == -EIO) { in ice_aq_download_pkg()
1195 *error_offset = le32_to_cpu(resp->error_offset); in ice_aq_download_pkg()
1197 *error_info = le32_to_cpu(resp->error_info); in ice_aq_download_pkg()
1230 if (le32_to_cpu(bh->section_entry[0].type) & ICE_METADATA_BUF) in ice_dwnld_cfg_bufs()
1235 if (status == -EALREADY) in ice_dwnld_cfg_bufs()
1237 return ice_map_aq_err_to_ddp_state(hw->adminq.sq_last_status); in ice_dwnld_cfg_bufs()
1251 if (le16_to_cpu(bh->section_count)) in ice_dwnld_cfg_bufs()
1252 if (le32_to_cpu(bh->section_entry[0].type) & in ice_dwnld_cfg_bufs()
1267 err = hw->adminq.sq_last_status; in ice_dwnld_cfg_bufs()
1322 ice_seg->hdr.seg_format_ver.major, in ice_download_pkg()
1323 ice_seg->hdr.seg_format_ver.minor, in ice_download_pkg()
1324 ice_seg->hdr.seg_format_ver.update, in ice_download_pkg()
1325 ice_seg->hdr.seg_format_ver.draft); in ice_download_pkg()
1328 le32_to_cpu(ice_seg->hdr.seg_type), in ice_download_pkg()
1329 le32_to_cpu(ice_seg->hdr.seg_size), ice_seg->hdr.seg_id); in ice_download_pkg()
1334 le32_to_cpu(ice_buf_tbl->buf_count)); in ice_download_pkg()
1336 status = ice_dwnld_cfg_bufs(hw, ice_buf_tbl->buf_array, in ice_download_pkg()
1337 le32_to_cpu(ice_buf_tbl->buf_count)); in ice_download_pkg()
1374 cmd->flags |= ICE_AQC_DOWNLOAD_PKG_LAST_BUF; in ice_aq_update_pkg()
1377 if (status == -EIO) { in ice_aq_update_pkg()
1383 *error_offset = le32_to_cpu(resp->error_offset); in ice_aq_update_pkg()
1385 *error_info = le32_to_cpu(resp->error_info); in ice_aq_update_pkg()
1427 status = ice_aq_update_pkg(hw, bh, le16_to_cpu(bh->data_end), in ice_update_pkg_no_lock()
1481 pkg_hdr->pkg_format_ver.major, pkg_hdr->pkg_format_ver.minor, in ice_find_seg_in_pkg()
1482 pkg_hdr->pkg_format_ver.update, in ice_find_seg_in_pkg()
1483 pkg_hdr->pkg_format_ver.draft); in ice_find_seg_in_pkg()
1486 for (i = 0; i < le32_to_cpu(pkg_hdr->seg_count); i++) { in ice_find_seg_in_pkg()
1491 le32_to_cpu(pkg_hdr->seg_offset[i])); in ice_find_seg_in_pkg()
1493 if (le32_to_cpu(seg->seg_type) == seg_type) in ice_find_seg_in_pkg()
1531 hw->pkg_ver = meta->ver; in ice_init_pkg_info()
1532 memcpy(hw->pkg_name, meta->name, sizeof(meta->name)); in ice_init_pkg_info()
1535 meta->ver.major, meta->ver.minor, meta->ver.update, in ice_init_pkg_info()
1536 meta->ver.draft, meta->name); in ice_init_pkg_info()
1538 hw->ice_seg_fmt_ver = seg_hdr->seg_format_ver; in ice_init_pkg_info()
1539 memcpy(hw->ice_seg_id, seg_hdr->seg_id, sizeof(hw->ice_seg_id)); in ice_init_pkg_info()
1542 seg_hdr->seg_format_ver.major, in ice_init_pkg_info()
1543 seg_hdr->seg_format_ver.minor, in ice_init_pkg_info()
1544 seg_hdr->seg_format_ver.update, in ice_init_pkg_info()
1545 seg_hdr->seg_format_ver.draft, seg_hdr->seg_id); in ice_init_pkg_info()
1578 for (i = 0; i < le32_to_cpu(pkg_info->count); i++) { in ice_get_pkg_info()
1583 if (pkg_info->pkg_info[i].is_active) { in ice_get_pkg_info()
1585 hw->active_pkg_ver = pkg_info->pkg_info[i].ver; in ice_get_pkg_info()
1586 hw->active_track_id = in ice_get_pkg_info()
1587 le32_to_cpu(pkg_info->pkg_info[i].track_id); in ice_get_pkg_info()
1588 memcpy(hw->active_pkg_name, pkg_info->pkg_info[i].name, in ice_get_pkg_info()
1589 sizeof(pkg_info->pkg_info[i].name)); in ice_get_pkg_info()
1590 hw->active_pkg_in_nvm = pkg_info->pkg_info[i].is_in_nvm; in ice_get_pkg_info()
1592 if (pkg_info->pkg_info[i].is_active_at_boot) in ice_get_pkg_info()
1594 if (pkg_info->pkg_info[i].is_modified) in ice_get_pkg_info()
1596 if (pkg_info->pkg_info[i].is_in_nvm) in ice_get_pkg_info()
1600 pkg_info->pkg_info[i].ver.major, in ice_get_pkg_info()
1601 pkg_info->pkg_info[i].ver.minor, in ice_get_pkg_info()
1602 pkg_info->pkg_info[i].ver.update, in ice_get_pkg_info()
1603 pkg_info->pkg_info[i].ver.draft, in ice_get_pkg_info()
1604 pkg_info->pkg_info[i].name, flags); in ice_get_pkg_info()
1631 state = ice_chk_pkg_version(&hw->pkg_ver); in ice_chk_pkg_compat()
1656 for (i = 0; i < le32_to_cpu(pkg->count); i++) { in ice_chk_pkg_compat()
1658 if (!pkg->pkg_info[i].is_in_nvm) in ice_chk_pkg_compat()
1660 if ((*seg)->hdr.seg_format_ver.major != in ice_chk_pkg_compat()
1661 pkg->pkg_info[i].ver.major || in ice_chk_pkg_compat()
1662 (*seg)->hdr.seg_format_ver.minor > in ice_chk_pkg_compat()
1663 pkg->pkg_info[i].ver.minor) { in ice_chk_pkg_compat()
1679 * @ice_seg: pointer to the segment of the package scan (non-NULL)
1693 memset(&hw->tnl, 0, sizeof(hw->tnl)); in ice_init_pkg_hints()
1718 /* Cache the appropriate boost TCAM entry pointers for tunnels */ in ice_init_pkg_hints()
1719 for (i = 0; i < hw->tnl.count; i++) { in ice_init_pkg_hints()
1720 ice_find_boost_entry(ice_seg, hw->tnl.tbl[i].boost_addr, in ice_init_pkg_hints()
1721 &hw->tnl.tbl[i].boost_entry); in ice_init_pkg_hints()
1722 if (hw->tnl.tbl[i].boost_entry) { in ice_init_pkg_hints()
1723 hw->tnl.tbl[i].valid = true; in ice_init_pkg_hints()
1724 if (hw->tnl.tbl[i].type < __TNL_TYPE_CNT) in ice_init_pkg_hints()
1725 hw->tnl.valid_count[hw->tnl.tbl[i].type]++; in ice_init_pkg_hints()
1729 /* Cache the appropriate boost TCAM entry pointers for DVM and SVM */ in ice_init_pkg_hints()
1730 for (i = 0; i < hw->dvm_upd.count; i++) in ice_init_pkg_hints()
1731 ice_find_boost_entry(ice_seg, hw->dvm_upd.tbl[i].boost_addr, in ice_init_pkg_hints()
1732 &hw->dvm_upd.tbl[i].boost_entry); in ice_init_pkg_hints()
1736 * ice_fill_hw_ptype - fill the enabled PTYPE bit information
1741 struct ice_marker_ptype_tcam_entry *tcam; in ice_fill_hw_ptype() local
1742 struct ice_seg *seg = hw->seg; in ice_fill_hw_ptype()
1745 bitmap_zero(hw->hw_ptype, ICE_FLOW_PTYPE_MAX); in ice_fill_hw_ptype()
1752 tcam = ice_pkg_enum_entry(seg, &state, in ice_fill_hw_ptype()
1755 if (tcam && in ice_fill_hw_ptype()
1756 le16_to_cpu(tcam->addr) < ICE_MARKER_PTYPE_TCAM_ADDR_MAX && in ice_fill_hw_ptype()
1757 le16_to_cpu(tcam->ptype) < ICE_FLOW_PTYPE_MAX) in ice_fill_hw_ptype()
1758 set_bit(le16_to_cpu(tcam->ptype), hw->hw_ptype); in ice_fill_hw_ptype()
1761 } while (tcam); in ice_fill_hw_ptype()
1765 * ice_init_pkg - initialize/download package
1824 "package previously loaded - no work.\n"); in ice_init_pkg()
1838 hw->seg = seg; in ice_init_pkg()
1855 * ice_copy_and_init_pkg - initialize/download a copy of the package
1894 hw->pkg_copy = buf_copy; in ice_copy_and_init_pkg()
1895 hw->pkg_size = len; in ice_copy_and_init_pkg()