Lines Matching refs:endpoint
90 if (data->endpoint.filter_support) { in ipa_endpoint_data_valid_one()
100 if (data->endpoint.config.status_enable) { in ipa_endpoint_data_valid_one()
101 other_name = data->endpoint.config.tx.status_endpoint; in ipa_endpoint_data_valid_one()
129 if (!other_data->endpoint.config.status_enable) { in ipa_endpoint_data_valid_one()
138 if (data->endpoint.config.dma_mode) { in ipa_endpoint_data_valid_one()
139 other_name = data->endpoint.config.dma_endpoint; in ipa_endpoint_data_valid_one()
227 static struct gsi_trans *ipa_endpoint_trans_alloc(struct ipa_endpoint *endpoint, in ipa_endpoint_trans_alloc() argument
230 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_trans_alloc()
231 u32 channel_id = endpoint->channel_id; in ipa_endpoint_trans_alloc()
234 direction = endpoint->toward_ipa ? DMA_TO_DEVICE : DMA_FROM_DEVICE; in ipa_endpoint_trans_alloc()
243 ipa_endpoint_init_ctrl(struct ipa_endpoint *endpoint, bool suspend_delay) in ipa_endpoint_init_ctrl() argument
245 u32 offset = IPA_REG_ENDP_INIT_CTRL_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_ctrl()
246 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_ctrl()
254 if (endpoint->toward_ipa) in ipa_endpoint_init_ctrl()
259 mask = endpoint->toward_ipa ? ENDP_DELAY_FMASK : ENDP_SUSPEND_FMASK; in ipa_endpoint_init_ctrl()
275 ipa_endpoint_program_delay(struct ipa_endpoint *endpoint, bool enable) in ipa_endpoint_program_delay() argument
277 WARN_ON(!endpoint->toward_ipa); in ipa_endpoint_program_delay()
280 if (endpoint->ipa->version != IPA_VERSION_4_2) in ipa_endpoint_program_delay()
281 (void)ipa_endpoint_init_ctrl(endpoint, enable); in ipa_endpoint_program_delay()
284 static bool ipa_endpoint_aggr_active(struct ipa_endpoint *endpoint) in ipa_endpoint_aggr_active() argument
286 u32 mask = BIT(endpoint->endpoint_id); in ipa_endpoint_aggr_active()
287 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_aggr_active()
299 static void ipa_endpoint_force_close(struct ipa_endpoint *endpoint) in ipa_endpoint_force_close() argument
301 u32 mask = BIT(endpoint->endpoint_id); in ipa_endpoint_force_close()
302 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_force_close()
318 static void ipa_endpoint_suspend_aggr(struct ipa_endpoint *endpoint) in ipa_endpoint_suspend_aggr() argument
320 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_suspend_aggr()
322 if (!endpoint->data->aggregation) in ipa_endpoint_suspend_aggr()
326 if (!ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_suspend_aggr()
330 ipa_endpoint_force_close(endpoint); in ipa_endpoint_suspend_aggr()
337 ipa_endpoint_program_suspend(struct ipa_endpoint *endpoint, bool enable) in ipa_endpoint_program_suspend() argument
341 if (endpoint->ipa->version >= IPA_VERSION_4_0) in ipa_endpoint_program_suspend()
344 WARN_ON(endpoint->toward_ipa); in ipa_endpoint_program_suspend()
346 suspended = ipa_endpoint_init_ctrl(endpoint, enable); in ipa_endpoint_program_suspend()
353 ipa_endpoint_suspend_aggr(endpoint); in ipa_endpoint_program_suspend()
368 struct ipa_endpoint *endpoint = &ipa->endpoint[endpoint_id]; in ipa_endpoint_modem_pause_all() local
370 if (endpoint->ee_id != GSI_EE_MODEM) in ipa_endpoint_modem_pause_all()
374 if (endpoint->toward_ipa) in ipa_endpoint_modem_pause_all()
375 ipa_endpoint_program_delay(endpoint, enable); in ipa_endpoint_modem_pause_all()
377 (void)ipa_endpoint_program_suspend(endpoint, enable); in ipa_endpoint_modem_pause_all()
403 struct ipa_endpoint *endpoint; in ipa_endpoint_modem_exception_reset_all() local
409 endpoint = &ipa->endpoint[endpoint_id]; in ipa_endpoint_modem_exception_reset_all()
410 if (!(endpoint->ee_id == GSI_EE_MODEM && endpoint->toward_ipa)) in ipa_endpoint_modem_exception_reset_all()
432 static void ipa_endpoint_init_cfg(struct ipa_endpoint *endpoint) in ipa_endpoint_init_cfg() argument
434 u32 offset = IPA_REG_ENDP_INIT_CFG_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_cfg()
439 if (endpoint->data->checksum) { in ipa_endpoint_init_cfg()
440 enum ipa_version version = endpoint->ipa->version; in ipa_endpoint_init_cfg()
442 if (endpoint->toward_ipa) { in ipa_endpoint_init_cfg()
465 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_cfg()
468 static void ipa_endpoint_init_nat(struct ipa_endpoint *endpoint) in ipa_endpoint_init_nat() argument
473 if (!endpoint->toward_ipa) in ipa_endpoint_init_nat()
476 offset = IPA_REG_ENDP_INIT_NAT_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_nat()
479 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_nat()
483 ipa_qmap_header_size(enum ipa_version version, struct ipa_endpoint *endpoint) in ipa_qmap_header_size() argument
488 if (!endpoint->data->checksum) in ipa_qmap_header_size()
493 if (endpoint->toward_ipa) in ipa_qmap_header_size()
524 static void ipa_endpoint_init_hdr(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hdr() argument
526 u32 offset = IPA_REG_ENDP_INIT_HDR_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_hdr()
527 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hdr()
530 if (endpoint->data->qmap) { in ipa_endpoint_init_hdr()
534 header_size = ipa_qmap_header_size(version, endpoint); in ipa_endpoint_init_hdr()
538 if (!endpoint->toward_ipa) { in ipa_endpoint_init_hdr()
566 static void ipa_endpoint_init_hdr_ext(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hdr_ext() argument
568 u32 offset = IPA_REG_ENDP_INIT_HDR_EXT_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_hdr_ext()
569 u32 pad_align = endpoint->data->rx.pad_align; in ipa_endpoint_init_hdr_ext()
570 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hdr_ext()
581 if (endpoint->data->qmap && !endpoint->toward_ipa) { in ipa_endpoint_init_hdr_ext()
589 if (!endpoint->toward_ipa) in ipa_endpoint_init_hdr_ext()
597 if (endpoint->data->qmap && !endpoint->toward_ipa) { in ipa_endpoint_init_hdr_ext()
610 static void ipa_endpoint_init_hdr_metadata_mask(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hdr_metadata_mask() argument
612 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hdr_metadata_mask()
616 if (endpoint->toward_ipa) in ipa_endpoint_init_hdr_metadata_mask()
622 if (endpoint->data->qmap) in ipa_endpoint_init_hdr_metadata_mask()
625 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_hdr_metadata_mask()
628 static void ipa_endpoint_init_mode(struct ipa_endpoint *endpoint) in ipa_endpoint_init_mode() argument
630 u32 offset = IPA_REG_ENDP_INIT_MODE_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_mode()
633 if (!endpoint->toward_ipa) in ipa_endpoint_init_mode()
636 if (endpoint->data->dma_mode) { in ipa_endpoint_init_mode()
637 enum ipa_endpoint_name name = endpoint->data->dma_endpoint; in ipa_endpoint_init_mode()
640 dma_endpoint_id = endpoint->ipa->name_map[name]->endpoint_id; in ipa_endpoint_init_mode()
649 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_mode()
717 static void ipa_endpoint_init_aggr(struct ipa_endpoint *endpoint) in ipa_endpoint_init_aggr() argument
719 u32 offset = IPA_REG_ENDP_INIT_AGGR_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_aggr()
720 enum ipa_version version = endpoint->ipa->version; in ipa_endpoint_init_aggr()
723 if (endpoint->data->aggregation) { in ipa_endpoint_init_aggr()
724 if (!endpoint->toward_ipa) { in ipa_endpoint_init_aggr()
739 close_eof = endpoint->data->rx.aggr_close_eof; in ipa_endpoint_init_aggr()
756 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_aggr()
848 static void ipa_endpoint_init_hol_block_timer(struct ipa_endpoint *endpoint, in ipa_endpoint_init_hol_block_timer() argument
851 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hol_block_timer()
852 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hol_block_timer()
863 ipa_endpoint_init_hol_block_enable(struct ipa_endpoint *endpoint, bool enable) in ipa_endpoint_init_hol_block_enable() argument
865 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hol_block_enable()
871 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_hol_block_enable()
873 if (enable && endpoint->ipa->version >= IPA_VERSION_4_5) in ipa_endpoint_init_hol_block_enable()
874 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_hol_block_enable()
882 struct ipa_endpoint *endpoint = &ipa->endpoint[i]; in ipa_endpoint_modem_hol_block_clear_all() local
884 if (endpoint->toward_ipa || endpoint->ee_id != GSI_EE_MODEM) in ipa_endpoint_modem_hol_block_clear_all()
887 ipa_endpoint_init_hol_block_enable(endpoint, false); in ipa_endpoint_modem_hol_block_clear_all()
888 ipa_endpoint_init_hol_block_timer(endpoint, 0); in ipa_endpoint_modem_hol_block_clear_all()
889 ipa_endpoint_init_hol_block_enable(endpoint, true); in ipa_endpoint_modem_hol_block_clear_all()
893 static void ipa_endpoint_init_deaggr(struct ipa_endpoint *endpoint) in ipa_endpoint_init_deaggr() argument
895 u32 offset = IPA_REG_ENDP_INIT_DEAGGR_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_deaggr()
898 if (!endpoint->toward_ipa) in ipa_endpoint_init_deaggr()
906 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_deaggr()
909 static void ipa_endpoint_init_rsrc_grp(struct ipa_endpoint *endpoint) in ipa_endpoint_init_rsrc_grp() argument
911 u32 offset = IPA_REG_ENDP_INIT_RSRC_GRP_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_rsrc_grp()
912 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_rsrc_grp()
915 val = rsrc_grp_encoded(ipa->version, endpoint->data->resource_group); in ipa_endpoint_init_rsrc_grp()
919 static void ipa_endpoint_init_seq(struct ipa_endpoint *endpoint) in ipa_endpoint_init_seq() argument
921 u32 offset = IPA_REG_ENDP_INIT_SEQ_N_OFFSET(endpoint->endpoint_id); in ipa_endpoint_init_seq()
924 if (!endpoint->toward_ipa) in ipa_endpoint_init_seq()
928 val |= u32_encode_bits(endpoint->data->tx.seq_type, SEQ_TYPE_FMASK); in ipa_endpoint_init_seq()
931 val |= u32_encode_bits(endpoint->data->tx.seq_rep_type, in ipa_endpoint_init_seq()
934 iowrite32(val, endpoint->ipa->reg_virt + offset); in ipa_endpoint_init_seq()
944 int ipa_endpoint_skb_tx(struct ipa_endpoint *endpoint, struct sk_buff *skb) in ipa_endpoint_skb_tx() argument
955 if (1 + nr_frags > endpoint->trans_tre_max) { in ipa_endpoint_skb_tx()
961 trans = ipa_endpoint_trans_alloc(endpoint, 1 + nr_frags); in ipa_endpoint_skb_tx()
980 static void ipa_endpoint_status(struct ipa_endpoint *endpoint) in ipa_endpoint_status() argument
982 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_status()
983 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_status()
989 if (endpoint->data->status_enable) { in ipa_endpoint_status()
991 if (endpoint->toward_ipa) { in ipa_endpoint_status()
995 name = endpoint->data->tx.status_endpoint; in ipa_endpoint_status()
1010 static int ipa_endpoint_replenish_one(struct ipa_endpoint *endpoint) in ipa_endpoint_replenish_one() argument
1023 trans = ipa_endpoint_trans_alloc(endpoint, 1); in ipa_endpoint_replenish_one()
1036 if (++endpoint->replenish_ready == IPA_REPLENISH_BATCH) { in ipa_endpoint_replenish_one()
1038 endpoint->replenish_ready = 0; in ipa_endpoint_replenish_one()
1066 static void ipa_endpoint_replenish(struct ipa_endpoint *endpoint, bool add_one) in ipa_endpoint_replenish() argument
1071 if (!endpoint->replenish_enabled) { in ipa_endpoint_replenish()
1073 atomic_inc(&endpoint->replenish_saved); in ipa_endpoint_replenish()
1077 while (atomic_dec_not_zero(&endpoint->replenish_backlog)) in ipa_endpoint_replenish()
1078 if (ipa_endpoint_replenish_one(endpoint)) in ipa_endpoint_replenish()
1081 atomic_inc(&endpoint->replenish_backlog); in ipa_endpoint_replenish()
1087 backlog = atomic_inc_return(&endpoint->replenish_backlog); in ipa_endpoint_replenish()
1090 atomic_inc(&endpoint->replenish_backlog); in ipa_endpoint_replenish()
1098 gsi = &endpoint->ipa->gsi; in ipa_endpoint_replenish()
1099 if (backlog == gsi_channel_tre_max(gsi, endpoint->channel_id)) in ipa_endpoint_replenish()
1100 schedule_delayed_work(&endpoint->replenish_work, in ipa_endpoint_replenish()
1104 static void ipa_endpoint_replenish_enable(struct ipa_endpoint *endpoint) in ipa_endpoint_replenish_enable() argument
1106 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_replenish_enable()
1110 endpoint->replenish_enabled = true; in ipa_endpoint_replenish_enable()
1111 while ((saved = atomic_xchg(&endpoint->replenish_saved, 0))) in ipa_endpoint_replenish_enable()
1112 atomic_add(saved, &endpoint->replenish_backlog); in ipa_endpoint_replenish_enable()
1115 max_backlog = gsi_channel_tre_max(gsi, endpoint->channel_id); in ipa_endpoint_replenish_enable()
1116 if (atomic_read(&endpoint->replenish_backlog) == max_backlog) in ipa_endpoint_replenish_enable()
1117 ipa_endpoint_replenish(endpoint, false); in ipa_endpoint_replenish_enable()
1120 static void ipa_endpoint_replenish_disable(struct ipa_endpoint *endpoint) in ipa_endpoint_replenish_disable() argument
1124 endpoint->replenish_enabled = false; in ipa_endpoint_replenish_disable()
1125 while ((backlog = atomic_xchg(&endpoint->replenish_backlog, 0))) in ipa_endpoint_replenish_disable()
1126 atomic_add(backlog, &endpoint->replenish_saved); in ipa_endpoint_replenish_disable()
1132 struct ipa_endpoint *endpoint; in ipa_endpoint_replenish_work() local
1134 endpoint = container_of(dwork, struct ipa_endpoint, replenish_work); in ipa_endpoint_replenish_work()
1136 ipa_endpoint_replenish(endpoint, false); in ipa_endpoint_replenish_work()
1139 static void ipa_endpoint_skb_copy(struct ipa_endpoint *endpoint, in ipa_endpoint_skb_copy() argument
1152 if (endpoint->netdev) in ipa_endpoint_skb_copy()
1153 ipa_modem_skb_rx(endpoint->netdev, skb); in ipa_endpoint_skb_copy()
1158 static bool ipa_endpoint_skb_build(struct ipa_endpoint *endpoint, in ipa_endpoint_skb_build() argument
1164 if (!endpoint->netdev) in ipa_endpoint_skb_build()
1177 ipa_modem_skb_rx(endpoint->netdev, skb); in ipa_endpoint_skb_build()
1198 static bool ipa_endpoint_status_skip(struct ipa_endpoint *endpoint, in ipa_endpoint_status_skip() argument
1209 if (endpoint_id != endpoint->endpoint_id) in ipa_endpoint_status_skip()
1215 static bool ipa_endpoint_status_tag(struct ipa_endpoint *endpoint, in ipa_endpoint_status_tag() argument
1219 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_status_tag()
1245 static bool ipa_endpoint_status_drop(struct ipa_endpoint *endpoint, in ipa_endpoint_status_drop() argument
1251 if (ipa_endpoint_status_tag(endpoint, status)) in ipa_endpoint_status_drop()
1264 static void ipa_endpoint_status_parse(struct ipa_endpoint *endpoint, in ipa_endpoint_status_parse() argument
1277 dev_err(&endpoint->ipa->pdev->dev, in ipa_endpoint_status_parse()
1284 if (ipa_endpoint_status_skip(endpoint, status)) { in ipa_endpoint_status_parse()
1296 align = endpoint->data->rx.pad_align ? : 1; in ipa_endpoint_status_parse()
1299 if (endpoint->data->checksum) in ipa_endpoint_status_parse()
1302 if (!ipa_endpoint_status_drop(endpoint, status)) { in ipa_endpoint_status_parse()
1317 ipa_endpoint_skb_copy(endpoint, data2, len2, extra); in ipa_endpoint_status_parse()
1327 static void ipa_endpoint_tx_complete(struct ipa_endpoint *endpoint, in ipa_endpoint_tx_complete() argument
1333 static void ipa_endpoint_rx_complete(struct ipa_endpoint *endpoint, in ipa_endpoint_rx_complete() argument
1338 ipa_endpoint_replenish(endpoint, true); in ipa_endpoint_rx_complete()
1345 if (endpoint->data->status_enable) in ipa_endpoint_rx_complete()
1346 ipa_endpoint_status_parse(endpoint, page, trans->len); in ipa_endpoint_rx_complete()
1347 else if (ipa_endpoint_skb_build(endpoint, page, trans->len)) in ipa_endpoint_rx_complete()
1351 void ipa_endpoint_trans_complete(struct ipa_endpoint *endpoint, in ipa_endpoint_trans_complete() argument
1354 if (endpoint->toward_ipa) in ipa_endpoint_trans_complete()
1355 ipa_endpoint_tx_complete(endpoint, trans); in ipa_endpoint_trans_complete()
1357 ipa_endpoint_rx_complete(endpoint, trans); in ipa_endpoint_trans_complete()
1360 void ipa_endpoint_trans_release(struct ipa_endpoint *endpoint, in ipa_endpoint_trans_release() argument
1363 if (endpoint->toward_ipa) { in ipa_endpoint_trans_release()
1364 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_trans_release()
1367 if (endpoint != ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]) { in ipa_endpoint_trans_release()
1410 static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint) in ipa_endpoint_reset_rx_aggr() argument
1412 struct device *dev = &endpoint->ipa->pdev->dev; in ipa_endpoint_reset_rx_aggr()
1413 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_reset_rx_aggr()
1433 ipa_endpoint_force_close(endpoint); in ipa_endpoint_reset_rx_aggr()
1440 gsi_channel_reset(gsi, endpoint->channel_id, false); in ipa_endpoint_reset_rx_aggr()
1443 suspended = ipa_endpoint_program_suspend(endpoint, false); in ipa_endpoint_reset_rx_aggr()
1446 ret = gsi_channel_start(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1450 ret = gsi_trans_read_byte(gsi, endpoint->channel_id, addr); in ipa_endpoint_reset_rx_aggr()
1457 if (!ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_reset_rx_aggr()
1463 if (ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_reset_rx_aggr()
1465 endpoint->endpoint_id); in ipa_endpoint_reset_rx_aggr()
1467 gsi_trans_read_byte_done(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1469 ret = gsi_channel_stop(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1478 gsi_channel_reset(gsi, endpoint->channel_id, true); in ipa_endpoint_reset_rx_aggr()
1485 (void)gsi_channel_stop(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1488 (void)ipa_endpoint_program_suspend(endpoint, true); in ipa_endpoint_reset_rx_aggr()
1496 static void ipa_endpoint_reset(struct ipa_endpoint *endpoint) in ipa_endpoint_reset() argument
1498 u32 channel_id = endpoint->channel_id; in ipa_endpoint_reset()
1499 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_reset()
1507 special = ipa->version < IPA_VERSION_4_0 && !endpoint->toward_ipa && in ipa_endpoint_reset()
1508 endpoint->data->aggregation; in ipa_endpoint_reset()
1509 if (special && ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_reset()
1510 ret = ipa_endpoint_reset_rx_aggr(endpoint); in ipa_endpoint_reset()
1517 ret, endpoint->channel_id, endpoint->endpoint_id); in ipa_endpoint_reset()
1520 static void ipa_endpoint_program(struct ipa_endpoint *endpoint) in ipa_endpoint_program() argument
1522 if (endpoint->toward_ipa) in ipa_endpoint_program()
1523 ipa_endpoint_program_delay(endpoint, false); in ipa_endpoint_program()
1525 (void)ipa_endpoint_program_suspend(endpoint, false); in ipa_endpoint_program()
1526 ipa_endpoint_init_cfg(endpoint); in ipa_endpoint_program()
1527 ipa_endpoint_init_nat(endpoint); in ipa_endpoint_program()
1528 ipa_endpoint_init_hdr(endpoint); in ipa_endpoint_program()
1529 ipa_endpoint_init_hdr_ext(endpoint); in ipa_endpoint_program()
1530 ipa_endpoint_init_hdr_metadata_mask(endpoint); in ipa_endpoint_program()
1531 ipa_endpoint_init_mode(endpoint); in ipa_endpoint_program()
1532 ipa_endpoint_init_aggr(endpoint); in ipa_endpoint_program()
1533 ipa_endpoint_init_deaggr(endpoint); in ipa_endpoint_program()
1534 ipa_endpoint_init_rsrc_grp(endpoint); in ipa_endpoint_program()
1535 ipa_endpoint_init_seq(endpoint); in ipa_endpoint_program()
1536 ipa_endpoint_status(endpoint); in ipa_endpoint_program()
1539 int ipa_endpoint_enable_one(struct ipa_endpoint *endpoint) in ipa_endpoint_enable_one() argument
1541 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_enable_one()
1545 ret = gsi_channel_start(gsi, endpoint->channel_id); in ipa_endpoint_enable_one()
1549 ret, endpoint->toward_ipa ? 'T' : 'R', in ipa_endpoint_enable_one()
1550 endpoint->channel_id, endpoint->endpoint_id); in ipa_endpoint_enable_one()
1554 if (!endpoint->toward_ipa) { in ipa_endpoint_enable_one()
1556 endpoint->endpoint_id); in ipa_endpoint_enable_one()
1557 ipa_endpoint_replenish_enable(endpoint); in ipa_endpoint_enable_one()
1560 ipa->enabled |= BIT(endpoint->endpoint_id); in ipa_endpoint_enable_one()
1565 void ipa_endpoint_disable_one(struct ipa_endpoint *endpoint) in ipa_endpoint_disable_one() argument
1567 u32 mask = BIT(endpoint->endpoint_id); in ipa_endpoint_disable_one()
1568 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_disable_one()
1577 if (!endpoint->toward_ipa) { in ipa_endpoint_disable_one()
1578 ipa_endpoint_replenish_disable(endpoint); in ipa_endpoint_disable_one()
1580 endpoint->endpoint_id); in ipa_endpoint_disable_one()
1584 ret = gsi_channel_stop(gsi, endpoint->channel_id); in ipa_endpoint_disable_one()
1588 endpoint->endpoint_id); in ipa_endpoint_disable_one()
1591 void ipa_endpoint_suspend_one(struct ipa_endpoint *endpoint) in ipa_endpoint_suspend_one() argument
1593 struct device *dev = &endpoint->ipa->pdev->dev; in ipa_endpoint_suspend_one()
1594 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_suspend_one()
1597 if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id))) in ipa_endpoint_suspend_one()
1600 if (!endpoint->toward_ipa) { in ipa_endpoint_suspend_one()
1601 ipa_endpoint_replenish_disable(endpoint); in ipa_endpoint_suspend_one()
1602 (void)ipa_endpoint_program_suspend(endpoint, true); in ipa_endpoint_suspend_one()
1605 ret = gsi_channel_suspend(gsi, endpoint->channel_id); in ipa_endpoint_suspend_one()
1608 endpoint->channel_id); in ipa_endpoint_suspend_one()
1611 void ipa_endpoint_resume_one(struct ipa_endpoint *endpoint) in ipa_endpoint_resume_one() argument
1613 struct device *dev = &endpoint->ipa->pdev->dev; in ipa_endpoint_resume_one()
1614 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_resume_one()
1617 if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id))) in ipa_endpoint_resume_one()
1620 if (!endpoint->toward_ipa) in ipa_endpoint_resume_one()
1621 (void)ipa_endpoint_program_suspend(endpoint, false); in ipa_endpoint_resume_one()
1623 ret = gsi_channel_resume(gsi, endpoint->channel_id); in ipa_endpoint_resume_one()
1626 endpoint->channel_id); in ipa_endpoint_resume_one()
1627 else if (!endpoint->toward_ipa) in ipa_endpoint_resume_one()
1628 ipa_endpoint_replenish_enable(endpoint); in ipa_endpoint_resume_one()
1655 static void ipa_endpoint_setup_one(struct ipa_endpoint *endpoint) in ipa_endpoint_setup_one() argument
1657 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_setup_one()
1658 u32 channel_id = endpoint->channel_id; in ipa_endpoint_setup_one()
1661 if (endpoint->ee_id != GSI_EE_AP) in ipa_endpoint_setup_one()
1664 endpoint->trans_tre_max = gsi_channel_trans_tre_max(gsi, channel_id); in ipa_endpoint_setup_one()
1665 if (!endpoint->toward_ipa) { in ipa_endpoint_setup_one()
1669 endpoint->replenish_enabled = false; in ipa_endpoint_setup_one()
1670 atomic_set(&endpoint->replenish_saved, in ipa_endpoint_setup_one()
1671 gsi_channel_tre_max(gsi, endpoint->channel_id)); in ipa_endpoint_setup_one()
1672 atomic_set(&endpoint->replenish_backlog, 0); in ipa_endpoint_setup_one()
1673 INIT_DELAYED_WORK(&endpoint->replenish_work, in ipa_endpoint_setup_one()
1677 ipa_endpoint_program(endpoint); in ipa_endpoint_setup_one()
1679 endpoint->ipa->set_up |= BIT(endpoint->endpoint_id); in ipa_endpoint_setup_one()
1682 static void ipa_endpoint_teardown_one(struct ipa_endpoint *endpoint) in ipa_endpoint_teardown_one() argument
1684 endpoint->ipa->set_up &= ~BIT(endpoint->endpoint_id); in ipa_endpoint_teardown_one()
1686 if (!endpoint->toward_ipa) in ipa_endpoint_teardown_one()
1687 cancel_delayed_work_sync(&endpoint->replenish_work); in ipa_endpoint_teardown_one()
1689 ipa_endpoint_reset(endpoint); in ipa_endpoint_teardown_one()
1702 ipa_endpoint_setup_one(&ipa->endpoint[endpoint_id]); in ipa_endpoint_setup()
1715 ipa_endpoint_teardown_one(&ipa->endpoint[endpoint_id]); in ipa_endpoint_teardown()
1777 struct ipa_endpoint *endpoint; in ipa_endpoint_config() local
1782 endpoint = &ipa->endpoint[endpoint_id]; in ipa_endpoint_config()
1783 if ((endpoint_id < rx_base) != endpoint->toward_ipa) { in ipa_endpoint_config()
1801 struct ipa_endpoint *endpoint; in ipa_endpoint_init_one() local
1803 endpoint = &ipa->endpoint[data->endpoint_id]; in ipa_endpoint_init_one()
1806 ipa->channel_map[data->channel_id] = endpoint; in ipa_endpoint_init_one()
1807 ipa->name_map[name] = endpoint; in ipa_endpoint_init_one()
1809 endpoint->ipa = ipa; in ipa_endpoint_init_one()
1810 endpoint->ee_id = data->ee_id; in ipa_endpoint_init_one()
1811 endpoint->channel_id = data->channel_id; in ipa_endpoint_init_one()
1812 endpoint->endpoint_id = data->endpoint_id; in ipa_endpoint_init_one()
1813 endpoint->toward_ipa = data->toward_ipa; in ipa_endpoint_init_one()
1814 endpoint->data = &data->endpoint.config; in ipa_endpoint_init_one()
1816 ipa->initialized |= BIT(endpoint->endpoint_id); in ipa_endpoint_init_one()
1819 static void ipa_endpoint_exit_one(struct ipa_endpoint *endpoint) in ipa_endpoint_exit_one() argument
1821 endpoint->ipa->initialized &= ~BIT(endpoint->endpoint_id); in ipa_endpoint_exit_one()
1823 memset(endpoint, 0, sizeof(*endpoint)); in ipa_endpoint_exit_one()
1835 ipa_endpoint_exit_one(&ipa->endpoint[endpoint_id]); in ipa_endpoint_exit()
1860 if (data->endpoint.filter_support) in ipa_endpoint_init()