Lines Matching refs:wl

21 static int wl1271_boot_set_ecpu_ctrl(struct wl1271 *wl, u32 flag)
27 ret = wlcore_read_reg(wl, REG_ECPU_CONTROL, &cpu_ctrl);
33 ret = wlcore_write_reg(wl, REG_ECPU_CONTROL, cpu_ctrl);
39 static int wlcore_boot_parse_fw_ver(struct wl1271 *wl,
44 strscpy(wl->chip.fw_ver_str, static_data->fw_version,
45 sizeof(wl->chip.fw_ver_str));
47 ret = sscanf(wl->chip.fw_ver_str + 4, "%u.%u.%u.%u.%u",
48 &wl->chip.fw_ver[0], &wl->chip.fw_ver[1],
49 &wl->chip.fw_ver[2], &wl->chip.fw_ver[3],
50 &wl->chip.fw_ver[4]);
54 memset(wl->chip.fw_ver, 0, sizeof(wl->chip.fw_ver));
59 ret = wlcore_identify_fw(wl);
66 static int wlcore_validate_fw_ver(struct wl1271 *wl)
68 unsigned int *fw_ver = wl->chip.fw_ver;
69 unsigned int *min_ver = (wl->fw_type == WL12XX_FW_TYPE_MULTI) ?
70 wl->min_mr_fw_ver : wl->min_sr_fw_ver;
126 static int wlcore_boot_static_data(struct wl1271 *wl)
129 size_t len = sizeof(*static_data) + wl->static_data_priv_len;
138 ret = wlcore_read(wl, wl->cmd_box_addr, static_data, len, false);
142 ret = wlcore_boot_parse_fw_ver(wl, static_data);
146 ret = wlcore_validate_fw_ver(wl);
150 ret = wlcore_handle_static_data(wl, static_data);
160 static int wl1271_boot_upload_firmware_chunk(struct wl1271 *wl, void *buf,
186 memcpy(&partition, &wl->ptable[PART_DOWN], sizeof(partition));
188 ret = wlcore_set_partition(wl, &partition);
194 partition_limit = wl->ptable[PART_DOWN].mem.size;
202 wl->ptable[PART_DOWN].mem.size;
204 ret = wlcore_set_partition(wl, &partition);
215 ret = wlcore_write(wl, addr, chunk, CHUNK_SIZE, false);
228 ret = wlcore_write(wl, addr, chunk, fw_data_len % CHUNK_SIZE, false);
235 int wlcore_boot_upload_firmware(struct wl1271 *wl)
241 fw = wl->fw;
259 ret = wl1271_boot_upload_firmware_chunk(wl, fw, len, addr);
269 int wlcore_boot_upload_nvs(struct wl1271 *wl)
271 struct platform_device *pdev = wl->pdev;
280 if (wl->nvs == NULL) {
288 if (wl->quirks & WLCORE_QUIRK_LEGACY_NVS) {
290 (struct wl1271_nvs_file *)wl->nvs;
296 if (wl->nvs_len == sizeof(struct wl1271_nvs_file) ||
297 wl->nvs_len == WL1271_INI_LEGACY_NVS_FILE_SIZE) {
299 wl->enable_11a = true;
302 if (wl->nvs_len != sizeof(struct wl1271_nvs_file) &&
303 (wl->nvs_len != WL1271_INI_LEGACY_NVS_FILE_SIZE ||
304 wl->enable_11a)) {
306 nvs_name, wl->nvs_len,
308 kfree(wl->nvs);
309 wl->nvs = NULL;
310 wl->nvs_len = 0;
318 struct wl128x_nvs_file *nvs = (struct wl128x_nvs_file *)wl->nvs;
320 if (wl->nvs_len == sizeof(struct wl128x_nvs_file)) {
322 wl->enable_11a = true;
325 nvs_name, wl->nvs_len,
327 kfree(wl->nvs);
328 wl->nvs = NULL;
329 wl->nvs_len = 0;
339 nvs_ptr[11] = wl->addresses[0].addr[0];
340 nvs_ptr[10] = wl->addresses[0].addr[1];
341 nvs_ptr[6] = wl->addresses[0].addr[2];
342 nvs_ptr[5] = wl->addresses[0].addr[3];
343 nvs_ptr[4] = wl->addresses[0].addr[4];
344 nvs_ptr[3] = wl->addresses[0].addr[5];
365 dest_addr += wl->curr_part.reg.start;
371 if (nvs_ptr + 3 >= (u8 *) wl->nvs + nvs_len)
380 ret = wlcore_write32(wl, dest_addr, val);
388 if (nvs_ptr >= (u8 *) wl->nvs + nvs_len)
395 * NOTE: The wl->nvs->nvs element must be first, in order to
397 * the wl->nvs structure.
399 nvs_ptr = (u8 *)wl->nvs +
400 ALIGN(nvs_ptr - (u8 *)wl->nvs + 7, 4);
402 if (nvs_ptr >= (u8 *) wl->nvs + nvs_len)
405 nvs_len -= nvs_ptr - (u8 *)wl->nvs;
408 ret = wlcore_set_partition(wl, &wl->ptable[PART_WORK]);
418 ret = wlcore_write_data(wl, REG_CMD_MBOX_ADDRESS, nvs_aligned, nvs_len,
430 int wlcore_boot_run_firmware(struct wl1271 *wl)
436 ret = wlcore_set_partition(wl, &wl->ptable[PART_BOOT]);
440 ret = wl1271_boot_set_ecpu_ctrl(wl, ECPU_CONTROL_HALT);
444 ret = wlcore_read_reg(wl, REG_CHIP_ID_B, &chip_id);
450 if (chip_id != wl->chip.id) {
459 ret = wlcore_read_reg(wl, REG_INTERRUPT_NO_CLEAR, &intr);
470 ret = wlcore_write_reg(wl, REG_INTERRUPT_ACK,
485 ret = wlcore_read_reg(wl, REG_COMMAND_MAILBOX_PTR, &wl->cmd_box_addr);
489 wl1271_debug(DEBUG_MAILBOX, "cmd_box_addr 0x%x", wl->cmd_box_addr);
492 ret = wlcore_read_reg(wl, REG_EVENT_MAILBOX_PTR, &wl->mbox_ptr[0]);
496 wl->mbox_ptr[1] = wl->mbox_ptr[0] + wl->mbox_size;
499 wl->mbox_ptr[0], wl->mbox_ptr[1]);
501 ret = wlcore_boot_static_data(wl);
513 ret = wl1271_event_unmask(wl);
520 ret = wlcore_set_partition(wl, &wl->ptable[PART_WORK]);