Lines Matching refs:htc
67 spin_lock_bh(&ep->htc->tx_lock); in ath11k_htc_prepare_tx_skb()
69 spin_unlock_bh(&ep->htc->tx_lock); in ath11k_htc_prepare_tx_skb()
72 int ath11k_htc_send(struct ath11k_htc *htc, in ath11k_htc_send() argument
76 struct ath11k_htc_ep *ep = &htc->endpoint[eid]; in ath11k_htc_send()
78 struct device *dev = htc->ab->dev; in ath11k_htc_send()
79 struct ath11k_base *ab = htc->ab; in ath11k_htc_send()
91 credits = DIV_ROUND_UP(skb->len, htc->target_credit_size); in ath11k_htc_send()
92 spin_lock_bh(&htc->tx_lock); in ath11k_htc_send()
97 spin_unlock_bh(&htc->tx_lock); in ath11k_htc_send()
105 spin_unlock_bh(&htc->tx_lock); in ath11k_htc_send()
118 ret = ath11k_ce_send(htc->ab, skb, ep->ul_pipe_id, ep->eid); in ath11k_htc_send()
128 spin_lock_bh(&htc->tx_lock); in ath11k_htc_send()
133 spin_unlock_bh(&htc->tx_lock); in ath11k_htc_send()
136 ep->ep_ops.ep_tx_credits(htc->ab); in ath11k_htc_send()
144 ath11k_htc_process_credit_report(struct ath11k_htc *htc, in ath11k_htc_process_credit_report() argument
149 struct ath11k_base *ab = htc->ab; in ath11k_htc_process_credit_report()
158 spin_lock_bh(&htc->tx_lock); in ath11k_htc_process_credit_report()
163 ep = &htc->endpoint[report->eid]; in ath11k_htc_process_credit_report()
170 spin_unlock_bh(&htc->tx_lock); in ath11k_htc_process_credit_report()
171 ep->ep_ops.ep_tx_credits(htc->ab); in ath11k_htc_process_credit_report()
172 spin_lock_bh(&htc->tx_lock); in ath11k_htc_process_credit_report()
175 spin_unlock_bh(&htc->tx_lock); in ath11k_htc_process_credit_report()
178 static int ath11k_htc_process_trailer(struct ath11k_htc *htc, in ath11k_htc_process_trailer() argument
183 struct ath11k_base *ab = htc->ab; in ath11k_htc_process_trailer()
212 ath11k_htc_process_credit_report(htc, in ath11k_htc_process_trailer()
238 struct ath11k_htc *htc = &ab->htc; in ath11k_htc_rx_completion_handler() local
257 ep = &htc->endpoint[eid]; in ath11k_htc_rx_completion_handler()
294 status = ath11k_htc_process_trailer(htc, trailer, in ath11k_htc_rx_completion_handler()
313 if (completion_done(&htc->ctl_resp)) { in ath11k_htc_rx_completion_handler()
318 complete(&htc->ctl_resp); in ath11k_htc_rx_completion_handler()
322 htc->control_resp_len = in ath11k_htc_rx_completion_handler()
326 memcpy(htc->control_resp_buffer, skb->data, in ath11k_htc_rx_completion_handler()
327 htc->control_resp_len); in ath11k_htc_rx_completion_handler()
329 complete(&htc->ctl_resp); in ath11k_htc_rx_completion_handler()
399 static void ath11k_htc_reset_endpoint_states(struct ath11k_htc *htc) in ath11k_htc_reset_endpoint_states() argument
405 ep = &htc->endpoint[i]; in ath11k_htc_reset_endpoint_states()
410 ep->htc = htc; in ath11k_htc_reset_endpoint_states()
415 static u8 ath11k_htc_get_credit_allocation(struct ath11k_htc *htc, in ath11k_htc_get_credit_allocation() argument
421 if (htc->service_alloc_table[i].service_id == service_id) { in ath11k_htc_get_credit_allocation()
423 htc->service_alloc_table[i].credit_allocation; in ath11k_htc_get_credit_allocation()
430 static int ath11k_htc_setup_target_buffer_assignments(struct ath11k_htc *htc) in ath11k_htc_setup_target_buffer_assignments() argument
440 credits = htc->total_transmit_credits; in ath11k_htc_setup_target_buffer_assignments()
441 serv_entry = htc->service_alloc_table; in ath11k_htc_setup_target_buffer_assignments()
443 if ((htc->wmi_ep_count == 0) || in ath11k_htc_setup_target_buffer_assignments()
444 (htc->wmi_ep_count > ARRAY_SIZE(svc_id))) in ath11k_htc_setup_target_buffer_assignments()
448 credits = credits / htc->wmi_ep_count; in ath11k_htc_setup_target_buffer_assignments()
449 for (i = 0; i < htc->wmi_ep_count; i++) { in ath11k_htc_setup_target_buffer_assignments()
457 int ath11k_htc_wait_target(struct ath11k_htc *htc) in ath11k_htc_wait_target() argument
460 struct ath11k_base *ab = htc->ab; in ath11k_htc_wait_target()
467 time_left = wait_for_completion_timeout(&htc->ctl_resp, in ath11k_htc_wait_target()
473 ath11k_ce_per_engine_service(htc->ab, i); in ath11k_htc_wait_target()
476 wait_for_completion_timeout(&htc->ctl_resp, in ath11k_htc_wait_target()
488 if (htc->control_resp_len < sizeof(*ready)) { in ath11k_htc_wait_target()
490 htc->control_resp_len); in ath11k_htc_wait_target()
494 ready = (struct ath11k_htc_ready *)htc->control_resp_buffer; in ath11k_htc_wait_target()
505 htc->total_transmit_credits = credit_count; in ath11k_htc_wait_target()
506 htc->target_credit_size = credit_size; in ath11k_htc_wait_target()
510 htc->total_transmit_credits, htc->target_credit_size); in ath11k_htc_wait_target()
512 if ((htc->total_transmit_credits == 0) || in ath11k_htc_wait_target()
513 (htc->target_credit_size == 0)) { in ath11k_htc_wait_target()
522 htc->total_transmit_credits = 1; in ath11k_htc_wait_target()
524 ath11k_htc_setup_target_buffer_assignments(htc); in ath11k_htc_wait_target()
529 int ath11k_htc_connect_service(struct ath11k_htc *htc, in ath11k_htc_connect_service() argument
533 struct ath11k_base *ab = htc->ab; in ath11k_htc_connect_service()
556 tx_alloc = ath11k_htc_get_credit_allocation(htc, in ath11k_htc_connect_service()
563 skb = ath11k_htc_build_tx_ctrl_skb(htc->ab); in ath11k_htc_connect_service()
591 reinit_completion(&htc->ctl_resp); in ath11k_htc_connect_service()
593 status = ath11k_htc_send(htc, ATH11K_HTC_EP_0, skb); in ath11k_htc_connect_service()
600 time_left = wait_for_completion_timeout(&htc->ctl_resp, in ath11k_htc_connect_service()
608 resp_msg = (struct ath11k_htc_conn_svc_resp *)htc->control_resp_buffer; in ath11k_htc_connect_service()
614 (htc->control_resp_len < sizeof(*resp_msg))) { in ath11k_htc_connect_service()
651 ep = &htc->endpoint[assigned_eid]; in ath11k_htc_connect_service()
672 status = ath11k_hif_map_service_to_pipe(htc->ab, in ath11k_htc_connect_service()
694 int ath11k_htc_start(struct ath11k_htc *htc) in ath11k_htc_start() argument
698 struct ath11k_base *ab = htc->ab; in ath11k_htc_start()
701 skb = ath11k_htc_build_tx_ctrl_skb(htc->ab); in ath11k_htc_start()
714 status = ath11k_htc_send(htc, ATH11K_HTC_EP_0, skb); in ath11k_htc_start()
725 struct ath11k_htc *htc = &ab->htc; in ath11k_htc_init() local
730 spin_lock_init(&htc->tx_lock); in ath11k_htc_init()
732 ath11k_htc_reset_endpoint_states(htc); in ath11k_htc_init()
734 htc->ab = ab; in ath11k_htc_init()
738 htc->wmi_ep_count = 1; in ath11k_htc_init()
742 htc->wmi_ep_count = 2; in ath11k_htc_init()
745 htc->wmi_ep_count = 3; in ath11k_htc_init()
748 htc->wmi_ep_count = ab->hw_params.max_radios; in ath11k_htc_init()
761 ret = ath11k_htc_connect_service(htc, &conn_req, &conn_resp); in ath11k_htc_init()
767 init_completion(&htc->ctl_resp); in ath11k_htc_init()