Lines Matching refs:ipa

111 int ipa_setup(struct ipa *ipa)  in ipa_setup()  argument
115 struct device *dev = ipa->dev; in ipa_setup()
118 ret = gsi_setup(&ipa->gsi); in ipa_setup()
122 ipa_endpoint_setup(ipa); in ipa_setup()
127 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_setup()
132 ret = ipa_mem_setup(ipa); /* No matching teardown required */ in ipa_setup()
136 ret = ipa_table_setup(ipa); /* No matching teardown required */ in ipa_setup()
143 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_setup()
148 ipa_endpoint_default_route_set(ipa, exception_endpoint->endpoint_id); in ipa_setup()
151 ret = ipa_qmi_setup(ipa); in ipa_setup()
155 ipa->setup_complete = true; in ipa_setup()
162 ipa_endpoint_default_route_clear(ipa); in ipa_setup()
167 ipa_endpoint_teardown(ipa); in ipa_setup()
168 gsi_teardown(&ipa->gsi); in ipa_setup()
177 static void ipa_teardown(struct ipa *ipa) in ipa_teardown() argument
183 ipa->setup_complete = false; in ipa_teardown()
185 ipa_qmi_teardown(ipa); in ipa_teardown()
186 ipa_endpoint_default_route_clear(ipa); in ipa_teardown()
187 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_teardown()
189 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_teardown()
191 ipa_endpoint_teardown(ipa); in ipa_teardown()
192 gsi_teardown(&ipa->gsi); in ipa_teardown()
196 ipa_hardware_config_bcr(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_bcr() argument
202 if (ipa->version >= IPA_VERSION_4_5) in ipa_hardware_config_bcr()
205 reg = ipa_reg(ipa, IPA_BCR); in ipa_hardware_config_bcr()
207 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_bcr()
210 static void ipa_hardware_config_tx(struct ipa *ipa) in ipa_hardware_config_tx() argument
212 enum ipa_version version = ipa->version; in ipa_hardware_config_tx()
221 reg = ipa_reg(ipa, IPA_TX_CFG); in ipa_hardware_config_tx()
224 val = ioread32(ipa->reg_virt + offset); in ipa_hardware_config_tx()
228 iowrite32(val, ipa->reg_virt + offset); in ipa_hardware_config_tx()
231 static void ipa_hardware_config_clkon(struct ipa *ipa) in ipa_hardware_config_clkon() argument
233 enum ipa_version version = ipa->version; in ipa_hardware_config_clkon()
244 reg = ipa_reg(ipa, CLKON_CFG); in ipa_hardware_config_clkon()
254 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_clkon()
258 static void ipa_hardware_config_comp(struct ipa *ipa) in ipa_hardware_config_comp() argument
265 if (ipa->version < IPA_VERSION_4_0) in ipa_hardware_config_comp()
268 reg = ipa_reg(ipa, COMP_CFG); in ipa_hardware_config_comp()
271 val = ioread32(ipa->reg_virt + offset); in ipa_hardware_config_comp()
273 if (ipa->version == IPA_VERSION_4_0) { in ipa_hardware_config_comp()
277 } else if (ipa->version < IPA_VERSION_4_5) { in ipa_hardware_config_comp()
286 iowrite32(val, ipa->reg_virt + offset); in ipa_hardware_config_comp()
291 ipa_hardware_config_qsb(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_qsb() argument
304 reg = ipa_reg(ipa, QSB_MAX_WRITES); in ipa_hardware_config_qsb()
310 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_qsb()
313 reg = ipa_reg(ipa, QSB_MAX_READS); in ipa_hardware_config_qsb()
316 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
321 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
326 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_qsb()
360 static void ipa_qtime_config(struct ipa *ipa) in ipa_qtime_config() argument
367 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG); in ipa_qtime_config()
368 iowrite32(0, ipa->reg_virt + reg_offset(reg)); in ipa_qtime_config()
370 reg = ipa_reg(ipa, QTIME_TIMESTAMP_CFG); in ipa_qtime_config()
371 if (ipa->version < IPA_VERSION_5_5) { in ipa_qtime_config()
380 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_qtime_config()
383 reg = ipa_reg(ipa, TIMERS_PULSE_GRAN_CFG); in ipa_qtime_config()
386 if (ipa->version >= IPA_VERSION_5_0) { in ipa_qtime_config()
393 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_qtime_config()
396 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG); in ipa_qtime_config()
401 iowrite32(val, ipa->reg_virt + offset); in ipa_qtime_config()
406 iowrite32(val, ipa->reg_virt + offset); in ipa_qtime_config()
410 static void ipa_hardware_config_counter(struct ipa *ipa) in ipa_hardware_config_counter() argument
416 reg = ipa_reg(ipa, COUNTER_CFG); in ipa_hardware_config_counter()
419 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_counter()
422 static void ipa_hardware_config_timing(struct ipa *ipa) in ipa_hardware_config_timing() argument
424 if (ipa->version < IPA_VERSION_4_5) in ipa_hardware_config_timing()
425 ipa_hardware_config_counter(ipa); in ipa_hardware_config_timing()
427 ipa_qtime_config(ipa); in ipa_hardware_config_timing()
430 static void ipa_hardware_config_hashing(struct ipa *ipa) in ipa_hardware_config_hashing() argument
439 if (ipa->version != IPA_VERSION_4_2) in ipa_hardware_config_hashing()
443 reg = ipa_reg(ipa, FILT_ROUT_HASH_EN); in ipa_hardware_config_hashing()
448 iowrite32(0, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_hashing()
451 static void ipa_idle_indication_cfg(struct ipa *ipa, in ipa_idle_indication_cfg() argument
458 if (ipa->version < IPA_VERSION_3_5_1) in ipa_idle_indication_cfg()
461 reg = ipa_reg(ipa, IDLE_INDICATION_CFG); in ipa_idle_indication_cfg()
467 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_idle_indication_cfg()
478 static void ipa_hardware_dcd_config(struct ipa *ipa) in ipa_hardware_dcd_config() argument
481 ipa_idle_indication_cfg(ipa, 256, false); in ipa_hardware_dcd_config()
484 static void ipa_hardware_dcd_deconfig(struct ipa *ipa) in ipa_hardware_dcd_deconfig() argument
487 ipa_idle_indication_cfg(ipa, 0, true); in ipa_hardware_dcd_deconfig()
495 static void ipa_hardware_config(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config() argument
497 ipa_hardware_config_bcr(ipa, data); in ipa_hardware_config()
498 ipa_hardware_config_tx(ipa); in ipa_hardware_config()
499 ipa_hardware_config_clkon(ipa); in ipa_hardware_config()
500 ipa_hardware_config_comp(ipa); in ipa_hardware_config()
501 ipa_hardware_config_qsb(ipa, data); in ipa_hardware_config()
502 ipa_hardware_config_timing(ipa); in ipa_hardware_config()
503 ipa_hardware_config_hashing(ipa); in ipa_hardware_config()
504 ipa_hardware_dcd_config(ipa); in ipa_hardware_config()
513 static void ipa_hardware_deconfig(struct ipa *ipa) in ipa_hardware_deconfig() argument
516 ipa_hardware_dcd_deconfig(ipa); in ipa_hardware_deconfig()
526 static int ipa_config(struct ipa *ipa, const struct ipa_data *data) in ipa_config() argument
530 ipa_hardware_config(ipa, data); in ipa_config()
532 ret = ipa_mem_config(ipa); in ipa_config()
536 ret = ipa_interrupt_config(ipa); in ipa_config()
540 ipa_uc_config(ipa); in ipa_config()
542 ret = ipa_endpoint_config(ipa); in ipa_config()
546 ipa_table_config(ipa); /* No deconfig required */ in ipa_config()
549 ret = ipa_resource_config(ipa, data->resource_data); in ipa_config()
553 ret = ipa_modem_config(ipa); in ipa_config()
560 ipa_endpoint_deconfig(ipa); in ipa_config()
562 ipa_uc_deconfig(ipa); in ipa_config()
563 ipa_interrupt_deconfig(ipa); in ipa_config()
565 ipa_mem_deconfig(ipa); in ipa_config()
567 ipa_hardware_deconfig(ipa); in ipa_config()
576 static void ipa_deconfig(struct ipa *ipa) in ipa_deconfig() argument
578 ipa_modem_deconfig(ipa); in ipa_deconfig()
579 ipa_endpoint_deconfig(ipa); in ipa_deconfig()
580 ipa_uc_deconfig(ipa); in ipa_deconfig()
581 ipa_interrupt_deconfig(ipa); in ipa_deconfig()
582 ipa_mem_deconfig(ipa); in ipa_deconfig()
583 ipa_hardware_deconfig(ipa); in ipa_deconfig()
801 struct ipa *ipa; in ipa_probe() local
841 ipa = kzalloc(sizeof(*ipa), GFP_KERNEL); in ipa_probe()
842 if (!ipa) { in ipa_probe()
847 ipa->dev = dev; in ipa_probe()
848 dev_set_drvdata(dev, ipa); in ipa_probe()
849 ipa->interrupt = interrupt; in ipa_probe()
850 ipa->power = power; in ipa_probe()
851 ipa->version = data->version; in ipa_probe()
852 ipa->modem_route_count = data->modem_route_count; in ipa_probe()
853 init_completion(&ipa->completion); in ipa_probe()
855 ret = ipa_reg_init(ipa, pdev); in ipa_probe()
859 ret = ipa_mem_init(ipa, pdev, data->mem_data); in ipa_probe()
863 ret = ipa_cmd_init(ipa); in ipa_probe()
867 ret = gsi_init(&ipa->gsi, pdev, ipa->version, data->endpoint_count, in ipa_probe()
873 ret = ipa_endpoint_init(ipa, data->endpoint_count, data->endpoint_data); in ipa_probe()
877 ret = ipa_table_init(ipa); in ipa_probe()
881 ret = ipa_smp2p_init(ipa, pdev, loader == IPA_LOADER_MODEM); in ipa_probe()
890 ret = ipa_config(ipa, data); in ipa_probe()
910 ret = ipa_setup(ipa); in ipa_probe()
920 ipa_deconfig(ipa); in ipa_probe()
923 ipa_smp2p_exit(ipa); in ipa_probe()
925 ipa_table_exit(ipa); in ipa_probe()
927 ipa_endpoint_exit(ipa); in ipa_probe()
929 gsi_exit(&ipa->gsi); in ipa_probe()
931 ipa_mem_exit(ipa); in ipa_probe()
933 ipa_reg_exit(ipa); in ipa_probe()
935 kfree(ipa); in ipa_probe()
949 struct ipa *ipa; in ipa_remove() local
952 ipa = dev_get_drvdata(&pdev->dev); in ipa_remove()
953 dev = ipa->dev; in ipa_remove()
956 power = ipa->power; in ipa_remove()
957 interrupt = ipa->interrupt; in ipa_remove()
962 ipa_smp2p_irq_disable_setup(ipa); in ipa_remove()
968 if (ipa->setup_complete) { in ipa_remove()
969 ret = ipa_modem_stop(ipa); in ipa_remove()
973 ret = ipa_modem_stop(ipa); in ipa_remove()
986 ipa_teardown(ipa); in ipa_remove()
989 ipa_deconfig(ipa); in ipa_remove()
992 ipa_smp2p_exit(ipa); in ipa_remove()
993 ipa_table_exit(ipa); in ipa_remove()
994 ipa_endpoint_exit(ipa); in ipa_remove()
995 gsi_exit(&ipa->gsi); in ipa_remove()
996 ipa_mem_exit(ipa); in ipa_remove()
997 ipa_reg_exit(ipa); in ipa_remove()
998 kfree(ipa); in ipa_remove()