Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd003fad authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo
Browse files

ath10k: embed HTC struct inside ath10k



This reduces number of allocations and simplifies
memory managemnt.

Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent e799bbff
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ static int ath10k_init_connect_htc(struct ath10k *ar)
		goto conn_fail;

	/* Start HTC */
	status = ath10k_htc_start(ar->htc);
	status = ath10k_htc_start(&ar->htc);
	if (status)
		goto conn_fail;

@@ -116,7 +116,7 @@ static int ath10k_init_connect_htc(struct ath10k *ar)
	return 0;

timeout:
	ath10k_htc_stop(ar->htc);
	ath10k_htc_stop(&ar->htc);
conn_fail:
	return status;
}
@@ -505,7 +505,6 @@ EXPORT_SYMBOL(ath10k_core_destroy);

int ath10k_core_register(struct ath10k *ar)
{
	struct ath10k_htc_ops htc_ops;
	struct bmi_target_info target_info;
	int status;

@@ -534,26 +533,26 @@ int ath10k_core_register(struct ath10k *ar)
	if (status)
		goto err;

	htc_ops.target_send_suspend_complete = ath10k_send_suspend_complete;
	ar->htc.htc_ops.target_send_suspend_complete =
		ath10k_send_suspend_complete;

	ar->htc = ath10k_htc_create(ar, &htc_ops);
	if (IS_ERR(ar->htc)) {
		status = PTR_ERR(ar->htc);
		ath10k_err("could not create HTC (%d)\n", status);
	status = ath10k_htc_init(ar);
	if (status) {
		ath10k_err("could not init HTC (%d)\n", status);
		goto err;
	}

	status = ath10k_bmi_done(ar);
	if (status)
		goto err_htc_destroy;
		goto err;

	status = ath10k_wmi_attach(ar);
	if (status) {
		ath10k_err("WMI attach failed: %d\n", status);
		goto err_htc_destroy;
		goto err;
	}

	status = ath10k_htc_wait_target(ar->htc);
	status = ath10k_htc_wait_target(&ar->htc);
	if (status)
		goto err_wmi_detach;

@@ -605,13 +604,11 @@ int ath10k_core_register(struct ath10k *ar)
err_unregister_mac:
	ath10k_mac_unregister(ar);
err_disconnect_htc:
	ath10k_htc_stop(ar->htc);
	ath10k_htc_stop(&ar->htc);
err_htt_detach:
	ath10k_htt_detach(ar->htt);
err_wmi_detach:
	ath10k_wmi_detach(ar);
err_htc_destroy:
	ath10k_htc_destroy(ar->htc);
err:
	return status;
}
@@ -623,10 +620,9 @@ void ath10k_core_unregister(struct ath10k *ar)
	 * Otherwise we will fail to submit commands to FW and mac80211 will be
	 * unhappy about callback failures. */
	ath10k_mac_unregister(ar);
	ath10k_htc_stop(ar->htc);
	ath10k_htc_stop(&ar->htc);
	ath10k_htt_detach(ar->htt);
	ath10k_wmi_detach(ar);
	ath10k_htc_destroy(ar->htc);
}
EXPORT_SYMBOL(ath10k_core_unregister);

+1 −1
Original line number Diff line number Diff line
@@ -279,8 +279,8 @@ struct ath10k {
	bool is_target_paused;

	struct ath10k_bmi bmi;
	struct ath10k_htc htc;

	struct ath10k_htc *htc;
	struct ath10k_htt *htt;

	struct ath10k_hw_params {
+5 −18
Original line number Diff line number Diff line
@@ -265,7 +265,7 @@ static int ath10k_htc_tx_completion_handler(struct ath10k *ar,
					    struct sk_buff *skb,
					    unsigned int eid)
{
	struct ath10k_htc *htc = ar->htc;
	struct ath10k_htc *htc = &ar->htc;
	struct ath10k_htc_ep *ep = &htc->endpoint[eid];
	bool stopping;

@@ -414,7 +414,7 @@ static int ath10k_htc_rx_completion_handler(struct ath10k *ar,
					    u8 pipe_id)
{
	int status = 0;
	struct ath10k_htc *htc = ar->htc;
	struct ath10k_htc *htc = &ar->htc;
	struct ath10k_htc_hdr *hdr;
	struct ath10k_htc_ep *ep;
	u16 payload_len;
@@ -961,22 +961,14 @@ void ath10k_htc_stop(struct ath10k_htc *htc)
}

/* registered target arrival callback from the HIF layer */
struct ath10k_htc *ath10k_htc_create(struct ath10k *ar,
				     struct ath10k_htc_ops *htc_ops)
int ath10k_htc_init(struct ath10k *ar)
{
	struct ath10k_hif_cb htc_callbacks;
	struct ath10k_htc_ep *ep = NULL;
	struct ath10k_htc *htc = NULL;

	/* FIXME: use struct ath10k instead */
	htc = kzalloc(sizeof(struct ath10k_htc), GFP_KERNEL);
	if (!htc)
		return ERR_PTR(-ENOMEM);
	struct ath10k_htc *htc = &ar->htc;

	spin_lock_init(&htc->tx_lock);

	memcpy(&htc->htc_ops, htc_ops, sizeof(struct ath10k_htc_ops));

	ath10k_htc_reset_endpoint_states(htc);

	/* setup HIF layer callbacks */
@@ -992,10 +984,5 @@ struct ath10k_htc *ath10k_htc_create(struct ath10k *ar,

	init_completion(&htc->ctl_resp);

	return htc;
}

void ath10k_htc_destroy(struct ath10k_htc *htc)
{
	kfree(htc);
	return 0;
}
+1 −3
Original line number Diff line number Diff line
@@ -352,8 +352,7 @@ struct ath10k_htc {
	bool stopping;
};

struct ath10k_htc *ath10k_htc_create(struct ath10k *ar,
				     struct ath10k_htc_ops *htc_ops);
int ath10k_htc_init(struct ath10k *ar);
int ath10k_htc_wait_target(struct ath10k_htc *htc);
int ath10k_htc_start(struct ath10k_htc *htc);
int ath10k_htc_connect_service(struct ath10k_htc *htc,
@@ -362,7 +361,6 @@ int ath10k_htc_connect_service(struct ath10k_htc *htc,
int ath10k_htc_send(struct ath10k_htc *htc, enum ath10k_htc_ep_id eid,
		    struct sk_buff *packet);
void ath10k_htc_stop(struct ath10k_htc *htc);
void ath10k_htc_destroy(struct ath10k_htc *htc);
struct sk_buff *ath10k_htc_alloc_skb(int size);

#endif
+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ static int ath10k_htt_htc_attach(struct ath10k_htt *htt)
	/* connect to control service */
	conn_req.service_id = ATH10K_HTC_SVC_ID_HTT_DATA_MSG;

	status = ath10k_htc_connect_service(htt->ar->htc, &conn_req,
	status = ath10k_htc_connect_service(&htt->ar->htc, &conn_req,
					    &conn_resp);

	if (status)
Loading