Lines Matching refs:fwrt

68 void iwl_free_fw_paging(struct iwl_fw_runtime *fwrt)  in iwl_free_fw_paging()  argument
72 if (!fwrt->fw_paging_db[0].fw_paging_block) in iwl_free_fw_paging()
76 struct iwl_fw_paging *paging = &fwrt->fw_paging_db[i]; in iwl_free_fw_paging()
79 IWL_DEBUG_FW(fwrt, in iwl_free_fw_paging()
85 dma_unmap_page(fwrt->trans->dev, paging->fw_paging_phys, in iwl_free_fw_paging()
93 memset(fwrt->fw_paging_db, 0, sizeof(fwrt->fw_paging_db)); in iwl_free_fw_paging()
97 static int iwl_alloc_fw_paging_mem(struct iwl_fw_runtime *fwrt, in iwl_alloc_fw_paging_mem() argument
104 if (fwrt->fw_paging_db[0].fw_paging_block) in iwl_alloc_fw_paging_mem()
111 fwrt->num_of_paging_blk = in iwl_alloc_fw_paging_mem()
113 fwrt->num_of_pages_in_last_blk = in iwl_alloc_fw_paging_mem()
115 NUM_OF_PAGE_PER_GROUP * (fwrt->num_of_paging_blk - 1); in iwl_alloc_fw_paging_mem()
117 IWL_DEBUG_FW(fwrt, in iwl_alloc_fw_paging_mem()
119 fwrt->num_of_paging_blk, in iwl_alloc_fw_paging_mem()
120 fwrt->num_of_pages_in_last_blk); in iwl_alloc_fw_paging_mem()
125 for (blk_idx = 0; blk_idx < fwrt->num_of_paging_blk + 1; blk_idx++) { in iwl_alloc_fw_paging_mem()
132 iwl_free_fw_paging(fwrt); in iwl_alloc_fw_paging_mem()
136 fwrt->fw_paging_db[blk_idx].fw_paging_block = block; in iwl_alloc_fw_paging_mem()
137 fwrt->fw_paging_db[blk_idx].fw_paging_size = size; in iwl_alloc_fw_paging_mem()
139 phys = dma_map_page(fwrt->trans->dev, block, 0, in iwl_alloc_fw_paging_mem()
142 if (dma_mapping_error(fwrt->trans->dev, phys)) { in iwl_alloc_fw_paging_mem()
147 iwl_free_fw_paging(fwrt); in iwl_alloc_fw_paging_mem()
150 fwrt->fw_paging_db[blk_idx].fw_paging_phys = phys; in iwl_alloc_fw_paging_mem()
153 IWL_DEBUG_FW(fwrt, in iwl_alloc_fw_paging_mem()
157 IWL_DEBUG_FW(fwrt, in iwl_alloc_fw_paging_mem()
165 static int iwl_fill_paging_mem(struct iwl_fw_runtime *fwrt, in iwl_fill_paging_mem() argument
194 IWL_ERR(fwrt, "Paging: Missing CSS and/or paging sections\n"); in iwl_fill_paging_mem()
200 IWL_DEBUG_FW(fwrt, "Paging: load paging CSS to FW, sec = %d\n", in iwl_fill_paging_mem()
203 if (image->sec[sec_idx].len > fwrt->fw_paging_db[0].fw_paging_size) { in iwl_fill_paging_mem()
204 IWL_ERR(fwrt, "CSS block is larger than paging size\n"); in iwl_fill_paging_mem()
209 memcpy(page_address(fwrt->fw_paging_db[0].fw_paging_block), in iwl_fill_paging_mem()
212 dma_sync_single_for_device(fwrt->trans->dev, in iwl_fill_paging_mem()
213 fwrt->fw_paging_db[0].fw_paging_phys, in iwl_fill_paging_mem()
214 fwrt->fw_paging_db[0].fw_paging_size, in iwl_fill_paging_mem()
217 IWL_DEBUG_FW(fwrt, in iwl_fill_paging_mem()
219 fwrt->fw_paging_db[0].fw_paging_size); in iwl_fill_paging_mem()
228 for (idx = 1; idx < fwrt->num_of_paging_blk + 1; idx++) { in iwl_fill_paging_mem()
229 struct iwl_fw_paging *block = &fwrt->fw_paging_db[idx]; in iwl_fill_paging_mem()
237 if (idx == fwrt->num_of_paging_blk) { in iwl_fill_paging_mem()
240 fwrt->num_of_pages_in_last_blk * FW_PAGING_SIZE) { in iwl_fill_paging_mem()
241 IWL_ERR(fwrt, in iwl_fill_paging_mem()
248 IWL_ERR(fwrt, in iwl_fill_paging_mem()
257 dma_sync_single_for_device(fwrt->trans->dev, in iwl_fill_paging_mem()
262 IWL_DEBUG_FW(fwrt, in iwl_fill_paging_mem()
272 iwl_free_fw_paging(fwrt); in iwl_fill_paging_mem()
276 static int iwl_save_fw_paging(struct iwl_fw_runtime *fwrt, in iwl_save_fw_paging() argument
281 ret = iwl_alloc_fw_paging_mem(fwrt, fw); in iwl_save_fw_paging()
285 return iwl_fill_paging_mem(fwrt, fw); in iwl_save_fw_paging()
289 static int iwl_send_paging_cmd(struct iwl_fw_runtime *fwrt, in iwl_send_paging_cmd() argument
295 (fwrt->num_of_pages_in_last_blk << in iwl_send_paging_cmd()
298 .block_num = cpu_to_le32(fwrt->num_of_paging_blk), in iwl_send_paging_cmd()
308 for (blk_idx = 0; blk_idx < fwrt->num_of_paging_blk + 1; blk_idx++) { in iwl_send_paging_cmd()
309 dma_addr_t addr = fwrt->fw_paging_db[blk_idx].fw_paging_phys; in iwl_send_paging_cmd()
317 return iwl_trans_send_cmd(fwrt->trans, &hcmd); in iwl_send_paging_cmd()
320 int iwl_init_paging(struct iwl_fw_runtime *fwrt, enum iwl_ucode_type type) in iwl_init_paging() argument
322 const struct fw_img *fw = &fwrt->fw->img[type]; in iwl_init_paging()
325 if (fwrt->trans->cfg->gen2) in iwl_init_paging()
336 ret = iwl_save_fw_paging(fwrt, fw); in iwl_init_paging()
338 IWL_ERR(fwrt, "failed to save the FW paging image\n"); in iwl_init_paging()
342 ret = iwl_send_paging_cmd(fwrt, fw); in iwl_init_paging()
344 IWL_ERR(fwrt, "failed to send the paging cmd\n"); in iwl_init_paging()
345 iwl_free_fw_paging(fwrt); in iwl_init_paging()