diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rx.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-op-mode.h | 13 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-shared.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c | 3 |
6 files changed, 21 insertions, 7 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rx.c b/drivers/net/wireless/iwlwifi/iwl-agn-rx.c index aee7d060d31..30bb5bbb0cd 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rx.c | |||
@@ -1141,10 +1141,11 @@ void iwl_setup_rx_handlers(struct iwl_priv *priv) | |||
1141 | 1141 | ||
1142 | } | 1142 | } |
1143 | 1143 | ||
1144 | int iwl_rx_dispatch(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb, | 1144 | int iwl_rx_dispatch(struct iwl_op_mode *op_mode, struct iwl_rx_mem_buffer *rxb, |
1145 | struct iwl_device_cmd *cmd) | 1145 | struct iwl_device_cmd *cmd) |
1146 | { | 1146 | { |
1147 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 1147 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
1148 | struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); | ||
1148 | int err = 0; | 1149 | int err = 0; |
1149 | 1150 | ||
1150 | /* | 1151 | /* |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index ac62010408a..bafa546939b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1385,6 +1385,7 @@ static void iwl_op_mode_dvm_stop(struct iwl_op_mode *op_mode) | |||
1385 | const struct iwl_op_mode_ops iwl_dvm_ops = { | 1385 | const struct iwl_op_mode_ops iwl_dvm_ops = { |
1386 | .start = iwl_op_mode_dvm_start, | 1386 | .start = iwl_op_mode_dvm_start, |
1387 | .stop = iwl_op_mode_dvm_stop, | 1387 | .stop = iwl_op_mode_dvm_stop, |
1388 | .rx = iwl_rx_dispatch, | ||
1388 | .free_skb = iwl_free_skb, | 1389 | .free_skb = iwl_free_skb, |
1389 | }; | 1390 | }; |
1390 | 1391 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h index 00253f3d987..337e0984702 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn.h | |||
@@ -81,6 +81,9 @@ void iwl_down(struct iwl_priv *priv); | |||
81 | void iwl_cancel_deferred_work(struct iwl_priv *priv); | 81 | void iwl_cancel_deferred_work(struct iwl_priv *priv); |
82 | void iwlagn_prepare_restart(struct iwl_priv *priv); | 82 | void iwlagn_prepare_restart(struct iwl_priv *priv); |
83 | void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb); | 83 | void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb); |
84 | int __must_check iwl_rx_dispatch(struct iwl_op_mode *op_mode, | ||
85 | struct iwl_rx_mem_buffer *rxb, | ||
86 | struct iwl_device_cmd *cmd); | ||
84 | 87 | ||
85 | /* MAC80211 */ | 88 | /* MAC80211 */ |
86 | struct ieee80211_hw *iwl_alloc_all(void); | 89 | struct ieee80211_hw *iwl_alloc_all(void); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-op-mode.h b/drivers/net/wireless/iwlwifi/iwl-op-mode.h index 59dd3074bf7..b0272fd9b53 100644 --- a/drivers/net/wireless/iwlwifi/iwl-op-mode.h +++ b/drivers/net/wireless/iwlwifi/iwl-op-mode.h | |||
@@ -66,6 +66,8 @@ | |||
66 | struct iwl_op_mode; | 66 | struct iwl_op_mode; |
67 | struct iwl_trans; | 67 | struct iwl_trans; |
68 | struct sk_buff; | 68 | struct sk_buff; |
69 | struct iwl_device_cmd; | ||
70 | struct iwl_rx_mem_buffer; | ||
69 | 71 | ||
70 | /** | 72 | /** |
71 | * struct iwl_op_mode_ops - op_mode specific operations | 73 | * struct iwl_op_mode_ops - op_mode specific operations |
@@ -76,6 +78,8 @@ struct sk_buff; | |||
76 | * May sleep | 78 | * May sleep |
77 | * @stop: stop the op_mode | 79 | * @stop: stop the op_mode |
78 | * May sleep | 80 | * May sleep |
81 | * @rx: Rx notification to the op_mode. rxb is the Rx buffer itself. Cmd is the | ||
82 | * HCMD the this Rx responds to. | ||
79 | * @free_skb: allows the transport layer to free skbs that haven't been | 83 | * @free_skb: allows the transport layer to free skbs that haven't been |
80 | * reclaimed by the op_mode. This can happen when the driver is freed and | 84 | * reclaimed by the op_mode. This can happen when the driver is freed and |
81 | * there are Tx packets pending in the transport layer. | 85 | * there are Tx packets pending in the transport layer. |
@@ -84,6 +88,8 @@ struct sk_buff; | |||
84 | struct iwl_op_mode_ops { | 88 | struct iwl_op_mode_ops { |
85 | struct iwl_op_mode *(*start)(struct iwl_trans *trans); | 89 | struct iwl_op_mode *(*start)(struct iwl_trans *trans); |
86 | void (*stop)(struct iwl_op_mode *op_mode); | 90 | void (*stop)(struct iwl_op_mode *op_mode); |
91 | int (*rx)(struct iwl_op_mode *op_mode, struct iwl_rx_mem_buffer *rxb, | ||
92 | struct iwl_device_cmd *cmd); | ||
87 | void (*free_skb)(struct iwl_op_mode *op_mode, struct sk_buff *skb); | 93 | void (*free_skb)(struct iwl_op_mode *op_mode, struct sk_buff *skb); |
88 | }; | 94 | }; |
89 | 95 | ||
@@ -106,6 +112,13 @@ static inline void iwl_op_mode_stop(struct iwl_op_mode *op_mode) | |||
106 | op_mode->ops->stop(op_mode); | 112 | op_mode->ops->stop(op_mode); |
107 | } | 113 | } |
108 | 114 | ||
115 | static inline int iwl_op_mode_rx(struct iwl_op_mode *op_mode, | ||
116 | struct iwl_rx_mem_buffer *rxb, | ||
117 | struct iwl_device_cmd *cmd) | ||
118 | { | ||
119 | return op_mode->ops->rx(op_mode, rxb, cmd); | ||
120 | } | ||
121 | |||
109 | static inline void iwl_op_mode_free_skb(struct iwl_op_mode *op_mode, | 122 | static inline void iwl_op_mode_free_skb(struct iwl_op_mode *op_mode, |
110 | struct sk_buff *skb) | 123 | struct sk_buff *skb) |
111 | { | 124 | { |
diff --git a/drivers/net/wireless/iwlwifi/iwl-shared.h b/drivers/net/wireless/iwlwifi/iwl-shared.h index eff9360a0c7..b63423f6d2b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-shared.h +++ b/drivers/net/wireless/iwlwifi/iwl-shared.h | |||
@@ -532,11 +532,6 @@ enum iwl_rxon_context_id { | |||
532 | NUM_IWL_RXON_CTX | 532 | NUM_IWL_RXON_CTX |
533 | }; | 533 | }; |
534 | 534 | ||
535 | struct iwl_device_cmd; | ||
536 | int __must_check iwl_rx_dispatch(struct iwl_priv *priv, | ||
537 | struct iwl_rx_mem_buffer *rxb, | ||
538 | struct iwl_device_cmd *cmd); | ||
539 | |||
540 | int iwlagn_hw_valid_rtc_data_addr(u32 addr); | 535 | int iwlagn_hw_valid_rtc_data_addr(u32 addr); |
541 | void iwl_set_hw_rfkill_state(struct iwl_priv *priv, bool state); | 536 | void iwl_set_hw_rfkill_state(struct iwl_priv *priv, bool state); |
542 | void iwl_nic_config(struct iwl_priv *priv); | 537 | void iwl_nic_config(struct iwl_priv *priv); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c index 6715d04b72f..57913114216 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include "iwl-io.h" | 35 | #include "iwl-io.h" |
36 | #include "iwl-trans-pcie-int.h" | 36 | #include "iwl-trans-pcie-int.h" |
37 | #include "iwl-wifi.h" | 37 | #include "iwl-wifi.h" |
38 | #include "iwl-op-mode.h" | ||
38 | 39 | ||
39 | #ifdef CONFIG_IWLWIFI_IDI | 40 | #ifdef CONFIG_IWLWIFI_IDI |
40 | #include "iwl-amfh.h" | 41 | #include "iwl-amfh.h" |
@@ -460,7 +461,7 @@ static void iwl_rx_handle(struct iwl_trans *trans) | |||
460 | "reclaim is false, SEQ_RX_FRAME unset: %s\n", | 461 | "reclaim is false, SEQ_RX_FRAME unset: %s\n", |
461 | get_cmd_string(pkt->hdr.cmd)); | 462 | get_cmd_string(pkt->hdr.cmd)); |
462 | 463 | ||
463 | err = iwl_rx_dispatch(priv(trans), rxb, cmd); | 464 | err = iwl_op_mode_rx(trans->op_mode, rxb, cmd); |
464 | 465 | ||
465 | /* | 466 | /* |
466 | * XXX: After here, we should always check rxb->page | 467 | * XXX: After here, we should always check rxb->page |