diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2008-12-18 21:37:15 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-01-29 15:59:01 -0500 |
commit | d20b3c65f2a3e18ea86542e6ca4fe1c6d16c91df (patch) | |
tree | 78f8c8e4861160f0751240a8c65e2d8b0d9ab785 /drivers/net/wireless/iwlwifi/iwl3945-base.c | |
parent | 1125eff3ae26b2e39c6bf940b5e0b8774ebd2896 (diff) |
iwl3945: iwl3945_queue and iwl3945_channel_info replacement
This patch replaces the queue and channel info 3945 structures with the iwl
ones.
The initial goal was to replace the channel info structure. Once we do that,
and then include iwl-dev.h instead of iwl-3945.h, we still get build errors
due to several routines and macro redefinitions. This is why this patch also
includes:
- TFD39_MAX_PAYLOAD definition for 3945.
- CMD_SIZE, CMD_HUGE, CMD_SKB duplication removal.
- iwl3945_queue replacement in order to also get rid of the duplicated
get_cmd_index routine.
Getting rid of any of those needs the iwl-dev.h inclusion which then creates
build errors due to definitions duplication. This is why we include all those
in the same patch.
Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com>
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl3945-base.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 69 |
1 files changed, 22 insertions, 47 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index aac8825237f4..421c944b1877 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -53,6 +53,7 @@ | |||
53 | #include "iwl-3945.h" | 53 | #include "iwl-3945.h" |
54 | #include "iwl-3945-fh.h" | 54 | #include "iwl-3945-fh.h" |
55 | #include "iwl-helpers.h" | 55 | #include "iwl-helpers.h" |
56 | #include "iwl-dev.h" | ||
56 | 57 | ||
57 | static int iwl3945_tx_queue_update_write_ptr(struct iwl3945_priv *priv, | 58 | static int iwl3945_tx_queue_update_write_ptr(struct iwl3945_priv *priv, |
58 | struct iwl3945_tx_queue *txq); | 59 | struct iwl3945_tx_queue *txq); |
@@ -132,44 +133,17 @@ static const struct ieee80211_supported_band *iwl3945_get_band( | |||
132 | * (#0-3) for data tx via EDCA. An additional 2 HCCA queues are unused. | 133 | * (#0-3) for data tx via EDCA. An additional 2 HCCA queues are unused. |
133 | ***************************************************/ | 134 | ***************************************************/ |
134 | 135 | ||
135 | int iwl3945_queue_space(const struct iwl3945_queue *q) | 136 | int iwl3945_x2_queue_used(const struct iwl_queue *q, int i) |
136 | { | ||
137 | int s = q->read_ptr - q->write_ptr; | ||
138 | |||
139 | if (q->read_ptr > q->write_ptr) | ||
140 | s -= q->n_bd; | ||
141 | |||
142 | if (s <= 0) | ||
143 | s += q->n_window; | ||
144 | /* keep some reserve to not confuse empty and full situations */ | ||
145 | s -= 2; | ||
146 | if (s < 0) | ||
147 | s = 0; | ||
148 | return s; | ||
149 | } | ||
150 | |||
151 | int iwl3945_x2_queue_used(const struct iwl3945_queue *q, int i) | ||
152 | { | 137 | { |
153 | return q->write_ptr > q->read_ptr ? | 138 | return q->write_ptr > q->read_ptr ? |
154 | (i >= q->read_ptr && i < q->write_ptr) : | 139 | (i >= q->read_ptr && i < q->write_ptr) : |
155 | !(i < q->read_ptr && i >= q->write_ptr); | 140 | !(i < q->read_ptr && i >= q->write_ptr); |
156 | } | 141 | } |
157 | 142 | ||
158 | |||
159 | static inline u8 get_cmd_index(struct iwl3945_queue *q, u32 index, int is_huge) | ||
160 | { | ||
161 | /* This is for scan command, the big buffer at end of command array */ | ||
162 | if (is_huge) | ||
163 | return q->n_window; /* must be power of 2 */ | ||
164 | |||
165 | /* Otherwise, use normal size buffers */ | ||
166 | return index & (q->n_window - 1); | ||
167 | } | ||
168 | |||
169 | /** | 143 | /** |
170 | * iwl3945_queue_init - Initialize queue's high/low-water and read/write indexes | 144 | * iwl3945_queue_init - Initialize queue's high/low-water and read/write indexes |
171 | */ | 145 | */ |
172 | static int iwl3945_queue_init(struct iwl3945_priv *priv, struct iwl3945_queue *q, | 146 | static int iwl3945_queue_init(struct iwl3945_priv *priv, struct iwl_queue *q, |
173 | int count, int slots_num, u32 id) | 147 | int count, int slots_num, u32 id) |
174 | { | 148 | { |
175 | q->n_bd = count; | 149 | q->n_bd = count; |
@@ -297,7 +271,7 @@ int iwl3945_tx_queue_init(struct iwl3945_priv *priv, | |||
297 | */ | 271 | */ |
298 | void iwl3945_tx_queue_free(struct iwl3945_priv *priv, struct iwl3945_tx_queue *txq) | 272 | void iwl3945_tx_queue_free(struct iwl3945_priv *priv, struct iwl3945_tx_queue *txq) |
299 | { | 273 | { |
300 | struct iwl3945_queue *q = &txq->q; | 274 | struct iwl_queue *q = &txq->q; |
301 | struct pci_dev *dev = priv->pci_dev; | 275 | struct pci_dev *dev = priv->pci_dev; |
302 | int len; | 276 | int len; |
303 | 277 | ||
@@ -581,7 +555,7 @@ static const char *get_cmd_string(u8 cmd) | |||
581 | static int iwl3945_enqueue_hcmd(struct iwl3945_priv *priv, struct iwl3945_host_cmd *cmd) | 555 | static int iwl3945_enqueue_hcmd(struct iwl3945_priv *priv, struct iwl3945_host_cmd *cmd) |
582 | { | 556 | { |
583 | struct iwl3945_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM]; | 557 | struct iwl3945_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM]; |
584 | struct iwl3945_queue *q = &txq->q; | 558 | struct iwl_queue *q = &txq->q; |
585 | struct iwl3945_tfd_frame *tfd; | 559 | struct iwl3945_tfd_frame *tfd; |
586 | u32 *control_flags; | 560 | u32 *control_flags; |
587 | struct iwl3945_cmd *out_cmd; | 561 | struct iwl3945_cmd *out_cmd; |
@@ -596,7 +570,7 @@ static int iwl3945_enqueue_hcmd(struct iwl3945_priv *priv, struct iwl3945_host_c | |||
596 | /* If any of the command structures end up being larger than | 570 | /* If any of the command structures end up being larger than |
597 | * the TFD_MAX_PAYLOAD_SIZE, and it sent as a 'small' command then | 571 | * the TFD_MAX_PAYLOAD_SIZE, and it sent as a 'small' command then |
598 | * we will need to increase the size of the TFD entries */ | 572 | * we will need to increase the size of the TFD entries */ |
599 | BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) && | 573 | BUG_ON((fix_size > TFD39_MAX_PAYLOAD_SIZE) && |
600 | !(cmd->meta.flags & CMD_SIZE_HUGE)); | 574 | !(cmd->meta.flags & CMD_SIZE_HUGE)); |
601 | 575 | ||
602 | 576 | ||
@@ -605,7 +579,7 @@ static int iwl3945_enqueue_hcmd(struct iwl3945_priv *priv, struct iwl3945_host_c | |||
605 | return -EIO; | 579 | return -EIO; |
606 | } | 580 | } |
607 | 581 | ||
608 | if (iwl3945_queue_space(q) < ((cmd->meta.flags & CMD_ASYNC) ? 2 : 1)) { | 582 | if (iwl_queue_space(q) < ((cmd->meta.flags & CMD_ASYNC) ? 2 : 1)) { |
609 | IWL_ERROR("No space for Tx\n"); | 583 | IWL_ERROR("No space for Tx\n"); |
610 | return -ENOSPC; | 584 | return -ENOSPC; |
611 | } | 585 | } |
@@ -2171,7 +2145,7 @@ static void iwl3945_set_flags_for_phymode(struct iwl3945_priv *priv, | |||
2171 | static void iwl3945_connection_init_rx_config(struct iwl3945_priv *priv, | 2145 | static void iwl3945_connection_init_rx_config(struct iwl3945_priv *priv, |
2172 | int mode) | 2146 | int mode) |
2173 | { | 2147 | { |
2174 | const struct iwl3945_channel_info *ch_info; | 2148 | const struct iwl_channel_info *ch_info; |
2175 | 2149 | ||
2176 | memset(&priv->staging_rxon, 0, sizeof(priv->staging_rxon)); | 2150 | memset(&priv->staging_rxon, 0, sizeof(priv->staging_rxon)); |
2177 | 2151 | ||
@@ -2241,7 +2215,7 @@ static void iwl3945_connection_init_rx_config(struct iwl3945_priv *priv, | |||
2241 | static int iwl3945_set_mode(struct iwl3945_priv *priv, int mode) | 2215 | static int iwl3945_set_mode(struct iwl3945_priv *priv, int mode) |
2242 | { | 2216 | { |
2243 | if (mode == NL80211_IFTYPE_ADHOC) { | 2217 | if (mode == NL80211_IFTYPE_ADHOC) { |
2244 | const struct iwl3945_channel_info *ch_info; | 2218 | const struct iwl_channel_info *ch_info; |
2245 | 2219 | ||
2246 | ch_info = iwl3945_get_channel_info(priv, | 2220 | ch_info = iwl3945_get_channel_info(priv, |
2247 | priv->band, | 2221 | priv->band, |
@@ -2457,7 +2431,7 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv, struct sk_buff *skb) | |||
2457 | u32 *control_flags; | 2431 | u32 *control_flags; |
2458 | int txq_id = skb_get_queue_mapping(skb); | 2432 | int txq_id = skb_get_queue_mapping(skb); |
2459 | struct iwl3945_tx_queue *txq = NULL; | 2433 | struct iwl3945_tx_queue *txq = NULL; |
2460 | struct iwl3945_queue *q = NULL; | 2434 | struct iwl_queue *q = NULL; |
2461 | dma_addr_t phys_addr; | 2435 | dma_addr_t phys_addr; |
2462 | dma_addr_t txcmd_phys; | 2436 | dma_addr_t txcmd_phys; |
2463 | struct iwl3945_cmd *out_cmd = NULL; | 2437 | struct iwl3945_cmd *out_cmd = NULL; |
@@ -2652,7 +2626,7 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv, struct sk_buff *skb) | |||
2652 | if (rc) | 2626 | if (rc) |
2653 | return rc; | 2627 | return rc; |
2654 | 2628 | ||
2655 | if ((iwl3945_queue_space(q) < q->high_mark) | 2629 | if ((iwl_queue_space(q) < q->high_mark) |
2656 | && priv->mac80211_registered) { | 2630 | && priv->mac80211_registered) { |
2657 | if (wait_write_ptr) { | 2631 | if (wait_write_ptr) { |
2658 | spin_lock_irqsave(&priv->lock, flags); | 2632 | spin_lock_irqsave(&priv->lock, flags); |
@@ -3305,7 +3279,7 @@ static void iwl3945_cmd_queue_reclaim(struct iwl3945_priv *priv, | |||
3305 | int txq_id, int index) | 3279 | int txq_id, int index) |
3306 | { | 3280 | { |
3307 | struct iwl3945_tx_queue *txq = &priv->txq[txq_id]; | 3281 | struct iwl3945_tx_queue *txq = &priv->txq[txq_id]; |
3308 | struct iwl3945_queue *q = &txq->q; | 3282 | struct iwl_queue *q = &txq->q; |
3309 | int nfreed = 0; | 3283 | int nfreed = 0; |
3310 | 3284 | ||
3311 | if ((index >= q->n_bd) || (iwl3945_x2_queue_used(q, index) == 0)) { | 3285 | if ((index >= q->n_bd) || (iwl3945_x2_queue_used(q, index) == 0)) { |
@@ -4524,8 +4498,9 @@ static void iwl3945_init_band_reference(const struct iwl3945_priv *priv, int ban | |||
4524 | * | 4498 | * |
4525 | * Based on band and channel number. | 4499 | * Based on band and channel number. |
4526 | */ | 4500 | */ |
4527 | const struct iwl3945_channel_info *iwl3945_get_channel_info(const struct iwl3945_priv *priv, | 4501 | const struct iwl_channel_info * |
4528 | enum ieee80211_band band, u16 channel) | 4502 | iwl3945_get_channel_info(const struct iwl3945_priv *priv, |
4503 | enum ieee80211_band band, u16 channel) | ||
4529 | { | 4504 | { |
4530 | int i; | 4505 | int i; |
4531 | 4506 | ||
@@ -4560,7 +4535,7 @@ static int iwl3945_init_channel_map(struct iwl3945_priv *priv) | |||
4560 | const u8 *eeprom_ch_index = NULL; | 4535 | const u8 *eeprom_ch_index = NULL; |
4561 | const struct iwl_eeprom_channel *eeprom_ch_info = NULL; | 4536 | const struct iwl_eeprom_channel *eeprom_ch_info = NULL; |
4562 | int band, ch; | 4537 | int band, ch; |
4563 | struct iwl3945_channel_info *ch_info; | 4538 | struct iwl_channel_info *ch_info; |
4564 | 4539 | ||
4565 | if (priv->channel_count) { | 4540 | if (priv->channel_count) { |
4566 | IWL_DEBUG_INFO("Channel map already initialized.\n"); | 4541 | IWL_DEBUG_INFO("Channel map already initialized.\n"); |
@@ -4584,7 +4559,7 @@ static int iwl3945_init_channel_map(struct iwl3945_priv *priv) | |||
4584 | 4559 | ||
4585 | IWL_DEBUG_INFO("Parsing data for %d channels.\n", priv->channel_count); | 4560 | IWL_DEBUG_INFO("Parsing data for %d channels.\n", priv->channel_count); |
4586 | 4561 | ||
4587 | priv->channel_info = kzalloc(sizeof(struct iwl3945_channel_info) * | 4562 | priv->channel_info = kzalloc(sizeof(struct iwl_channel_info) * |
4588 | priv->channel_count, GFP_KERNEL); | 4563 | priv->channel_count, GFP_KERNEL); |
4589 | if (!priv->channel_info) { | 4564 | if (!priv->channel_info) { |
4590 | IWL_ERROR("Could not allocate channel_info\n"); | 4565 | IWL_ERROR("Could not allocate channel_info\n"); |
@@ -4746,7 +4721,7 @@ static int iwl3945_get_channels_for_scan(struct iwl3945_priv *priv, | |||
4746 | { | 4721 | { |
4747 | const struct ieee80211_channel *channels = NULL; | 4722 | const struct ieee80211_channel *channels = NULL; |
4748 | const struct ieee80211_supported_band *sband; | 4723 | const struct ieee80211_supported_band *sband; |
4749 | const struct iwl3945_channel_info *ch_info; | 4724 | const struct iwl_channel_info *ch_info; |
4750 | u16 passive_dwell = 0; | 4725 | u16 passive_dwell = 0; |
4751 | u16 active_dwell = 0; | 4726 | u16 active_dwell = 0; |
4752 | int added, i; | 4727 | int added, i; |
@@ -4858,7 +4833,7 @@ static void iwl3945_init_hw_rates(struct iwl3945_priv *priv, | |||
4858 | */ | 4833 | */ |
4859 | static int iwl3945_init_geos(struct iwl3945_priv *priv) | 4834 | static int iwl3945_init_geos(struct iwl3945_priv *priv) |
4860 | { | 4835 | { |
4861 | struct iwl3945_channel_info *ch; | 4836 | struct iwl_channel_info *ch; |
4862 | struct ieee80211_supported_band *sband; | 4837 | struct ieee80211_supported_band *sband; |
4863 | struct ieee80211_channel *channels; | 4838 | struct ieee80211_channel *channels; |
4864 | struct ieee80211_channel *geo_ch; | 4839 | struct ieee80211_channel *geo_ch; |
@@ -6585,7 +6560,7 @@ static int iwl3945_mac_add_interface(struct ieee80211_hw *hw, | |||
6585 | static int iwl3945_mac_config(struct ieee80211_hw *hw, u32 changed) | 6560 | static int iwl3945_mac_config(struct ieee80211_hw *hw, u32 changed) |
6586 | { | 6561 | { |
6587 | struct iwl3945_priv *priv = hw->priv; | 6562 | struct iwl3945_priv *priv = hw->priv; |
6588 | const struct iwl3945_channel_info *ch_info; | 6563 | const struct iwl_channel_info *ch_info; |
6589 | struct ieee80211_conf *conf = &hw->conf; | 6564 | struct ieee80211_conf *conf = &hw->conf; |
6590 | unsigned long flags; | 6565 | unsigned long flags; |
6591 | int ret = 0; | 6566 | int ret = 0; |
@@ -7112,7 +7087,7 @@ static int iwl3945_mac_get_tx_stats(struct ieee80211_hw *hw, | |||
7112 | struct iwl3945_priv *priv = hw->priv; | 7087 | struct iwl3945_priv *priv = hw->priv; |
7113 | int i, avail; | 7088 | int i, avail; |
7114 | struct iwl3945_tx_queue *txq; | 7089 | struct iwl3945_tx_queue *txq; |
7115 | struct iwl3945_queue *q; | 7090 | struct iwl_queue *q; |
7116 | unsigned long flags; | 7091 | unsigned long flags; |
7117 | 7092 | ||
7118 | IWL_DEBUG_MAC80211("enter\n"); | 7093 | IWL_DEBUG_MAC80211("enter\n"); |
@@ -7127,7 +7102,7 @@ static int iwl3945_mac_get_tx_stats(struct ieee80211_hw *hw, | |||
7127 | for (i = 0; i < AC_NUM; i++) { | 7102 | for (i = 0; i < AC_NUM; i++) { |
7128 | txq = &priv->txq[i]; | 7103 | txq = &priv->txq[i]; |
7129 | q = &txq->q; | 7104 | q = &txq->q; |
7130 | avail = iwl3945_queue_space(q); | 7105 | avail = iwl_queue_space(q); |
7131 | 7106 | ||
7132 | stats[i].len = q->n_window - avail; | 7107 | stats[i].len = q->n_window - avail; |
7133 | stats[i].limit = q->n_window - q->high_mark; | 7108 | stats[i].limit = q->n_window - q->high_mark; |