Lines Matching refs:btrtl_dev
466 struct btrtl_device_info *btrtl_dev) in btrtl_insert_ordered_subsec() argument
472 list_for_each_safe(pos, next, &btrtl_dev->patch_subsecs) { in btrtl_insert_ordered_subsec()
481 struct btrtl_device_info *btrtl_dev, u32 opcode, in btrtl_parse_section() argument
516 if (common_subsec->eco != btrtl_dev->rom_version + 1) in btrtl_parse_section()
522 if (sec_hdr->key_id != btrtl_dev->key_id) in btrtl_parse_section()
534 btrtl_insert_ordered_subsec(subsec, btrtl_dev); in btrtl_parse_section()
542 struct btrtl_device_info *btrtl_dev, in rtlbt_parse_firmware_v2() argument
557 .data = btrtl_dev->fw_data, in rtlbt_parse_firmware_v2()
558 .len = btrtl_dev->fw_len - 7, /* Cut the tail */ in rtlbt_parse_firmware_v2()
561 key_id = btrtl_dev->key_id; in rtlbt_parse_firmware_v2()
586 rc = btrtl_parse_section(hdev, btrtl_dev, opcode, in rtlbt_parse_firmware_v2()
595 rc = btrtl_parse_section(hdev, btrtl_dev, opcode, in rtlbt_parse_firmware_v2()
599 rc = btrtl_parse_section(hdev, btrtl_dev, opcode, in rtlbt_parse_firmware_v2()
623 list_for_each_entry_safe(entry, tmp, &btrtl_dev->patch_subsecs, list) { in rtlbt_parse_firmware_v2()
640 struct btrtl_device_info *btrtl_dev, in rtlbt_parse_firmware() argument
678 if (btrtl_dev->fw_len <= 8) in rtlbt_parse_firmware()
681 if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE, 8)) in rtlbt_parse_firmware()
684 else if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE_V2, 8)) in rtlbt_parse_firmware()
690 if (btrtl_dev->fw_len < min_size) in rtlbt_parse_firmware()
693 fwptr = btrtl_dev->fw_data + btrtl_dev->fw_len - sizeof(extension_sig); in rtlbt_parse_firmware()
705 while (fwptr >= btrtl_dev->fw_data + (sizeof(*epatch_info) + 3)) { in rtlbt_parse_firmware()
736 btrtl_dev->project_id = project_id; in rtlbt_parse_firmware()
746 if (btrtl_dev->ic_info->lmp_subver != in rtlbt_parse_firmware()
750 btrtl_dev->ic_info->lmp_subver); in rtlbt_parse_firmware()
754 if (memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE, 8) != 0) { in rtlbt_parse_firmware()
755 if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE_V2, 8)) in rtlbt_parse_firmware()
756 return rtlbt_parse_firmware_v2(hdev, btrtl_dev, _buf); in rtlbt_parse_firmware()
761 epatch_info = (struct rtl_epatch_header *)btrtl_dev->fw_data; in rtlbt_parse_firmware()
775 if (btrtl_dev->fw_len < min_size) in rtlbt_parse_firmware()
778 chip_id_base = btrtl_dev->fw_data + sizeof(struct rtl_epatch_header); in rtlbt_parse_firmware()
784 if (chip_id == btrtl_dev->rom_version + 1) { in rtlbt_parse_firmware()
795 btrtl_dev->rom_version); in rtlbt_parse_firmware()
801 if (btrtl_dev->fw_len < min_size) in rtlbt_parse_firmware()
812 memcpy(buf, btrtl_dev->fw_data + patch_offset, patch_length - 4); in rtlbt_parse_firmware()
908 struct btrtl_device_info *btrtl_dev) in btrtl_setup_rtl8723a() argument
910 if (btrtl_dev->fw_len < 8) in btrtl_setup_rtl8723a()
916 if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE, 8)) { in btrtl_setup_rtl8723a()
921 return rtl_download_firmware(hdev, btrtl_dev->fw_data, in btrtl_setup_rtl8723a()
922 btrtl_dev->fw_len); in btrtl_setup_rtl8723a()
926 struct btrtl_device_info *btrtl_dev) in btrtl_setup_rtl8723b() argument
932 ret = rtlbt_parse_firmware(hdev, btrtl_dev, &fw_data); in btrtl_setup_rtl8723b()
936 if (btrtl_dev->cfg_len > 0) { in btrtl_setup_rtl8723b()
937 tbuff = kvzalloc(ret + btrtl_dev->cfg_len, GFP_KERNEL); in btrtl_setup_rtl8723b()
946 memcpy(tbuff + ret, btrtl_dev->cfg_data, btrtl_dev->cfg_len); in btrtl_setup_rtl8723b()
947 ret += btrtl_dev->cfg_len; in btrtl_setup_rtl8723b()
952 rtl_dev_info(hdev, "cfg_sz %d, total sz %d", btrtl_dev->cfg_len, ret); in btrtl_setup_rtl8723b()
1047 void btrtl_free(struct btrtl_device_info *btrtl_dev) in btrtl_free() argument
1051 kvfree(btrtl_dev->fw_data); in btrtl_free()
1052 kvfree(btrtl_dev->cfg_data); in btrtl_free()
1054 list_for_each_entry_safe(entry, tmp, &btrtl_dev->patch_subsecs, list) { in btrtl_free()
1059 kfree(btrtl_dev); in btrtl_free()
1067 struct btrtl_device_info *btrtl_dev; in btrtl_initialize() local
1080 btrtl_dev = kzalloc_obj(*btrtl_dev); in btrtl_initialize()
1081 if (!btrtl_dev) { in btrtl_initialize()
1086 INIT_LIST_HEAD(&btrtl_dev->patch_subsecs); in btrtl_initialize()
1104 btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, in btrtl_initialize()
1132 btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver, in btrtl_initialize()
1140 if (!btrtl_dev->ic_info && !btrtl_dev->drop_fw) in btrtl_initialize()
1141 btrtl_dev->drop_fw = true; in btrtl_initialize()
1143 btrtl_dev->drop_fw = false; in btrtl_initialize()
1145 if (btrtl_dev->drop_fw) { in btrtl_initialize()
1171 if (!btrtl_dev->ic_info) { in btrtl_initialize()
1174 return btrtl_dev; in btrtl_initialize()
1177 if (btrtl_dev->ic_info->has_rom_version) { in btrtl_initialize()
1178 ret = rtl_read_rom_version(hdev, &btrtl_dev->rom_version); in btrtl_initialize()
1183 if (!btrtl_dev->ic_info->fw_name) { in btrtl_initialize()
1193 btrtl_dev->key_id = key_id; in btrtl_initialize()
1196 btrtl_dev->fw_len = -EIO; in btrtl_initialize()
1199 btrtl_dev->ic_info->fw_name); in btrtl_initialize()
1200 btrtl_dev->fw_len = rtl_load_file(hdev, fw_name, in btrtl_initialize()
1201 &btrtl_dev->fw_data); in btrtl_initialize()
1204 if (btrtl_dev->fw_len < 0) { in btrtl_initialize()
1206 btrtl_dev->ic_info->fw_name); in btrtl_initialize()
1207 btrtl_dev->fw_len = rtl_load_file(hdev, fw_name, in btrtl_initialize()
1208 &btrtl_dev->fw_data); in btrtl_initialize()
1211 if (btrtl_dev->fw_len < 0) { in btrtl_initialize()
1213 btrtl_dev->ic_info->fw_name); in btrtl_initialize()
1214 ret = btrtl_dev->fw_len; in btrtl_initialize()
1218 if (btrtl_dev->ic_info->cfg_name && !btrtl_dev->key_id) { in btrtl_initialize()
1221 btrtl_dev->ic_info->cfg_name, postfix); in btrtl_initialize()
1224 btrtl_dev->ic_info->cfg_name); in btrtl_initialize()
1226 btrtl_dev->cfg_len = rtl_load_file(hdev, cfg_name, in btrtl_initialize()
1227 &btrtl_dev->cfg_data); in btrtl_initialize()
1228 if (btrtl_dev->ic_info->config_needed && in btrtl_initialize()
1229 btrtl_dev->cfg_len <= 0) { in btrtl_initialize()
1231 btrtl_dev->ic_info->cfg_name); in btrtl_initialize()
1232 ret = btrtl_dev->cfg_len; in btrtl_initialize()
1242 if (btrtl_dev->ic_info->has_msft_ext) in btrtl_initialize()
1245 if (btrtl_dev->ic_info) in btrtl_initialize()
1246 coredump_info->rtl_dump.controller = btrtl_dev->ic_info->hw_info; in btrtl_initialize()
1248 return btrtl_dev; in btrtl_initialize()
1251 btrtl_free(btrtl_dev); in btrtl_initialize()
1258 struct btrtl_device_info *btrtl_dev) in btrtl_download_firmware() argument
1268 if (!btrtl_dev->ic_info) { in btrtl_download_firmware()
1274 switch (btrtl_dev->ic_info->lmp_subver) { in btrtl_download_firmware()
1276 err = btrtl_setup_rtl8723a(hdev, btrtl_dev); in btrtl_download_firmware()
1286 err = btrtl_setup_rtl8723b(hdev, btrtl_dev); in btrtl_download_firmware()
1300 void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev) in btrtl_set_quirks() argument
1311 switch (btrtl_dev->project_id) { in btrtl_set_quirks()
1325 if (btrtl_dev->project_id == CHIP_ID_8852C) in btrtl_set_quirks()
1328 if (btrtl_dev->project_id == CHIP_ID_8852A || in btrtl_set_quirks()
1329 btrtl_dev->project_id == CHIP_ID_8852B || in btrtl_set_quirks()
1330 btrtl_dev->project_id == CHIP_ID_8852C) in btrtl_set_quirks()
1342 if (!btrtl_dev->ic_info) in btrtl_set_quirks()
1345 switch (btrtl_dev->ic_info->lmp_subver) { in btrtl_set_quirks()
1361 struct btrtl_device_info *btrtl_dev; in btrtl_setup_realtek() local
1364 btrtl_dev = btrtl_initialize(hdev, NULL); in btrtl_setup_realtek()
1365 if (IS_ERR(btrtl_dev)) in btrtl_setup_realtek()
1366 return PTR_ERR(btrtl_dev); in btrtl_setup_realtek()
1368 ret = btrtl_download_firmware(hdev, btrtl_dev); in btrtl_setup_realtek()
1370 btrtl_set_quirks(hdev, btrtl_dev); in btrtl_setup_realtek()
1372 if (btrtl_dev->ic_info) { in btrtl_setup_realtek()
1375 btrtl_dev->ic_info->lmp_subver, in btrtl_setup_realtek()
1376 btrtl_dev->ic_info->hci_rev, in btrtl_setup_realtek()
1377 btrtl_dev->ic_info->hci_ver, in btrtl_setup_realtek()
1378 btrtl_dev->ic_info->hci_bus); in btrtl_setup_realtek()
1381 btrtl_free(btrtl_dev); in btrtl_setup_realtek()
1444 struct btrtl_device_info *btrtl_dev, in btrtl_get_uart_settings() argument
1453 total_data_len = btrtl_dev->cfg_len - sizeof(*config); in btrtl_get_uart_settings()
1459 config = (struct rtl_vendor_config *)btrtl_dev->cfg_data; in btrtl_get_uart_settings()