hif_usb_internal.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /*
  2. * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
  3. *
  4. * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  5. *
  6. *
  7. * Permission to use, copy, modify, and/or distribute this software for
  8. * any purpose with or without fee is hereby granted, provided that the
  9. * above copyright notice and this permission notice appear in all
  10. * copies.
  11. *
  12. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  13. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  14. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  15. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  16. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  17. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  18. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  19. * PERFORMANCE OF THIS SOFTWARE.
  20. */
  21. /*
  22. * This file was originally distributed by Qualcomm Atheros, Inc.
  23. * under proprietary terms before Copyright ownership was assigned
  24. * to the Linux Foundation.
  25. */
  26. #ifndef _HIF_USB_INTERNAL_H
  27. #define _HIF_USB_INTERNAL_H
  28. #include <qdf_nbuf.h>
  29. #include "a_types.h"
  30. #include "athdefs.h"
  31. #include "a_osapi.h"
  32. #include "a_usb_defs.h"
  33. #include <ol_if_athvar.h>
  34. #include <linux/usb.h>
  35. #include "hif.h"
  36. #include "if_usb.h"
  37. #define TX_URB_COUNT 32
  38. #define RX_URB_COUNT 32
  39. #define HIF_USB_RX_BUFFER_SIZE (1792 + 8)
  40. #define HIF_USB_RX_BUNDLE_ONE_PKT_SIZE (1792 + 8)
  41. #ifdef HIF_USB_TASKLET
  42. #define HIF_USB_SCHEDULE_WORK(pipe)\
  43. tasklet_schedule(&pipe->io_complete_tasklet);
  44. #define HIF_USB_INIT_WORK(pipe)\
  45. tasklet_init(&pipe->io_complete_tasklet,\
  46. usb_hif_io_comp_tasklet,\
  47. (long unsigned int)pipe);
  48. #define HIF_USB_FLUSH_WORK(pipe) flush_work(&pipe->io_complete_work);
  49. #else
  50. #define HIF_USB_SCHEDULE_WORK(pipe) schedule_work(&pipe->io_complete_work);
  51. #define HIF_USB_INIT_WORK(pipe)\
  52. INIT_WORK(&pipe->io_complete_work,\
  53. usb_hif_io_comp_work);
  54. #define HIF_USB_FLUSH_WORK(pipe)
  55. #endif
  56. /* debug masks */
  57. #define USB_HIF_DEBUG_CTRL_TRANS ATH_DEBUG_MAKE_MODULE_MASK(0)
  58. #define USB_HIF_DEBUG_BULK_IN ATH_DEBUG_MAKE_MODULE_MASK(1)
  59. #define USB_HIF_DEBUG_BULK_OUT ATH_DEBUG_MAKE_MODULE_MASK(2)
  60. #define USB_HIF_DEBUG_ENUM ATH_DEBUG_MAKE_MODULE_MASK(3)
  61. #define USB_HIF_DEBUG_DUMP_DATA ATH_DEBUG_MAKE_MODULE_MASK(4)
  62. #define USB_HIF_SUSPEND ATH_DEBUG_MAKE_MODULE_MASK(5)
  63. #define USB_HIF_ISOC_SUPPORT ATH_DEBUG_MAKE_MODULE_MASK(6)
  64. struct _HIF_USB_PIPE;
  65. typedef struct _HIF_URB_CONTEXT {
  66. DL_LIST link;
  67. struct _HIF_USB_PIPE *pipe;
  68. qdf_nbuf_t buf;
  69. struct urb *urb;
  70. struct hif_usb_send_context *send_context;
  71. } HIF_URB_CONTEXT;
  72. #define HIF_USB_PIPE_FLAG_TX (1 << 0)
  73. /*
  74. * Data structure to record required sending context data
  75. */
  76. struct hif_usb_send_context {
  77. A_BOOL new_alloc;
  78. HIF_DEVICE_USB *hif_usb_device;
  79. qdf_nbuf_t netbuf;
  80. unsigned int transfer_id;
  81. unsigned int head_data_len;
  82. };
  83. extern unsigned int hif_usb_disable_rxdata2;
  84. extern QDF_STATUS usb_hif_submit_ctrl_in(HIF_DEVICE_USB *macp,
  85. uint8_t req,
  86. uint16_t value,
  87. uint16_t index,
  88. void *data, uint32_t size);
  89. extern QDF_STATUS usb_hif_submit_ctrl_out(HIF_DEVICE_USB *macp,
  90. uint8_t req,
  91. uint16_t value,
  92. uint16_t index,
  93. void *data, uint32_t size);
  94. QDF_STATUS usb_hif_setup_pipe_resources(HIF_DEVICE_USB *device);
  95. void usb_hif_cleanup_pipe_resources(HIF_DEVICE_USB *device);
  96. void usb_hif_prestart_recv_pipes(HIF_DEVICE_USB *device);
  97. void usb_hif_start_recv_pipes(HIF_DEVICE_USB *device);
  98. void usb_hif_flush_all(HIF_DEVICE_USB *device);
  99. void usb_hif_cleanup_transmit_urb(HIF_URB_CONTEXT *urb_context);
  100. void usb_hif_enqueue_pending_transfer(HIF_USB_PIPE *pipe,
  101. HIF_URB_CONTEXT *urb_context);
  102. void usb_hif_remove_pending_transfer(HIF_URB_CONTEXT *urb_context);
  103. HIF_URB_CONTEXT *usb_hif_alloc_urb_from_pipe(HIF_USB_PIPE *pipe);
  104. #ifdef HIF_USB_TASKLET
  105. void usb_hif_io_comp_tasklet(long unsigned int context);
  106. #else
  107. void usb_hif_io_comp_work(struct work_struct *work);
  108. #endif
  109. QDF_STATUS hif_diag_write_warm_reset(struct usb_interface *interface,
  110. uint32_t address, uint32_t data);
  111. #endif