ath9k_htc: Configure credit size for AR7010
For non-AR9271 chips, the credit size is different and has to be configured appropriately. Signed-off-by: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
@@ -179,7 +179,7 @@ static inline int ath9k_htc_connect_svc(struct ath9k_htc_priv *priv,
|
|||||||
return htc_connect_service(priv->htc, &req, ep_id);
|
return htc_connect_service(priv->htc, &req, ep_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ath9k_init_htc_services(struct ath9k_htc_priv *priv)
|
static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -237,10 +237,33 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Setup required credits before initializing HTC.
|
||||||
|
* This is a bit hacky, but, since queuing is done in
|
||||||
|
* the HIF layer, shouldn't matter much.
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch(devid) {
|
||||||
|
case 0x9271:
|
||||||
|
case 0x1006:
|
||||||
|
priv->htc->credits = 33;
|
||||||
|
break;
|
||||||
|
case 0x7010:
|
||||||
|
priv->htc->credits = 45;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dev_err(priv->dev, "ath9k_htc: Unsupported device id: 0x%x\n",
|
||||||
|
devid);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
ret = htc_init(priv->htc);
|
ret = htc_init(priv->htc);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
dev_info(priv->dev, "ath9k_htc: HTC initialized with %d credits\n",
|
||||||
|
priv->htc->credits);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
@@ -842,7 +865,7 @@ int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
|
|||||||
goto err_free;
|
goto err_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ath9k_init_htc_services(priv);
|
ret = ath9k_init_htc_services(priv, devid);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_init;
|
goto err_init;
|
||||||
|
|
||||||
@@ -885,7 +908,8 @@ int ath9k_htc_resume(struct htc_target *htc_handle)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = ath9k_init_htc_services(htc_handle->drv_priv);
|
ret = ath9k_init_htc_services(htc_handle->drv_priv,
|
||||||
|
htc_handle->drv_priv->ah->hw_version.devid);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -89,7 +89,6 @@ static void htc_process_target_rdy(struct htc_target *target,
|
|||||||
struct htc_endpoint *endpoint;
|
struct htc_endpoint *endpoint;
|
||||||
struct htc_ready_msg *htc_ready_msg = (struct htc_ready_msg *) buf;
|
struct htc_ready_msg *htc_ready_msg = (struct htc_ready_msg *) buf;
|
||||||
|
|
||||||
target->credits = be16_to_cpu(htc_ready_msg->credits);
|
|
||||||
target->credit_size = be16_to_cpu(htc_ready_msg->credit_size);
|
target->credit_size = be16_to_cpu(htc_ready_msg->credit_size);
|
||||||
|
|
||||||
endpoint = &target->endpoint[ENDPOINT0];
|
endpoint = &target->endpoint[ENDPOINT0];
|
||||||
@@ -159,7 +158,7 @@ static int htc_config_pipe_credits(struct htc_target *target)
|
|||||||
|
|
||||||
cp_msg->message_id = cpu_to_be16(HTC_MSG_CONFIG_PIPE_ID);
|
cp_msg->message_id = cpu_to_be16(HTC_MSG_CONFIG_PIPE_ID);
|
||||||
cp_msg->pipe_id = USB_WLAN_TX_PIPE;
|
cp_msg->pipe_id = USB_WLAN_TX_PIPE;
|
||||||
cp_msg->credits = 33;
|
cp_msg->credits = target->credits;
|
||||||
|
|
||||||
target->htc_flags |= HTC_OP_CONFIG_PIPE_CREDITS;
|
target->htc_flags |= HTC_OP_CONFIG_PIPE_CREDITS;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user