Lines Matching refs:btrtl_dev
456 struct btrtl_device_info *btrtl_dev) in btrtl_insert_ordered_subsec() argument
462 list_for_each_safe(pos, next, &btrtl_dev->patch_subsecs) { in btrtl_insert_ordered_subsec()
471 struct btrtl_device_info *btrtl_dev, u32 opcode, in btrtl_parse_section() argument
506 if (common_subsec->eco != btrtl_dev->rom_version + 1) in btrtl_parse_section()
512 if (sec_hdr->key_id != btrtl_dev->key_id) in btrtl_parse_section()
524 btrtl_insert_ordered_subsec(subsec, btrtl_dev); in btrtl_parse_section()
532 struct btrtl_device_info *btrtl_dev, in rtlbt_parse_firmware_v2() argument
548 .data = btrtl_dev->fw_data, in rtlbt_parse_firmware_v2()
549 .len = btrtl_dev->fw_len - 7, /* Cut the tail */ in rtlbt_parse_firmware_v2()
559 btrtl_dev->key_id = key_id; in rtlbt_parse_firmware_v2()
584 rc = btrtl_parse_section(hdev, btrtl_dev, opcode, in rtlbt_parse_firmware_v2()
593 rc = btrtl_parse_section(hdev, btrtl_dev, opcode, in rtlbt_parse_firmware_v2()
597 rc = btrtl_parse_section(hdev, btrtl_dev, opcode, in rtlbt_parse_firmware_v2()
621 list_for_each_entry_safe(entry, tmp, &btrtl_dev->patch_subsecs, list) { in rtlbt_parse_firmware_v2()
636 struct btrtl_device_info *btrtl_dev, in rtlbt_parse_firmware() argument
673 if (btrtl_dev->fw_len <= 8) in rtlbt_parse_firmware()
676 if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE, 8)) in rtlbt_parse_firmware()
679 else if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE_V2, 8)) in rtlbt_parse_firmware()
685 if (btrtl_dev->fw_len < min_size) in rtlbt_parse_firmware()
688 fwptr = btrtl_dev->fw_data + btrtl_dev->fw_len - sizeof(extension_sig); in rtlbt_parse_firmware()
700 while (fwptr >= btrtl_dev->fw_data + (sizeof(*epatch_info) + 3)) { in rtlbt_parse_firmware()
731 btrtl_dev->project_id = project_id; in rtlbt_parse_firmware()
741 if (btrtl_dev->ic_info->lmp_subver != in rtlbt_parse_firmware()
745 btrtl_dev->ic_info->lmp_subver); in rtlbt_parse_firmware()
749 if (memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE, 8) != 0) { in rtlbt_parse_firmware()
750 if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE_V2, 8)) in rtlbt_parse_firmware()
751 return rtlbt_parse_firmware_v2(hdev, btrtl_dev, _buf); in rtlbt_parse_firmware()
756 epatch_info = (struct rtl_epatch_header *)btrtl_dev->fw_data; in rtlbt_parse_firmware()
770 if (btrtl_dev->fw_len < min_size) in rtlbt_parse_firmware()
773 chip_id_base = btrtl_dev->fw_data + sizeof(struct rtl_epatch_header); in rtlbt_parse_firmware()
779 if (chip_id == btrtl_dev->rom_version + 1) { in rtlbt_parse_firmware()
790 btrtl_dev->rom_version); in rtlbt_parse_firmware()
796 if (btrtl_dev->fw_len < min_size) in rtlbt_parse_firmware()
807 memcpy(buf, btrtl_dev->fw_data + patch_offset, patch_length - 4); in rtlbt_parse_firmware()
903 struct btrtl_device_info *btrtl_dev) in btrtl_setup_rtl8723a() argument
905 if (btrtl_dev->fw_len < 8) in btrtl_setup_rtl8723a()
911 if (!memcmp(btrtl_dev->fw_data, RTL_EPATCH_SIGNATURE, 8)) { in btrtl_setup_rtl8723a()
916 return rtl_download_firmware(hdev, btrtl_dev->fw_data, in btrtl_setup_rtl8723a()
917 btrtl_dev->fw_len); in btrtl_setup_rtl8723a()
921 struct btrtl_device_info *btrtl_dev) in btrtl_setup_rtl8723b() argument
927 ret = rtlbt_parse_firmware(hdev, btrtl_dev, &fw_data); in btrtl_setup_rtl8723b()
931 if (btrtl_dev->cfg_len > 0) { in btrtl_setup_rtl8723b()
932 tbuff = kvzalloc(ret + btrtl_dev->cfg_len, GFP_KERNEL); in btrtl_setup_rtl8723b()
941 memcpy(tbuff + ret, btrtl_dev->cfg_data, btrtl_dev->cfg_len); in btrtl_setup_rtl8723b()
942 ret += btrtl_dev->cfg_len; in btrtl_setup_rtl8723b()
947 rtl_dev_info(hdev, "cfg_sz %d, total sz %d", btrtl_dev->cfg_len, ret); in btrtl_setup_rtl8723b()
1042 void btrtl_free(struct btrtl_device_info *btrtl_dev) in btrtl_free() argument
1046 kvfree(btrtl_dev->fw_data); in btrtl_free()
1047 kvfree(btrtl_dev->cfg_data); in btrtl_free()
1049 list_for_each_entry_safe(entry, tmp, &btrtl_dev->patch_subsecs, list) { in btrtl_free()
1054 kfree(btrtl_dev); in btrtl_free()
1062 struct btrtl_device_info *btrtl_dev; in btrtl_initialize() local
1073 btrtl_dev = kzalloc(sizeof(*btrtl_dev), GFP_KERNEL); in btrtl_initialize()
1074 if (!btrtl_dev) { in btrtl_initialize()
1079 INIT_LIST_HEAD(&btrtl_dev->patch_subsecs); in btrtl_initialize()
1097 btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, in btrtl_initialize()
1125 btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver, in btrtl_initialize()
1133 if (!btrtl_dev->ic_info && !btrtl_dev->drop_fw) in btrtl_initialize()
1134 btrtl_dev->drop_fw = true; in btrtl_initialize()
1136 btrtl_dev->drop_fw = false; in btrtl_initialize()
1138 if (btrtl_dev->drop_fw) { in btrtl_initialize()
1164 if (!btrtl_dev->ic_info) { in btrtl_initialize()
1167 return btrtl_dev; in btrtl_initialize()
1170 if (btrtl_dev->ic_info->has_rom_version) { in btrtl_initialize()
1171 ret = rtl_read_rom_version(hdev, &btrtl_dev->rom_version); in btrtl_initialize()
1176 if (!btrtl_dev->ic_info->fw_name) { in btrtl_initialize()
1181 btrtl_dev->fw_len = -EIO; in btrtl_initialize()
1184 btrtl_dev->ic_info->fw_name); in btrtl_initialize()
1185 btrtl_dev->fw_len = rtl_load_file(hdev, fw_name, in btrtl_initialize()
1186 &btrtl_dev->fw_data); in btrtl_initialize()
1189 if (btrtl_dev->fw_len < 0) { in btrtl_initialize()
1191 btrtl_dev->ic_info->fw_name); in btrtl_initialize()
1192 btrtl_dev->fw_len = rtl_load_file(hdev, fw_name, in btrtl_initialize()
1193 &btrtl_dev->fw_data); in btrtl_initialize()
1196 if (btrtl_dev->fw_len < 0) { in btrtl_initialize()
1198 btrtl_dev->ic_info->fw_name); in btrtl_initialize()
1199 ret = btrtl_dev->fw_len; in btrtl_initialize()
1203 if (btrtl_dev->ic_info->cfg_name) { in btrtl_initialize()
1206 btrtl_dev->ic_info->cfg_name, postfix); in btrtl_initialize()
1209 btrtl_dev->ic_info->cfg_name); in btrtl_initialize()
1211 btrtl_dev->cfg_len = rtl_load_file(hdev, cfg_name, in btrtl_initialize()
1212 &btrtl_dev->cfg_data); in btrtl_initialize()
1213 if (btrtl_dev->ic_info->config_needed && in btrtl_initialize()
1214 btrtl_dev->cfg_len <= 0) { in btrtl_initialize()
1216 btrtl_dev->ic_info->cfg_name); in btrtl_initialize()
1217 ret = btrtl_dev->cfg_len; in btrtl_initialize()
1227 if (btrtl_dev->ic_info->has_msft_ext) in btrtl_initialize()
1230 if (btrtl_dev->ic_info) in btrtl_initialize()
1231 coredump_info->rtl_dump.controller = btrtl_dev->ic_info->hw_info; in btrtl_initialize()
1233 return btrtl_dev; in btrtl_initialize()
1236 btrtl_free(btrtl_dev); in btrtl_initialize()
1243 struct btrtl_device_info *btrtl_dev) in btrtl_download_firmware() argument
1253 if (!btrtl_dev->ic_info) { in btrtl_download_firmware()
1259 switch (btrtl_dev->ic_info->lmp_subver) { in btrtl_download_firmware()
1261 err = btrtl_setup_rtl8723a(hdev, btrtl_dev); in btrtl_download_firmware()
1271 err = btrtl_setup_rtl8723b(hdev, btrtl_dev); in btrtl_download_firmware()
1285 void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev) in btrtl_set_quirks() argument
1296 switch (btrtl_dev->project_id) { in btrtl_set_quirks()
1309 if (btrtl_dev->project_id == CHIP_ID_8852C) in btrtl_set_quirks()
1312 if (btrtl_dev->project_id == CHIP_ID_8852A || in btrtl_set_quirks()
1313 btrtl_dev->project_id == CHIP_ID_8852B || in btrtl_set_quirks()
1314 btrtl_dev->project_id == CHIP_ID_8852C) in btrtl_set_quirks()
1326 if (!btrtl_dev->ic_info) in btrtl_set_quirks()
1329 switch (btrtl_dev->ic_info->lmp_subver) { in btrtl_set_quirks()
1345 struct btrtl_device_info *btrtl_dev; in btrtl_setup_realtek() local
1348 btrtl_dev = btrtl_initialize(hdev, NULL); in btrtl_setup_realtek()
1349 if (IS_ERR(btrtl_dev)) in btrtl_setup_realtek()
1350 return PTR_ERR(btrtl_dev); in btrtl_setup_realtek()
1352 ret = btrtl_download_firmware(hdev, btrtl_dev); in btrtl_setup_realtek()
1354 btrtl_set_quirks(hdev, btrtl_dev); in btrtl_setup_realtek()
1356 if (btrtl_dev->ic_info) { in btrtl_setup_realtek()
1359 btrtl_dev->ic_info->lmp_subver, in btrtl_setup_realtek()
1360 btrtl_dev->ic_info->hci_rev, in btrtl_setup_realtek()
1361 btrtl_dev->ic_info->hci_ver, in btrtl_setup_realtek()
1362 btrtl_dev->ic_info->hci_bus); in btrtl_setup_realtek()
1365 btrtl_free(btrtl_dev); in btrtl_setup_realtek()
1428 struct btrtl_device_info *btrtl_dev, in btrtl_get_uart_settings() argument
1437 total_data_len = btrtl_dev->cfg_len - sizeof(*config); in btrtl_get_uart_settings()
1443 config = (struct rtl_vendor_config *)btrtl_dev->cfg_data; in btrtl_get_uart_settings()