Lines Matching full:pieces

327  * These functions are just to extract uCode section data from the pieces
330 static struct fw_sec *get_sec(struct iwl_firmware_pieces *pieces, in get_sec() argument
334 return &pieces->img[type].sec[sec]; in get_sec()
337 static void alloc_sec_data(struct iwl_firmware_pieces *pieces, in alloc_sec_data() argument
341 struct fw_img_parsing *img = &pieces->img[type]; in alloc_sec_data()
357 static void set_sec_data(struct iwl_firmware_pieces *pieces, in set_sec_data() argument
362 alloc_sec_data(pieces, type, sec); in set_sec_data()
364 pieces->img[type].sec[sec].data = data; in set_sec_data()
367 static void set_sec_size(struct iwl_firmware_pieces *pieces, in set_sec_size() argument
372 alloc_sec_data(pieces, type, sec); in set_sec_size()
374 pieces->img[type].sec[sec].size = size; in set_sec_size()
377 static size_t get_sec_size(struct iwl_firmware_pieces *pieces, in get_sec_size() argument
381 return pieces->img[type].sec[sec].size; in get_sec_size()
384 static void set_sec_offset(struct iwl_firmware_pieces *pieces, in set_sec_offset() argument
389 alloc_sec_data(pieces, type, sec); in set_sec_offset()
391 pieces->img[type].sec[sec].offset = offset; in set_sec_offset()
397 static int iwl_store_ucode_sec(struct iwl_firmware_pieces *pieces, in iwl_store_ucode_sec() argument
406 if (WARN_ON(!pieces || !data || type >= IWL_UCODE_TYPE_MAX)) in iwl_store_ucode_sec()
411 img = &pieces->img[type]; in iwl_store_ucode_sec()
502 struct iwl_firmware_pieces *pieces) in iwl_parse_v1_v2_firmware() argument
520 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
522 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
524 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
526 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
539 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
541 set_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
543 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
545 set_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
568 get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST) + in iwl_parse_v1_v2_firmware()
569 get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA) + in iwl_parse_v1_v2_firmware()
570 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST) + in iwl_parse_v1_v2_firmware()
571 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA)) { in iwl_parse_v1_v2_firmware()
580 set_sec_data(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, src); in iwl_parse_v1_v2_firmware()
581 src += get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST); in iwl_parse_v1_v2_firmware()
582 set_sec_offset(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
584 set_sec_data(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, src); in iwl_parse_v1_v2_firmware()
585 src += get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA); in iwl_parse_v1_v2_firmware()
586 set_sec_offset(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
588 set_sec_data(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, src); in iwl_parse_v1_v2_firmware()
589 src += get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST); in iwl_parse_v1_v2_firmware()
590 set_sec_offset(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST, in iwl_parse_v1_v2_firmware()
592 set_sec_data(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, src); in iwl_parse_v1_v2_firmware()
593 src += get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA); in iwl_parse_v1_v2_firmware()
594 set_sec_offset(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA, in iwl_parse_v1_v2_firmware()
698 struct iwl_firmware_pieces *pieces, in iwl_parse_tlv_firmware() argument
767 set_sec_data(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
769 set_sec_size(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
771 set_sec_offset(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
776 set_sec_data(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
778 set_sec_size(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
780 set_sec_offset(pieces, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
785 set_sec_data(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
787 set_sec_size(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
789 set_sec_offset(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
794 set_sec_data(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
796 set_sec_size(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
798 set_sec_offset(pieces, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
845 pieces->init_evtlog_ptr = in iwl_parse_tlv_firmware()
851 pieces->init_evtlog_size = in iwl_parse_tlv_firmware()
857 pieces->init_errlog_ptr = in iwl_parse_tlv_firmware()
863 pieces->inst_evtlog_ptr = in iwl_parse_tlv_firmware()
869 pieces->inst_evtlog_size = in iwl_parse_tlv_firmware()
875 pieces->inst_errlog_ptr = in iwl_parse_tlv_firmware()
884 set_sec_data(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
886 set_sec_size(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
888 set_sec_offset(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
893 set_sec_data(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
895 set_sec_size(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
897 set_sec_offset(pieces, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
908 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
913 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
918 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
940 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR, in iwl_parse_tlv_firmware()
945 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT, in iwl_parse_tlv_firmware()
950 iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN, in iwl_parse_tlv_firmware()
1007 pieces->dbg_dest_ver = (const u8 *)tlv_data; in iwl_parse_tlv_firmware()
1008 if (*pieces->dbg_dest_ver == 1) { in iwl_parse_tlv_firmware()
1010 } else if (*pieces->dbg_dest_ver == 0) { in iwl_parse_tlv_firmware()
1015 *pieces->dbg_dest_ver); in iwl_parse_tlv_firmware()
1019 if (pieces->dbg_dest_tlv_init) { in iwl_parse_tlv_firmware()
1025 pieces->dbg_dest_tlv_init = true; in iwl_parse_tlv_firmware()
1028 pieces->dbg_dest_tlv_v1 = dest_v1; in iwl_parse_tlv_firmware()
1031 pieces->dbg_dest_tlv = dest; in iwl_parse_tlv_firmware()
1055 if (!pieces->dbg_dest_tlv_init) { in iwl_parse_tlv_firmware()
1069 if (pieces->dbg_conf_tlv[conf->id]) { in iwl_parse_tlv_firmware()
1082 pieces->dbg_conf_tlv[conf->id] = conf; in iwl_parse_tlv_firmware()
1083 pieces->dbg_conf_tlv_len[conf->id] = tlv_len; in iwl_parse_tlv_firmware()
1098 if (pieces->dbg_trigger_tlv[trigger_id]) { in iwl_parse_tlv_firmware()
1107 pieces->dbg_trigger_tlv[trigger_id] = trigger; in iwl_parse_tlv_firmware()
1108 pieces->dbg_trigger_tlv_len[trigger_id] = tlv_len; in iwl_parse_tlv_firmware()
1124 iwl_store_ucode_sec(pieces, tlv_data, in iwl_parse_tlv_firmware()
1172 size = sizeof(*pieces->dbg_mem_tlv) * in iwl_parse_tlv_firmware()
1173 (pieces->n_mem_tlv + 1); in iwl_parse_tlv_firmware()
1174 n = krealloc(pieces->dbg_mem_tlv, size, GFP_KERNEL); in iwl_parse_tlv_firmware()
1177 pieces->dbg_mem_tlv = n; in iwl_parse_tlv_firmware()
1178 pieces->dbg_mem_tlv[pieces->n_mem_tlv] = *dbg_mem; in iwl_parse_tlv_firmware()
1179 pieces->n_mem_tlv++; in iwl_parse_tlv_firmware()
1352 struct iwl_firmware_pieces *pieces, in iwl_alloc_ucode() argument
1358 sec = kcalloc(pieces->img[type].sec_counter, sizeof(*sec), GFP_KERNEL); in iwl_alloc_ucode()
1362 drv->fw.img[type].num_sec = pieces->img[type].sec_counter; in iwl_alloc_ucode()
1364 for (i = 0; i < pieces->img[type].sec_counter; i++) in iwl_alloc_ucode()
1365 if (iwl_alloc_fw_desc(drv, &sec[i], get_sec(pieces, type, i))) in iwl_alloc_ucode()
1372 struct iwl_firmware_pieces *pieces, in validate_sec_sizes() argument
1376 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1379 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1382 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST)); in validate_sec_sizes()
1384 get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA)); in validate_sec_sizes()
1387 if (get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_INST) > in validate_sec_sizes()
1390 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1395 if (get_sec_size(pieces, IWL_UCODE_REGULAR, IWL_UCODE_SECTION_DATA) > in validate_sec_sizes()
1398 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1403 if (get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_INST) > in validate_sec_sizes()
1406 get_sec_size(pieces, IWL_UCODE_INIT, in validate_sec_sizes()
1411 if (get_sec_size(pieces, IWL_UCODE_INIT, IWL_UCODE_SECTION_DATA) > in validate_sec_sizes()
1414 get_sec_size(pieces, IWL_UCODE_REGULAR, in validate_sec_sizes()
1490 struct iwl_firmware_pieces *pieces; in iwl_req_fw_callback() local
1509 pieces = kzalloc(sizeof(*pieces), GFP_KERNEL); in iwl_req_fw_callback()
1510 if (!pieces) in iwl_req_fw_callback()
1529 err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces); in iwl_req_fw_callback()
1531 err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces, in iwl_req_fw_callback()
1559 if (fw->type == IWL_FW_DVM && validate_sec_sizes(drv, pieces, in iwl_req_fw_callback()
1570 if (iwl_alloc_ucode(drv, pieces, i)) in iwl_req_fw_callback()
1573 if (pieces->dbg_dest_tlv_init) { in iwl_req_fw_callback()
1583 if (*pieces->dbg_dest_ver == 0) { in iwl_req_fw_callback()
1584 memcpy(drv->fw.dbg.dest_tlv, pieces->dbg_dest_tlv_v1, in iwl_req_fw_callback()
1590 dest_tlv->version = pieces->dbg_dest_tlv->version; in iwl_req_fw_callback()
1592 pieces->dbg_dest_tlv->monitor_mode; in iwl_req_fw_callback()
1594 pieces->dbg_dest_tlv->size_power; in iwl_req_fw_callback()
1596 pieces->dbg_dest_tlv->wrap_count; in iwl_req_fw_callback()
1598 pieces->dbg_dest_tlv->write_ptr_reg; in iwl_req_fw_callback()
1600 pieces->dbg_dest_tlv->base_shift; in iwl_req_fw_callback()
1602 pieces->dbg_dest_tlv->reg_ops, in iwl_req_fw_callback()
1614 dest_tlv->base_reg = pieces->dbg_dest_tlv->cfg_reg; in iwl_req_fw_callback()
1616 pieces->dbg_dest_tlv->size_shift; in iwl_req_fw_callback()
1621 if (pieces->dbg_conf_tlv[i]) { in iwl_req_fw_callback()
1623 kmemdup(pieces->dbg_conf_tlv[i], in iwl_req_fw_callback()
1624 pieces->dbg_conf_tlv_len[i], in iwl_req_fw_callback()
1654 if (pieces->dbg_trigger_tlv[i]) { in iwl_req_fw_callback()
1662 if (WARN_ON(pieces->dbg_trigger_tlv_len[i] < in iwl_req_fw_callback()
1667 pieces->dbg_trigger_tlv_len[i]; in iwl_req_fw_callback()
1669 kmemdup(pieces->dbg_trigger_tlv[i], in iwl_req_fw_callback()
1679 drv->fw.dbg.mem_tlv = pieces->dbg_mem_tlv; in iwl_req_fw_callback()
1680 pieces->dbg_mem_tlv = NULL; in iwl_req_fw_callback()
1681 drv->fw.dbg.n_mem_tlv = pieces->n_mem_tlv; in iwl_req_fw_callback()
1688 fw->init_evtlog_ptr = pieces->init_evtlog_ptr; in iwl_req_fw_callback()
1689 if (pieces->init_evtlog_size) in iwl_req_fw_callback()
1690 fw->init_evtlog_size = (pieces->init_evtlog_size - 16)/12; in iwl_req_fw_callback()
1694 fw->init_errlog_ptr = pieces->init_errlog_ptr; in iwl_req_fw_callback()
1695 fw->inst_evtlog_ptr = pieces->inst_evtlog_ptr; in iwl_req_fw_callback()
1696 if (pieces->inst_evtlog_size) in iwl_req_fw_callback()
1697 fw->inst_evtlog_size = (pieces->inst_evtlog_size - 16)/12; in iwl_req_fw_callback()
1701 fw->inst_errlog_ptr = pieces->inst_errlog_ptr; in iwl_req_fw_callback()
1778 if (pieces) { in iwl_req_fw_callback()
1779 for (i = 0; i < ARRAY_SIZE(pieces->img); i++) in iwl_req_fw_callback()
1780 kfree(pieces->img[i].sec); in iwl_req_fw_callback()
1781 kfree(pieces->dbg_mem_tlv); in iwl_req_fw_callback()
1782 kfree(pieces); in iwl_req_fw_callback()