diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/internal.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/internal.h | 51 |
1 files changed, 8 insertions, 43 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/internal.h b/drivers/net/wireless/iwlwifi/pcie/internal.h index 31f72a61cc3f..376b84e54ad7 100644 --- a/drivers/net/wireless/iwlwifi/pcie/internal.h +++ b/drivers/net/wireless/iwlwifi/pcie/internal.h | |||
@@ -44,15 +44,6 @@ | |||
44 | #include "iwl-io.h" | 44 | #include "iwl-io.h" |
45 | #include "iwl-op-mode.h" | 45 | #include "iwl-op-mode.h" |
46 | 46 | ||
47 | /* | ||
48 | * RX related structures and functions | ||
49 | */ | ||
50 | #define RX_NUM_QUEUES 1 | ||
51 | #define RX_POST_REQ_ALLOC 2 | ||
52 | #define RX_CLAIM_REQ_ALLOC 8 | ||
53 | #define RX_POOL_SIZE ((RX_CLAIM_REQ_ALLOC - RX_POST_REQ_ALLOC) * RX_NUM_QUEUES) | ||
54 | #define RX_LOW_WATERMARK 8 | ||
55 | |||
56 | struct iwl_host_cmd; | 47 | struct iwl_host_cmd; |
57 | 48 | ||
58 | /*This file includes the declaration that are internal to the | 49 | /*This file includes the declaration that are internal to the |
@@ -86,29 +77,29 @@ struct isr_statistics { | |||
86 | * struct iwl_rxq - Rx queue | 77 | * struct iwl_rxq - Rx queue |
87 | * @bd: driver's pointer to buffer of receive buffer descriptors (rbd) | 78 | * @bd: driver's pointer to buffer of receive buffer descriptors (rbd) |
88 | * @bd_dma: bus address of buffer of receive buffer descriptors (rbd) | 79 | * @bd_dma: bus address of buffer of receive buffer descriptors (rbd) |
80 | * @pool: | ||
81 | * @queue: | ||
89 | * @read: Shared index to newest available Rx buffer | 82 | * @read: Shared index to newest available Rx buffer |
90 | * @write: Shared index to oldest written Rx packet | 83 | * @write: Shared index to oldest written Rx packet |
91 | * @free_count: Number of pre-allocated buffers in rx_free | 84 | * @free_count: Number of pre-allocated buffers in rx_free |
92 | * @used_count: Number of RBDs handled to allocator to use for allocation | ||
93 | * @write_actual: | 85 | * @write_actual: |
94 | * @rx_free: list of RBDs with allocated RB ready for use | 86 | * @rx_free: list of free SKBs for use |
95 | * @rx_used: list of RBDs with no RB attached | 87 | * @rx_used: List of Rx buffers with no SKB |
96 | * @need_update: flag to indicate we need to update read/write index | 88 | * @need_update: flag to indicate we need to update read/write index |
97 | * @rb_stts: driver's pointer to receive buffer status | 89 | * @rb_stts: driver's pointer to receive buffer status |
98 | * @rb_stts_dma: bus address of receive buffer status | 90 | * @rb_stts_dma: bus address of receive buffer status |
99 | * @lock: | 91 | * @lock: |
100 | * @pool: initial pool of iwl_rx_mem_buffer for the queue | ||
101 | * @queue: actual rx queue | ||
102 | * | 92 | * |
103 | * NOTE: rx_free and rx_used are used as a FIFO for iwl_rx_mem_buffers | 93 | * NOTE: rx_free and rx_used are used as a FIFO for iwl_rx_mem_buffers |
104 | */ | 94 | */ |
105 | struct iwl_rxq { | 95 | struct iwl_rxq { |
106 | __le32 *bd; | 96 | __le32 *bd; |
107 | dma_addr_t bd_dma; | 97 | dma_addr_t bd_dma; |
98 | struct iwl_rx_mem_buffer pool[RX_QUEUE_SIZE + RX_FREE_BUFFERS]; | ||
99 | struct iwl_rx_mem_buffer *queue[RX_QUEUE_SIZE]; | ||
108 | u32 read; | 100 | u32 read; |
109 | u32 write; | 101 | u32 write; |
110 | u32 free_count; | 102 | u32 free_count; |
111 | u32 used_count; | ||
112 | u32 write_actual; | 103 | u32 write_actual; |
113 | struct list_head rx_free; | 104 | struct list_head rx_free; |
114 | struct list_head rx_used; | 105 | struct list_head rx_used; |
@@ -116,32 +107,6 @@ struct iwl_rxq { | |||
116 | struct iwl_rb_status *rb_stts; | 107 | struct iwl_rb_status *rb_stts; |
117 | dma_addr_t rb_stts_dma; | 108 | dma_addr_t rb_stts_dma; |
118 | spinlock_t lock; | 109 | spinlock_t lock; |
119 | struct iwl_rx_mem_buffer pool[RX_QUEUE_SIZE]; | ||
120 | struct iwl_rx_mem_buffer *queue[RX_QUEUE_SIZE]; | ||
121 | }; | ||
122 | |||
123 | /** | ||
124 | * struct iwl_rb_allocator - Rx allocator | ||
125 | * @pool: initial pool of allocator | ||
126 | * @req_pending: number of requests the allcator had not processed yet | ||
127 | * @req_ready: number of requests honored and ready for claiming | ||
128 | * @rbd_allocated: RBDs with pages allocated and ready to be handled to | ||
129 | * the queue. This is a list of &struct iwl_rx_mem_buffer | ||
130 | * @rbd_empty: RBDs with no page attached for allocator use. This is a list | ||
131 | * of &struct iwl_rx_mem_buffer | ||
132 | * @lock: protects the rbd_allocated and rbd_empty lists | ||
133 | * @alloc_wq: work queue for background calls | ||
134 | * @rx_alloc: work struct for background calls | ||
135 | */ | ||
136 | struct iwl_rb_allocator { | ||
137 | struct iwl_rx_mem_buffer pool[RX_POOL_SIZE]; | ||
138 | atomic_t req_pending; | ||
139 | atomic_t req_ready; | ||
140 | struct list_head rbd_allocated; | ||
141 | struct list_head rbd_empty; | ||
142 | spinlock_t lock; | ||
143 | struct workqueue_struct *alloc_wq; | ||
144 | struct work_struct rx_alloc; | ||
145 | }; | 110 | }; |
146 | 111 | ||
147 | struct iwl_dma_ptr { | 112 | struct iwl_dma_ptr { |
@@ -285,7 +250,7 @@ iwl_pcie_get_scratchbuf_dma(struct iwl_txq *txq, int idx) | |||
285 | /** | 250 | /** |
286 | * struct iwl_trans_pcie - PCIe transport specific data | 251 | * struct iwl_trans_pcie - PCIe transport specific data |
287 | * @rxq: all the RX queue data | 252 | * @rxq: all the RX queue data |
288 | * @rba: allocator for RX replenishing | 253 | * @rx_replenish: work that will be called when buffers need to be allocated |
289 | * @drv - pointer to iwl_drv | 254 | * @drv - pointer to iwl_drv |
290 | * @trans: pointer to the generic transport area | 255 | * @trans: pointer to the generic transport area |
291 | * @scd_base_addr: scheduler sram base address in SRAM | 256 | * @scd_base_addr: scheduler sram base address in SRAM |
@@ -308,7 +273,7 @@ iwl_pcie_get_scratchbuf_dma(struct iwl_txq *txq, int idx) | |||
308 | */ | 273 | */ |
309 | struct iwl_trans_pcie { | 274 | struct iwl_trans_pcie { |
310 | struct iwl_rxq rxq; | 275 | struct iwl_rxq rxq; |
311 | struct iwl_rb_allocator rba; | 276 | struct work_struct rx_replenish; |
312 | struct iwl_trans *trans; | 277 | struct iwl_trans *trans; |
313 | struct iwl_drv *drv; | 278 | struct iwl_drv *drv; |
314 | 279 | ||