aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-trans.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-03-05 14:24:38 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:12 -0500
commit65b94a4abfd55b3304be25ffed9832455d41e1dd (patch)
treee022526ae46b74ebbb9305b43097c7dfebe10bc7 /drivers/net/wireless/iwlwifi/iwl-trans.h
parent2c6ab7ff8fa9af22a2a616656da6e5a0567da285 (diff)
iwlwifi: pass response packet directly
When CMD_WANT_SKB is set for a (synchronous) command, the response is passed back to the caller which is then responsible for freeing it. Make this more abstract with real API, passing directly the response packet in the new cmd.resp_pkt member and also introduce iwl_free_resp() to free the pages -- this way the upper layers don't have to directly touch the page implementation. NOTE: This breaks IDI -- the new code isn't reflected there yet! Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans.h')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 83f04c9d77e5..e8ab8d8ca484 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -173,7 +173,9 @@ enum iwl_hcmd_dataflag {
173 * struct iwl_host_cmd - Host command to the uCode 173 * struct iwl_host_cmd - Host command to the uCode
174 * 174 *
175 * @data: array of chunks that composes the data of the host command 175 * @data: array of chunks that composes the data of the host command
176 * @reply_page: pointer to the page that holds the response to the host command 176 * @resp_pkt: response packet, if %CMD_WANT_SKB was set
177 * @_rx_page_order: (internally used to free response packet)
178 * @_rx_page_addr: (internally used to free response packet)
177 * @handler_status: return value of the handler of the command 179 * @handler_status: return value of the handler of the command
178 * (put in setup_rx_handlers) - valid for SYNC mode only 180 * (put in setup_rx_handlers) - valid for SYNC mode only
179 * @flags: can be CMD_* 181 * @flags: can be CMD_*
@@ -183,7 +185,9 @@ enum iwl_hcmd_dataflag {
183 */ 185 */
184struct iwl_host_cmd { 186struct iwl_host_cmd {
185 const void *data[IWL_MAX_CMD_TFDS]; 187 const void *data[IWL_MAX_CMD_TFDS];
186 unsigned long reply_page; 188 struct iwl_rx_packet *resp_pkt;
189 unsigned long _rx_page_addr;
190 u32 _rx_page_order;
187 int handler_status; 191 int handler_status;
188 192
189 u32 flags; 193 u32 flags;
@@ -192,6 +196,11 @@ struct iwl_host_cmd {
192 u8 id; 196 u8 id;
193}; 197};
194 198
199static inline void iwl_free_resp(struct iwl_host_cmd *cmd)
200{
201 free_pages(cmd->_rx_page_addr, cmd->_rx_page_order);
202}
203
195/** 204/**
196 * struct iwl_trans_ops - transport specific operations 205 * struct iwl_trans_ops - transport specific operations
197 * 206 *