diff options
| -rw-r--r-- | drivers/net/wireless/iwlwifi/Makefile | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-1000.c | 11 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-2000.c | 18 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 16 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 22 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-led.c | 73 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-led.h | 33 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 42 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 24 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 28 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-debugfs.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-eeprom.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-eeprom.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-hcmd.c | 12 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-led.c | 26 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-led.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-power.c | 13 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sta.c | 9 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 38 |
19 files changed, 113 insertions, 265 deletions
diff --git a/drivers/net/wireless/iwlwifi/Makefile b/drivers/net/wireless/iwlwifi/Makefile index 3652931753e0..bb6a737de61f 100644 --- a/drivers/net/wireless/iwlwifi/Makefile +++ b/drivers/net/wireless/iwlwifi/Makefile | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | # AGN | 1 | # AGN |
| 2 | obj-$(CONFIG_IWLAGN) += iwlagn.o | 2 | obj-$(CONFIG_IWLAGN) += iwlagn.o |
| 3 | iwlagn-objs := iwl-agn.o iwl-agn-rs.o iwl-agn-led.o | 3 | iwlagn-objs := iwl-agn.o iwl-agn-rs.o |
| 4 | iwlagn-objs += iwl-agn-ucode.o iwl-agn-tx.o | 4 | iwlagn-objs += iwl-agn-ucode.o iwl-agn-tx.o |
| 5 | iwlagn-objs += iwl-agn-lib.o iwl-agn-calib.o iwl-io.o | 5 | iwlagn-objs += iwl-agn-lib.o iwl-agn-calib.o iwl-io.o |
| 6 | iwlagn-objs += iwl-agn-tt.o iwl-agn-sta.o iwl-agn-eeprom.o | 6 | iwlagn-objs += iwl-agn-tt.o iwl-agn-sta.o iwl-agn-eeprom.o |
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c index d1d7852f0ee4..baf80111efaf 100644 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c | |||
| @@ -45,7 +45,6 @@ | |||
| 45 | #include "iwl-agn.h" | 45 | #include "iwl-agn.h" |
| 46 | #include "iwl-helpers.h" | 46 | #include "iwl-helpers.h" |
| 47 | #include "iwl-agn-hw.h" | 47 | #include "iwl-agn-hw.h" |
| 48 | #include "iwl-agn-led.h" | ||
| 49 | #include "iwl-agn-debugfs.h" | 48 | #include "iwl-agn-debugfs.h" |
| 50 | 49 | ||
| 51 | /* Highest firmware API version supported */ | 50 | /* Highest firmware API version supported */ |
| @@ -196,7 +195,7 @@ static struct iwl_lib_ops iwl1000_lib = { | |||
| 196 | EEPROM_REG_BAND_4_CHANNELS, | 195 | EEPROM_REG_BAND_4_CHANNELS, |
| 197 | EEPROM_REG_BAND_5_CHANNELS, | 196 | EEPROM_REG_BAND_5_CHANNELS, |
| 198 | EEPROM_REG_BAND_24_HT40_CHANNELS, | 197 | EEPROM_REG_BAND_24_HT40_CHANNELS, |
| 199 | EEPROM_REG_BAND_52_HT40_CHANNELS | 198 | EEPROM_REGULATORY_BAND_NO_HT40, |
| 200 | }, | 199 | }, |
| 201 | .acquire_semaphore = iwlcore_eeprom_acquire_semaphore, | 200 | .acquire_semaphore = iwlcore_eeprom_acquire_semaphore, |
| 202 | .release_semaphore = iwlcore_eeprom_release_semaphore, | 201 | .release_semaphore = iwlcore_eeprom_release_semaphore, |
| @@ -215,19 +214,12 @@ static struct iwl_lib_ops iwl1000_lib = { | |||
| 215 | }, | 214 | }, |
| 216 | .txfifo_flush = iwlagn_txfifo_flush, | 215 | .txfifo_flush = iwlagn_txfifo_flush, |
| 217 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 216 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
| 218 | .tt_ops = { | ||
| 219 | .lower_power_detection = iwl_tt_is_low_power_state, | ||
| 220 | .tt_power_mode = iwl_tt_current_power_mode, | ||
| 221 | .ct_kill_check = iwl_check_for_ct_kill, | ||
| 222 | } | ||
| 223 | }; | 217 | }; |
| 224 | 218 | ||
| 225 | static const struct iwl_ops iwl1000_ops = { | 219 | static const struct iwl_ops iwl1000_ops = { |
| 226 | .lib = &iwl1000_lib, | 220 | .lib = &iwl1000_lib, |
| 227 | .hcmd = &iwlagn_hcmd, | 221 | .hcmd = &iwlagn_hcmd, |
| 228 | .utils = &iwlagn_hcmd_utils, | 222 | .utils = &iwlagn_hcmd_utils, |
| 229 | .led = &iwlagn_led_ops, | ||
| 230 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 231 | }; | 223 | }; |
| 232 | 224 | ||
| 233 | static struct iwl_base_params iwl1000_base_params = { | 225 | static struct iwl_base_params iwl1000_base_params = { |
| @@ -244,7 +236,6 @@ static struct iwl_base_params iwl1000_base_params = { | |||
| 244 | .chain_noise_scale = 1000, | 236 | .chain_noise_scale = 1000, |
| 245 | .wd_timeout = IWL_DEF_WD_TIMEOUT, | 237 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
| 246 | .max_event_log_size = 128, | 238 | .max_event_log_size = 128, |
| 247 | .ucode_tracing = true, | ||
| 248 | }; | 239 | }; |
| 249 | static struct iwl_ht_params iwl1000_ht_params = { | 240 | static struct iwl_ht_params iwl1000_ht_params = { |
| 250 | .ht_greenfield_support = true, | 241 | .ht_greenfield_support = true, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-2000.c b/drivers/net/wireless/iwlwifi/iwl-2000.c index a31314fdb053..e76e02c28928 100644 --- a/drivers/net/wireless/iwlwifi/iwl-2000.c +++ b/drivers/net/wireless/iwlwifi/iwl-2000.c | |||
| @@ -46,7 +46,6 @@ | |||
| 46 | #include "iwl-helpers.h" | 46 | #include "iwl-helpers.h" |
| 47 | #include "iwl-agn-hw.h" | 47 | #include "iwl-agn-hw.h" |
| 48 | #include "iwl-6000-hw.h" | 48 | #include "iwl-6000-hw.h" |
| 49 | #include "iwl-agn-led.h" | ||
| 50 | #include "iwl-agn-debugfs.h" | 49 | #include "iwl-agn-debugfs.h" |
| 51 | 50 | ||
| 52 | /* Highest firmware API version supported */ | 51 | /* Highest firmware API version supported */ |
| @@ -279,7 +278,7 @@ static struct iwl_lib_ops iwl2000_lib = { | |||
| 279 | EEPROM_REG_BAND_4_CHANNELS, | 278 | EEPROM_REG_BAND_4_CHANNELS, |
| 280 | EEPROM_REG_BAND_5_CHANNELS, | 279 | EEPROM_REG_BAND_5_CHANNELS, |
| 281 | EEPROM_6000_REG_BAND_24_HT40_CHANNELS, | 280 | EEPROM_6000_REG_BAND_24_HT40_CHANNELS, |
| 282 | EEPROM_REG_BAND_52_HT40_CHANNELS | 281 | EEPROM_REGULATORY_BAND_NO_HT40, |
| 283 | }, | 282 | }, |
| 284 | .acquire_semaphore = iwlcore_eeprom_acquire_semaphore, | 283 | .acquire_semaphore = iwlcore_eeprom_acquire_semaphore, |
| 285 | .release_semaphore = iwlcore_eeprom_release_semaphore, | 284 | .release_semaphore = iwlcore_eeprom_release_semaphore, |
| @@ -299,43 +298,30 @@ static struct iwl_lib_ops iwl2000_lib = { | |||
| 299 | }, | 298 | }, |
| 300 | .txfifo_flush = iwlagn_txfifo_flush, | 299 | .txfifo_flush = iwlagn_txfifo_flush, |
| 301 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 300 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
| 302 | .tt_ops = { | ||
| 303 | .lower_power_detection = iwl_tt_is_low_power_state, | ||
| 304 | .tt_power_mode = iwl_tt_current_power_mode, | ||
| 305 | .ct_kill_check = iwl_check_for_ct_kill, | ||
| 306 | } | ||
| 307 | }; | 301 | }; |
| 308 | 302 | ||
| 309 | static const struct iwl_ops iwl2000_ops = { | 303 | static const struct iwl_ops iwl2000_ops = { |
| 310 | .lib = &iwl2000_lib, | 304 | .lib = &iwl2000_lib, |
| 311 | .hcmd = &iwlagn_hcmd, | 305 | .hcmd = &iwlagn_hcmd, |
| 312 | .utils = &iwlagn_hcmd_utils, | 306 | .utils = &iwlagn_hcmd_utils, |
| 313 | .led = &iwlagn_led_ops, | ||
| 314 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 315 | }; | 307 | }; |
| 316 | 308 | ||
| 317 | static const struct iwl_ops iwl2030_ops = { | 309 | static const struct iwl_ops iwl2030_ops = { |
| 318 | .lib = &iwl2000_lib, | 310 | .lib = &iwl2000_lib, |
| 319 | .hcmd = &iwlagn_bt_hcmd, | 311 | .hcmd = &iwlagn_bt_hcmd, |
| 320 | .utils = &iwlagn_hcmd_utils, | 312 | .utils = &iwlagn_hcmd_utils, |
| 321 | .led = &iwlagn_led_ops, | ||
| 322 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 323 | }; | 313 | }; |
| 324 | 314 | ||
| 325 | static const struct iwl_ops iwl200_ops = { | 315 | static const struct iwl_ops iwl200_ops = { |
| 326 | .lib = &iwl2000_lib, | 316 | .lib = &iwl2000_lib, |
| 327 | .hcmd = &iwlagn_hcmd, | 317 | .hcmd = &iwlagn_hcmd, |
| 328 | .utils = &iwlagn_hcmd_utils, | 318 | .utils = &iwlagn_hcmd_utils, |
| 329 | .led = &iwlagn_led_ops, | ||
| 330 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 331 | }; | 319 | }; |
| 332 | 320 | ||
| 333 | static const struct iwl_ops iwl230_ops = { | 321 | static const struct iwl_ops iwl230_ops = { |
| 334 | .lib = &iwl2000_lib, | 322 | .lib = &iwl2000_lib, |
| 335 | .hcmd = &iwlagn_bt_hcmd, | 323 | .hcmd = &iwlagn_bt_hcmd, |
| 336 | .utils = &iwlagn_hcmd_utils, | 324 | .utils = &iwlagn_hcmd_utils, |
| 337 | .led = &iwlagn_led_ops, | ||
| 338 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 339 | }; | 325 | }; |
| 340 | 326 | ||
| 341 | static struct iwl_base_params iwl2000_base_params = { | 327 | static struct iwl_base_params iwl2000_base_params = { |
| @@ -353,7 +339,6 @@ static struct iwl_base_params iwl2000_base_params = { | |||
| 353 | .chain_noise_scale = 1000, | 339 | .chain_noise_scale = 1000, |
| 354 | .wd_timeout = IWL_DEF_WD_TIMEOUT, | 340 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
| 355 | .max_event_log_size = 512, | 341 | .max_event_log_size = 512, |
| 356 | .ucode_tracing = true, | ||
| 357 | .shadow_reg_enable = true, | 342 | .shadow_reg_enable = true, |
| 358 | }; | 343 | }; |
| 359 | 344 | ||
| @@ -373,7 +358,6 @@ static struct iwl_base_params iwl2030_base_params = { | |||
| 373 | .chain_noise_scale = 1000, | 358 | .chain_noise_scale = 1000, |
| 374 | .wd_timeout = IWL_LONG_WD_TIMEOUT, | 359 | .wd_timeout = IWL_LONG_WD_TIMEOUT, |
| 375 | .max_event_log_size = 512, | 360 | .max_event_log_size = 512, |
| 376 | .ucode_tracing = true, | ||
| 377 | .shadow_reg_enable = true, | 361 | .shadow_reg_enable = true, |
| 378 | }; | 362 | }; |
| 379 | 363 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 7c286662d26a..655afc19f68f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
| @@ -45,7 +45,6 @@ | |||
| 45 | #include "iwl-sta.h" | 45 | #include "iwl-sta.h" |
| 46 | #include "iwl-helpers.h" | 46 | #include "iwl-helpers.h" |
| 47 | #include "iwl-agn.h" | 47 | #include "iwl-agn.h" |
| 48 | #include "iwl-agn-led.h" | ||
| 49 | #include "iwl-agn-hw.h" | 48 | #include "iwl-agn-hw.h" |
| 50 | #include "iwl-5000-hw.h" | 49 | #include "iwl-5000-hw.h" |
| 51 | #include "iwl-agn-debugfs.h" | 50 | #include "iwl-agn-debugfs.h" |
| @@ -384,11 +383,6 @@ static struct iwl_lib_ops iwl5000_lib = { | |||
| 384 | }, | 383 | }, |
| 385 | .txfifo_flush = iwlagn_txfifo_flush, | 384 | .txfifo_flush = iwlagn_txfifo_flush, |
| 386 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 385 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
| 387 | .tt_ops = { | ||
| 388 | .lower_power_detection = iwl_tt_is_low_power_state, | ||
| 389 | .tt_power_mode = iwl_tt_current_power_mode, | ||
| 390 | .ct_kill_check = iwl_check_for_ct_kill, | ||
| 391 | } | ||
| 392 | }; | 386 | }; |
| 393 | 387 | ||
| 394 | static struct iwl_lib_ops iwl5150_lib = { | 388 | static struct iwl_lib_ops iwl5150_lib = { |
| @@ -436,27 +430,18 @@ static struct iwl_lib_ops iwl5150_lib = { | |||
| 436 | }, | 430 | }, |
| 437 | .txfifo_flush = iwlagn_txfifo_flush, | 431 | .txfifo_flush = iwlagn_txfifo_flush, |
| 438 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 432 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
| 439 | .tt_ops = { | ||
| 440 | .lower_power_detection = iwl_tt_is_low_power_state, | ||
| 441 | .tt_power_mode = iwl_tt_current_power_mode, | ||
| 442 | .ct_kill_check = iwl_check_for_ct_kill, | ||
| 443 | } | ||
| 444 | }; | 433 | }; |
| 445 | 434 | ||
| 446 | static const struct iwl_ops iwl5000_ops = { | 435 | static const struct iwl_ops iwl5000_ops = { |
| 447 | .lib = &iwl5000_lib, | 436 | .lib = &iwl5000_lib, |
| 448 | .hcmd = &iwlagn_hcmd, | 437 | .hcmd = &iwlagn_hcmd, |
| 449 | .utils = &iwlagn_hcmd_utils, | 438 | .utils = &iwlagn_hcmd_utils, |
| 450 | .led = &iwlagn_led_ops, | ||
| 451 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 452 | }; | 439 | }; |
| 453 | 440 | ||
| 454 | static const struct iwl_ops iwl5150_ops = { | 441 | static const struct iwl_ops iwl5150_ops = { |
| 455 | .lib = &iwl5150_lib, | 442 | .lib = &iwl5150_lib, |
| 456 | .hcmd = &iwlagn_hcmd, | 443 | .hcmd = &iwlagn_hcmd, |
| 457 | .utils = &iwlagn_hcmd_utils, | 444 | .utils = &iwlagn_hcmd_utils, |
| 458 | .led = &iwlagn_led_ops, | ||
| 459 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 460 | }; | 445 | }; |
| 461 | 446 | ||
| 462 | static struct iwl_base_params iwl5000_base_params = { | 447 | static struct iwl_base_params iwl5000_base_params = { |
| @@ -470,7 +455,6 @@ static struct iwl_base_params iwl5000_base_params = { | |||
| 470 | .chain_noise_scale = 1000, | 455 | .chain_noise_scale = 1000, |
| 471 | .wd_timeout = IWL_LONG_WD_TIMEOUT, | 456 | .wd_timeout = IWL_LONG_WD_TIMEOUT, |
| 472 | .max_event_log_size = 512, | 457 | .max_event_log_size = 512, |
| 473 | .ucode_tracing = true, | ||
| 474 | }; | 458 | }; |
| 475 | static struct iwl_ht_params iwl5000_ht_params = { | 459 | static struct iwl_ht_params iwl5000_ht_params = { |
| 476 | .ht_greenfield_support = true, | 460 | .ht_greenfield_support = true, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index 064981345c84..905eb57f7cab 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
| @@ -46,7 +46,6 @@ | |||
| 46 | #include "iwl-helpers.h" | 46 | #include "iwl-helpers.h" |
| 47 | #include "iwl-agn-hw.h" | 47 | #include "iwl-agn-hw.h" |
| 48 | #include "iwl-6000-hw.h" | 48 | #include "iwl-6000-hw.h" |
| 49 | #include "iwl-agn-led.h" | ||
| 50 | #include "iwl-agn-debugfs.h" | 49 | #include "iwl-agn-debugfs.h" |
| 51 | 50 | ||
| 52 | /* Highest firmware API version supported */ | 51 | /* Highest firmware API version supported */ |
| @@ -324,11 +323,6 @@ static struct iwl_lib_ops iwl6000_lib = { | |||
| 324 | }, | 323 | }, |
| 325 | .txfifo_flush = iwlagn_txfifo_flush, | 324 | .txfifo_flush = iwlagn_txfifo_flush, |
| 326 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 325 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
| 327 | .tt_ops = { | ||
| 328 | .lower_power_detection = iwl_tt_is_low_power_state, | ||
| 329 | .tt_power_mode = iwl_tt_current_power_mode, | ||
| 330 | .ct_kill_check = iwl_check_for_ct_kill, | ||
| 331 | } | ||
| 332 | }; | 326 | }; |
| 333 | 327 | ||
| 334 | static struct iwl_lib_ops iwl6030_lib = { | 328 | static struct iwl_lib_ops iwl6030_lib = { |
| @@ -378,11 +372,6 @@ static struct iwl_lib_ops iwl6030_lib = { | |||
| 378 | }, | 372 | }, |
| 379 | .txfifo_flush = iwlagn_txfifo_flush, | 373 | .txfifo_flush = iwlagn_txfifo_flush, |
| 380 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 374 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
| 381 | .tt_ops = { | ||
| 382 | .lower_power_detection = iwl_tt_is_low_power_state, | ||
| 383 | .tt_power_mode = iwl_tt_current_power_mode, | ||
| 384 | .ct_kill_check = iwl_check_for_ct_kill, | ||
| 385 | } | ||
| 386 | }; | 375 | }; |
| 387 | 376 | ||
| 388 | static struct iwl_nic_ops iwl6050_nic_ops = { | 377 | static struct iwl_nic_ops iwl6050_nic_ops = { |
| @@ -397,34 +386,26 @@ static const struct iwl_ops iwl6000_ops = { | |||
| 397 | .lib = &iwl6000_lib, | 386 | .lib = &iwl6000_lib, |
| 398 | .hcmd = &iwlagn_hcmd, | 387 | .hcmd = &iwlagn_hcmd, |
| 399 | .utils = &iwlagn_hcmd_utils, | 388 | .utils = &iwlagn_hcmd_utils, |
| 400 | .led = &iwlagn_led_ops, | ||
| 401 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 402 | }; | 389 | }; |
| 403 | 390 | ||
| 404 | static const struct iwl_ops iwl6050_ops = { | 391 | static const struct iwl_ops iwl6050_ops = { |
| 405 | .lib = &iwl6000_lib, | 392 | .lib = &iwl6000_lib, |
| 406 | .hcmd = &iwlagn_hcmd, | 393 | .hcmd = &iwlagn_hcmd, |
| 407 | .utils = &iwlagn_hcmd_utils, | 394 | .utils = &iwlagn_hcmd_utils, |
| 408 | .led = &iwlagn_led_ops, | ||
| 409 | .nic = &iwl6050_nic_ops, | 395 | .nic = &iwl6050_nic_ops, |
| 410 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 411 | }; | 396 | }; |
| 412 | 397 | ||
| 413 | static const struct iwl_ops iwl6150_ops = { | 398 | static const struct iwl_ops iwl6150_ops = { |
| 414 | .lib = &iwl6000_lib, | 399 | .lib = &iwl6000_lib, |
| 415 | .hcmd = &iwlagn_hcmd, | 400 | .hcmd = &iwlagn_hcmd, |
| 416 | .utils = &iwlagn_hcmd_utils, | 401 | .utils = &iwlagn_hcmd_utils, |
| 417 | .led = &iwlagn_led_ops, | ||
| 418 | .nic = &iwl6150_nic_ops, | 402 | .nic = &iwl6150_nic_ops, |
| 419 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 420 | }; | 403 | }; |
| 421 | 404 | ||
| 422 | static const struct iwl_ops iwl6030_ops = { | 405 | static const struct iwl_ops iwl6030_ops = { |
| 423 | .lib = &iwl6030_lib, | 406 | .lib = &iwl6030_lib, |
| 424 | .hcmd = &iwlagn_bt_hcmd, | 407 | .hcmd = &iwlagn_bt_hcmd, |
| 425 | .utils = &iwlagn_hcmd_utils, | 408 | .utils = &iwlagn_hcmd_utils, |
| 426 | .led = &iwlagn_led_ops, | ||
| 427 | .ieee80211_ops = &iwlagn_hw_ops, | ||
| 428 | }; | 409 | }; |
| 429 | 410 | ||
| 430 | static struct iwl_base_params iwl6000_base_params = { | 411 | static struct iwl_base_params iwl6000_base_params = { |
| @@ -442,7 +423,6 @@ static struct iwl_base_params iwl6000_base_params = { | |||
| 442 | .chain_noise_scale = 1000, | 423 | .chain_noise_scale = 1000, |
| 443 | .wd_timeout = IWL_DEF_WD_TIMEOUT, | 424 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
| 444 | .max_event_log_size = 512, | 425 | .max_event_log_size = 512, |
| 445 | .ucode_tracing = true, | ||
| 446 | .shadow_reg_enable = true, | 426 | .shadow_reg_enable = true, |
| 447 | }; | 427 | }; |
| 448 | 428 | ||
| @@ -461,7 +441,6 @@ static struct iwl_base_params iwl6050_base_params = { | |||
| 461 | .chain_noise_scale = 1500, | 441 | .chain_noise_scale = 1500, |
| 462 | .wd_timeout = IWL_DEF_WD_TIMEOUT, | 442 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
| 463 | .max_event_log_size = 1024, | 443 | .max_event_log_size = 1024, |
| 464 | .ucode_tracing = true, | ||
| 465 | .shadow_reg_enable = true, | 444 | .shadow_reg_enable = true, |
| 466 | }; | 445 | }; |
| 467 | static struct iwl_base_params iwl6000_g2_base_params = { | 446 | static struct iwl_base_params iwl6000_g2_base_params = { |
| @@ -479,7 +458,6 @@ static struct iwl_base_params iwl6000_g2_base_params = { | |||
| 479 | .chain_noise_scale = 1000, | 458 | .chain_noise_scale = 1000, |
| 480 | .wd_timeout = IWL_LONG_WD_TIMEOUT, | 459 | .wd_timeout = IWL_LONG_WD_TIMEOUT, |
| 481 | .max_event_log_size = 512, | 460 | .max_event_log_size = 512, |
| 482 | .ucode_tracing = true, | ||
| 483 | .shadow_reg_enable = true, | 461 | .shadow_reg_enable = true, |
| 484 | }; | 462 | }; |
| 485 | 463 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-led.c b/drivers/net/wireless/iwlwifi/iwl-agn-led.c deleted file mode 100644 index 4bb877e600c7..000000000000 --- a/drivers/net/wireless/iwlwifi/iwl-agn-led.c +++ /dev/null | |||
| @@ -1,73 +0,0 @@ | |||
| 1 | /****************************************************************************** | ||
| 2 | * | ||
| 3 | * Copyright(c) 2003 - 2011 Intel Corporation. All rights reserved. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of version 2 of the GNU General Public License as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 12 | * more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | ||
| 17 | * | ||
| 18 | * The full GNU General Public License is included in this distribution in the | ||
| 19 | * file called LICENSE. | ||
| 20 | * | ||
| 21 | * Contact Information: | ||
| 22 | * Intel Linux Wireless <ilw@linux.intel.com> | ||
| 23 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 24 | * | ||
| 25 | *****************************************************************************/ | ||
| 26 | |||
| 27 | #include <linux/kernel.h> | ||
| 28 | #include <linux/module.h> | ||
| 29 | #include <linux/init.h> | ||
| 30 | #include <linux/pci.h> | ||
| 31 | #include <linux/dma-mapping.h> | ||
| 32 | #include <linux/delay.h> | ||
| 33 | #include <linux/skbuff.h> | ||
| 34 | #include <linux/netdevice.h> | ||
| 35 | #include <linux/wireless.h> | ||
| 36 | #include <net/mac80211.h> | ||
| 37 | #include <linux/etherdevice.h> | ||
| 38 | #include <asm/unaligned.h> | ||
| 39 | |||
| 40 | #include "iwl-commands.h" | ||
| 41 | #include "iwl-dev.h" | ||
| 42 | #include "iwl-core.h" | ||
| 43 | #include "iwl-io.h" | ||
| 44 | #include "iwl-agn-led.h" | ||
| 45 | |||
| 46 | /* Send led command */ | ||
| 47 | static int iwl_send_led_cmd(struct iwl_priv *priv, struct iwl_led_cmd *led_cmd) | ||
| 48 | { | ||
| 49 | struct iwl_host_cmd cmd = { | ||
| 50 | .id = REPLY_LEDS_CMD, | ||
| 51 | .len = sizeof(struct iwl_led_cmd), | ||
| 52 | .data = led_cmd, | ||
| 53 | .flags = CMD_ASYNC, | ||
| 54 | .callback = NULL, | ||
| 55 | }; | ||
| 56 | u32 reg; | ||
| 57 | |||
| 58 | reg = iwl_read32(priv, CSR_LED_REG); | ||
| 59 | if (reg != (reg & CSR_LED_BSM_CTRL_MSK)) | ||
| 60 | iwl_write32(priv, CSR_LED_REG, reg & CSR_LED_BSM_CTRL_MSK); | ||
| 61 | |||
| 62 | return iwl_send_cmd(priv, &cmd); | ||
| 63 | } | ||
| 64 | |||
| 65 | /* Set led register off */ | ||
| 66 | void iwlagn_led_enable(struct iwl_priv *priv) | ||
| 67 | { | ||
| 68 | iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_ON); | ||
| 69 | } | ||
| 70 | |||
| 71 | const struct iwl_led_ops iwlagn_led_ops = { | ||
| 72 | .cmd = iwl_send_led_cmd, | ||
| 73 | }; | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-led.h b/drivers/net/wireless/iwlwifi/iwl-agn-led.h deleted file mode 100644 index c0b7611b72c3..000000000000 --- a/drivers/net/wireless/iwlwifi/iwl-agn-led.h +++ /dev/null | |||
| @@ -1,33 +0,0 @@ | |||
| 1 | /****************************************************************************** | ||
| 2 | * | ||
| 3 | * Copyright(c) 2003 - 2011 Intel Corporation. All rights reserved. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of version 2 of the GNU General Public License as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 12 | * more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | ||
| 17 | * | ||
| 18 | * The full GNU General Public License is included in this distribution in the | ||
| 19 | * file called LICENSE. | ||
| 20 | * | ||
| 21 | * Contact Information: | ||
| 22 | * Intel Linux Wireless <ilw@linux.intel.com> | ||
| 23 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 24 | * | ||
| 25 | *****************************************************************************/ | ||
| 26 | |||
| 27 | #ifndef __iwl_agn_led_h__ | ||
| 28 | #define __iwl_agn_led_h__ | ||
| 29 | |||
| 30 | extern const struct iwl_led_ops iwlagn_led_ops; | ||
| 31 | void iwlagn_led_enable(struct iwl_priv *priv); | ||
| 32 | |||
| 33 | #endif /* __iwl_agn_led_h__ */ | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 47a4cda9eb72..cdeb09eee739 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -59,7 +59,6 @@ | |||
| 59 | #include "iwl-sta.h" | 59 | #include "iwl-sta.h" |
| 60 | #include "iwl-agn-calib.h" | 60 | #include "iwl-agn-calib.h" |
| 61 | #include "iwl-agn.h" | 61 | #include "iwl-agn.h" |
| 62 | #include "iwl-agn-led.h" | ||
| 63 | 62 | ||
| 64 | 63 | ||
| 65 | /****************************************************************************** | 64 | /****************************************************************************** |
| @@ -254,6 +253,10 @@ int iwlagn_send_beacon_cmd(struct iwl_priv *priv) | |||
| 254 | struct iwl_frame *frame; | 253 | struct iwl_frame *frame; |
| 255 | unsigned int frame_size; | 254 | unsigned int frame_size; |
| 256 | int rc; | 255 | int rc; |
| 256 | struct iwl_host_cmd cmd = { | ||
| 257 | .id = REPLY_TX_BEACON, | ||
| 258 | .flags = CMD_SIZE_HUGE, | ||
| 259 | }; | ||
| 257 | 260 | ||
| 258 | frame = iwl_get_free_frame(priv); | 261 | frame = iwl_get_free_frame(priv); |
| 259 | if (!frame) { | 262 | if (!frame) { |
| @@ -269,8 +272,10 @@ int iwlagn_send_beacon_cmd(struct iwl_priv *priv) | |||
| 269 | return -EINVAL; | 272 | return -EINVAL; |
| 270 | } | 273 | } |
| 271 | 274 | ||
| 272 | rc = iwl_send_cmd_pdu(priv, REPLY_TX_BEACON, frame_size, | 275 | cmd.len = frame_size; |
| 273 | &frame->u.cmd[0]); | 276 | cmd.data = &frame->u.cmd[0]; |
| 277 | |||
| 278 | rc = iwl_send_cmd_sync(priv, &cmd); | ||
| 274 | 279 | ||
| 275 | iwl_free_frame(priv, frame); | 280 | iwl_free_frame(priv, frame); |
| 276 | 281 | ||
| @@ -395,7 +400,9 @@ int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, | |||
| 395 | return -EINVAL; | 400 | return -EINVAL; |
| 396 | } | 401 | } |
| 397 | 402 | ||
| 398 | BUG_ON(addr & ~DMA_BIT_MASK(36)); | 403 | if (WARN_ON(addr & ~DMA_BIT_MASK(36))) |
| 404 | return -EINVAL; | ||
| 405 | |||
| 399 | if (unlikely(addr & ~IWL_TX_DMA_MASK)) | 406 | if (unlikely(addr & ~IWL_TX_DMA_MASK)) |
| 400 | IWL_ERR(priv, "Unaligned address = %llx\n", | 407 | IWL_ERR(priv, "Unaligned address = %llx\n", |
| 401 | (unsigned long long)addr); | 408 | (unsigned long long)addr); |
| @@ -719,7 +726,10 @@ static void iwl_rx_handle(struct iwl_priv *priv) | |||
| 719 | /* If an RXB doesn't have a Rx queue slot associated with it, | 726 | /* If an RXB doesn't have a Rx queue slot associated with it, |
| 720 | * then a bug has been introduced in the queue refilling | 727 | * then a bug has been introduced in the queue refilling |
| 721 | * routines -- catch it here */ | 728 | * routines -- catch it here */ |
| 722 | BUG_ON(rxb == NULL); | 729 | if (WARN_ON(rxb == NULL)) { |
| 730 | i = (i + 1) & RX_QUEUE_MASK; | ||
| 731 | continue; | ||
| 732 | } | ||
| 723 | 733 | ||
| 724 | rxq->queue[i] = NULL; | 734 | rxq->queue[i] = NULL; |
| 725 | 735 | ||
| @@ -3718,6 +3728,28 @@ static const u8 iwlagn_pan_ac_to_queue[] = { | |||
| 3718 | 7, 6, 5, 4, | 3728 | 7, 6, 5, 4, |
| 3719 | }; | 3729 | }; |
| 3720 | 3730 | ||
| 3731 | /* This function both allocates and initializes hw and priv. */ | ||
| 3732 | static struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg) | ||
| 3733 | { | ||
| 3734 | struct iwl_priv *priv; | ||
| 3735 | /* mac80211 allocates memory for this device instance, including | ||
| 3736 | * space for this driver's private structure */ | ||
| 3737 | struct ieee80211_hw *hw; | ||
| 3738 | |||
| 3739 | hw = ieee80211_alloc_hw(sizeof(struct iwl_priv), &iwlagn_hw_ops); | ||
| 3740 | if (hw == NULL) { | ||
| 3741 | pr_err("%s: Can not allocate network device\n", | ||
| 3742 | cfg->name); | ||
| 3743 | goto out; | ||
| 3744 | } | ||
| 3745 | |||
| 3746 | priv = hw->priv; | ||
| 3747 | priv->hw = hw; | ||
| 3748 | |||
| 3749 | out: | ||
| 3750 | return hw; | ||
| 3751 | } | ||
| 3752 | |||
| 3721 | static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | 3753 | static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
| 3722 | { | 3754 | { |
| 3723 | int err = 0, i; | 3755 | int err = 0, i; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 0e98a8703e55..885167f8168d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
| @@ -67,30 +67,6 @@ u32 iwl_debug_level; | |||
| 67 | 67 | ||
| 68 | const u8 iwl_bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; | 68 | const u8 iwl_bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; |
| 69 | 69 | ||
| 70 | |||
| 71 | /* This function both allocates and initializes hw and priv. */ | ||
| 72 | struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg) | ||
| 73 | { | ||
| 74 | struct iwl_priv *priv; | ||
| 75 | /* mac80211 allocates memory for this device instance, including | ||
| 76 | * space for this driver's private structure */ | ||
| 77 | struct ieee80211_hw *hw; | ||
| 78 | |||
| 79 | hw = ieee80211_alloc_hw(sizeof(struct iwl_priv), | ||
| 80 | cfg->ops->ieee80211_ops); | ||
| 81 | if (hw == NULL) { | ||
| 82 | pr_err("%s: Can not allocate network device\n", | ||
| 83 | cfg->name); | ||
| 84 | goto out; | ||
| 85 | } | ||
| 86 | |||
| 87 | priv = hw->priv; | ||
| 88 | priv->hw = hw; | ||
| 89 | |||
| 90 | out: | ||
| 91 | return hw; | ||
| 92 | } | ||
| 93 | |||
| 94 | #define MAX_BIT_RATE_40_MHZ 150 /* Mbps */ | 70 | #define MAX_BIT_RATE_40_MHZ 150 /* Mbps */ |
| 95 | #define MAX_BIT_RATE_20_MHZ 72 /* Mbps */ | 71 | #define MAX_BIT_RATE_20_MHZ 72 /* Mbps */ |
| 96 | static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv, | 72 | static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 6988335328e8..32a990ff09ae 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
| @@ -139,12 +139,6 @@ struct iwl_temp_ops { | |||
| 139 | void (*temperature)(struct iwl_priv *priv); | 139 | void (*temperature)(struct iwl_priv *priv); |
| 140 | }; | 140 | }; |
| 141 | 141 | ||
| 142 | struct iwl_tt_ops { | ||
| 143 | bool (*lower_power_detection)(struct iwl_priv *priv); | ||
| 144 | u8 (*tt_power_mode)(struct iwl_priv *priv); | ||
| 145 | bool (*ct_kill_check)(struct iwl_priv *priv); | ||
| 146 | }; | ||
| 147 | |||
| 148 | struct iwl_lib_ops { | 142 | struct iwl_lib_ops { |
| 149 | /* set hw dependent parameters */ | 143 | /* set hw dependent parameters */ |
| 150 | int (*set_hw_params)(struct iwl_priv *priv); | 144 | int (*set_hw_params)(struct iwl_priv *priv); |
| @@ -190,13 +184,6 @@ struct iwl_lib_ops { | |||
| 190 | void (*dev_txfifo_flush)(struct iwl_priv *priv, u16 flush_control); | 184 | void (*dev_txfifo_flush)(struct iwl_priv *priv, u16 flush_control); |
| 191 | 185 | ||
| 192 | struct iwl_debugfs_ops debugfs_ops; | 186 | struct iwl_debugfs_ops debugfs_ops; |
| 193 | |||
| 194 | /* thermal throttling */ | ||
| 195 | struct iwl_tt_ops tt_ops; | ||
| 196 | }; | ||
| 197 | |||
| 198 | struct iwl_led_ops { | ||
| 199 | int (*cmd)(struct iwl_priv *priv, struct iwl_led_cmd *led_cmd); | ||
| 200 | }; | 187 | }; |
| 201 | 188 | ||
| 202 | /* NIC specific ops */ | 189 | /* NIC specific ops */ |
| @@ -204,23 +191,11 @@ struct iwl_nic_ops { | |||
| 204 | void (*additional_nic_config)(struct iwl_priv *priv); | 191 | void (*additional_nic_config)(struct iwl_priv *priv); |
| 205 | }; | 192 | }; |
| 206 | 193 | ||
| 207 | struct iwl_legacy_ops { | ||
| 208 | void (*post_associate)(struct iwl_priv *priv); | ||
| 209 | void (*config_ap)(struct iwl_priv *priv); | ||
| 210 | /* station management */ | ||
| 211 | int (*update_bcast_stations)(struct iwl_priv *priv); | ||
| 212 | int (*manage_ibss_station)(struct iwl_priv *priv, | ||
| 213 | struct ieee80211_vif *vif, bool add); | ||
| 214 | }; | ||
| 215 | |||
| 216 | struct iwl_ops { | 194 | struct iwl_ops { |
| 217 | const struct iwl_lib_ops *lib; | 195 | const struct iwl_lib_ops *lib; |
| 218 | const struct iwl_hcmd_ops *hcmd; | 196 | const struct iwl_hcmd_ops *hcmd; |
| 219 | const struct iwl_hcmd_utils_ops *utils; | 197 | const struct iwl_hcmd_utils_ops *utils; |
| 220 | const struct iwl_led_ops *led; | ||
| 221 | const struct iwl_nic_ops *nic; | 198 | const struct iwl_nic_ops *nic; |
| 222 | const struct iwl_legacy_ops *legacy; | ||
| 223 | const struct ieee80211_ops *ieee80211_ops; | ||
| 224 | }; | 199 | }; |
| 225 | 200 | ||
| 226 | struct iwl_mod_params { | 201 | struct iwl_mod_params { |
| @@ -250,7 +225,6 @@ struct iwl_mod_params { | |||
| 250 | * @wd_timeout: TX queues watchdog timeout | 225 | * @wd_timeout: TX queues watchdog timeout |
| 251 | * @temperature_kelvin: temperature report by uCode in kelvin | 226 | * @temperature_kelvin: temperature report by uCode in kelvin |
| 252 | * @max_event_log_size: size of event log buffer size for ucode event logging | 227 | * @max_event_log_size: size of event log buffer size for ucode event logging |
| 253 | * @ucode_tracing: support ucode continuous tracing | ||
| 254 | * @shadow_reg_enable: HW shadhow register bit | 228 | * @shadow_reg_enable: HW shadhow register bit |
| 255 | */ | 229 | */ |
| 256 | struct iwl_base_params { | 230 | struct iwl_base_params { |
| @@ -272,7 +246,6 @@ struct iwl_base_params { | |||
| 272 | unsigned int wd_timeout; | 246 | unsigned int wd_timeout; |
| 273 | bool temperature_kelvin; | 247 | bool temperature_kelvin; |
| 274 | u32 max_event_log_size; | 248 | u32 max_event_log_size; |
| 275 | const bool ucode_tracing; | ||
| 276 | const bool shadow_reg_enable; | 249 | const bool shadow_reg_enable; |
| 277 | }; | 250 | }; |
| 278 | /* | 251 | /* |
| @@ -376,7 +349,6 @@ struct iwl_cfg { | |||
| 376 | * L i b * | 349 | * L i b * |
| 377 | ***************************/ | 350 | ***************************/ |
| 378 | 351 | ||
| 379 | struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg); | ||
| 380 | int iwl_mac_conf_tx(struct ieee80211_hw *hw, u16 queue, | 352 | int iwl_mac_conf_tx(struct ieee80211_hw *hw, u16 queue, |
| 381 | const struct ieee80211_tx_queue_params *params); | 353 | const struct ieee80211_tx_queue_params *params); |
| 382 | int iwl_mac_tx_last_beacon(struct ieee80211_hw *hw); | 354 | int iwl_mac_tx_last_beacon(struct ieee80211_hw *hw); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c index 897efacb96eb..c272204fccff 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c +++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c | |||
| @@ -1749,8 +1749,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name) | |||
| 1749 | 1749 | ||
| 1750 | DEBUGFS_ADD_FILE(sensitivity, dir_debug, S_IRUSR); | 1750 | DEBUGFS_ADD_FILE(sensitivity, dir_debug, S_IRUSR); |
| 1751 | DEBUGFS_ADD_FILE(chain_noise, dir_debug, S_IRUSR); | 1751 | DEBUGFS_ADD_FILE(chain_noise, dir_debug, S_IRUSR); |
| 1752 | if (priv->cfg->base_params->ucode_tracing) | 1752 | DEBUGFS_ADD_FILE(ucode_tracing, dir_debug, S_IWUSR | S_IRUSR); |
| 1753 | DEBUGFS_ADD_FILE(ucode_tracing, dir_debug, S_IWUSR | S_IRUSR); | ||
| 1754 | DEBUGFS_ADD_FILE(ucode_bt_stats, dir_debug, S_IRUSR); | 1753 | DEBUGFS_ADD_FILE(ucode_bt_stats, dir_debug, S_IRUSR); |
| 1755 | DEBUGFS_ADD_FILE(reply_tx_error, dir_debug, S_IRUSR); | 1754 | DEBUGFS_ADD_FILE(reply_tx_error, dir_debug, S_IRUSR); |
| 1756 | DEBUGFS_ADD_FILE(rxon_flags, dir_debug, S_IWUSR); | 1755 | DEBUGFS_ADD_FILE(rxon_flags, dir_debug, S_IWUSR); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c index 859b94a12297..402733638f50 100644 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c | |||
| @@ -215,12 +215,6 @@ static int iwlcore_get_nvm_type(struct iwl_priv *priv, u32 hw_rev) | |||
| 215 | return nvm_type; | 215 | return nvm_type; |
| 216 | } | 216 | } |
| 217 | 217 | ||
| 218 | const u8 *iwlcore_eeprom_query_addr(const struct iwl_priv *priv, size_t offset) | ||
| 219 | { | ||
| 220 | BUG_ON(offset >= priv->cfg->base_params->eeprom_size); | ||
| 221 | return &priv->eeprom[offset]; | ||
| 222 | } | ||
| 223 | |||
| 224 | static int iwl_init_otp_access(struct iwl_priv *priv) | 218 | static int iwl_init_otp_access(struct iwl_priv *priv) |
| 225 | { | 219 | { |
| 226 | int ret; | 220 | int ret; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.h b/drivers/net/wireless/iwlwifi/iwl-eeprom.h index 0e9d9703636a..9ce052573c6a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.h +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.h | |||
| @@ -309,7 +309,6 @@ int iwl_eeprom_check_sku(struct iwl_priv *priv); | |||
| 309 | const u8 *iwl_eeprom_query_addr(const struct iwl_priv *priv, size_t offset); | 309 | const u8 *iwl_eeprom_query_addr(const struct iwl_priv *priv, size_t offset); |
| 310 | int iwlcore_eeprom_verify_signature(struct iwl_priv *priv); | 310 | int iwlcore_eeprom_verify_signature(struct iwl_priv *priv); |
| 311 | u16 iwl_eeprom_query16(const struct iwl_priv *priv, size_t offset); | 311 | u16 iwl_eeprom_query16(const struct iwl_priv *priv, size_t offset); |
| 312 | const u8 *iwlcore_eeprom_query_addr(const struct iwl_priv *priv, size_t offset); | ||
| 313 | int iwl_init_channel_map(struct iwl_priv *priv); | 312 | int iwl_init_channel_map(struct iwl_priv *priv); |
| 314 | void iwl_free_channel_map(struct iwl_priv *priv); | 313 | void iwl_free_channel_map(struct iwl_priv *priv); |
| 315 | const struct iwl_channel_info *iwl_get_channel_info( | 314 | const struct iwl_channel_info *iwl_get_channel_info( |
diff --git a/drivers/net/wireless/iwlwifi/iwl-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-hcmd.c index 9177b553fe57..8f0beb992ccf 100644 --- a/drivers/net/wireless/iwlwifi/iwl-hcmd.c +++ b/drivers/net/wireless/iwlwifi/iwl-hcmd.c | |||
| @@ -143,10 +143,12 @@ static int iwl_send_cmd_async(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
| 143 | { | 143 | { |
| 144 | int ret; | 144 | int ret; |
| 145 | 145 | ||
| 146 | BUG_ON(!(cmd->flags & CMD_ASYNC)); | 146 | if (WARN_ON(!(cmd->flags & CMD_ASYNC))) |
| 147 | return -EINVAL; | ||
| 147 | 148 | ||
| 148 | /* An asynchronous command can not expect an SKB to be set. */ | 149 | /* An asynchronous command can not expect an SKB to be set. */ |
| 149 | BUG_ON(cmd->flags & CMD_WANT_SKB); | 150 | if (WARN_ON(cmd->flags & CMD_WANT_SKB)) |
| 151 | return -EINVAL; | ||
| 150 | 152 | ||
| 151 | /* Assign a generic callback if one is not provided */ | 153 | /* Assign a generic callback if one is not provided */ |
| 152 | if (!cmd->callback) | 154 | if (!cmd->callback) |
| @@ -169,10 +171,12 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
| 169 | int cmd_idx; | 171 | int cmd_idx; |
| 170 | int ret; | 172 | int ret; |
| 171 | 173 | ||
| 172 | lockdep_assert_held(&priv->mutex); | 174 | if (WARN_ON(cmd->flags & CMD_ASYNC)) |
| 175 | return -EINVAL; | ||
| 173 | 176 | ||
| 174 | /* A synchronous command can not have a callback set. */ | 177 | /* A synchronous command can not have a callback set. */ |
| 175 | BUG_ON((cmd->flags & CMD_ASYNC) || cmd->callback); | 178 | if (WARN_ON(cmd->callback)) |
| 179 | return -EINVAL; | ||
| 176 | 180 | ||
| 177 | IWL_DEBUG_INFO(priv, "Attempting to send sync command %s\n", | 181 | IWL_DEBUG_INFO(priv, "Attempting to send sync command %s\n", |
| 178 | get_cmd_string(cmd->id)); | 182 | get_cmd_string(cmd->id)); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-led.c b/drivers/net/wireless/iwlwifi/iwl-led.c index 0d90004e8b1b..d798c2a152d3 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.c +++ b/drivers/net/wireless/iwlwifi/iwl-led.c | |||
| @@ -61,6 +61,12 @@ static const struct ieee80211_tpt_blink iwl_blink[] = { | |||
| 61 | { .throughput = 300 * 1024 - 1, .blink_time = 50 }, | 61 | { .throughput = 300 * 1024 - 1, .blink_time = 50 }, |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | /* Set led register off */ | ||
| 65 | void iwlagn_led_enable(struct iwl_priv *priv) | ||
| 66 | { | ||
| 67 | iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_ON); | ||
| 68 | } | ||
| 69 | |||
| 64 | /* | 70 | /* |
| 65 | * Adjust led blink rate to compensate on a MAC Clock difference on every HW | 71 | * Adjust led blink rate to compensate on a MAC Clock difference on every HW |
| 66 | * Led blink rate analysis showed an average deviation of 20% on 5000 series | 72 | * Led blink rate analysis showed an average deviation of 20% on 5000 series |
| @@ -84,6 +90,24 @@ static inline u8 iwl_blink_compensation(struct iwl_priv *priv, | |||
| 84 | return (u8)((time * compensation) >> 6); | 90 | return (u8)((time * compensation) >> 6); |
| 85 | } | 91 | } |
| 86 | 92 | ||
| 93 | static int iwl_send_led_cmd(struct iwl_priv *priv, struct iwl_led_cmd *led_cmd) | ||
| 94 | { | ||
| 95 | struct iwl_host_cmd cmd = { | ||
| 96 | .id = REPLY_LEDS_CMD, | ||
| 97 | .len = sizeof(struct iwl_led_cmd), | ||
| 98 | .data = led_cmd, | ||
| 99 | .flags = CMD_ASYNC, | ||
| 100 | .callback = NULL, | ||
| 101 | }; | ||
| 102 | u32 reg; | ||
| 103 | |||
| 104 | reg = iwl_read32(priv, CSR_LED_REG); | ||
| 105 | if (reg != (reg & CSR_LED_BSM_CTRL_MSK)) | ||
| 106 | iwl_write32(priv, CSR_LED_REG, reg & CSR_LED_BSM_CTRL_MSK); | ||
| 107 | |||
| 108 | return iwl_send_cmd(priv, &cmd); | ||
| 109 | } | ||
| 110 | |||
| 87 | /* Set led pattern command */ | 111 | /* Set led pattern command */ |
| 88 | static int iwl_led_cmd(struct iwl_priv *priv, | 112 | static int iwl_led_cmd(struct iwl_priv *priv, |
| 89 | unsigned long on, | 113 | unsigned long on, |
| @@ -108,7 +132,7 @@ static int iwl_led_cmd(struct iwl_priv *priv, | |||
| 108 | led_cmd.off = iwl_blink_compensation(priv, off, | 132 | led_cmd.off = iwl_blink_compensation(priv, off, |
| 109 | priv->cfg->base_params->led_compensation); | 133 | priv->cfg->base_params->led_compensation); |
| 110 | 134 | ||
| 111 | ret = priv->cfg->ops->led->cmd(priv, &led_cmd); | 135 | ret = iwl_send_led_cmd(priv, &led_cmd); |
| 112 | if (!ret) { | 136 | if (!ret) { |
| 113 | priv->blink_on = on; | 137 | priv->blink_on = on; |
| 114 | priv->blink_off = off; | 138 | priv->blink_off = off; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-led.h b/drivers/net/wireless/iwlwifi/iwl-led.h index 05b8e8f7dd4a..1c93dfef6933 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.h +++ b/drivers/net/wireless/iwlwifi/iwl-led.h | |||
| @@ -50,6 +50,7 @@ enum iwl_led_mode { | |||
| 50 | IWL_LED_BLINK, | 50 | IWL_LED_BLINK, |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | void iwlagn_led_enable(struct iwl_priv *priv); | ||
| 53 | void iwl_leds_init(struct iwl_priv *priv); | 54 | void iwl_leds_init(struct iwl_priv *priv); |
| 54 | void iwl_leds_exit(struct iwl_priv *priv); | 55 | void iwl_leds_exit(struct iwl_priv *priv); |
| 55 | 56 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c b/drivers/net/wireless/iwlwifi/iwl-power.c index ae176d8da9e8..595c930b28ae 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.c +++ b/drivers/net/wireless/iwlwifi/iwl-power.c | |||
| @@ -188,9 +188,10 @@ static void iwl_static_sleep_cmd(struct iwl_priv *priv, | |||
| 188 | table = range_0; | 188 | table = range_0; |
| 189 | } | 189 | } |
| 190 | 190 | ||
| 191 | BUG_ON(lvl < 0 || lvl >= IWL_POWER_NUM); | 191 | if (WARN_ON(lvl < 0 || lvl >= IWL_POWER_NUM)) |
| 192 | 192 | memset(cmd, 0, sizeof(*cmd)); | |
| 193 | *cmd = table[lvl].cmd; | 193 | else |
| 194 | *cmd = table[lvl].cmd; | ||
| 194 | 195 | ||
| 195 | if (period == 0) { | 196 | if (period == 0) { |
| 196 | skip = 0; | 197 | skip = 0; |
| @@ -356,12 +357,10 @@ static void iwl_power_build_cmd(struct iwl_priv *priv, | |||
| 356 | 357 | ||
| 357 | if (priv->hw->conf.flags & IEEE80211_CONF_IDLE) | 358 | if (priv->hw->conf.flags & IEEE80211_CONF_IDLE) |
| 358 | iwl_static_sleep_cmd(priv, cmd, IWL_POWER_INDEX_5, 20); | 359 | iwl_static_sleep_cmd(priv, cmd, IWL_POWER_INDEX_5, 20); |
| 359 | else if (priv->cfg->ops->lib->tt_ops.lower_power_detection && | 360 | else if (iwl_tt_is_low_power_state(priv)) { |
| 360 | priv->cfg->ops->lib->tt_ops.tt_power_mode && | ||
| 361 | priv->cfg->ops->lib->tt_ops.lower_power_detection(priv)) { | ||
| 362 | /* in thermal throttling low power state */ | 361 | /* in thermal throttling low power state */ |
| 363 | iwl_static_sleep_cmd(priv, cmd, | 362 | iwl_static_sleep_cmd(priv, cmd, |
| 364 | priv->cfg->ops->lib->tt_ops.tt_power_mode(priv), dtimper); | 363 | iwl_tt_current_power_mode(priv), dtimper); |
| 365 | } else if (!enabled) | 364 | } else if (!enabled) |
| 366 | iwl_power_sleep_cam_cmd(priv, cmd); | 365 | iwl_power_sleep_cam_cmd(priv, cmd); |
| 367 | else if (priv->power_data.debug_sleep_level_override >= 0) | 366 | else if (priv->power_data.debug_sleep_level_override >= 0) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c index c21515640077..3c8cebde16cc 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c | |||
| @@ -494,7 +494,8 @@ int iwl_remove_station(struct iwl_priv *priv, const u8 sta_id, | |||
| 494 | 494 | ||
| 495 | priv->num_stations--; | 495 | priv->num_stations--; |
| 496 | 496 | ||
| 497 | BUG_ON(priv->num_stations < 0); | 497 | if (WARN_ON(priv->num_stations < 0)) |
| 498 | priv->num_stations = 0; | ||
| 498 | 499 | ||
| 499 | spin_unlock_irqrestore(&priv->sta_lock, flags); | 500 | spin_unlock_irqrestore(&priv->sta_lock, flags); |
| 500 | 501 | ||
| @@ -679,7 +680,8 @@ void iwl_dealloc_bcast_stations(struct iwl_priv *priv) | |||
| 679 | 680 | ||
| 680 | priv->stations[i].used &= ~IWL_STA_UCODE_ACTIVE; | 681 | priv->stations[i].used &= ~IWL_STA_UCODE_ACTIVE; |
| 681 | priv->num_stations--; | 682 | priv->num_stations--; |
| 682 | BUG_ON(priv->num_stations < 0); | 683 | if (WARN_ON(priv->num_stations < 0)) |
| 684 | priv->num_stations = 0; | ||
| 683 | kfree(priv->stations[i].lq); | 685 | kfree(priv->stations[i].lq); |
| 684 | priv->stations[i].lq = NULL; | 686 | priv->stations[i].lq = NULL; |
| 685 | } | 687 | } |
| @@ -775,7 +777,8 @@ int iwl_send_lq_cmd(struct iwl_priv *priv, struct iwl_rxon_context *ctx, | |||
| 775 | spin_unlock_irqrestore(&priv->sta_lock, flags_spin); | 777 | spin_unlock_irqrestore(&priv->sta_lock, flags_spin); |
| 776 | 778 | ||
| 777 | iwl_dump_lq_cmd(priv, lq); | 779 | iwl_dump_lq_cmd(priv, lq); |
| 778 | BUG_ON(init && (cmd.flags & CMD_ASYNC)); | 780 | if (WARN_ON(init && (cmd.flags & CMD_ASYNC))) |
| 781 | return -EINVAL; | ||
| 779 | 782 | ||
| 780 | if (is_lq_table_valid(priv, ctx, lq)) | 783 | if (is_lq_table_valid(priv, ctx, lq)) |
| 781 | ret = iwl_send_cmd(priv, &cmd); | 784 | ret = iwl_send_cmd(priv, &cmd); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index 3732380c4ffe..80c3565a66ae 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
| @@ -263,11 +263,13 @@ static int iwl_queue_init(struct iwl_priv *priv, struct iwl_queue *q, | |||
| 263 | 263 | ||
| 264 | /* count must be power-of-two size, otherwise iwl_queue_inc_wrap | 264 | /* count must be power-of-two size, otherwise iwl_queue_inc_wrap |
| 265 | * and iwl_queue_dec_wrap are broken. */ | 265 | * and iwl_queue_dec_wrap are broken. */ |
| 266 | BUG_ON(!is_power_of_2(count)); | 266 | if (WARN_ON(!is_power_of_2(count))) |
| 267 | return -EINVAL; | ||
| 267 | 268 | ||
| 268 | /* slots_num must be power-of-two size, otherwise | 269 | /* slots_num must be power-of-two size, otherwise |
| 269 | * get_cmd_index is broken. */ | 270 | * get_cmd_index is broken. */ |
| 270 | BUG_ON(!is_power_of_2(slots_num)); | 271 | if (WARN_ON(!is_power_of_2(slots_num))) |
| 272 | return -EINVAL; | ||
| 271 | 273 | ||
| 272 | q->low_mark = q->n_window / 4; | 274 | q->low_mark = q->n_window / 4; |
| 273 | if (q->low_mark < 4) | 275 | if (q->low_mark < 4) |
| @@ -384,7 +386,9 @@ int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq, | |||
| 384 | BUILD_BUG_ON(TFD_QUEUE_SIZE_MAX & (TFD_QUEUE_SIZE_MAX - 1)); | 386 | BUILD_BUG_ON(TFD_QUEUE_SIZE_MAX & (TFD_QUEUE_SIZE_MAX - 1)); |
| 385 | 387 | ||
| 386 | /* Initialize queue's high/low-water marks, and head/tail indexes */ | 388 | /* Initialize queue's high/low-water marks, and head/tail indexes */ |
| 387 | iwl_queue_init(priv, &txq->q, TFD_QUEUE_SIZE_MAX, slots_num, txq_id); | 389 | ret = iwl_queue_init(priv, &txq->q, TFD_QUEUE_SIZE_MAX, slots_num, txq_id); |
| 390 | if (ret) | ||
| 391 | return ret; | ||
| 388 | 392 | ||
| 389 | /* Tell device where to find queue */ | 393 | /* Tell device where to find queue */ |
| 390 | priv->cfg->ops->lib->txq_init(priv, txq); | 394 | priv->cfg->ops->lib->txq_init(priv, txq); |
| @@ -446,14 +450,19 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
| 446 | cmd->len = priv->cfg->ops->utils->get_hcmd_size(cmd->id, cmd->len); | 450 | cmd->len = priv->cfg->ops->utils->get_hcmd_size(cmd->id, cmd->len); |
| 447 | fix_size = (u16)(cmd->len + sizeof(out_cmd->hdr)); | 451 | fix_size = (u16)(cmd->len + sizeof(out_cmd->hdr)); |
| 448 | 452 | ||
| 449 | /* If any of the command structures end up being larger than | 453 | /* |
| 454 | * If any of the command structures end up being larger than | ||
| 450 | * the TFD_MAX_PAYLOAD_SIZE, and it sent as a 'small' command then | 455 | * the TFD_MAX_PAYLOAD_SIZE, and it sent as a 'small' command then |
| 451 | * we will need to increase the size of the TFD entries | 456 | * we will need to increase the size of the TFD entries |
| 452 | * Also, check to see if command buffer should not exceed the size | 457 | * Also, check to see if command buffer should not exceed the size |
| 453 | * of device_cmd and max_cmd_size. */ | 458 | * of device_cmd and max_cmd_size. |
| 454 | BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) && | 459 | */ |
| 455 | !(cmd->flags & CMD_SIZE_HUGE)); | 460 | if (WARN_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) && |
| 456 | BUG_ON(fix_size > IWL_MAX_CMD_SIZE); | 461 | !(cmd->flags & CMD_SIZE_HUGE))) |
| 462 | return -EINVAL; | ||
| 463 | |||
| 464 | if (WARN_ON(fix_size > IWL_MAX_CMD_SIZE)) | ||
| 465 | return -EINVAL; | ||
| 457 | 466 | ||
| 458 | if (iwl_is_rfkill(priv) || iwl_is_ctkill(priv)) { | 467 | if (iwl_is_rfkill(priv) || iwl_is_ctkill(priv)) { |
| 459 | IWL_WARN(priv, "Not sending command - %s KILL\n", | 468 | IWL_WARN(priv, "Not sending command - %s KILL\n", |
| @@ -461,16 +470,21 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
| 461 | return -EIO; | 470 | return -EIO; |
| 462 | } | 471 | } |
| 463 | 472 | ||
| 473 | /* | ||
| 474 | * As we only have a single huge buffer, check that the command | ||
| 475 | * is synchronous (otherwise buffers could end up being reused). | ||
| 476 | */ | ||
| 477 | |||
| 478 | if (WARN_ON((cmd->flags & CMD_ASYNC) && (cmd->flags & CMD_SIZE_HUGE))) | ||
| 479 | return -EINVAL; | ||
| 480 | |||
| 464 | spin_lock_irqsave(&priv->hcmd_lock, flags); | 481 | spin_lock_irqsave(&priv->hcmd_lock, flags); |
| 465 | 482 | ||
| 466 | if (iwl_queue_space(q) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) { | 483 | if (iwl_queue_space(q) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) { |
| 467 | spin_unlock_irqrestore(&priv->hcmd_lock, flags); | 484 | spin_unlock_irqrestore(&priv->hcmd_lock, flags); |
| 468 | 485 | ||
| 469 | IWL_ERR(priv, "No space in command queue\n"); | 486 | IWL_ERR(priv, "No space in command queue\n"); |
| 470 | if (priv->cfg->ops->lib->tt_ops.ct_kill_check) { | 487 | is_ct_kill = iwl_check_for_ct_kill(priv); |
| 471 | is_ct_kill = | ||
| 472 | priv->cfg->ops->lib->tt_ops.ct_kill_check(priv); | ||
| 473 | } | ||
| 474 | if (!is_ct_kill) { | 488 | if (!is_ct_kill) { |
| 475 | IWL_ERR(priv, "Restarting adapter due to queue full\n"); | 489 | IWL_ERR(priv, "Restarting adapter due to queue full\n"); |
| 476 | iwlagn_fw_error(priv, false); | 490 | iwlagn_fw_error(priv, false); |
