aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath9k/hif_usb.c22
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_hst.c38
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_hst.h9
3 files changed, 35 insertions, 34 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index 453cf56eba78..46dc41a16faa 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -859,21 +859,21 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
859#endif 859#endif
860 usb_set_intfdata(interface, hif_dev); 860 usb_set_intfdata(interface, hif_dev);
861 861
862 hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb,
863 &hif_dev->udev->dev);
864 if (hif_dev->htc_handle == NULL) {
865 ret = -ENOMEM;
866 goto err_htc_hw_alloc;
867 }
868
862 ret = ath9k_hif_usb_dev_init(hif_dev, fw_name); 869 ret = ath9k_hif_usb_dev_init(hif_dev, fw_name);
863 if (ret) { 870 if (ret) {
864 ret = -EINVAL; 871 ret = -EINVAL;
865 goto err_hif_init_usb; 872 goto err_hif_init_usb;
866 } 873 }
867 874
868 hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev); 875 ret = ath9k_htc_hw_init(hif_dev->htc_handle,
869 if (hif_dev->htc_handle == NULL) { 876 &hif_dev->udev->dev, hif_dev->device_id);
870 ret = -ENOMEM;
871 goto err_htc_hw_alloc;
872 }
873
874 ret = ath9k_htc_hw_init(&hif_usb, hif_dev->htc_handle, hif_dev,
875 &hif_dev->udev->dev, hif_dev->device_id,
876 ATH9K_HIF_USB);
877 if (ret) { 877 if (ret) {
878 ret = -EINVAL; 878 ret = -EINVAL;
879 goto err_htc_hw_init; 879 goto err_htc_hw_init;
@@ -884,10 +884,10 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
884 return 0; 884 return 0;
885 885
886err_htc_hw_init: 886err_htc_hw_init:
887 ath9k_htc_hw_free(hif_dev->htc_handle);
888err_htc_hw_alloc:
889 ath9k_hif_usb_dev_deinit(hif_dev); 887 ath9k_hif_usb_dev_deinit(hif_dev);
890err_hif_init_usb: 888err_hif_init_usb:
889 ath9k_htc_hw_free(hif_dev->htc_handle);
890err_htc_hw_alloc:
891 usb_set_intfdata(interface, NULL); 891 usb_set_intfdata(interface, NULL);
892 kfree(hif_dev); 892 kfree(hif_dev);
893 usb_put_dev(udev); 893 usb_put_dev(udev);
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
index 7bf6ce1e7e2e..2c8006ae2786 100644
--- a/drivers/net/wireless/ath/ath9k/htc_hst.c
+++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
@@ -425,29 +425,19 @@ void ath9k_htc_rx_msg(struct htc_target *htc_handle,
425 } 425 }
426} 426}
427 427
428struct htc_target *ath9k_htc_hw_alloc(void *hif_handle) 428struct htc_target *ath9k_htc_hw_alloc(void *hif_handle,
429 struct ath9k_htc_hif *hif,
430 struct device *dev)
429{ 431{
432 struct htc_endpoint *endpoint;
430 struct htc_target *target; 433 struct htc_target *target;
431 434
432 target = kzalloc(sizeof(struct htc_target), GFP_KERNEL); 435 target = kzalloc(sizeof(struct htc_target), GFP_KERNEL);
433 if (!target) 436 if (!target) {
434 printk(KERN_ERR "Unable to allocate memory for" 437 printk(KERN_ERR "Unable to allocate memory for"
435 "target device\n"); 438 "target device\n");
436 439 return NULL;
437 return target; 440 }
438}
439
440void ath9k_htc_hw_free(struct htc_target *htc)
441{
442 kfree(htc);
443}
444
445int ath9k_htc_hw_init(struct ath9k_htc_hif *hif, struct htc_target *target,
446 void *hif_handle, struct device *dev, u16 devid,
447 enum ath9k_hif_transports transport)
448{
449 struct htc_endpoint *endpoint;
450 int err = 0;
451 441
452 init_completion(&target->target_wait); 442 init_completion(&target->target_wait);
453 init_completion(&target->cmd_wait); 443 init_completion(&target->cmd_wait);
@@ -461,8 +451,18 @@ int ath9k_htc_hw_init(struct ath9k_htc_hif *hif, struct htc_target *target,
461 endpoint->ul_pipeid = hif->control_ul_pipe; 451 endpoint->ul_pipeid = hif->control_ul_pipe;
462 endpoint->dl_pipeid = hif->control_dl_pipe; 452 endpoint->dl_pipeid = hif->control_dl_pipe;
463 453
464 err = ath9k_htc_probe_device(target, dev, devid); 454 return target;
465 if (err) { 455}
456
457void ath9k_htc_hw_free(struct htc_target *htc)
458{
459 kfree(htc);
460}
461
462int ath9k_htc_hw_init(struct htc_target *target,
463 struct device *dev, u16 devid)
464{
465 if (ath9k_htc_probe_device(target, dev, devid)) {
466 printk(KERN_ERR "Failed to initialize the device\n"); 466 printk(KERN_ERR "Failed to initialize the device\n");
467 return -ENODEV; 467 return -ENODEV;
468 } 468 }
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.h b/drivers/net/wireless/ath/ath9k/htc_hst.h
index ea50ab032d20..d216c0f4d168 100644
--- a/drivers/net/wireless/ath/ath9k/htc_hst.h
+++ b/drivers/net/wireless/ath/ath9k/htc_hst.h
@@ -236,11 +236,12 @@ void ath9k_htc_rx_msg(struct htc_target *htc_handle,
236void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle, 236void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,
237 struct sk_buff *skb, bool txok); 237 struct sk_buff *skb, bool txok);
238 238
239struct htc_target *ath9k_htc_hw_alloc(void *hif_handle); 239struct htc_target *ath9k_htc_hw_alloc(void *hif_handle,
240 struct ath9k_htc_hif *hif,
241 struct device *dev);
240void ath9k_htc_hw_free(struct htc_target *htc); 242void ath9k_htc_hw_free(struct htc_target *htc);
241int ath9k_htc_hw_init(struct ath9k_htc_hif *hif, struct htc_target *target, 243int ath9k_htc_hw_init(struct htc_target *target,
242 void *hif_handle, struct device *dev, u16 devid, 244 struct device *dev, u16 devid);
243 enum ath9k_hif_transports transport);
244void ath9k_htc_hw_deinit(struct htc_target *target, bool hot_unplug); 245void ath9k_htc_hw_deinit(struct htc_target *target, bool hot_unplug);
245 246
246#endif /* HTC_HST_H */ 247#endif /* HTC_HST_H */