Lines Matching full:pieces
315 * These functions are just to extract uCode section data from the pieces
318 static struct fw_sec *get_sec(struct iwl_firmware_pieces *pieces, in get_sec() argument
322 return &pieces->img[type].sec[sec]; in get_sec()
325 static void alloc_sec_data(struct iwl_firmware_pieces *pieces, in alloc_sec_data() argument
329 struct fw_img_parsing *img = &pieces->img[type]; in alloc_sec_data()
345 static void set_sec_data(struct iwl_firmware_pieces *pieces, in set_sec_data() argument
350 alloc_sec_data(pieces, type, sec); in set_sec_data()
352 pieces->img[type].sec[sec].data = data; in set_sec_data()
355 static void set_sec_size(struct iwl_firmware_pieces *pieces, in set_sec_size() argument
360 alloc_sec_data(pieces, type, sec); in set_sec_size()
362 pieces->img[type].sec[sec].size = size; in set_sec_size()
365 static size_t get_sec_size(struct iwl_firmware_pieces *pieces, in get_sec_size() argument
369 return pieces->img[type].sec[sec].size; in get_sec_size()
372 static void set_sec_offset(struct iwl_firmware_pieces *pieces, in set_sec_offset() argument
377 alloc_sec_data(pieces, type, sec); in set_sec_offset()
379 pieces->img[type].sec[sec].offset = offset; in set_sec_offset()
408 static int iwl_store_ucode_sec(struct iwl_firmware_pieces *pieces, in iwl_store_ucode_sec() argument
417 if (WARN_ON(!pieces || !data || type >= IWL_UCODE_TYPE_MAX)) in iwl_store_ucode_sec()
422 img = &pieces->img[type]; in iwl_store_ucode_sec()
513 struct iwl_firmware_pieces *pieces) in iwl_parse_v1_v2_firmware() argument
531 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
533 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
535 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
537 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
550 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
552 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
554 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
556 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
579 get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST) + in iwl_parse_v1_v2_firmware()
580 get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA) + in iwl_parse_v1_v2_firmware()
581 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST) + in iwl_parse_v1_v2_firmware()
582 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA)) { in iwl_parse_v1_v2_firmware()
591 set_sec_data(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, src); in iwl_parse_v1_v2_firmware()
592 src += get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST); in iwl_parse_v1_v2_firmware()
593 set_sec_offset(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
595 set_sec_data(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, src); in iwl_parse_v1_v2_firmware()
596 src += get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA); in iwl_parse_v1_v2_firmware()
597 set_sec_offset(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
599 set_sec_data(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, src); in iwl_parse_v1_v2_firmware()
600 src += get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST); in iwl_parse_v1_v2_firmware()
601 set_sec_offset(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
603 set_sec_data(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, src); in iwl_parse_v1_v2_firmware()
604 src += get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA); in iwl_parse_v1_v2_firmware()
605 set_sec_offset(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
614 struct iwl_firmware_pieces *pieces, in iwl_parse_tlv_firmware() argument
683 set_sec_data(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
685 set_sec_size(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
687 set_sec_offset(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
692 set_sec_data(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
694 set_sec_size(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
696 set_sec_offset(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
701 set_sec_data(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
703 set_sec_size(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
705 set_sec_offset(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
710 set_sec_data(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
712 set_sec_size(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
714 set_sec_offset(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
761 pieces->init_evtlog_ptr = in iwl_parse_tlv_firmware()
767 pieces->init_evtlog_size = in iwl_parse_tlv_firmware()
773 pieces->init_errlog_ptr = in iwl_parse_tlv_firmware()
779 pieces->inst_evtlog_ptr = in iwl_parse_tlv_firmware()
785 pieces->inst_evtlog_size = in iwl_parse_tlv_firmware()
791 pieces->inst_errlog_ptr = in iwl_parse_tlv_firmware()
800 set_sec_data(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
802 set_sec_size(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
804 set_sec_offset(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
809 set_sec_data(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
811 set_sec_size(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
813 set_sec_offset(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
824 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
829 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
834 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
856 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
861 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
866 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
927 pieces->dbg_dest_ver = (u8 *)tlv_data; in iwl_parse_tlv_firmware()
928 if (*pieces->dbg_dest_ver == 1) { in iwl_parse_tlv_firmware()
930 } else if (*pieces->dbg_dest_ver == 0) { in iwl_parse_tlv_firmware()
935 *pieces->dbg_dest_ver); in iwl_parse_tlv_firmware()
939 if (pieces->dbg_dest_tlv_init) { in iwl_parse_tlv_firmware()
945 pieces->dbg_dest_tlv_init = true; in iwl_parse_tlv_firmware()
948 pieces->dbg_dest_tlv_v1 = dest_v1; in iwl_parse_tlv_firmware()
951 pieces->dbg_dest_tlv = dest; in iwl_parse_tlv_firmware()
974 if (!pieces->dbg_dest_tlv_init) { in iwl_parse_tlv_firmware()
988 if (pieces->dbg_conf_tlv[conf->id]) { in iwl_parse_tlv_firmware()
1001 pieces->dbg_conf_tlv[conf->id] = conf; in iwl_parse_tlv_firmware()
1002 pieces->dbg_conf_tlv_len[conf->id] = tlv_len; in iwl_parse_tlv_firmware()
1017 if (pieces->dbg_trigger_tlv[trigger_id]) { in iwl_parse_tlv_firmware()
1026 pieces->dbg_trigger_tlv[trigger_id] = trigger; in iwl_parse_tlv_firmware()
1027 pieces->dbg_trigger_tlv_len[trigger_id] = tlv_len; in iwl_parse_tlv_firmware()
1043 iwl_store_ucode_sec(pieces, tlv_data, in iwl_parse_tlv_firmware()
1091 size = sizeof(*pieces->dbg_mem_tlv) * in iwl_parse_tlv_firmware()
1092 (pieces->n_mem_tlv + 1); in iwl_parse_tlv_firmware()
1093 n = krealloc(pieces->dbg_mem_tlv, size, GFP_KERNEL); in iwl_parse_tlv_firmware()
1096 pieces->dbg_mem_tlv = n; in iwl_parse_tlv_firmware()
1097 pieces->dbg_mem_tlv[pieces->n_mem_tlv] = *dbg_mem; in iwl_parse_tlv_firmware()
1098 pieces->n_mem_tlv++; in iwl_parse_tlv_firmware()
1234 struct iwl_firmware_pieces *pieces, in iwl_alloc_ucode() argument
1240 sec = kcalloc(pieces->img[type].sec_counter, sizeof(*sec), GFP_KERNEL); in iwl_alloc_ucode()
1244 drv->fw.img[type].num_sec = pieces->img[type].sec_counter; in iwl_alloc_ucode()
1246 for (i = 0; i < pieces->img[type].sec_counter; i++) in iwl_alloc_ucode()
1247 if (iwl_alloc_fw_desc(drv, &sec[i], get_sec(pieces, type, i))) in iwl_alloc_ucode()
1254 struct iwl_firmware_pieces *pieces, in validate_sec_sizes() argument
1258 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1261 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1264 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST)); in validate_sec_sizes()
1266 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA)); in validate_sec_sizes()
1269 if (get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST) > in validate_sec_sizes()
1272 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1277 if (get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA) > in validate_sec_sizes()
1280 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1285 if (get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST) > in validate_sec_sizes()
1288 get_sec_size(pieces, IWL_UCODE_INIT, in validate_sec_sizes()
1293 if (get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA) > in validate_sec_sizes()
1296 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1363 struct iwl_firmware_pieces *pieces; in iwl_req_fw_callback() local
1381 pieces = kzalloc(sizeof(*pieces), GFP_KERNEL); in iwl_req_fw_callback()
1382 if (!pieces) in iwl_req_fw_callback()
1401 err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces); in iwl_req_fw_callback()
1403 err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces, in iwl_req_fw_callback()
1431 if (fw->type == IWL_FW_DVM && validate_sec_sizes(drv, pieces, in iwl_req_fw_callback()
1442 if (iwl_alloc_ucode(drv, pieces, i)) in iwl_req_fw_callback()
1445 if (pieces->dbg_dest_tlv_init) { in iwl_req_fw_callback()
1455 if (*pieces->dbg_dest_ver == 0) { in iwl_req_fw_callback()
1456 memcpy(drv->fw.dbg.dest_tlv, pieces->dbg_dest_tlv_v1, in iwl_req_fw_callback()
1462 dest_tlv->version = pieces->dbg_dest_tlv->version; in iwl_req_fw_callback()
1464 pieces->dbg_dest_tlv->monitor_mode; in iwl_req_fw_callback()
1466 pieces->dbg_dest_tlv->size_power; in iwl_req_fw_callback()
1468 pieces->dbg_dest_tlv->wrap_count; in iwl_req_fw_callback()
1470 pieces->dbg_dest_tlv->write_ptr_reg; in iwl_req_fw_callback()
1472 pieces->dbg_dest_tlv->base_shift; in iwl_req_fw_callback()
1474 pieces->dbg_dest_tlv->reg_ops, in iwl_req_fw_callback()
1486 dest_tlv->base_reg = pieces->dbg_dest_tlv->cfg_reg; in iwl_req_fw_callback()
1488 pieces->dbg_dest_tlv->size_shift; in iwl_req_fw_callback()
1493 if (pieces->dbg_conf_tlv[i]) { in iwl_req_fw_callback()
1495 kmemdup(pieces->dbg_conf_tlv[i], in iwl_req_fw_callback()
1496 pieces->dbg_conf_tlv_len[i], in iwl_req_fw_callback()
1526 if (pieces->dbg_trigger_tlv[i]) { in iwl_req_fw_callback()
1534 if (WARN_ON(pieces->dbg_trigger_tlv_len[i] < in iwl_req_fw_callback()
1539 pieces->dbg_trigger_tlv_len[i]; in iwl_req_fw_callback()
1541 kmemdup(pieces->dbg_trigger_tlv[i], in iwl_req_fw_callback()
1551 drv->fw.dbg.mem_tlv = pieces->dbg_mem_tlv; in iwl_req_fw_callback()
1552 pieces->dbg_mem_tlv = NULL; in iwl_req_fw_callback()
1553 drv->fw.dbg.n_mem_tlv = pieces->n_mem_tlv; in iwl_req_fw_callback()
1560 fw->init_evtlog_ptr = pieces->init_evtlog_ptr; in iwl_req_fw_callback()
1561 if (pieces->init_evtlog_size) in iwl_req_fw_callback()
1562 fw->init_evtlog_size = (pieces->init_evtlog_size - 16)/12; in iwl_req_fw_callback()
1566 fw->init_errlog_ptr = pieces->init_errlog_ptr; in iwl_req_fw_callback()
1567 fw->inst_evtlog_ptr = pieces->inst_evtlog_ptr; in iwl_req_fw_callback()
1568 if (pieces->inst_evtlog_size) in iwl_req_fw_callback()
1569 fw->inst_evtlog_size = (pieces->inst_evtlog_size - 16)/12; in iwl_req_fw_callback()
1573 fw->inst_errlog_ptr = pieces->inst_errlog_ptr; in iwl_req_fw_callback()
1655 if (pieces) { in iwl_req_fw_callback()
1656 for (i = 0; i < ARRAY_SIZE(pieces->img); i++) in iwl_req_fw_callback()
1657 kfree(pieces->img[i].sec); in iwl_req_fw_callback()
1658 kfree(pieces->dbg_mem_tlv); in iwl_req_fw_callback()
1659 kfree(pieces); in iwl_req_fw_callback()