Lines Matching full:endpoint

109 		if (data->endpoint.filter_support) {  in ipa_endpoint_data_valid_one()
111 "RX endpoint %u\n", in ipa_endpoint_data_valid_one()
120 rx_config = &data->endpoint.config.rx; in ipa_endpoint_data_valid_one()
126 dev_err(dev, "RX buffer size too small for RX endpoint %u (%u < %u)\n", in ipa_endpoint_data_valid_one()
131 if (!data->endpoint.config.aggregation) { in ipa_endpoint_data_valid_one()
137 "time limit with no aggregation for RX endpoint %u\n", in ipa_endpoint_data_valid_one()
143 dev_err(dev, "hard limit with no aggregation for RX endpoint %u\n", in ipa_endpoint_data_valid_one()
149 dev_err(dev, "close EOF with no aggregation for RX endpoint %u\n", in ipa_endpoint_data_valid_one()
157 /* For an endpoint supporting receive aggregation, the byte in ipa_endpoint_data_valid_one()
169 dev_err(dev, "aggregated size too large for RX endpoint %u (%u KB > %u KB)\n", in ipa_endpoint_data_valid_one()
180 if (data->endpoint.config.tx.seq_rep_type) { in ipa_endpoint_data_valid_one()
181 dev_err(dev, "no-zero seq_rep_type TX endpoint %u\n", in ipa_endpoint_data_valid_one()
187 if (data->endpoint.config.status_enable) { in ipa_endpoint_data_valid_one()
188 other_name = data->endpoint.config.tx.status_endpoint; in ipa_endpoint_data_valid_one()
190 dev_err(dev, "status endpoint name %u out of range " in ipa_endpoint_data_valid_one()
191 "for endpoint %u\n", in ipa_endpoint_data_valid_one()
196 /* Status endpoint must be defined... */ in ipa_endpoint_data_valid_one()
199 dev_err(dev, "DMA endpoint name %u undefined " in ipa_endpoint_data_valid_one()
200 "for endpoint %u\n", in ipa_endpoint_data_valid_one()
205 /* ...and has to be an RX endpoint... */ in ipa_endpoint_data_valid_one()
208 "status endpoint for endpoint %u not RX\n", in ipa_endpoint_data_valid_one()
213 /* ...and if it's to be an AP endpoint... */ in ipa_endpoint_data_valid_one()
216 if (!other_data->endpoint.config.status_enable) { in ipa_endpoint_data_valid_one()
218 "status not enabled for endpoint %u\n", in ipa_endpoint_data_valid_one()
225 if (data->endpoint.config.dma_mode) { in ipa_endpoint_data_valid_one()
226 other_name = data->endpoint.config.dma_endpoint; in ipa_endpoint_data_valid_one()
228 dev_err(dev, "DMA endpoint name %u out of range " in ipa_endpoint_data_valid_one()
229 "for endpoint %u\n", in ipa_endpoint_data_valid_one()
236 dev_err(dev, "DMA endpoint name %u undefined " in ipa_endpoint_data_valid_one()
237 "for endpoint %u\n", in ipa_endpoint_data_valid_one()
261 dev_err(dev, "command TX endpoint not defined\n"); in ipa_endpoint_data_valid()
265 dev_err(dev, "LAN RX endpoint not defined\n"); in ipa_endpoint_data_valid()
269 dev_err(dev, "AP->modem TX endpoint not defined\n"); in ipa_endpoint_data_valid()
273 dev_err(dev, "AP<-modem RX endpoint not defined\n"); in ipa_endpoint_data_valid()
284 /* Allocate a transaction to use on a non-command endpoint */
285 static struct gsi_trans *ipa_endpoint_trans_alloc(struct ipa_endpoint *endpoint, in ipa_endpoint_trans_alloc() argument
288 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_trans_alloc()
289 u32 channel_id = endpoint->channel_id; in ipa_endpoint_trans_alloc()
292 direction = endpoint->toward_ipa ? DMA_TO_DEVICE : DMA_FROM_DEVICE; in ipa_endpoint_trans_alloc()
302 ipa_endpoint_init_ctrl(struct ipa_endpoint *endpoint, bool suspend_delay) in ipa_endpoint_init_ctrl() argument
304 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_ctrl()
312 if (endpoint->toward_ipa) in ipa_endpoint_init_ctrl()
318 offset = ipa_reg_n_offset(reg, endpoint->endpoint_id); in ipa_endpoint_init_ctrl()
321 field_id = endpoint->toward_ipa ? ENDP_DELAY : ENDP_SUSPEND; in ipa_endpoint_init_ctrl()
337 ipa_endpoint_program_delay(struct ipa_endpoint *endpoint, bool enable) in ipa_endpoint_program_delay() argument
340 WARN_ON(endpoint->ipa->version >= IPA_VERSION_4_2); in ipa_endpoint_program_delay()
341 WARN_ON(!endpoint->toward_ipa); in ipa_endpoint_program_delay()
343 (void)ipa_endpoint_init_ctrl(endpoint, enable); in ipa_endpoint_program_delay()
346 static bool ipa_endpoint_aggr_active(struct ipa_endpoint *endpoint) in ipa_endpoint_aggr_active() argument
348 u32 mask = BIT(endpoint->endpoint_id); in ipa_endpoint_aggr_active()
349 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_aggr_active()
361 static void ipa_endpoint_force_close(struct ipa_endpoint *endpoint) in ipa_endpoint_force_close() argument
363 u32 mask = BIT(endpoint->endpoint_id); in ipa_endpoint_force_close()
364 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_force_close()
375 * @endpoint: Endpoint on which to emulate a suspend
377 * Emulate suspend IPA interrupt to unsuspend an endpoint suspended
382 static void ipa_endpoint_suspend_aggr(struct ipa_endpoint *endpoint) in ipa_endpoint_suspend_aggr() argument
384 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_suspend_aggr()
386 if (!endpoint->config.aggregation) in ipa_endpoint_suspend_aggr()
389 /* Nothing to do if the endpoint doesn't have aggregation open */ in ipa_endpoint_suspend_aggr()
390 if (!ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_suspend_aggr()
394 ipa_endpoint_force_close(endpoint); in ipa_endpoint_suspend_aggr()
401 ipa_endpoint_program_suspend(struct ipa_endpoint *endpoint, bool enable) in ipa_endpoint_program_suspend() argument
405 if (endpoint->ipa->version >= IPA_VERSION_4_0) in ipa_endpoint_program_suspend()
408 WARN_ON(endpoint->toward_ipa); in ipa_endpoint_program_suspend()
410 suspended = ipa_endpoint_init_ctrl(endpoint, enable); in ipa_endpoint_program_suspend()
417 ipa_endpoint_suspend_aggr(endpoint); in ipa_endpoint_program_suspend()
423 * on all modem TX endpoints. Prior to IPA v4.2, endpoint DELAY mode is
432 struct ipa_endpoint *endpoint = &ipa->endpoint[endpoint_id]; in ipa_endpoint_modem_pause_all() local
434 if (endpoint->ee_id != GSI_EE_MODEM) in ipa_endpoint_modem_pause_all()
437 if (!endpoint->toward_ipa) in ipa_endpoint_modem_pause_all()
438 (void)ipa_endpoint_program_suspend(endpoint, enable); in ipa_endpoint_modem_pause_all()
440 ipa_endpoint_program_delay(endpoint, enable); in ipa_endpoint_modem_pause_all()
443 endpoint->channel_id, in ipa_endpoint_modem_pause_all()
448 /* Reset all modem endpoints to use the default exception endpoint */
455 /* We need one command per modem TX endpoint, plus the commands in ipa_endpoint_modem_exception_reset_all()
468 struct ipa_endpoint *endpoint; in ipa_endpoint_modem_exception_reset_all() local
475 endpoint = &ipa->endpoint[endpoint_id]; in ipa_endpoint_modem_exception_reset_all()
476 if (!(endpoint->ee_id == GSI_EE_MODEM && endpoint->toward_ipa)) in ipa_endpoint_modem_exception_reset_all()
483 * means status is disabled on the endpoint, and as a in ipa_endpoint_modem_exception_reset_all()
498 static void ipa_endpoint_init_cfg(struct ipa_endpoint *endpoint) in ipa_endpoint_init_cfg() argument
500 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_cfg()
501 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_cfg()
508 if (endpoint->config.checksum) { in ipa_endpoint_init_cfg()
511 if (endpoint->toward_ipa) { in ipa_endpoint_init_cfg()
535 static void ipa_endpoint_init_nat(struct ipa_endpoint *endpoint) in ipa_endpoint_init_nat() argument
537 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_nat()
538 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_nat()
542 if (!endpoint->toward_ipa) in ipa_endpoint_init_nat()
552 ipa_qmap_header_size(enum ipa_version version, struct ipa_endpoint *endpoint) in ipa_qmap_header_size() argument
557 if (!endpoint->config.checksum) in ipa_qmap_header_size()
562 if (endpoint->toward_ipa) in ipa_qmap_header_size()
617 * ipa_endpoint_init_hdr() - Initialize HDR endpoint configuration register
618 * @endpoint: Endpoint pointer
632 * endpoint's METADATA_MASK register defines which byte within the modem
637 static void ipa_endpoint_init_hdr(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hdr() argument
639 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hdr()
640 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hdr()
645 if (endpoint->config.qmap) { in ipa_endpoint_init_hdr()
649 header_size = ipa_qmap_header_size(version, endpoint); in ipa_endpoint_init_hdr()
653 if (!endpoint->toward_ipa) { in ipa_endpoint_init_hdr()
681 static void ipa_endpoint_init_hdr_ext(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hdr_ext() argument
683 u32 pad_align = endpoint->config.rx.pad_align; in ipa_endpoint_init_hdr_ext()
684 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hdr_ext()
685 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hdr_ext()
690 if (endpoint->config.qmap) { in ipa_endpoint_init_hdr_ext()
701 if (!endpoint->toward_ipa) { in ipa_endpoint_init_hdr_ext()
710 if (!endpoint->toward_ipa) in ipa_endpoint_init_hdr_ext()
718 if (endpoint->config.qmap && !endpoint->toward_ipa) { in ipa_endpoint_init_hdr_ext()
733 static void ipa_endpoint_init_hdr_metadata_mask(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hdr_metadata_mask() argument
735 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hdr_metadata_mask()
736 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hdr_metadata_mask()
741 if (endpoint->toward_ipa) in ipa_endpoint_init_hdr_metadata_mask()
748 if (endpoint->config.qmap) in ipa_endpoint_init_hdr_metadata_mask()
754 static void ipa_endpoint_init_mode(struct ipa_endpoint *endpoint) in ipa_endpoint_init_mode() argument
756 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_mode()
761 if (!endpoint->toward_ipa) in ipa_endpoint_init_mode()
765 if (endpoint->config.dma_mode) { in ipa_endpoint_init_mode()
766 enum ipa_endpoint_name name = endpoint->config.dma_endpoint; in ipa_endpoint_init_mode()
776 offset = ipa_reg_n_offset(reg, endpoint->endpoint_id); in ipa_endpoint_init_mode()
840 static void ipa_endpoint_init_aggr(struct ipa_endpoint *endpoint) in ipa_endpoint_init_aggr() argument
842 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_aggr()
843 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_aggr()
848 if (endpoint->config.aggregation) { in ipa_endpoint_init_aggr()
849 if (!endpoint->toward_ipa) { in ipa_endpoint_init_aggr()
854 rx_config = &endpoint->config.rx; in ipa_endpoint_init_aggr()
961 static void ipa_endpoint_init_hol_block_timer(struct ipa_endpoint *endpoint, in ipa_endpoint_init_hol_block_timer() argument
964 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hol_block_timer()
965 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hol_block_timer()
977 ipa_endpoint_init_hol_block_en(struct ipa_endpoint *endpoint, bool enable) in ipa_endpoint_init_hol_block_en() argument
979 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_hol_block_en()
980 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_hol_block_en()
997 static void ipa_endpoint_init_hol_block_enable(struct ipa_endpoint *endpoint, in ipa_endpoint_init_hol_block_enable() argument
1000 ipa_endpoint_init_hol_block_timer(endpoint, microseconds); in ipa_endpoint_init_hol_block_enable()
1001 ipa_endpoint_init_hol_block_en(endpoint, true); in ipa_endpoint_init_hol_block_enable()
1004 static void ipa_endpoint_init_hol_block_disable(struct ipa_endpoint *endpoint) in ipa_endpoint_init_hol_block_disable() argument
1006 ipa_endpoint_init_hol_block_en(endpoint, false); in ipa_endpoint_init_hol_block_disable()
1014 struct ipa_endpoint *endpoint = &ipa->endpoint[i]; in ipa_endpoint_modem_hol_block_clear_all() local
1016 if (endpoint->toward_ipa || endpoint->ee_id != GSI_EE_MODEM) in ipa_endpoint_modem_hol_block_clear_all()
1019 ipa_endpoint_init_hol_block_disable(endpoint); in ipa_endpoint_modem_hol_block_clear_all()
1020 ipa_endpoint_init_hol_block_enable(endpoint, 0); in ipa_endpoint_modem_hol_block_clear_all()
1024 static void ipa_endpoint_init_deaggr(struct ipa_endpoint *endpoint) in ipa_endpoint_init_deaggr() argument
1026 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_deaggr()
1027 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_deaggr()
1031 if (!endpoint->toward_ipa) in ipa_endpoint_init_deaggr()
1043 static void ipa_endpoint_init_rsrc_grp(struct ipa_endpoint *endpoint) in ipa_endpoint_init_rsrc_grp() argument
1045 u32 resource_group = endpoint->config.resource_group; in ipa_endpoint_init_rsrc_grp()
1046 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_rsrc_grp()
1047 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_rsrc_grp()
1057 static void ipa_endpoint_init_seq(struct ipa_endpoint *endpoint) in ipa_endpoint_init_seq() argument
1059 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_init_seq()
1060 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_init_seq()
1064 if (!endpoint->toward_ipa) in ipa_endpoint_init_seq()
1070 val = ipa_reg_encode(reg, SEQ_TYPE, endpoint->config.tx.seq_type); in ipa_endpoint_init_seq()
1075 endpoint->config.tx.seq_rep_type); in ipa_endpoint_init_seq()
1082 * @endpoint: Endpoint pointer
1087 int ipa_endpoint_skb_tx(struct ipa_endpoint *endpoint, struct sk_buff *skb) in ipa_endpoint_skb_tx() argument
1093 /* Make sure source endpoint's TLV FIFO has enough entries to in ipa_endpoint_skb_tx()
1098 if (nr_frags > endpoint->skb_frag_max) { in ipa_endpoint_skb_tx()
1104 trans = ipa_endpoint_trans_alloc(endpoint, 1 + nr_frags); in ipa_endpoint_skb_tx()
1123 static void ipa_endpoint_status(struct ipa_endpoint *endpoint) in ipa_endpoint_status() argument
1125 u32 endpoint_id = endpoint->endpoint_id; in ipa_endpoint_status()
1126 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_status()
1131 if (endpoint->config.status_enable) { in ipa_endpoint_status()
1133 if (endpoint->toward_ipa) { in ipa_endpoint_status()
1137 name = endpoint->config.tx.status_endpoint; in ipa_endpoint_status()
1152 static int ipa_endpoint_replenish_one(struct ipa_endpoint *endpoint, in ipa_endpoint_replenish_one() argument
1161 buffer_size = endpoint->config.rx.buffer_size; in ipa_endpoint_replenish_one()
1180 * ipa_endpoint_replenish() - Replenish endpoint receive buffers
1181 * @endpoint: Endpoint to be replenished
1184 * endpoint, based on the number of entries in the underlying channel ring
1185 * buffer. If an endpoint's "backlog" is non-zero, it indicates how many
1187 * an endpoint can be disabled, in which case buffers are not queued to
1190 static void ipa_endpoint_replenish(struct ipa_endpoint *endpoint) in ipa_endpoint_replenish() argument
1194 if (!test_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags)) in ipa_endpoint_replenish()
1198 if (test_and_set_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags)) in ipa_endpoint_replenish()
1201 while ((trans = ipa_endpoint_trans_alloc(endpoint, 1))) { in ipa_endpoint_replenish()
1204 if (ipa_endpoint_replenish_one(endpoint, trans)) in ipa_endpoint_replenish()
1209 doorbell = !(++endpoint->replenish_count % IPA_REPLENISH_BATCH); in ipa_endpoint_replenish()
1213 clear_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags); in ipa_endpoint_replenish()
1219 clear_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags); in ipa_endpoint_replenish()
1227 if (gsi_channel_trans_idle(&endpoint->ipa->gsi, endpoint->channel_id)) in ipa_endpoint_replenish()
1228 schedule_delayed_work(&endpoint->replenish_work, in ipa_endpoint_replenish()
1232 static void ipa_endpoint_replenish_enable(struct ipa_endpoint *endpoint) in ipa_endpoint_replenish_enable() argument
1234 set_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags); in ipa_endpoint_replenish_enable()
1237 if (gsi_channel_trans_idle(&endpoint->ipa->gsi, endpoint->channel_id)) in ipa_endpoint_replenish_enable()
1238 ipa_endpoint_replenish(endpoint); in ipa_endpoint_replenish_enable()
1241 static void ipa_endpoint_replenish_disable(struct ipa_endpoint *endpoint) in ipa_endpoint_replenish_disable() argument
1243 clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags); in ipa_endpoint_replenish_disable()
1249 struct ipa_endpoint *endpoint; in ipa_endpoint_replenish_work() local
1251 endpoint = container_of(dwork, struct ipa_endpoint, replenish_work); in ipa_endpoint_replenish_work()
1253 ipa_endpoint_replenish(endpoint); in ipa_endpoint_replenish_work()
1256 static void ipa_endpoint_skb_copy(struct ipa_endpoint *endpoint, in ipa_endpoint_skb_copy() argument
1261 if (!endpoint->netdev) in ipa_endpoint_skb_copy()
1272 ipa_modem_skb_rx(endpoint->netdev, skb); in ipa_endpoint_skb_copy()
1275 static bool ipa_endpoint_skb_build(struct ipa_endpoint *endpoint, in ipa_endpoint_skb_build() argument
1278 u32 buffer_size = endpoint->config.rx.buffer_size; in ipa_endpoint_skb_build()
1282 if (!endpoint->netdev) in ipa_endpoint_skb_build()
1295 ipa_modem_skb_rx(endpoint->netdev, skb); in ipa_endpoint_skb_build()
1316 static bool ipa_endpoint_status_skip(struct ipa_endpoint *endpoint, in ipa_endpoint_status_skip() argument
1327 if (endpoint_id != endpoint->endpoint_id) in ipa_endpoint_status_skip()
1333 static bool ipa_endpoint_status_tag(struct ipa_endpoint *endpoint, in ipa_endpoint_status_tag() argument
1337 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_status_tag()
1344 * this endpoint (already verified by ipa_endpoint_status_skip()). in ipa_endpoint_status_tag()
1345 * If the packet came from the AP->command TX endpoint we know in ipa_endpoint_status_tag()
1355 "unexpected tagged packet from endpoint %u\n", in ipa_endpoint_status_tag()
1363 static bool ipa_endpoint_status_drop(struct ipa_endpoint *endpoint, in ipa_endpoint_status_drop() argument
1369 if (ipa_endpoint_status_tag(endpoint, status)) in ipa_endpoint_status_drop()
1382 static void ipa_endpoint_status_parse(struct ipa_endpoint *endpoint, in ipa_endpoint_status_parse() argument
1385 u32 buffer_size = endpoint->config.rx.buffer_size; in ipa_endpoint_status_parse()
1396 dev_err(&endpoint->ipa->pdev->dev, in ipa_endpoint_status_parse()
1403 if (ipa_endpoint_status_skip(endpoint, status)) { in ipa_endpoint_status_parse()
1415 align = endpoint->config.rx.pad_align ? : 1; in ipa_endpoint_status_parse()
1418 if (endpoint->config.checksum) in ipa_endpoint_status_parse()
1421 if (!ipa_endpoint_status_drop(endpoint, status)) { in ipa_endpoint_status_parse()
1436 ipa_endpoint_skb_copy(endpoint, data2, len2, extra); in ipa_endpoint_status_parse()
1445 void ipa_endpoint_trans_complete(struct ipa_endpoint *endpoint, in ipa_endpoint_trans_complete() argument
1450 if (endpoint->toward_ipa) in ipa_endpoint_trans_complete()
1458 if (endpoint->config.status_enable) in ipa_endpoint_trans_complete()
1459 ipa_endpoint_status_parse(endpoint, page, trans->len); in ipa_endpoint_trans_complete()
1460 else if (ipa_endpoint_skb_build(endpoint, page, trans->len)) in ipa_endpoint_trans_complete()
1463 ipa_endpoint_replenish(endpoint); in ipa_endpoint_trans_complete()
1466 void ipa_endpoint_trans_release(struct ipa_endpoint *endpoint, in ipa_endpoint_trans_release() argument
1469 if (endpoint->toward_ipa) { in ipa_endpoint_trans_release()
1470 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_trans_release()
1473 if (endpoint != ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]) { in ipa_endpoint_trans_release()
1509 * ipa_endpoint_reset_rx_aggr() - Reset RX endpoint with aggregation active
1510 * @endpoint: Endpoint to be reset
1512 * If aggregation is active on an RX endpoint when a reset is performed
1518 static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint) in ipa_endpoint_reset_rx_aggr() argument
1520 struct device *dev = &endpoint->ipa->pdev->dev; in ipa_endpoint_reset_rx_aggr()
1521 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_reset_rx_aggr()
1541 ipa_endpoint_force_close(endpoint); in ipa_endpoint_reset_rx_aggr()
1548 gsi_channel_reset(gsi, endpoint->channel_id, false); in ipa_endpoint_reset_rx_aggr()
1551 suspended = ipa_endpoint_program_suspend(endpoint, false); in ipa_endpoint_reset_rx_aggr()
1554 ret = gsi_channel_start(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1558 ret = gsi_trans_read_byte(gsi, endpoint->channel_id, addr); in ipa_endpoint_reset_rx_aggr()
1565 if (!ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_reset_rx_aggr()
1571 if (ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_reset_rx_aggr()
1572 dev_err(dev, "endpoint %u still active during reset\n", in ipa_endpoint_reset_rx_aggr()
1573 endpoint->endpoint_id); in ipa_endpoint_reset_rx_aggr()
1575 gsi_trans_read_byte_done(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1577 ret = gsi_channel_stop(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1586 gsi_channel_reset(gsi, endpoint->channel_id, true); in ipa_endpoint_reset_rx_aggr()
1593 (void)gsi_channel_stop(gsi, endpoint->channel_id); in ipa_endpoint_reset_rx_aggr()
1596 (void)ipa_endpoint_program_suspend(endpoint, true); in ipa_endpoint_reset_rx_aggr()
1604 static void ipa_endpoint_reset(struct ipa_endpoint *endpoint) in ipa_endpoint_reset() argument
1606 u32 channel_id = endpoint->channel_id; in ipa_endpoint_reset()
1607 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_reset()
1611 /* On IPA v3.5.1, if an RX endpoint is reset while aggregation in ipa_endpoint_reset()
1615 special = ipa->version < IPA_VERSION_4_0 && !endpoint->toward_ipa && in ipa_endpoint_reset()
1616 endpoint->config.aggregation; in ipa_endpoint_reset()
1617 if (special && ipa_endpoint_aggr_active(endpoint)) in ipa_endpoint_reset()
1618 ret = ipa_endpoint_reset_rx_aggr(endpoint); in ipa_endpoint_reset()
1624 "error %d resetting channel %u for endpoint %u\n", in ipa_endpoint_reset()
1625 ret, endpoint->channel_id, endpoint->endpoint_id); in ipa_endpoint_reset()
1628 static void ipa_endpoint_program(struct ipa_endpoint *endpoint) in ipa_endpoint_program() argument
1630 if (endpoint->toward_ipa) { in ipa_endpoint_program()
1632 * instead of endpoint DELAY mode to prevent sending data. in ipa_endpoint_program()
1637 if (endpoint->ipa->version < IPA_VERSION_4_2) in ipa_endpoint_program()
1638 ipa_endpoint_program_delay(endpoint, false); in ipa_endpoint_program()
1641 (void)ipa_endpoint_program_suspend(endpoint, false); in ipa_endpoint_program()
1643 ipa_endpoint_init_cfg(endpoint); in ipa_endpoint_program()
1644 ipa_endpoint_init_nat(endpoint); in ipa_endpoint_program()
1645 ipa_endpoint_init_hdr(endpoint); in ipa_endpoint_program()
1646 ipa_endpoint_init_hdr_ext(endpoint); in ipa_endpoint_program()
1647 ipa_endpoint_init_hdr_metadata_mask(endpoint); in ipa_endpoint_program()
1648 ipa_endpoint_init_mode(endpoint); in ipa_endpoint_program()
1649 ipa_endpoint_init_aggr(endpoint); in ipa_endpoint_program()
1650 if (!endpoint->toward_ipa) { in ipa_endpoint_program()
1651 if (endpoint->config.rx.holb_drop) in ipa_endpoint_program()
1652 ipa_endpoint_init_hol_block_enable(endpoint, 0); in ipa_endpoint_program()
1654 ipa_endpoint_init_hol_block_disable(endpoint); in ipa_endpoint_program()
1656 ipa_endpoint_init_deaggr(endpoint); in ipa_endpoint_program()
1657 ipa_endpoint_init_rsrc_grp(endpoint); in ipa_endpoint_program()
1658 ipa_endpoint_init_seq(endpoint); in ipa_endpoint_program()
1659 ipa_endpoint_status(endpoint); in ipa_endpoint_program()
1662 int ipa_endpoint_enable_one(struct ipa_endpoint *endpoint) in ipa_endpoint_enable_one() argument
1664 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_enable_one()
1668 ret = gsi_channel_start(gsi, endpoint->channel_id); in ipa_endpoint_enable_one()
1671 "error %d starting %cX channel %u for endpoint %u\n", in ipa_endpoint_enable_one()
1672 ret, endpoint->toward_ipa ? 'T' : 'R', in ipa_endpoint_enable_one()
1673 endpoint->channel_id, endpoint->endpoint_id); in ipa_endpoint_enable_one()
1677 if (!endpoint->toward_ipa) { in ipa_endpoint_enable_one()
1679 endpoint->endpoint_id); in ipa_endpoint_enable_one()
1680 ipa_endpoint_replenish_enable(endpoint); in ipa_endpoint_enable_one()
1683 ipa->enabled |= BIT(endpoint->endpoint_id); in ipa_endpoint_enable_one()
1688 void ipa_endpoint_disable_one(struct ipa_endpoint *endpoint) in ipa_endpoint_disable_one() argument
1690 u32 mask = BIT(endpoint->endpoint_id); in ipa_endpoint_disable_one()
1691 struct ipa *ipa = endpoint->ipa; in ipa_endpoint_disable_one()
1700 if (!endpoint->toward_ipa) { in ipa_endpoint_disable_one()
1701 ipa_endpoint_replenish_disable(endpoint); in ipa_endpoint_disable_one()
1703 endpoint->endpoint_id); in ipa_endpoint_disable_one()
1707 ret = gsi_channel_stop(gsi, endpoint->channel_id); in ipa_endpoint_disable_one()
1710 "error %d attempting to stop endpoint %u\n", ret, in ipa_endpoint_disable_one()
1711 endpoint->endpoint_id); in ipa_endpoint_disable_one()
1714 void ipa_endpoint_suspend_one(struct ipa_endpoint *endpoint) in ipa_endpoint_suspend_one() argument
1716 struct device *dev = &endpoint->ipa->pdev->dev; in ipa_endpoint_suspend_one()
1717 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_suspend_one()
1720 if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id))) in ipa_endpoint_suspend_one()
1723 if (!endpoint->toward_ipa) { in ipa_endpoint_suspend_one()
1724 ipa_endpoint_replenish_disable(endpoint); in ipa_endpoint_suspend_one()
1725 (void)ipa_endpoint_program_suspend(endpoint, true); in ipa_endpoint_suspend_one()
1728 ret = gsi_channel_suspend(gsi, endpoint->channel_id); in ipa_endpoint_suspend_one()
1731 endpoint->channel_id); in ipa_endpoint_suspend_one()
1734 void ipa_endpoint_resume_one(struct ipa_endpoint *endpoint) in ipa_endpoint_resume_one() argument
1736 struct device *dev = &endpoint->ipa->pdev->dev; in ipa_endpoint_resume_one()
1737 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_resume_one()
1740 if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id))) in ipa_endpoint_resume_one()
1743 if (!endpoint->toward_ipa) in ipa_endpoint_resume_one()
1744 (void)ipa_endpoint_program_suspend(endpoint, false); in ipa_endpoint_resume_one()
1746 ret = gsi_channel_resume(gsi, endpoint->channel_id); in ipa_endpoint_resume_one()
1749 endpoint->channel_id); in ipa_endpoint_resume_one()
1750 else if (!endpoint->toward_ipa) in ipa_endpoint_resume_one()
1751 ipa_endpoint_replenish_enable(endpoint); in ipa_endpoint_resume_one()
1778 static void ipa_endpoint_setup_one(struct ipa_endpoint *endpoint) in ipa_endpoint_setup_one() argument
1780 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_setup_one()
1781 u32 channel_id = endpoint->channel_id; in ipa_endpoint_setup_one()
1784 if (endpoint->ee_id != GSI_EE_AP) in ipa_endpoint_setup_one()
1787 endpoint->skb_frag_max = gsi->channel[channel_id].trans_tre_max - 1; in ipa_endpoint_setup_one()
1788 if (!endpoint->toward_ipa) { in ipa_endpoint_setup_one()
1792 clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags); in ipa_endpoint_setup_one()
1793 clear_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags); in ipa_endpoint_setup_one()
1794 INIT_DELAYED_WORK(&endpoint->replenish_work, in ipa_endpoint_setup_one()
1798 ipa_endpoint_program(endpoint); in ipa_endpoint_setup_one()
1800 endpoint->ipa->set_up |= BIT(endpoint->endpoint_id); in ipa_endpoint_setup_one()
1803 static void ipa_endpoint_teardown_one(struct ipa_endpoint *endpoint) in ipa_endpoint_teardown_one() argument
1805 endpoint->ipa->set_up &= ~BIT(endpoint->endpoint_id); in ipa_endpoint_teardown_one()
1807 if (!endpoint->toward_ipa) in ipa_endpoint_teardown_one()
1808 cancel_delayed_work_sync(&endpoint->replenish_work); in ipa_endpoint_teardown_one()
1810 ipa_endpoint_reset(endpoint); in ipa_endpoint_teardown_one()
1823 ipa_endpoint_setup_one(&ipa->endpoint[endpoint_id]); in ipa_endpoint_setup()
1836 ipa_endpoint_teardown_one(&ipa->endpoint[endpoint_id]); in ipa_endpoint_teardown()
1855 * endpoint numbers started with 0 and RX endpoints had numbers in ipa_endpoint_config()
1860 * just set the available mask to support any endpoint, and in ipa_endpoint_config()
1892 dev_err(dev, "unavailable endpoint id(s) 0x%08x\n", in ipa_endpoint_config()
1900 struct ipa_endpoint *endpoint; in ipa_endpoint_config() local
1905 endpoint = &ipa->endpoint[endpoint_id]; in ipa_endpoint_config()
1906 if ((endpoint_id < rx_base) != endpoint->toward_ipa) { in ipa_endpoint_config()
1907 dev_err(dev, "endpoint id %u wrong direction\n", in ipa_endpoint_config()
1924 struct ipa_endpoint *endpoint; in ipa_endpoint_init_one() local
1926 endpoint = &ipa->endpoint[data->endpoint_id]; in ipa_endpoint_init_one()
1929 ipa->channel_map[data->channel_id] = endpoint; in ipa_endpoint_init_one()
1930 ipa->name_map[name] = endpoint; in ipa_endpoint_init_one()
1932 endpoint->ipa = ipa; in ipa_endpoint_init_one()
1933 endpoint->ee_id = data->ee_id; in ipa_endpoint_init_one()
1934 endpoint->channel_id = data->channel_id; in ipa_endpoint_init_one()
1935 endpoint->endpoint_id = data->endpoint_id; in ipa_endpoint_init_one()
1936 endpoint->toward_ipa = data->toward_ipa; in ipa_endpoint_init_one()
1937 endpoint->config = data->endpoint.config; in ipa_endpoint_init_one()
1939 ipa->initialized |= BIT(endpoint->endpoint_id); in ipa_endpoint_init_one()
1942 static void ipa_endpoint_exit_one(struct ipa_endpoint *endpoint) in ipa_endpoint_exit_one() argument
1944 endpoint->ipa->initialized &= ~BIT(endpoint->endpoint_id); in ipa_endpoint_exit_one()
1946 memset(endpoint, 0, sizeof(*endpoint)); in ipa_endpoint_exit_one()
1958 ipa_endpoint_exit_one(&ipa->endpoint[endpoint_id]); in ipa_endpoint_exit()
1985 if (data->endpoint.filter_support) in ipa_endpoint_init()