pull request: iwlwifi-next 2013_12_31
Subsystems (2)
Hi John,
This is probably the last pull request for 3.14.
I have here a rework of the interrupt handling to meet RT kernel requirements - basically we don't take any lock in the primary interrupt handler. This gave me a good reason to clean things up a bit on the way. There is also a fix of the QoS mapping along with a few workarounds for hardware / firmware issues that are hard to hit.
Three fixes suggested by static analyzers, and other various stuff. Most importantly, I update the Copyright note to include the new year.
I know it is quite late in the cycle (and probably not the best period to expect responsiveness:)) but I want to hope that this it will still make it to 3.14.
The following changes since commit cf4ef65446443eb485afe9419ea82b2efbe582a7:
iwlwifi: mvm: rs: fix variable shadowing (2013-12-17 22:32:57 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next.git
for-john
for you to fetch changes up to 14648d6534477952633ee3ecadb31cf227414f13:
iwlwifi: mvm: fix coccinelle warnings (2013-12-31 19:03:53 +0200)
----------------------------------------------------------------
Arik Nemtsov (1):
iwlwifi: mvm: squash a spurious warning on chnctx change
Emmanuel Grumbach (20):
iwlwifi: pcie: clean up ICT allocation code
iwlwifi: pcie: track interrupt mask in SW
iwlwifi: pcie: re-organize the PCIe ISR code
iwlwifi: pcie: move the ICT / non-ICT handling functions
iwlwifi: pcie: read the interrupt cause from the handler
iwlwifi: pcie: determine the interrupt type in the handler
iwlwifi: pcie: return inta from iwl_pcie_int_cause_{non_}ict
iwlwifi: pcie: no need to save inta in trans_pcie
iwlwifi: pcie: move interrupt prints to the common handler
iwlwifi: pcie: use don't disable interrupt when irq_lock is taken
iwlwifi: pcie: use don't disable interrupt when rxq->lock is taken
iwlwifi: mvm: fix AC / FIFO mapping
iwlwifi: pcie: keep the NIC awake when commands are in flight
iwlwifi: pcie: don't update the op_mode if rfkill hasn't changed
iwlwifi: pcie: allow the op_mode to call stop_device whenever it wants
iwlwifi: mvm: disable the device as soon as RFKILL fires
iwlwifi: mvm: fix harmless smatch / coccinelle warnings
iwlwifi: mvm: BT Coex - update channel inihibition for channel 14
iwlwifi: mvm: dump to debugfs the SRAM as binary
iwlwifi: Update Copyright to 2014
Eran Harary (1):
iwlwifi: pcie: Fix CSR_RESET operation access type
Eyal Shapira (1):
iwlwifi: mvm: rs: fix a potential NULL deref
Eytan Lifshitz (1):
iwlwifi: mvm: fix possible memory leak
Fengguang Wu (1):
iwlwifi: mvm: fix coccinelle warnings
Ilan Peer (3):
iwlwifi: mvm: Add a missed beacons threshold
iwlwifi: mvm: change the parameters for calculating an AP TBTT
iwlwifi: mvm: dynamically update tsf_id
drivers/net/wireless/iwlwifi/dvm/agn.h | 4 +- drivers/net/wireless/iwlwifi/dvm/calib.c | 4 +- drivers/net/wireless/iwlwifi/dvm/calib.h | 4 +- drivers/net/wireless/iwlwifi/dvm/commands.h | 4 +- drivers/net/wireless/iwlwifi/dvm/debugfs.c | 2 +- drivers/net/wireless/iwlwifi/dvm/dev.h | 2 +- drivers/net/wireless/iwlwifi/dvm/devices.c | 2 +- drivers/net/wireless/iwlwifi/dvm/led.c | 2 +- drivers/net/wireless/iwlwifi/dvm/led.h | 2 +- drivers/net/wireless/iwlwifi/dvm/lib.c | 2 +- drivers/net/wireless/iwlwifi/dvm/mac80211.c | 2 +- drivers/net/wireless/iwlwifi/dvm/main.c | 2 +- drivers/net/wireless/iwlwifi/dvm/power.c | 2 +- drivers/net/wireless/iwlwifi/dvm/power.h | 2 +- drivers/net/wireless/iwlwifi/dvm/rs.c | 2 +- drivers/net/wireless/iwlwifi/dvm/rs.h | 2 +- drivers/net/wireless/iwlwifi/dvm/rx.c | 2 +- drivers/net/wireless/iwlwifi/dvm/rxon.c | 2 +- drivers/net/wireless/iwlwifi/dvm/scan.c | 2 +- drivers/net/wireless/iwlwifi/dvm/sta.c | 2 +- drivers/net/wireless/iwlwifi/dvm/tt.c | 2 +- drivers/net/wireless/iwlwifi/dvm/tt.h | 2 +- drivers/net/wireless/iwlwifi/dvm/tx.c | 2 +- drivers/net/wireless/iwlwifi/dvm/ucode.c | 2 +- drivers/net/wireless/iwlwifi/iwl-1000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-2000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-5000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-6000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-7000.c | 4 +- drivers/net/wireless/iwlwifi/iwl-agn-hw.h | 4 +- drivers/net/wireless/iwlwifi/iwl-config.h | 4 +- drivers/net/wireless/iwlwifi/iwl-csr.h | 7 +- drivers/net/wireless/iwlwifi/iwl-debug.h | 2 +- drivers/net/wireless/iwlwifi/iwl-devtrace.c | 2 +- drivers/net/wireless/iwlwifi/iwl-devtrace.h | 2 +- drivers/net/wireless/iwlwifi/iwl-drv.c | 4 +- drivers/net/wireless/iwlwifi/iwl-drv.h | 6 +- drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c | 4 +- drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h | 4 +- drivers/net/wireless/iwlwifi/iwl-eeprom-read.c | 4 +- drivers/net/wireless/iwlwifi/iwl-eeprom-read.h | 4 +- drivers/net/wireless/iwlwifi/iwl-fh.h | 4 +- drivers/net/wireless/iwlwifi/iwl-fw-file.h | 4 +- drivers/net/wireless/iwlwifi/iwl-fw.h | 4 +- drivers/net/wireless/iwlwifi/iwl-io.c | 2 +- drivers/net/wireless/iwlwifi/iwl-io.h | 2 +- drivers/net/wireless/iwlwifi/iwl-modparams.h | 4 +- drivers/net/wireless/iwlwifi/iwl-notif-wait.c | 4 +- drivers/net/wireless/iwlwifi/iwl-notif-wait.h | 4 +- drivers/net/wireless/iwlwifi/iwl-nvm-parse.c | 4 +- drivers/net/wireless/iwlwifi/iwl-nvm-parse.h | 4 +- drivers/net/wireless/iwlwifi/iwl-op-mode.h | 4 +- drivers/net/wireless/iwlwifi/iwl-phy-db.c | 4 +- drivers/net/wireless/iwlwifi/iwl-phy-db.h | 4 +- drivers/net/wireless/iwlwifi/iwl-prph.h | 4 +- drivers/net/wireless/iwlwifi/iwl-trans.h | 11 +- drivers/net/wireless/iwlwifi/mvm/binding.c | 4 +- drivers/net/wireless/iwlwifi/mvm/bt-coex.c | 8 +- drivers/net/wireless/iwlwifi/mvm/constants.h | 4 +- drivers/net/wireless/iwlwifi/mvm/d3.c | 4 +- drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c | 4 +- drivers/net/wireless/iwlwifi/mvm/debugfs.c | 53 ++- drivers/net/wireless/iwlwifi/mvm/debugfs.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-d3.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-power.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-rs.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-sta.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw-api.h | 4 +- drivers/net/wireless/iwlwifi/mvm/fw.c | 4 +- drivers/net/wireless/iwlwifi/mvm/led.c | 6 +- drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 160 ++++++--- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 24 +- drivers/net/wireless/iwlwifi/mvm/mvm.h | 7 +- drivers/net/wireless/iwlwifi/mvm/nvm.c | 15 +- drivers/net/wireless/iwlwifi/mvm/ops.c | 6 +- drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c | 4 +- drivers/net/wireless/iwlwifi/mvm/power.c | 4 +- drivers/net/wireless/iwlwifi/mvm/power_legacy.c | 4 +- drivers/net/wireless/iwlwifi/mvm/quota.c | 4 +- drivers/net/wireless/iwlwifi/mvm/rs.c | 13 +- drivers/net/wireless/iwlwifi/mvm/rs.h | 2 +- drivers/net/wireless/iwlwifi/mvm/rx.c | 4 +- drivers/net/wireless/iwlwifi/mvm/scan.c | 13 +- drivers/net/wireless/iwlwifi/mvm/sf.c | 4 +- drivers/net/wireless/iwlwifi/mvm/sta.c | 4 +- drivers/net/wireless/iwlwifi/mvm/sta.h | 4 +- drivers/net/wireless/iwlwifi/mvm/testmode.h | 4 +- drivers/net/wireless/iwlwifi/mvm/time-event.c | 4 +- drivers/net/wireless/iwlwifi/mvm/time-event.h | 4 +- drivers/net/wireless/iwlwifi/mvm/tt.c | 4 +- drivers/net/wireless/iwlwifi/mvm/tx.c | 4 +- drivers/net/wireless/iwlwifi/mvm/utils.c | 4 +- drivers/net/wireless/iwlwifi/pcie/drv.c | 4 +- drivers/net/wireless/iwlwifi/pcie/internal.h | 40 ++- drivers/net/wireless/iwlwifi/pcie/rx.c | 400 +++++++++------------ drivers/net/wireless/iwlwifi/pcie/trans.c | 79 ++-- drivers/net/wireless/iwlwifi/pcie/tx.c | 106 ++++-- 101 files changed, 653 insertions(+), 577 deletions(-)
PATCH 1/28 iwlwifi: pcie: clean up ICT allocation code
From: Emmanuel Grumbach <[email protected]>
Since iwl_trans_pcie_alloc_ict is called in the PCIe allocation code, we always set CSR_INT_BIT_RX_PERIODIC. Move that bit to the default list of interrupts we enable and simplify the code.
Also use dma_zalloc_ and avoid to memset the memory afterwards.trans_pcie->ict_index is 0 since trans_pcie has just been kzalloced, remove the redundant assignment.
--- drivers/net/wireless/iwlwifi/iwl-csr.h | 3 ++- drivers/net/wireless/iwlwifi/pcie/rx.c | 15 ++++----------- 2 files changed, 6 insertions(+), 12 deletions(-)
drivers/net/wireless/iwlwifi/iwl-csr.h +2 -1
@@ -198,7 +198,8 @@ CSR_INT_BIT_RF_KILL | \ CSR_INT_BIT_SW_RX | \ CSR_INT_BIT_WAKEUP | \ - CSR_INT_BIT_ALIVE) + CSR_INT_BIT_ALIVE | \ + CSR_INT_BIT_RX_PERIODIC)/* interrupt flags in FH (flow handler) (PCI busmaster DMA) */ #define CSR_FH_INT_BIT_ERR (1 << 31)/* Error */
drivers/net/wireless/iwlwifi/pcie/rx.c +4 -11
@@ -1048,7 +1048,7 @@ int iwl_pcie_alloc_ict(struct iwl_trans *trans)struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); trans_pcie->ict_tbl = -dma_alloc_coherent (trans->dev,ICT_SIZE , +dma_zalloc_coherent (trans->dev,ICT_SIZE , &trans_pcie->ict_tbl_dma,GFP_KERNEL );if (!trans_pcie->ict_tbl)
@@ -1060,17 +1060,10 @@ int iwl_pcie_alloc_ict(struct iwl_trans *trans)return -EINVAL ; } -IWL_DEBUG_ISR (trans,"ict dma addr %Lx\n" , - (unsigned long long )trans_pcie->ict_tbl_dma); +IWL_DEBUG_ISR (trans,"ict dma addr %Lx ict vir addr %p\n" , + (unsigned long long )trans_pcie->ict_tbl_dma, + trans_pcie->ict_tbl); -IWL_DEBUG_ISR (trans,"ict vir addr %p\n" , trans_pcie->ict_tbl); - -/* reset table and index to all 0 */ -memset (trans_pcie->ict_tbl,0 ,ICT_SIZE ); - trans_pcie->ict_index =0 ; - -/* add periodic RX interrupt */ - trans_pcie->inta_mask |=CSR_INT_BIT_RX_PERIODIC ;return 0 ; }
Signature · 1 line
1.7.9.5
PATCH 2/28 iwlwifi: pcie: track interrupt mask in SW
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Track the interrupt mask in software, making it exactly what is configured in the interrupt mask register in the hardware.
This allows not to access the register from the interrupt handler. This was the case for ICT interrupt already, but not for non-ICT interrupt.
--- drivers/net/wireless/iwlwifi/pcie/internal.h | 6 +++++- drivers/net/wireless/iwlwifi/pcie/rx.c | 13 ++++++------- 2 files changed, 11 insertions(+), 8 deletions(-)
drivers/net/wireless/iwlwifi/pcie/internal.h +5 -1
@@ -397,13 +397,17 @@ static inline void iwl_enable_interrupts(struct iwl_trans *trans)IWL_DEBUG_ISR (trans,"Enabling interrupts\n" );set_bit (STATUS_INT_ENABLED , &trans->status); + trans_pcie->inta_mask =CSR_INI_SET_MASK ;iwl_write32 (trans,CSR_INT_MASK , trans_pcie->inta_mask); }static inline void iwl_enable_rfkill_int (struct iwl_trans *trans) { +struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); +IWL_DEBUG_ISR (trans,"Enabling rfkill interrupt\n" ); -iwl_write32 (trans,CSR_INT_MASK ,CSR_INT_BIT_RF_KILL ); + trans_pcie->inta_mask =CSR_INT_BIT_RF_KILL ; +iwl_write32 (trans,CSR_INT_MASK , trans_pcie->inta_mask); } static inline void iwl_wake_queue(struct iwl_trans *trans,
drivers/net/wireless/iwlwifi/pcie/rx.c +6 -7
@@ -1115,7 +1115,7 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data) {struct iwl_trans *trans = data;struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -u32 inta, inta_mask; +u32 inta;lockdep_assert_held (&trans_pcie->irq_lock);
@@ -1125,18 +1125,17 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data)* back-to-back ISRs and sporadic interrupts from our NIC. * If we have something to service, the irq thread will re-enable ints. * If we *don't* have something, we'll re-enable before leaving here. */ - inta_mask =iwl_read32 (trans,CSR_INT_MASK );iwl_write32 (trans,CSR_INT_MASK ,0x00000000 );/* Discover which interrupts are active/pending */ inta =iwl_read32 (trans,CSR_INT ); -if (inta & (~inta_mask)) { +if (inta & (~trans_pcie->inta_mask)) {IWL_DEBUG_ISR (trans,"We got a masked interrupt (0x%08x)...Ack and ignore\n" , - inta & (~inta_mask)); -iwl_write32 (trans,CSR_INT , inta & (~inta_mask)); - inta &= inta_mask; + inta & (~trans_pcie->inta_mask)); +iwl_write32 (trans,CSR_INT , inta & (~trans_pcie->inta_mask)); + inta &= trans_pcie->inta_mask; }/* Ignore interrupt if there's nothing in NIC to service.
@@ -1166,7 +1165,7 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data)if (iwl_have_debug_level (IWL_DL_ISR ))IWL_DEBUG_ISR (trans,"ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n" , - inta, inta_mask, + inta, trans_pcie->inta_mask,iwl_read32 (trans,CSR_FH_INT_STATUS )); trans_pcie->inta |= inta;
Signature · 1 line
1.7.9.5
PATCH 3/28 iwlwifi: pcie: re-organize the PCIe ISR code
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Separate the code that simply disables interrupt in the hardware and the code that checks what interrupt fired. This will be useful to move the second part in the threaded handler which will be done in a future patch.
--- drivers/net/wireless/iwlwifi/pcie/internal.h | 2 +- drivers/net/wireless/iwlwifi/pcie/rx.c | 49 ++++++++++++-------------- drivers/net/wireless/iwlwifi/pcie/trans.c | 2 +- 3 files changed, 25 insertions(+), 28 deletions(-)
drivers/net/wireless/iwlwifi/pcie/internal.h +1 -1
@@ -343,7 +343,7 @@ void iwl_pcie_rx_free(struct iwl_trans *trans);/***************************************************** * ICT - interrupt handling ******************************************************/ -irqreturn_t iwl_pcie_isr_ict (int irq,void *data); +irqreturn_t iwl_pcie_isr (int irq,void *data);int iwl_pcie_alloc_ict (struct iwl_trans *trans);void iwl_pcie_free_ict (struct iwl_trans *trans);void iwl_pcie_reset_ict (struct iwl_trans *trans);
drivers/net/wireless/iwlwifi/pcie/rx.c +23 -26
87 lines not on this page · raw message
drivers/net/wireless/iwlwifi/pcie/trans.c +1 -1
@@ -1597,7 +1597,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,if (iwl_pcie_alloc_ict (trans)) goto out_free_cmd_pool; - err =request_threaded_irq (pdev->irq, iwl_pcie_isr_ict, + err =request_threaded_irq (pdev->irq, iwl_pcie_isr, iwl_pcie_irq_handler,IRQF_SHARED ,DRV_NAME , trans);if (err) {
Signature · 1 line
1.7.9.5
PATCH 4/28 iwlwifi: pcie: move the ICT / non-ICT handling functions
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
The purpose of this is to be able to call these functions from the interrupt handler and not from the primary interrupt handler.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 324 ++++++++++++++++---------------- 1 file changed, 162 insertions(+), 162 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +162 -162
@@ -807,6 +807,168 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)wake_up (&trans_pcie->wait_command_queue); } +/* legacy (non-ICT) ISR. Assumes that trans_pcie->irq_lock is held */ +static irqreturn_t iwl_pcie_isr_non_ict (struct iwl_trans *trans) +{ +struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); +u32 inta; + +lockdep_assert_held (&trans_pcie->irq_lock); + +trace_iwlwifi_dev_irq (trans->dev); + +/* Discover which interrupts are active/pending */ + inta =iwl_read32 (trans,CSR_INT ); + +if (inta & (~trans_pcie->inta_mask)) { +IWL_DEBUG_ISR (trans, +"We got a masked interrupt (0x%08x)...Ack and ignore\n" , + inta & (~trans_pcie->inta_mask)); +iwl_write32 (trans,CSR_INT , inta & (~trans_pcie->inta_mask)); + inta &= trans_pcie->inta_mask; + } + +/* Ignore interrupt if there's nothing in NIC to service. +* This may be due to IRQ shared with another device, +* or due to sporadic interrupts thrown from our NIC. */ +if (!inta) { +IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); +/* +* Re-enable interrupts here since we don't have anything to +* service, but only in case the handler won't run. Note that +* the handler can be scheduled because of a previous +* interrupt. +*/ +if (test_bit (STATUS_INT_ENABLED , &trans->status) && + !trans_pcie->inta) +iwl_enable_interrupts (trans); +return IRQ_NONE ; + } + +if ((inta ==0xFFFFFFFF ) || ((inta &0xFFFFFFF0 ) ==0xa5a5a5a0 )) { +/* Hardware disappeared. It might have already raised +* an interrupt */ +IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta); +return IRQ_HANDLED ; + } + +if (iwl_have_debug_level (IWL_DL_ISR )) +IWL_DEBUG_ISR (trans, +"ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n" , + inta, trans_pcie->inta_mask, +iwl_read32 (trans,CSR_FH_INT_STATUS )); + + trans_pcie->inta |= inta; +/* the thread will service interrupts and re-enable them */ +return IRQ_WAKE_THREAD ; +} + +/* a device (PCI-E) page is 4096 bytes long */ +#define ICT_SHIFT 12 +#define ICT_SIZE (1 << ICT_SHIFT) +#define ICT_COUNT (ICT_SIZE / sizeof(u32)) + +/* interrupt handler using ict table, with this interrupt driver will +* stop using INTA register to get device's interrupt, reading this register +* is expensive, device will write interrupts in ICT dram table, increment +* index then will fire interrupt to driver, driver will OR all ICT table +* entries from current index up to table entry with 0 value. the result is +* the interrupt we need to service, driver will set the entries back to 0 and +* set index. +*/ +static irqreturn_t iwl_pcie_isr_ict (struct iwl_trans *trans) +{ +struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); +unsigned long flags; +irqreturn_t ret; +u32 inta; +u32 val =0 ; +u32 read; + +spin_lock_irqsave (&trans_pcie->irq_lock, flags); + +/* dram interrupt table not set yet, +* use legacy interrupt. +*/ +if (unlikely (!trans_pcie->use_ict)) { + ret =iwl_pcie_isr_non_ict (trans); +spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +return ret; + } + +trace_iwlwifi_dev_irq (trans->dev); + +/* Ignore interrupt if there's nothing in NIC to service. +* This may be due to IRQ shared with another device, +* or due to sporadic interrupts thrown from our NIC. */ + read =le32_to_cpu (trans_pcie->ict_tbl[trans_pcie->ict_index]); +trace_iwlwifi_dev_ict_read (trans->dev, trans_pcie->ict_index, read); +if (!read) { +IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); + goto none; + } + +/* +* Collect all entries up to the first 0, starting from ict_index; +* note we already read at ict_index. +*/ +do { + val |= read; +IWL_DEBUG_ISR (trans,"ICT index %d value 0x%08X\n" , + trans_pcie->ict_index, read); + trans_pcie->ict_tbl[trans_pcie->ict_index] =0 ; + trans_pcie->ict_index = +iwl_queue_inc_wrap (trans_pcie->ict_index,ICT_COUNT ); + + read =le32_to_cpu (trans_pcie->ict_tbl[trans_pcie->ict_index]); +trace_iwlwifi_dev_ict_read (trans->dev, trans_pcie->ict_index, + read); + }while (read); + +/* We should not get this value, just ignore it. */ +if (val ==0xffffffff ) + val =0 ; + +/* +* this is a w/a for a h/w bug. the h/w bug may cause the Rx bit +* (bit 15 before shifting it to 31) to clear when using interrupt +* coalescing. fortunately, bits 18 and 19 stay set when this happens +* so we use them to decide on the real state of the Rx bit. +* In order words, bit 15 is set if bit 18 or bit 19 are set. +*/ +if (val &0xC0000 ) + val |=0x8000 ; + + inta = (0xff & val) | ((0xff00 & val) <<16 ); +IWL_DEBUG_ISR (trans,"ISR inta 0x%08x, enabled(sw) 0x%08x ict 0x%08x\n" , + inta, trans_pcie->inta_mask, val); +if (iwl_have_debug_level (IWL_DL_ISR )) +IWL_DEBUG_ISR (trans,"enabled(hw) 0x%08x\n" , +iwl_read32 (trans,CSR_INT_MASK )); + + inta &= trans_pcie->inta_mask; + trans_pcie->inta |= inta; + +/* iwl_pcie_tasklet() will service interrupts and re-enable them */ +if (likely (inta)) { +spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +return IRQ_WAKE_THREAD ; + } + + ret =IRQ_HANDLED ; + + none: +/* re-enable interrupts here since we don't have anything to service. +* only Re-enable if disabled by irq. +*/ +if (test_bit (STATUS_INT_ENABLED , &trans->status) && + !trans_pcie->inta) +iwl_enable_interrupts (trans); + +spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +return ret; +} +irqreturn_t iwl_pcie_irq_handler (int irq,void *dev_id) {struct iwl_trans *trans = dev_id;
@@ -1019,11 +1181,6 @@ out:* ******************************************************************************/ -/* a device (PCI-E) page is 4096 bytes long */ -#define ICT_SHIFT 12 -#define ICT_SIZE (1 << ICT_SHIFT) -#define ICT_COUNT (ICT_SIZE / sizeof(u32)) -/* Free dram table */ void iwl_pcie_free_ict (struct iwl_trans *trans) {
@@ -1110,163 +1267,6 @@ void iwl_pcie_disable_ict(struct iwl_trans *trans)spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); } -/* legacy (non-ICT) ISR. Assumes that trans_pcie->irq_lock is held */ -static irqreturn_t iwl_pcie_isr_non_ict (struct iwl_trans *trans) -{ -struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -u32 inta; - -lockdep_assert_held (&trans_pcie->irq_lock); - -trace_iwlwifi_dev_irq (trans->dev); - -/* Discover which interrupts are active/pending */ - inta =iwl_read32 (trans,CSR_INT ); - -if (inta & (~trans_pcie->inta_mask)) { -IWL_DEBUG_ISR (trans, -"We got a masked interrupt (0x%08x)...Ack and ignore\n" , - inta & (~trans_pcie->inta_mask)); -iwl_write32 (trans,CSR_INT , inta & (~trans_pcie->inta_mask)); - inta &= trans_pcie->inta_mask; - } - -/* Ignore interrupt if there's nothing in NIC to service. -* This may be due to IRQ shared with another device, -* or due to sporadic interrupts thrown from our NIC. */ -if (!inta) { -IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); -/* -* Re-enable interrupts here since we don't have anything to -* service, but only in case the handler won't run. Note that -* the handler can be scheduled because of a previous -* interrupt. -*/ -if (test_bit (STATUS_INT_ENABLED , &trans->status) && - !trans_pcie->inta) -iwl_enable_interrupts (trans); -return IRQ_NONE ; - } - -if ((inta ==0xFFFFFFFF ) || ((inta &0xFFFFFFF0 ) ==0xa5a5a5a0 )) { -/* Hardware disappeared. It might have already raised -* an interrupt */ -IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta); -return IRQ_HANDLED ; - } - -if (iwl_have_debug_level (IWL_DL_ISR )) -IWL_DEBUG_ISR (trans, -"ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n" , - inta, trans_pcie->inta_mask, -iwl_read32 (trans,CSR_FH_INT_STATUS )); - - trans_pcie->inta |= inta; -/* the thread will service interrupts and re-enable them */ -return IRQ_WAKE_THREAD ; -} - -/* interrupt handler using ict table, with this interrupt driver will -* stop using INTA register to get device's interrupt, reading this register -* is expensive, device will write interrupts in ICT dram table, increment -* index then will fire interrupt to driver, driver will OR all ICT table -* entries from current index up to table entry with 0 value. the result is -* the interrupt we need to service, driver will set the entries back to 0 and -* set index. -*/ -static irqreturn_t iwl_pcie_isr_ict (struct iwl_trans *trans) -{ -struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags; -irqreturn_t ret; -u32 inta; -u32 val =0 ; -u32 read; - -spin_lock_irqsave (&trans_pcie->irq_lock, flags); - -/* dram interrupt table not set yet, -* use legacy interrupt. -*/ -if (unlikely (!trans_pcie->use_ict)) { - ret =iwl_pcie_isr_non_ict (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); -return ret; - } - -trace_iwlwifi_dev_irq (trans->dev); - -/* Ignore interrupt if there's nothing in NIC to service. -* This may be due to IRQ shared with another device, -* or due to sporadic interrupts thrown from our NIC. */ - read =le32_to_cpu (trans_pcie->ict_tbl[trans_pcie->ict_index]); -trace_iwlwifi_dev_ict_read (trans->dev, trans_pcie->ict_index, read); -if (!read) { -IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); - goto none; - } - -/* -* Collect all entries up to the first 0, starting from ict_index; -* note we already read at ict_index. -*/ -do { - val |= read; -IWL_DEBUG_ISR (trans,"ICT index %d value 0x%08X\n" , - trans_pcie->ict_index, read); - trans_pcie->ict_tbl[trans_pcie->ict_index] =0 ; - trans_pcie->ict_index = -iwl_queue_inc_wrap (trans_pcie->ict_index,ICT_COUNT ); - - read =le32_to_cpu (trans_pcie->ict_tbl[trans_pcie->ict_index]); -trace_iwlwifi_dev_ict_read (trans->dev, trans_pcie->ict_index, - read); - }while (read); - -/* We should not get this value, just ignore it. */ -if (val ==0xffffffff ) - val =0 ; - -/* -* this is a w/a for a h/w bug. the h/w bug may cause the Rx bit -* (bit 15 before shifting it to 31) to clear when using interrupt -* coalescing. fortunately, bits 18 and 19 stay set when this happens -* so we use them to decide on the real state of the Rx bit. -* In order words, bit 15 is set if bit 18 or bit 19 are set. -*/ -if (val &0xC0000 ) - val |=0x8000 ; - - inta = (0xff & val) | ((0xff00 & val) <<16 ); -IWL_DEBUG_ISR (trans,"ISR inta 0x%08x, enabled(sw) 0x%08x ict 0x%08x\n" , - inta, trans_pcie->inta_mask, val); -if (iwl_have_debug_level (IWL_DL_ISR )) -IWL_DEBUG_ISR (trans,"enabled(hw) 0x%08x\n" , -iwl_read32 (trans,CSR_INT_MASK )); - - inta &= trans_pcie->inta_mask; - trans_pcie->inta |= inta; - -/* iwl_pcie_tasklet() will service interrupts and re-enable them */ -if (likely (inta)) { -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); -return IRQ_WAKE_THREAD ; - } - - ret =IRQ_HANDLED ; - - none: -/* re-enable interrupts here since we don't have anything to service. -* only Re-enable if disabled by irq. -*/ -if (test_bit (STATUS_INT_ENABLED , &trans->status) && - !trans_pcie->inta) -iwl_enable_interrupts (trans); - -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); -return ret; -} -irqreturn_t iwl_pcie_isr (int irq,void *data) {struct iwl_trans *trans = data;
Signature · 1 line
1.7.9.5
PATCH 5/28 iwlwifi: pcie: read the interrupt cause from the handler
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
We now disable the interrupts in the hardware from the upper half and all the rest (including reading the interrupt cause) is done in the handler.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +9 -9
@@ -879,20 +879,16 @@ static irqreturn_t iwl_pcie_isr_non_ict(struct iwl_trans *trans)static irqreturn_t iwl_pcie_isr_ict (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags;irqreturn_t ret;u32 inta;u32 val =0 ;u32 read; -spin_lock_irqsave (&trans_pcie->irq_lock, flags); -/* dram interrupt table not set yet, * use legacy interrupt. */ if (unlikely (!trans_pcie->use_ict)) { ret =iwl_pcie_isr_non_ict (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags);return ret; }
@@ -950,10 +946,8 @@ static irqreturn_t iwl_pcie_isr_ict(struct iwl_trans *trans) trans_pcie->inta |= inta;/* iwl_pcie_tasklet() will service interrupts and re-enable them */ -if (likely (inta)) { -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +if (likely (inta))return IRQ_WAKE_THREAD ; - } ret =IRQ_HANDLED ;
@@ -965,7 +959,6 @@ static irqreturn_t iwl_pcie_isr_ict(struct iwl_trans *trans) !trans_pcie->inta)iwl_enable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags);return ret; }
@@ -977,12 +970,19 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)u32 inta =0 ;u32 handled =0 ;unsigned long flags; +irqreturn_t ret;u32 i;lock_map_acquire (&trans->sync_cmd_lockdep_map);spin_lock_irqsave (&trans_pcie->irq_lock, flags); + ret =iwl_pcie_isr_ict (trans); +if (ret !=IRQ_WAKE_THREAD ) { +spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +return ret; + } +/* Ack/clear/reset pending uCode interrupts. * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS, */
@@ -1281,5 +1281,5 @@ irqreturn_t iwl_pcie_isr(int irq, void *data)*/ iwl_write32 (trans,CSR_INT_MASK ,0x00000000 ); -return iwl_pcie_isr_ict (trans); +return IRQ_WAKE_THREAD ; }
Signature · 1 line
1.7.9.5
PATCH 6/28 iwlwifi: pcie: determine the interrupt type in the handler
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Instead of having:iwl_pcie_irq_handler
iwl_pcie_isr_ict
iwl_pcie_isr_non_ict
we now have:
iwl_pcie_irq_handler:
if (use_ict)) iwl_pcie_int_cause_ict; else iwl_pcie_int_cause_non_ict;
This is much clearer.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +10 -12
@@ -807,8 +807,7 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)wake_up (&trans_pcie->wait_command_queue); } -/* legacy (non-ICT) ISR. Assumes that trans_pcie->irq_lock is held */ -static irqreturn_t iwl_pcie_isr_non_ict (struct iwl_trans *trans) +static irqreturn_t iwl_pcie_int_cause_non_ict (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);u32 inta;
@@ -876,7 +875,7 @@ static irqreturn_t iwl_pcie_isr_non_ict(struct iwl_trans *trans)* the interrupt we need to service, driver will set the entries back to 0 and * set index. */ -static irqreturn_t iwl_pcie_isr_ict (struct iwl_trans *trans) +static irqreturn_t iwl_pcie_int_cause_ict (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);irqreturn_t ret;
@@ -884,14 +883,6 @@ static irqreturn_t iwl_pcie_isr_ict(struct iwl_trans *trans)u32 val =0 ;u32 read; -/* dram interrupt table not set yet, -* use legacy interrupt. -*/ -if (unlikely (!trans_pcie->use_ict)) { - ret =iwl_pcie_isr_non_ict (trans); -return ret; - } -trace_iwlwifi_dev_irq (trans->dev);/* Ignore interrupt if there's nothing in NIC to service.
@@ -977,7 +968,14 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)spin_lock_irqsave (&trans_pcie->irq_lock, flags); - ret =iwl_pcie_isr_ict (trans); +/* dram interrupt table not set yet, +* use legacy interrupt. +*/ +if (likely (trans_pcie->use_ict)) + ret =iwl_pcie_int_cause_ict (trans); +else + ret =iwl_pcie_int_cause_non_ict (trans); +if (ret !=IRQ_WAKE_THREAD ) {spin_unlock_irqrestore (&trans_pcie->irq_lock, flags);return ret;
Signature · 1 line
1.7.9.5
PATCH 7/28 iwlwifi: pcie: return inta from iwl_pcie_int_cause_{non_}ict
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
These functions are meant to return an interrupt cause and not an irqreturn_t.
We still return IRQ_HANDLED if we had an error and IRQ_NONE if our device hasn't fired any interrupt.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +19 -19
@@ -807,7 +807,7 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)wake_up (&trans_pcie->wait_command_queue); } -static irqreturn_t iwl_pcie_int_cause_non_ict (struct iwl_trans *trans) +static u32 iwl_pcie_int_cause_non_ict (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);u32 inta;
@@ -841,14 +841,15 @@ static irqreturn_t iwl_pcie_int_cause_non_ict(struct iwl_trans *trans)if (test_bit (STATUS_INT_ENABLED , &trans->status) && !trans_pcie->inta)iwl_enable_interrupts (trans); -return IRQ_NONE ; +return trans_pcie->inta; }if ((inta ==0xFFFFFFFF ) || ((inta &0xFFFFFFF0 ) ==0xa5a5a5a0 )) {/* Hardware disappeared. It might have already raised * an interrupt */ IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta); -return IRQ_HANDLED ; + trans_pcie->inta =0xFFFFFFFF ; +return trans_pcie->inta; }if (iwl_have_debug_level (IWL_DL_ISR ))
@@ -859,7 +860,7 @@ static irqreturn_t iwl_pcie_int_cause_non_ict(struct iwl_trans *trans) trans_pcie->inta |= inta;/* the thread will service interrupts and re-enable them */ -return IRQ_WAKE_THREAD ; +return trans_pcie->inta; }/* a device (PCI-E) page is 4096 bytes long */
@@ -875,10 +876,9 @@ static irqreturn_t iwl_pcie_int_cause_non_ict(struct iwl_trans *trans)* the interrupt we need to service, driver will set the entries back to 0 and * set index. */ -static irqreturn_t iwl_pcie_int_cause_ict (struct iwl_trans *trans) +static u32 iwl_pcie_int_cause_ict (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -irqreturn_t ret;u32 inta;u32 val =0 ;u32 read;
@@ -938,9 +938,7 @@ static irqreturn_t iwl_pcie_int_cause_ict(struct iwl_trans *trans)/* iwl_pcie_tasklet() will service interrupts and re-enable them */ if (likely (inta)) -return IRQ_WAKE_THREAD ; - - ret =IRQ_HANDLED ; +return trans_pcie->inta; none:/* re-enable interrupts here since we don't have anything to service.
@@ -950,7 +948,7 @@ static irqreturn_t iwl_pcie_int_cause_ict(struct iwl_trans *trans) !trans_pcie->inta)iwl_enable_interrupts (trans); -return ret; +return trans_pcie->inta; }irqreturn_t iwl_pcie_irq_handler (int irq,void *dev_id)
@@ -961,7 +959,6 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)u32 inta =0 ;u32 handled =0 ;unsigned long flags; -irqreturn_t ret;u32 i;lock_map_acquire (&trans->sync_cmd_lockdep_map);
@@ -972,13 +969,19 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)* use legacy interrupt. */ if (likely (trans_pcie->use_ict)) - ret =iwl_pcie_int_cause_ict (trans); + inta =iwl_pcie_int_cause_ict (trans);else - ret =iwl_pcie_int_cause_non_ict (trans); + inta =iwl_pcie_int_cause_non_ict (trans); -if (ret !=IRQ_WAKE_THREAD ) { +if (unlikely (!inta)) {spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); -return ret; +lock_map_release (&trans->sync_cmd_lockdep_map); +return IRQ_NONE ; + } + +if (unlikely (inta ==0xFFFFFFFF )) { +spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); + goto out; }/* Ack/clear/reset pending uCode interrupts.
@@ -992,10 +995,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)* hardware bugs here by ACKing all the possible interrupts so that * interrupt coalescing can still be achieved. */ -iwl_write32 (trans,CSR_INT , - trans_pcie->inta | ~trans_pcie->inta_mask); - - inta = trans_pcie->inta; +iwl_write32 (trans,CSR_INT , inta | ~trans_pcie->inta_mask);if (iwl_have_debug_level (IWL_DL_ISR )) IWL_DEBUG_ISR(trans, "inta 0x%08x, enabled 0x%08x\n",
Signature · 1 line
1.7.9.5
PATCH 8/28 iwlwifi: pcie: no need to save inta in trans_pcie
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
This was useful when the handling was not in the same context as the interrupt cause retrieval: we could have several hard interrupts until the handler gets called. Since we retrieve the interrupt cause in the handler itself, there is no need to OR the interrupt causes.
--- drivers/net/wireless/iwlwifi/pcie/internal.h | 1 - drivers/net/wireless/iwlwifi/pcie/rx.c | 22 +++++++--------------- 2 files changed, 7 insertions(+), 16 deletions(-)
drivers/net/wireless/iwlwifi/pcie/internal.h +0 -1
@@ -273,7 +273,6 @@ struct iwl_trans_pcie {__le32 *ict_tbl;dma_addr_t ict_tbl_dma;int ict_index; -u32 inta;bool use_ict;struct isr_statistics isr_stats;
drivers/net/wireless/iwlwifi/pcie/rx.c +7 -15
@@ -838,18 +838,16 @@ static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans)* the handler can be scheduled because of a previous * interrupt. */ -if (test_bit (STATUS_INT_ENABLED , &trans->status) && - !trans_pcie->inta) +if (test_bit (STATUS_INT_ENABLED , &trans->status) && !inta)iwl_enable_interrupts (trans); -return trans_pcie->inta; +return inta; }if ((inta ==0xFFFFFFFF ) || ((inta &0xFFFFFFF0 ) ==0xa5a5a5a0 )) {/* Hardware disappeared. It might have already raised * an interrupt */ IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta); - trans_pcie->inta =0xFFFFFFFF ; -return trans_pcie->inta; +return 0xFFFFFFFF ; }if (iwl_have_debug_level (IWL_DL_ISR ))
@@ -858,9 +856,8 @@ static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans) inta, trans_pcie->inta_mask, iwl_read32(trans, CSR_FH_INT_STATUS)); - trans_pcie->inta |= inta;/* the thread will service interrupts and re-enable them */ -return trans_pcie->inta; +return inta; }/* a device (PCI-E) page is 4096 bytes long */
@@ -934,21 +931,19 @@ static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans) iwl_read32(trans, CSR_INT_MASK)); inta &= trans_pcie->inta_mask; - trans_pcie->inta |= inta;/* iwl_pcie_tasklet() will service interrupts and re-enable them */ if (likely (inta)) -return trans_pcie->inta; +return inta; none:/* re-enable interrupts here since we don't have anything to service. * only Re-enable if disabled by irq. */ -if (test_bit (STATUS_INT_ENABLED , &trans->status) && - !trans_pcie->inta) +if (test_bit (STATUS_INT_ENABLED , &trans->status) && !inta)iwl_enable_interrupts (trans); -return trans_pcie->inta; +return inta; }irqreturn_t iwl_pcie_irq_handler (int irq,void *dev_id)
@@ -1001,9 +996,6 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)IWL_DEBUG_ISR (trans,"inta 0x%08x, enabled 0x%08x\n" , inta,iwl_read32 (trans,CSR_INT_MASK )); -/* saved interrupt in inta variable now we can reset trans_pcie->inta */ - trans_pcie->inta =0 ; -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags);/* Now service all interrupt bits discovered above. */
Signature · 1 line
1.7.9.5
PATCH 9/28 iwlwifi: pcie: move interrupt prints to the common handler
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Handling interrupt with no cause and printing logs doesn't need to be ICT / non-ICT specific move this to the common code.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 95 ++++++++++++-------------------- 1 file changed, 34 insertions(+), 61 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +34 -61
@@ -819,43 +819,6 @@ static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans)/* Discover which interrupts are active/pending */ inta =iwl_read32 (trans,CSR_INT ); -if (inta & (~trans_pcie->inta_mask)) { -IWL_DEBUG_ISR (trans, -"We got a masked interrupt (0x%08x)...Ack and ignore\n" , - inta & (~trans_pcie->inta_mask)); -iwl_write32 (trans,CSR_INT , inta & (~trans_pcie->inta_mask)); - inta &= trans_pcie->inta_mask; - } - -/* Ignore interrupt if there's nothing in NIC to service. -* This may be due to IRQ shared with another device, -* or due to sporadic interrupts thrown from our NIC. */ -if (!inta) { -IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); -/* -* Re-enable interrupts here since we don't have anything to -* service, but only in case the handler won't run. Note that -* the handler can be scheduled because of a previous -* interrupt. -*/ -if (test_bit (STATUS_INT_ENABLED , &trans->status) && !inta) -iwl_enable_interrupts (trans); -return inta; - } - -if ((inta ==0xFFFFFFFF ) || ((inta &0xFFFFFFF0 ) ==0xa5a5a5a0 )) { -/* Hardware disappeared. It might have already raised -* an interrupt */ -IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta); -return 0xFFFFFFFF ; - } - -if (iwl_have_debug_level (IWL_DL_ISR )) -IWL_DEBUG_ISR (trans, -"ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n" , - inta, trans_pcie->inta_mask, -iwl_read32 (trans,CSR_FH_INT_STATUS )); -/* the thread will service interrupts and re-enable them */ return inta; }
@@ -887,10 +850,8 @@ static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans)* or due to sporadic interrupts thrown from our NIC. */ read =le32_to_cpu (trans_pcie->ict_tbl[trans_pcie->ict_index]);trace_iwlwifi_dev_ict_read (trans->dev, trans_pcie->ict_index, read); -if (!read) { -IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); - goto none; - } +if (!read) +return 0 ;/* * Collect all entries up to the first 0, starting from ict_index;
@@ -924,25 +885,6 @@ static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans) val |=0x8000 ; inta = (0xff & val) | ((0xff00 & val) <<16 ); -IWL_DEBUG_ISR (trans,"ISR inta 0x%08x, enabled(sw) 0x%08x ict 0x%08x\n" , - inta, trans_pcie->inta_mask, val); -if (iwl_have_debug_level (IWL_DL_ISR )) -IWL_DEBUG_ISR (trans,"enabled(hw) 0x%08x\n" , -iwl_read32 (trans,CSR_INT_MASK )); - - inta &= trans_pcie->inta_mask; - -/* iwl_pcie_tasklet() will service interrupts and re-enable them */ -if (likely (inta)) -return inta; - - none: -/* re-enable interrupts here since we don't have anything to service. -* only Re-enable if disabled by irq. -*/ -if (test_bit (STATUS_INT_ENABLED , &trans->status) && !inta) -iwl_enable_interrupts (trans); -return inta; }
@@ -968,13 +910,44 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)else inta =iwl_pcie_int_cause_non_ict (trans); +if (iwl_have_debug_level (IWL_DL_ISR )) { +IWL_DEBUG_ISR (trans, +"ISR inta 0x%08x, enabled 0x%08x(sw), enabled(hw) 0x%08x, fh 0x%08x\n" , + inta, trans_pcie->inta_mask, +iwl_read32 (trans,CSR_INT_MASK ), +iwl_read32 (trans,CSR_FH_INT_STATUS )); +if (inta & (~trans_pcie->inta_mask)) +IWL_DEBUG_ISR (trans, +"We got a masked interrupt (0x%08x)\n" , + inta & (~trans_pcie->inta_mask)); + } + + inta &= trans_pcie->inta_mask; + +/* +* Ignore interrupt if there's nothing in NIC to service. +* This may be due to IRQ shared with another device, +* or due to sporadic interrupts thrown from our NIC. +*/ if (unlikely (!inta)) { +IWL_DEBUG_ISR (trans,"Ignore interrupt, inta == 0\n" ); +/* +* Re-enable interrupts here since we don't +* have anything to service +*/ +if (test_bit (STATUS_INT_ENABLED , &trans->status)) +iwl_enable_interrupts (trans);spin_unlock_irqrestore (&trans_pcie->irq_lock, flags);lock_map_release (&trans->sync_cmd_lockdep_map);return IRQ_NONE ; } -if (unlikely (inta ==0xFFFFFFFF )) { +if (unlikely (inta ==0xFFFFFFFF || (inta &0xFFFFFFF0 ) ==0xa5a5a5a0 )) { +/* +* Hardware disappeared. It might have +* already raised an interrupt. +*/ +IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta);spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); goto out; }
Signature · 1 line
1.7.9.5
PATCH 10/28 iwlwifi: pcie: use don't disable interrupt when irq_lock is taken
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Since we don't take this lock in the primary interrupt handler, there is no pointin disabling the interrupt in the critical section protected by trans_pcie->irq_lock.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 28 ++++++++++++---------------- drivers/net/wireless/iwlwifi/pcie/trans.c | 23 ++++++++++------------- drivers/net/wireless/iwlwifi/pcie/tx.c | 10 ++++------ 3 files changed, 26 insertions(+), 35 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +12 -16
@@ -379,13 +379,12 @@ static void iwl_pcie_rxq_free_rbs(struct iwl_trans *trans)static void iwl_pcie_rx_replenish (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags;iwl_pcie_rxq_alloc_rbs (trans,GFP_KERNEL ); -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_pcie_rxq_restock (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock); }static void iwl_pcie_rx_replenish_now (struct iwl_trans *trans)
@@ -541,10 +540,10 @@ int iwl_pcie_rx_init(struct iwl_trans *trans)iwl_pcie_rx_hw_init (trans, rxq); -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock); rxq->need_update =1 ;iwl_pcie_rxq_inc_wr_ptr (trans, rxq); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);return 0 ; }
@@ -895,12 +894,11 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)struct isr_statistics *isr_stats = &trans_pcie->isr_stats;u32 inta =0 ;u32 handled =0 ; -unsigned long flags;u32 i;lock_map_acquire (&trans->sync_cmd_lockdep_map); -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);/* dram interrupt table not set yet, * use legacy interrupt.
@@ -937,7 +935,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)*/ if (test_bit (STATUS_INT_ENABLED , &trans->status))iwl_enable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);lock_map_release (&trans->sync_cmd_lockdep_map);return IRQ_NONE ; }
@@ -948,7 +946,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)* already raised an interrupt. */ IWL_WARN (trans,"HARDWARE GONE?? INTA == 0x%08x\n" , inta); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock); goto out; }
@@ -969,7 +967,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)IWL_DEBUG_ISR (trans,"inta 0x%08x, enabled 0x%08x\n" , inta,iwl_read32 (trans,CSR_INT_MASK )); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);/* Now service all interrupt bits discovered above. */ if (inta &CSR_INT_BIT_HW_ERR ) {
@@ -1194,12 +1192,11 @@ void iwl_pcie_reset_ict(struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);u32 val; -unsigned long flags;if (!trans_pcie->ict_tbl)return ; -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_disable_interrupts (trans);memset (trans_pcie->ict_tbl,0 ,ICT_SIZE );
@@ -1216,18 +1213,17 @@ void iwl_pcie_reset_ict(struct iwl_trans *trans) trans_pcie->ict_index =0 ;iwl_write32 (trans,CSR_INT , trans_pcie->inta_mask);iwl_enable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock); }/* Device is going down disable ict interrupt usage */ void iwl_pcie_disable_ict (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags; -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock); trans_pcie->use_ict = false; -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock); }irqreturn_t iwl_pcie_isr (int irq,void *data)
drivers/net/wireless/iwlwifi/pcie/trans.c +10 -13
@@ -271,13 +271,12 @@ static void iwl_pcie_apm_stop(struct iwl_trans *trans)static int iwl_pcie_nic_init (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags;/* nic_init */ -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_pcie_apm_init (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);iwl_pcie_set_pwr (trans, false);
@@ -635,13 +634,12 @@ static void iwl_trans_pcie_fw_alive(struct iwl_trans *trans, u32 scd_addr)static void iwl_trans_pcie_stop_device (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags;bool hw_rfkill;/* tell the device to stop sending interrupts */ -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_disable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);/* device going down, Stop using ICT table */ iwl_pcie_disable_ict (trans);
@@ -673,9 +671,9 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)/* Upon stop, the APM issues an interrupt if HW RF kill is set. * Clean again the interrupt here */ -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_disable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);/* stop and reset the on-board processor */ iwl_write32 (trans,CSR_RESET ,CSR_RESET_REG_FLAG_NEVO_RESET );
@@ -821,18 +819,17 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)static void iwl_trans_pcie_op_mode_leave (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -unsigned long flags;/* disable interrupts - don't enable HW RF kill interrupt */ -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_disable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);iwl_pcie_apm_stop (trans); -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_disable_interrupts (trans); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);iwl_pcie_disable_ict (trans); }
drivers/net/wireless/iwlwifi/pcie/tx.c +4 -6
@@ -737,10 +737,9 @@ int iwl_pcie_tx_stop(struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);int ch, txq_id, ret; -unsigned long flags;/* Turn off all Tx DMA fifos */ -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);iwl_pcie_txq_set_sched (trans,0 );
@@ -757,7 +756,7 @@ int iwl_pcie_tx_stop(struct iwl_trans *trans)iwl_read_direct32 (trans, FH_TSSR_TX_STATUS_REG)); } -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);if (!trans_pcie->txq) { IWL_WARN(trans,
@@ -865,7 +864,6 @@ int iwl_pcie_tx_init(struct iwl_trans *trans)struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);int ret;int txq_id, slots_num; -unsigned long flags;bool alloc = false;if (!trans_pcie->txq) {
@@ -875,7 +873,7 @@ int iwl_pcie_tx_init(struct iwl_trans *trans) alloc = true; } -spin_lock_irqsave (&trans_pcie->irq_lock, flags); +spin_lock (&trans_pcie->irq_lock);/* Turn off all Tx DMA fifos */ iwl_write_prph (trans,SCD_TXFACT ,0 );
@@ -884,7 +882,7 @@ int iwl_pcie_tx_init(struct iwl_trans *trans)iwl_write_direct32 (trans,FH_KW_MEM_ADDR_REG , trans_pcie->kw.dma >>4 ); -spin_unlock_irqrestore (&trans_pcie->irq_lock, flags); +spin_unlock (&trans_pcie->irq_lock);/* Alloc and init all Tx queues, including the command queue (#4/#9) */ for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues;
Signature · 1 line
1.7.9.5
PATCH 11/28 iwlwifi: pcie: use don't disable interrupt when rxq->lock is taken
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
This lock was never acquired in the primary interrupt handler, but since it was acquired along with irq_lock which had to disable interrupts, rxq->lock had to disable interrupts too.
Now that trans_pcie->irq_lock isn't acquired in the primary interrupt handler, rxq->lock can let interrupt enabled.
--- drivers/net/wireless/iwlwifi/pcie/rx.c | 50 ++++++++++++++------------------ 1 file changed, 22 insertions(+), 28 deletions(-)
drivers/net/wireless/iwlwifi/pcie/rx.c +22 -28
@@ -148,10 +148,9 @@ int iwl_pcie_rx_stop(struct iwl_trans *trans)static void iwl_pcie_rxq_inc_wr_ptr (struct iwl_trans *trans,struct iwl_rxq *rxq) { -unsigned long flags;u32 reg; -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);if (rxq->need_update ==0 ) goto exit_unlock;
@@ -190,7 +189,7 @@ static void iwl_pcie_rxq_inc_wr_ptr(struct iwl_trans *trans, rxq->need_update =0 ; exit_unlock: -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock); }/*
@@ -209,7 +208,6 @@ static void iwl_pcie_rxq_restock(struct iwl_trans *trans)struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct iwl_rxq *rxq = &trans_pcie->rxq;struct iwl_rx_mem_buffer *rxb; -unsigned long flags;/* * If the device isn't enabled - not need to try to add buffers...
@@ -222,7 +220,7 @@ static void iwl_pcie_rxq_restock(struct iwl_trans *trans)if (!test_bit (STATUS_DEVICE_ENABLED , &trans->status))return ; -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);while ((iwl_rxq_space (rxq) >0 ) && (rxq->free_count)) {/* The overwritten rxb must be a used one */ rxb = rxq->queue[rxq->write];
@@ -239,7 +237,7 @@ static void iwl_pcie_rxq_restock(struct iwl_trans *trans) rxq->write = (rxq->write +1 ) &RX_QUEUE_MASK ; rxq->free_count--; } -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);/* If the pre-allocated buffer pool is dropping low, schedule to * refill it */ if (rxq->free_count <=RX_LOW_WATERMARK )
@@ -248,9 +246,9 @@ static void iwl_pcie_rxq_restock(struct iwl_trans *trans)/* If we've added more space for the firmware to place data, tell it. * Increment device's write pointer in multiples of 8. */ if (rxq->write_actual != (rxq->write & ~0x7 )) { -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock); rxq->need_update =1 ; -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);iwl_pcie_rxq_inc_wr_ptr (trans, rxq); } }
@@ -270,16 +268,15 @@ static void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority)struct iwl_rxq *rxq = &trans_pcie->rxq;struct iwl_rx_mem_buffer *rxb;struct page *page; -unsigned long flags;gfp_t gfp_mask = priority;while (1 ) { -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);if (list_empty (&rxq->rx_used)) { -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);return ; } -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);if (rxq->free_count >RX_LOW_WATERMARK ) gfp_mask |= __GFP_NOWARN;
@@ -308,17 +305,17 @@ static void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority)return ; } -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);if (list_empty (&rxq->rx_used)) { -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);__free_pages (page, trans_pcie->rx_page_order);return ; } rxb = list_first_entry(&rxq->rx_used, struct iwl_rx_mem_buffer, list);list_del (&rxb->list); -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);BUG_ON (rxb->page); rxb->page = page;
@@ -329,9 +326,9 @@ static void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority) DMA_FROM_DEVICE);if (dma_mapping_error (trans->dev, rxb->page_dma)) { rxb->page =NULL ; -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);list_add (&rxb->list, &rxq->rx_used); -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);__free_pages (page, trans_pcie->rx_page_order);return ; }
@@ -340,12 +337,12 @@ static void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority)/* and also 256 byte aligned! */ BUG_ON (rxb->page_dma &DMA_BIT_MASK (8 )); -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);list_add_tail (&rxb->list, &rxq->rx_free); rxq->free_count++; -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock); } }
@@ -510,7 +507,6 @@ int iwl_pcie_rx_init(struct iwl_trans *trans)struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct iwl_rxq *rxq = &trans_pcie->rxq;int i, err; -unsigned long flags;if (!rxq->bd) { err =iwl_pcie_rx_alloc (trans);
@@ -518,7 +514,7 @@ int iwl_pcie_rx_init(struct iwl_trans *trans)return err; } -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);INIT_WORK (&trans_pcie->rx_replenish, iwl_pcie_rx_replenish_work);
@@ -534,7 +530,7 @@ int iwl_pcie_rx_init(struct iwl_trans *trans) rxq->read = rxq->write =0 ; rxq->write_actual =0 ;memset (rxq->rb_stts,0 ,sizeof (*rxq->rb_stts)); -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);iwl_pcie_rx_replenish (trans);
@@ -552,7 +548,6 @@ void iwl_pcie_rx_free(struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct iwl_rxq *rxq = &trans_pcie->rxq; -unsigned long flags;/*if rxq->bd is NULL, it means that nothing has been allocated, * exit now */
@@ -563,9 +558,9 @@ void iwl_pcie_rx_free(struct iwl_trans *trans)cancel_work_sync (&trans_pcie->rx_replenish); -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);iwl_pcie_rxq_free_rbs (trans); -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock);dma_free_coherent (trans->dev,sizeof (__le32) *RX_QUEUE_SIZE , rxq->bd, rxq->bd_dma);
@@ -588,7 +583,6 @@ static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans,struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct iwl_rxq *rxq = &trans_pcie->rxq;struct iwl_txq *txq = &trans_pcie->txq[trans_pcie->cmd_queue]; -unsigned long flags;bool page_stolen = false;int max_len =PAGE_SIZE << trans_pcie->rx_page_order;u32 offset =0 ;
@@ -690,7 +684,7 @@ static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans,/* Reuse the page if possible. For notification packets and * SKBs that fail to Rx correctly, add them back into the * rx_free list for reuse later. */ -spin_lock_irqsave (&rxq->lock, flags); +spin_lock (&rxq->lock);if (rxb->page !=NULL ) { rxb->page_dma = dma_map_page(trans->dev, rxb->page, 0,
@@ -711,7 +705,7 @@ static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans, } }else list_add_tail (&rxb->list, &rxq->rx_used); -spin_unlock_irqrestore (&rxq->lock, flags); +spin_unlock (&rxq->lock); }/*
Signature · 1 line
1.7.9.5
PATCH 12/28 iwlwifi: mvm: fix AC / FIFO mapping
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
The AC / fifo mapping was wrong - BE packets landed in VO FIFO. The iwl_mvm_tx_fifo enumeration isn't in the same order as ieee80211_ac_numbers enumeration.
Since the firmware relies on fifo / ac mapping - this led to wrong behavior. E.g. the firmware sends beacon with the same QoS parameters as VO, and it actually took the parameters of BK. There are probably more severe issues.
--- drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-)
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +15 -10
@@ -69,10 +69,10 @@#include "mvm.h" const u8 iwl_mvm_ac_to_tx_fifo[] = { -IWL_MVM_TX_FIFO_BK , -IWL_MVM_TX_FIFO_BE , -IWL_MVM_TX_FIFO_VI ,IWL_MVM_TX_FIFO_VO , +IWL_MVM_TX_FIFO_VI , +IWL_MVM_TX_FIFO_BE , +IWL_MVM_TX_FIFO_BK , };struct iwl_mvm_mac_iface_iterator_data {
@@ -586,18 +586,23 @@ static void iwl_mvm_mac_ctxt_cmd_common(struct iwl_mvm *mvm,cpu_to_le32 (vif->bss_conf.use_short_slot ?MAC_FLG_SHORT_SLOT :0 ); -for (i =0 ; i <AC_NUM ; i++) { - cmd->ac[i].cw_min =cpu_to_le16 (mvmvif->queue_params[i].cw_min); - cmd->ac[i].cw_max =cpu_to_le16 (mvmvif->queue_params[i].cw_max); - cmd->ac[i].aifsn = mvmvif->queue_params[i].aifs; - cmd->ac[i].edca_txop = +for (i =0 ; i <IEEE80211_NUM_ACS ; i++) { +u8 txf = iwl_mvm_ac_to_tx_fifo[i]; + + cmd->ac[txf].cw_min = +cpu_to_le16 (mvmvif->queue_params[i].cw_min); + cmd->ac[txf].cw_max = +cpu_to_le16 (mvmvif->queue_params[i].cw_max); + cmd->ac[txf].edca_txop =cpu_to_le16 (mvmvif->queue_params[i].txop *32 ); - cmd->ac[i].fifos_mask =BIT (iwl_mvm_ac_to_tx_fifo[i]); + cmd->ac[txf].aifsn = mvmvif->queue_params[i].aifs; + cmd->ac[txf].fifos_mask =BIT (txf); }/* in AP mode, the MCAST FIFO takes the EDCA params from VO */ if (vif->type ==NL80211_IFTYPE_AP ) - cmd->ac[AC_VO ].fifos_mask |=BIT (IWL_MVM_TX_FIFO_MCAST ); + cmd->ac[IWL_MVM_TX_FIFO_VO ].fifos_mask |= +BIT (IWL_MVM_TX_FIFO_MCAST );if (vif->bss_conf.qos) cmd->qos_flags |=cpu_to_le32 (MAC_QOS_FLG_UPDATE_EDCA );
Signature · 1 line
1.7.9.5
PATCH 13/28 iwlwifi: mvm: fix possible memory leak
In reply to Emmanuel GrumbachFrom: Eytan Lifshitz <[email protected]>
In case of invalid section_id, the function returns after it aleready allocated memory. Fixed by change the order of actions.
--- drivers/net/wireless/iwlwifi/mvm/nvm.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/net/wireless/iwlwifi/mvm/nvm.c +6 -5
@@ -367,16 +367,17 @@ static int iwl_mvm_read_external_nvm(struct iwl_mvm *mvm)break ; } +if (WARN (section_id >=NVM_NUM_OF_SECTIONS , +"Invalid NVM section ID %d\n" , section_id)) { + ret = -EINVAL ; +break ; + } + temp =kmemdup (file_sec->data, section_size,GFP_KERNEL );if (!temp) { ret = -ENOMEM ;break ; } -if (WARN_ON (section_id >=NVM_NUM_OF_SECTIONS )) { -IWL_ERR (mvm,"Invalid NVM section ID\n" ); - ret = -EINVAL ; -break ; - } mvm->nvm_sections[section_id].data = temp; mvm->nvm_sections[section_id].length = section_size;
Signature · 1 line
1.7.9.5
PATCH 14/28 iwlwifi: pcie: keep the NIC awake when commands are in flight
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Under very specific circumstances, the firmware might ignore a host command. This was debugged and we ended up seeing that the power management hardware was faulty. In order to workaround this issue, we keep the NIC awake as long as we have host commands in flight. This will avoid to put the hardware into buggy condition.
--- drivers/net/wireless/iwlwifi/pcie/internal.h | 29 +++++++++++ drivers/net/wireless/iwlwifi/pcie/trans.c | 35 +++---------- drivers/net/wireless/iwlwifi/pcie/tx.c | 71 ++++++++++++++++---------- 3 files changed, 82 insertions(+), 53 deletions(-)
drivers/net/wireless/iwlwifi/pcie/internal.h +29 -0
@@ -262,6 +262,7 @@ iwl_pcie_get_scratchbuf_dma(struct iwl_txq *txq, int idx)* @rx_page_order: page order for receive buffer size * @wd_timeout: queue watchdog timeout (jiffies) * @reg_lock: protect hw register access +* @cmd_in_flight: true when we have a host command in flight */ struct iwl_trans_pcie {struct iwl_rxq rxq;
@@ -310,6 +311,7 @@ struct iwl_trans_pcie {/*protect hw register */ spinlock_t reg_lock; +bool cmd_in_flight; };#define IWL_TRANS_GET_PCIE_TRANS (_iwl_trans) \
@@ -459,4 +461,31 @@ static inline bool iwl_is_rfkill_set(struct iwl_trans *trans) CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW); } +static inline void __iwl_trans_pcie_set_bits_mask (struct iwl_trans *trans, +u32 reg,u32 mask,u32 value) +{ +u32 v; + +#ifdef CONFIG_IWLWIFI_DEBUG +WARN_ON_ONCE (value & ~mask); +#endif + + v =iwl_read32 (trans, reg); + v &= ~mask; + v |= value; +iwl_write32 (trans, reg, v); +} + +static inline void __iwl_trans_pcie_clear_bit (struct iwl_trans *trans, +u32 reg,u32 mask) +{ +__iwl_trans_pcie_set_bits_mask (trans, reg, mask,0 ); +} + +static inline void __iwl_trans_pcie_set_bit (struct iwl_trans *trans, +u32 reg,u32 mask) +{ +__iwl_trans_pcie_set_bits_mask (trans, reg, mask, mask); +} +#endif /* __iwl_trans_int_pcie_h__ */
drivers/net/wireless/iwlwifi/pcie/trans.c +8 -27
@@ -75,33 +75,6 @@#include "iwl-agn-hw.h" #include "internal.h" -static void __iwl_trans_pcie_set_bits_mask (struct iwl_trans *trans, -u32 reg,u32 mask,u32 value) -{ -u32 v; - -#ifdef CONFIG_IWLWIFI_DEBUG -WARN_ON_ONCE (value & ~mask); -#endif - - v =iwl_read32 (trans, reg); - v &= ~mask; - v |= value; -iwl_write32 (trans, reg, v); -} - -static inline void __iwl_trans_pcie_clear_bit (struct iwl_trans *trans, -u32 reg,u32 mask) -{ -__iwl_trans_pcie_set_bits_mask (trans, reg, mask,0 ); -} - -static inline void __iwl_trans_pcie_set_bit (struct iwl_trans *trans, -u32 reg,u32 mask) -{ -__iwl_trans_pcie_set_bits_mask (trans, reg, mask, mask); -} -static void iwl_pcie_set_pwr (struct iwl_trans *trans,bool vaux) {if (vaux &&pci_pme_capable (to_pci_dev (trans->dev), PCI_D3cold))
@@ -929,6 +902,9 @@ static bool iwl_trans_pcie_grab_nic_access(struct iwl_trans *trans, bool silent,spin_lock_irqsave (&trans_pcie->reg_lock, *flags); +if (trans_pcie->cmd_in_flight) + goto out; +/* this bit wakes up the NIC */ __iwl_trans_pcie_set_bit (trans,CSR_GP_CNTRL ,CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ );
@@ -968,6 +944,7 @@ static bool iwl_trans_pcie_grab_nic_access(struct iwl_trans *trans, bool silent, } } +out:/* * Fool sparse by faking we release the lock - sparse will * track nic_access anyway.
@@ -989,6 +966,9 @@ static void iwl_trans_pcie_release_nic_access(struct iwl_trans *trans,*/ __acquire (&trans_pcie->reg_lock); +if (trans_pcie->cmd_in_flight) + goto out; +__iwl_trans_pcie_clear_bit (trans,CSR_GP_CNTRL ,CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ );/*
@@ -998,6 +978,7 @@ static void iwl_trans_pcie_release_nic_access(struct iwl_trans *trans,* scheduled on different CPUs (after we drop reg_lock). */ mmiowb (); +out:spin_unlock_irqrestore (&trans_pcie->reg_lock, *flags); }
drivers/net/wireless/iwlwifi/pcie/tx.c +45 -26
122 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH 15/28 iwlwifi: pcie: don't update the op_mode if rfkill hasn't changed
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
This is useless and introduces a dependency between rfkill and stop_device - the op_mode can't call stop_device from the rfkill notification since it would lead to an endless recursion.
Next patches will need to do so.
--- drivers/net/wireless/iwlwifi/pcie/trans.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +11 -2
@@ -607,7 +607,9 @@ static void iwl_trans_pcie_fw_alive(struct iwl_trans *trans, u32 scd_addr)static void iwl_trans_pcie_stop_device (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -bool hw_rfkill; +bool hw_rfkill, was_hw_rfkill; + + was_hw_rfkill =iwl_is_rfkill_set (trans);/* tell the device to stop sending interrupts */ spin_lock (&trans_pcie->irq_lock);
@@ -669,13 +671,20 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)* all the interrupts were disabled, in this case we couldn't * receive the RF kill interrupt and update the state in the * op_mode. +* Don't call the op_mode if the rkfill state hasn't changed. +* This allows the op_mode to call stop_device from the rfkill +* notification without endless recursion. Under very rare +* circumstances, we might have a small recursion if the rfkill +* state changed exactly now while we were called from stop_device. +* This is very unlikely but can happen and is supported. */ hw_rfkill =iwl_is_rfkill_set (trans);if (hw_rfkill)set_bit (STATUS_RFKILL , &trans->status);else clear_bit (STATUS_RFKILL , &trans->status); -iwl_op_mode_hw_rf_kill (trans->op_mode, hw_rfkill); +if (hw_rfkill != was_hw_rfkill) +iwl_op_mode_hw_rf_kill (trans->op_mode, hw_rfkill); }static void iwl_trans_pcie_d3_suspend (struct iwl_trans *trans,bool test)
Signature · 1 line
1.7.9.5
PATCH 16/28 iwlwifi: pcie: allow the op_mode to call stop_device whenever it wants
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Calling stop_device when start_fw wasn't called would issue:
Stopping tx queues that aren't allocated...
Also allow the op_mode to call stop_device and then to disable the Tx queues - in that case just silently ignore the disabling on the Tx queues, since the PRPH registers aren't reachable any more.
--- drivers/net/wireless/iwlwifi/iwl-trans.h | 7 ++++--- drivers/net/wireless/iwlwifi/pcie/tx.c | 23 ++++++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-)
drivers/net/wireless/iwlwifi/iwl-trans.h +4 -3
@@ -622,6 +622,10 @@ static inline int iwl_trans_send_cmd(struct iwl_trans *trans, {int ret; +if (unlikely (!(cmd->flags &CMD_SEND_IN_RFKILL ) && +test_bit (STATUS_RFKILL , &trans->status))) +return -ERFKILL ; +if (unlikely (test_bit (STATUS_FW_ERROR , &trans->status)))return -EIO ;
@@ -684,9 +688,6 @@ static inline void iwl_trans_reclaim(struct iwl_trans *trans, int queue,static inline void iwl_trans_txq_disable (struct iwl_trans *trans,int queue) { -if (unlikely (trans->state !=IWL_TRANS_FW_ALIVE )) -IWL_ERR (trans,"%s bad state = %d" , __func__, trans->state); - trans->ops->txq_disable (trans, queue); }
drivers/net/wireless/iwlwifi/pcie/tx.c +18 -5
@@ -758,11 +758,17 @@ int iwl_pcie_tx_stop(struct iwl_trans *trans) }spin_unlock (&trans_pcie->irq_lock); -if (!trans_pcie->txq) { -IWL_WARN (trans, -"Stopping tx queues that aren't allocated...\n" ); +/* +* This function can be called before the op_mode disabled the +* queues. This happens when we have an rfkill interrupt. +* Since we stop Tx altogether - mark the queues as stopped. +*/ +memset (trans_pcie->queue_stopped,0 ,sizeof (trans_pcie->queue_stopped)); +memset (trans_pcie->queue_used,0 ,sizeof (trans_pcie->queue_used)); + +/* This can happen: start_hw, stop_device */ +if (!trans_pcie->txq)return 0 ; - }/* Unmap DMA from host system and free skb's */ for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues;
@@ -1150,8 +1156,15 @@ void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)SCD_TX_STTS_QUEUE_OFFSET (txq_id);static const u32 zero_val[4 ] = {}; +/* +* Upon HW Rfkill - we stop the device, and then stop the queues +* in the op_mode. Just for the sake of the simplicity of the op_mode, +* allow the op_mode to call txq_disable after it already called +* stop_device. +*/ if (!test_and_clear_bit (txq_id, trans_pcie->queue_used)) { -WARN_ONCE (1 ,"queue %d not used" , txq_id); +WARN_ONCE (test_bit (STATUS_DEVICE_ENABLED , &trans->status), +"queue %d not used" , txq_id);return ; }
Signature · 1 line
1.7.9.5
PATCH 17/28 iwlwifi: mvm: disable the device as soon as RFKILL fires
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
The firmware needs to be stopped quickly (100ms) after the RFKILL interrupt fired. Failing to do so would allow the firmware to access the radio registers which would lead to a hardware error.
Before this change, we would kill the firmware only when mac80211 stops the device which can take a fair amount of time. Take a shortcut by stopping the device right away in the interrupt.
This is not relevant if the current firmware is INIT firmware since that firmware can run while in RFKILL.
--- drivers/net/wireless/iwlwifi/mvm/ops.c | 2 ++ drivers/net/wireless/iwlwifi/mvm/scan.c | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-)
drivers/net/wireless/iwlwifi/mvm/ops.c +2 -0
@@ -665,6 +665,8 @@ static void iwl_mvm_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)else clear_bit (IWL_MVM_STATUS_HW_RFKILL , &mvm->status); +if (state && mvm->cur_ucode !=IWL_UCODE_INIT ) +iwl_trans_stop_device (mvm->trans);wiphy_rfkill_set_hw_state (mvm->hw->wiphy,iwl_mvm_is_radio_killed (mvm)); }
drivers/net/wireless/iwlwifi/mvm/scan.c +7 -2
@@ -473,13 +473,18 @@ void iwl_mvm_cancel_scan(struct iwl_mvm *mvm)if (mvm->scan_status ==IWL_MVM_SCAN_NONE )return ; +if (iwl_mvm_is_radio_killed (mvm)) { +ieee80211_scan_completed (mvm->hw, true); + mvm->scan_status =IWL_MVM_SCAN_NONE ; +return ; + } +iwl_init_notification_wait (&mvm->notif_wait, &wait_scan_abort, scan_abort_notif,ARRAY_SIZE (scan_abort_notif), iwl_mvm_scan_abort_notif,NULL ); - ret =iwl_mvm_send_cmd_pdu (mvm,SCAN_ABORT_CMD , -CMD_SYNC |CMD_SEND_IN_RFKILL ,0 ,NULL ); + ret =iwl_mvm_send_cmd_pdu (mvm,SCAN_ABORT_CMD ,CMD_SYNC ,0 ,NULL );if (ret) {IWL_ERR (mvm,"Couldn't send SCAN_ABORT_CMD: %d\n" , ret);/* mac80211's state will be cleaned in the fw_restart flow */
Signature · 1 line
1.7.9.5
PATCH 18/28 iwlwifi: mvm: fix harmless smatch / coccinelle warnings
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Don't check if mvm->fw->cs is NULL since it can't be. cs is an array member of iwl_fw, it can't be NULL.
Use memset(ptr, 0, sizeof(*ptr)); instead ofmemset(ptr, 0, sizeof(struct ptr_type));
--- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 2 +- drivers/net/wireless/iwlwifi/mvm/rs.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/iwlwifi/mvm/mac80211.c +1 -1
@@ -262,7 +262,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) mvm->rts_threshold =IEEE80211_MAX_RTS_THRESHOLD ;/* currently FW API supports only one optional cipher scheme */ -if (mvm->fw->cs && mvm->fw->cs->cipher) { +if (mvm->fw->cs->cipher) { mvm->hw->n_cipher_schemes =1 ; mvm->hw->cipher_schemes = mvm->fw->cs; }
drivers/net/wireless/iwlwifi/mvm/rs.c +2 -2
@@ -700,7 +700,7 @@ static int rs_rate_from_ucode_rate(const u32 ucode_rate,u8 num_of_ant =get_num_of_ant_from_rate (ucode_rate);u8 nss; -memset (rate,0 ,sizeof (struct rs_rate )); +memset (rate,0 ,sizeof (*rate)); rate->index =iwl_hwrate_to_plcp_idx (ucode_rate);if (rate->index ==IWL_RATE_INVALID ) {
@@ -2446,7 +2446,7 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,struct iwl_lq_cmd *lq_cmd = &lq_sta->lq;bool toggle_ant = false; -memcpy (&rate, initial_rate,sizeof (struct rs_rate )); +memcpy (&rate, initial_rate,sizeof (rate));if (mvm) valid_tx_ant =iwl_fw_valid_tx_ant (mvm->fw);
Signature · 1 line
1.7.9.5
PATCH 19/28 iwlwifi: mvm: BT Coex - update channel inihibition for channel 14
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
This channel inhibition for channel 14 was wrong. Fix it.
--- drivers/net/wireless/iwlwifi/mvm/bt-coex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/iwlwifi/mvm/bt-coex.c +2 -2
@@ -294,9 +294,9 @@ static const __le64 iwl_ci_mask[][3] = { cpu_to_le64(0x0) }, { -cpu_to_le64 (0xFE00000000ULL ), +cpu_to_le64 (0xFFC0000000ULL ),cpu_to_le64 (0x0ULL ), -cpu_to_le64 (0x0 ) +cpu_to_le64 (0x0ULL ) }, };
Signature · 1 line
1.7.9.5
PATCH 20/28 iwlwifi: mvm: dump to debugfs the SRAM as binary
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
This allows to format it at will using external tools. Since different teams want it in different formats, dump the raw data and everyone can play with the data the way they want.
While at it - make this code slightly more robust by making the required verification on the offsets / length in the write handler.
--- drivers/net/wireless/iwlwifi/mvm/debugfs.c | 49 ++++++++++++---------------- 1 file changed, 21 insertions(+), 28 deletions(-)
drivers/net/wireless/iwlwifi/mvm/debugfs.c +21 -28
@@ -123,51 +123,31 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file, char __user *user_buf, {struct iwl_mvm *mvm = file->private_data;const struct fw_img *img; -int ofs, len, pos =0 ; -size_t bufsz, ret; -char *buf; +unsigned int ofs, len; +size_t ret;u8 *ptr;if (!mvm->ucode_loaded)return -EINVAL ;/* default is to dump the entire data segment */ + img = &mvm->fw->img[mvm->cur_ucode]; + ofs = img->sec[IWL_UCODE_SECTION_DATA ].offset; + len = img->sec[IWL_UCODE_SECTION_DATA ].len; +if (!mvm->dbgfs_sram_offset && !mvm->dbgfs_sram_len) { - img = &mvm->fw->img[mvm->cur_ucode]; - ofs = img->sec[IWL_UCODE_SECTION_DATA ].offset; - len = img->sec[IWL_UCODE_SECTION_DATA ].len; - }else { ofs = mvm->dbgfs_sram_offset; len = mvm->dbgfs_sram_len; } - bufsz = len *4 +256 ; - buf =kzalloc (bufsz,GFP_KERNEL ); -if (!buf) -return -ENOMEM ; - ptr =kzalloc (len,GFP_KERNEL ); -if (!ptr) { -kfree (buf); +if (!ptr)return -ENOMEM ; - } - - pos +=scnprintf (buf + pos, bufsz - pos,"sram_len: 0x%x\n" , len); - pos +=scnprintf (buf + pos, bufsz - pos,"sram_offset: 0x%x\n" , ofs);iwl_trans_read_mem_bytes (mvm->trans, ofs, ptr, len); -for (ofs =0 ; ofs < len; ofs +=16 ) { - pos +=scnprintf (buf + pos, bufsz - pos,"0x%.4x " , ofs); -hex_dump_to_buffer (ptr + ofs,16 ,16 ,1 , buf + pos, - bufsz - pos, false); - pos +=strlen (buf + pos); -if (bufsz - pos >0 ) - buf[pos++] ='\n' ; - } - ret =simple_read_from_buffer (user_buf, count, ppos, buf, pos); + ret =simple_read_from_buffer (user_buf, count, ppos, ptr, len); -kfree (buf);kfree (ptr);return ret;
@@ -176,11 +156,24 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file, char __user *user_buf,static ssize_t iwl_dbgfs_sram_write (struct iwl_mvm *mvm,char *buf,size_t count,loff_t *ppos) { +const struct fw_img *img;u32 offset, len; +u32 img_offset, img_len; + +if (!mvm->ucode_loaded) +return -EINVAL ; + + img = &mvm->fw->img[mvm->cur_ucode]; + img_offset = img->sec[IWL_UCODE_SECTION_DATA ].offset; + img_len = img->sec[IWL_UCODE_SECTION_DATA ].len;if (sscanf (buf,"%x,%x" , &offset, &len) ==2 ) {if ((offset &0x3 ) || (len &0x3 ))return -EINVAL ; + +if (offset + len > img_offset + img_len) +return -EINVAL ; + mvm->dbgfs_sram_offset = offset; mvm->dbgfs_sram_len = len; }else {
Signature · 1 line
1.7.9.5
PATCH 21/28 iwlwifi: mvm: squash a spurious warning on chnctx change
In reply to Emmanuel GrumbachFrom: Arik Nemtsov <[email protected]>
If the channel min-width changes, we can update the PHY ctx, even if it has multiple references.
--- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/mac80211.c +2 -1
@@ -1649,7 +1649,8 @@ static void iwl_mvm_change_chanctx(struct ieee80211_hw *hw,if (WARN_ONCE ((phy_ctxt->ref >1 ) && (changed & ~(IEEE80211_CHANCTX_CHANGE_WIDTH |IEEE80211_CHANCTX_CHANGE_RX_CHAINS | -IEEE80211_CHANCTX_CHANGE_RADAR )), +IEEE80211_CHANCTX_CHANGE_RADAR | +IEEE80211_CHANCTX_CHANGE_MIN_WIDTH )),"Cannot change PHY. Ref=%d, changed=0x%X\n" , phy_ctxt->ref, changed))return ;
Signature · 1 line
1.7.9.5
PATCH 22/28 iwlwifi: mvm: Add a missed beacons threshold
In reply to Emmanuel GrumbachFrom: Ilan Peer <[email protected]>
Instead of always calling ieee80211_beacon_loss() on every missed beacons notification, call this function only if the number of consecutive missed beacons from last rx is higher than a predefined threshold.
--- drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 25 ++++++++++++++++++++----- drivers/net/wireless/iwlwifi/mvm/mvm.h | 1 + 2 files changed, 21 insertions(+), 5 deletions(-)
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +20 -5
@@ -1191,10 +1191,18 @@ int iwl_mvm_rx_beacon_notif(struct iwl_mvm *mvm,static void iwl_mvm_beacon_loss_iterator (void *_data,u8 *mac,struct ieee80211_vif *vif) { -u16 *id = _data; +struct iwl_missed_beacons_notif *missed_beacons = _data;struct iwl_mvm_vif *mvmvif =iwl_mvm_vif_from_mac80211 (vif); -if (mvmvif->id == *id) +if (mvmvif->id != (u16 )le32_to_cpu (missed_beacons->mac_id)) +return ; + +/* +* TODO: the threshold should be adjusted based on latency conditions, +* and/or in case of a CS flow on one of the other AP vifs. +*/ +if (le32_to_cpu (missed_beacons->consec_missed_beacons_since_last_rx) > +IWL_MVM_MISSED_BEACONS_THRESHOLD )ieee80211_beacon_loss (vif); }
@@ -1203,12 +1211,19 @@ int iwl_mvm_rx_missed_beacons_notif(struct iwl_mvm *mvm, struct iwl_device_cmd *cmd) {struct iwl_rx_packet *pkt =rxb_addr (rxb); -struct iwl_missed_beacons_notif *missed_beacons = (void *)pkt->data; -u16 id = (u16 )le32_to_cpu (missed_beacons->mac_id); +struct iwl_missed_beacons_notif *mb = (void *)pkt->data; + +IWL_DEBUG_INFO (mvm, +"missed bcn mac_id=%u, consecutive=%u (%u, %u, %u)\n" , +le32_to_cpu (mb->mac_id), +le32_to_cpu (mb->consec_missed_beacons), +le32_to_cpu (mb->consec_missed_beacons_since_last_rx), +le32_to_cpu (mb->num_recvd_beacons), +le32_to_cpu (mb->num_expected_beacons));ieee80211_iterate_active_interfaces_atomic (mvm->hw,IEEE80211_IFACE_ITER_NORMAL , iwl_mvm_beacon_loss_iterator, - &id); + mb);return 0 ; }
drivers/net/wireless/iwlwifi/mvm/mvm.h +1 -0
@@ -81,6 +81,7 @@#define IWL_MVM_MAX_ADDRESSES 5/* RSSI offset for WkP */ #define IWL_RSSI_OFFSET 50 +#define IWL_MVM_MISSED_BEACONS_THRESHOLD 8enum iwl_mvm_tx_fifo {IWL_MVM_TX_FIFO_BK =0 ,
Signature · 1 line
1.7.9.5
PATCH 23/28 iwlwifi: pcie: Fix CSR_RESET operation access type
In reply to Emmanuel GrumbachFrom: Eran Harary <[email protected]>
The access to the CSR_RESET reg should be done as a complete DWORD and not by setting a bit. This is the right way to reset the device.
--- drivers/net/wireless/iwlwifi/pcie/trans.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +1 -1
@@ -779,7 +779,7 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans) }/* Reset the entire device */ -iwl_set_bit (trans,CSR_RESET ,CSR_RESET_REG_FLAG_SW_RESET ); +iwl_write32 (trans,CSR_RESET ,CSR_RESET_REG_FLAG_SW_RESET );usleep_range (10 ,15 );
Signature · 1 line
1.7.9.5
PATCH 24/28 iwlwifi: mvm: change the parameters for calculating an AP TBTT
In reply to Emmanuel GrumbachFrom: Ilan Peer <[email protected]>
Change the parameters for calculating an AP TBTT to 64/36 instead of 80/20, to increase the interval between a station vif and an AP vif TBTT events.
--- drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +1 -1
@@ -1012,7 +1012,7 @@ static void iwl_mvm_mac_ctxt_cmd_fill_ap(struct iwl_mvm *mvm, iwl_mvm_mac_ap_iterator, &data);if (data.beacon_device_ts) { -u32 rand = (prandom_u32 () % (80 -20 )) +20 ; +u32 rand = (prandom_u32 () % (64 -36 )) +36 ; mvmvif->ap_beacon_time = data.beacon_device_ts +ieee80211_tu_to_usec (data.beacon_int * rand /100 );
Signature · 1 line
1.7.9.5
PATCH 25/28 iwlwifi: mvm: dynamically update tsf_id
In reply to Emmanuel GrumbachFrom: Ilan Peer <[email protected]>
Currently, the MAC context tsf_id assignment and the master/slave relations are determined only when a new vif is added, as part of the MAC context resource allocation. However, at this stage, the beacon interval is not known, and thus could not be taken into account in the master-slave algorithm.
To fix this, recalculate the MAC context tsf_id assignment, just before the MAC context is activated, i.e., just before a station VMAC is configured to associated and before an AP VMAC is started.
--- drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 104 +++++++++++++++++++-------- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 15 ++++ drivers/net/wireless/iwlwifi/mvm/mvm.h | 2 + 3 files changed, 91 insertions(+), 30 deletions(-)
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +74 -30
@@ -85,35 +85,15 @@ struct iwl_mvm_mac_iface_iterator_data {bool found_vif; }; -static void iwl_mvm_mac_iface_iterator (void *_data,u8 *mac, -struct ieee80211_vif *vif) +static void iwl_mvm_mac_tsf_id_iter (void *_data,u8 *mac, +struct ieee80211_vif *vif) {struct iwl_mvm_mac_iface_iterator_data *data = _data;struct iwl_mvm_vif *mvmvif =iwl_mvm_vif_from_mac80211 (vif); -u32 ac; -/* Iterator may already find the interface being added -- skip it */ -if (vif == data->vif) { - data->found_vif = true; +/* Skip the interface for which we are trying to assign a tsf_id */ +if (vif == data->vif)return ; - } - -/* Mark the queues used by the vif */ -for (ac =0 ; ac <IEEE80211_NUM_ACS ; ac++) -if (vif->hw_queue[ac] !=IEEE80211_INVAL_HW_QUEUE ) -__set_bit (vif->hw_queue[ac], data->used_hw_queues); - -if (vif->cab_queue !=IEEE80211_INVAL_HW_QUEUE ) -__set_bit (vif->cab_queue, data->used_hw_queues); - -/* -* Mark MAC IDs as used by clearing the available bit, and -* (below) mark TSFs as used if their existing use is not -* compatible with the new interface type. -* No locking or atomic bit operations are needed since the -* data is on the stack of the caller function. -*/ -__clear_bit (mvmvif->id, data->available_mac_ids);/* * The TSF is a hardware/firmware resource, there are 4 and
@@ -135,21 +115,26 @@ static void iwl_mvm_mac_iface_iterator(void *_data, u8 *mac,case NL80211_IFTYPE_STATION :/* * The new interface is client, so if the existing one -* we're iterating is an AP, the TSF should be used to +* we're iterating is an AP, and both interfaces have the +* same beacon interval, the same TSF should be used to * avoid drift between the new client and existing AP, * the existing AP will get drift updates from the new * client context in this case */ if (vif->type ==NL80211_IFTYPE_AP ) {if (data->preferred_tsf ==NUM_TSF_IDS && -test_bit (mvmvif->tsf_id, data->available_tsf_ids)) +test_bit (mvmvif->tsf_id, data->available_tsf_ids) && + (vif->bss_conf.beacon_int == + data->vif->bss_conf.beacon_int)) { data->preferred_tsf = mvmvif->tsf_id; -return ; +return ; + } }break ;case NL80211_IFTYPE_AP :/* -* The new interface is AP/GO, so should get drift +* The new interface is AP/GO, so in case both interfaces +* have the same beacon interval, it should get drift * updates from an existing client or use the same * TSF as an existing GO. There's no drift between * TSFs internally but if they used different TSFs
@@ -159,9 +144,12 @@ static void iwl_mvm_mac_iface_iterator(void *_data, u8 *mac,if (vif->type ==NL80211_IFTYPE_STATION || vif->type ==NL80211_IFTYPE_AP ) {if (data->preferred_tsf ==NUM_TSF_IDS && -test_bit (mvmvif->tsf_id, data->available_tsf_ids)) +test_bit (mvmvif->tsf_id, data->available_tsf_ids) && + (vif->bss_conf.beacon_int == + data->vif->bss_conf.beacon_int)) { data->preferred_tsf = mvmvif->tsf_id; -return ; +return ; + } }break ;default :
@@ -187,6 +175,39 @@ static void iwl_mvm_mac_iface_iterator(void *_data, u8 *mac, data->preferred_tsf =NUM_TSF_IDS ; } +static void iwl_mvm_mac_iface_iterator (void *_data,u8 *mac, +struct ieee80211_vif *vif) +{ +struct iwl_mvm_mac_iface_iterator_data *data = _data; +struct iwl_mvm_vif *mvmvif =iwl_mvm_vif_from_mac80211 (vif); +u32 ac; + +/* Iterator may already find the interface being added -- skip it */ +if (vif == data->vif) { + data->found_vif = true; +return ; + } + +/* Mark the queues used by the vif */ +for (ac =0 ; ac <IEEE80211_NUM_ACS ; ac++) +if (vif->hw_queue[ac] !=IEEE80211_INVAL_HW_QUEUE ) +__set_bit (vif->hw_queue[ac], data->used_hw_queues); + +if (vif->cab_queue !=IEEE80211_INVAL_HW_QUEUE ) +__set_bit (vif->cab_queue, data->used_hw_queues); + +/* Mark MAC IDs as used by clearing the available bit, and +* (below) mark TSFs as used if their existing use is not +* compatible with the new interface type. +* No locking or atomic bit operations are needed since the +* data is on the stack of the caller function. +*/ +__clear_bit (mvmvif->id, data->available_mac_ids); + +/* find a suitable tsf_id */ +iwl_mvm_mac_tsf_id_iter (_data, mac, vif); +} +/* * Get the mask of the queus used by the vif */
@@ -205,6 +226,29 @@ u32 iwl_mvm_mac_get_queues_mask(struct iwl_mvm *mvm,return qmask; } +void iwl_mvm_mac_ctxt_recalc_tsf_id (struct iwl_mvm *mvm, +struct ieee80211_vif *vif) +{ +struct iwl_mvm_vif *mvmvif =iwl_mvm_vif_from_mac80211 (vif); +struct iwl_mvm_mac_iface_iterator_data data = { + .mvm = mvm, + .vif = vif, + .available_tsf_ids = { (1 <<NUM_TSF_IDS ) -1 }, +/* no preference yet */ + .preferred_tsf =NUM_TSF_IDS , + }; + +ieee80211_iterate_active_interfaces_atomic ( + mvm->hw,IEEE80211_IFACE_ITER_RESUME_ALL , + iwl_mvm_mac_tsf_id_iter, &data); + +if (data.preferred_tsf !=NUM_TSF_IDS ) + mvmvif->tsf_id = data.preferred_tsf; +else if (!test_bit (mvmvif->tsf_id, data.available_tsf_ids)) + mvmvif->tsf_id =find_first_bit (data.available_tsf_ids, +NUM_TSF_IDS ); +} +static int iwl_mvm_mac_ctxt_allocate_resources (struct iwl_mvm *mvm,struct ieee80211_vif *vif) {
drivers/net/wireless/iwlwifi/mvm/mac80211.c +15 -0
@@ -866,6 +866,14 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,struct iwl_mvm_vif *mvmvif =iwl_mvm_vif_from_mac80211 (vif);int ret; +/* +* Re-calculate the tsf id, as the master-slave relations depend on the +* beacon interval, which was not known when the station interface was +* added. +*/ +if (changes &BSS_CHANGED_ASSOC && bss_conf->assoc) +iwl_mvm_mac_ctxt_recalc_tsf_id (mvm, vif); + ret =iwl_mvm_mac_ctxt_changed (mvm, vif);if (ret)IWL_ERR (mvm,"failed to update MAC %pM\n" , vif->addr);
@@ -979,6 +987,13 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,if (ret) goto out_unlock; +/* +* Re-calculate the tsf id, as the master-slave relations depend on the +* beacon interval, which was not known when the AP interface was added. +*/ +if (vif->type ==NL80211_IFTYPE_AP ) +iwl_mvm_mac_ctxt_recalc_tsf_id (mvm, vif); +/* Add the mac context */ ret =iwl_mvm_mac_ctxt_add (mvm, vif);if (ret)
drivers/net/wireless/iwlwifi/mvm/mvm.h +2 -0
@@ -712,6 +712,8 @@ int iwl_mvm_rx_beacon_notif(struct iwl_mvm *mvm,int iwl_mvm_rx_missed_beacons_notif (struct iwl_mvm *mvm,struct iwl_rx_cmd_buffer *rxb,struct iwl_device_cmd *cmd); +void iwl_mvm_mac_ctxt_recalc_tsf_id (struct iwl_mvm *mvm, +struct ieee80211_vif *vif);/* Bindings */ int iwl_mvm_binding_add_vif (struct iwl_mvm *mvm,struct ieee80211_vif *vif);
Signature · 1 line
1.7.9.5
PATCH 26/28 iwlwifi: mvm: rs: fix a potential NULL deref
In reply to Emmanuel GrumbachFrom: Eyal Shapira <[email protected]>
Found by klocwork analysis.
mvm could be NULL which may cause a NULL dereference in a theoretical call flow
rs_fill_lq_cmd(mvm = NULL, ...)rs_build_rates_tablers_fill_rates_for_columnucode_rate_from_rs_rateIWL_ERR(mvm,...)
No real reason for passing NULL to rs_fill_lq_cmd so fix that.
--- drivers/net/wireless/iwlwifi/mvm/rs.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/net/wireless/iwlwifi/mvm/rs.c +3 -4
@@ -2121,7 +2121,7 @@ static void rs_initialize_lq(struct iwl_mvm *mvm, tbl->column =RS_COLUMN_LEGACY_ANT_B ;rs_set_expected_tpt_table (lq_sta, tbl); -rs_fill_lq_cmd (NULL ,NULL , lq_sta, rate); +rs_fill_lq_cmd (mvm, sta, lq_sta, rate);/* TODO restore station should remember the lq cmd */ iwl_mvm_send_lq_cmd (mvm, &lq_sta->lq, init); }
@@ -2448,8 +2448,7 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,memcpy (&rate, initial_rate,sizeof (rate)); -if (mvm) - valid_tx_ant =iwl_fw_valid_tx_ant (mvm->fw); + valid_tx_ant =iwl_fw_valid_tx_ant (mvm->fw);if (is_siso (&rate)) { num_rates =RS_INITIAL_SISO_NUM_RATES ;
@@ -2623,7 +2622,7 @@ static void rs_program_fix_rate(struct iwl_mvm *mvm,struct rs_rate rate;rs_rate_from_ucode_rate (lq_sta->dbg_fixed_rate, lq_sta->band, &rate); -rs_fill_lq_cmd (NULL ,NULL , lq_sta, &rate); +rs_fill_lq_cmd (mvm,NULL , lq_sta, &rate);iwl_mvm_send_lq_cmd (lq_sta->drv, &lq_sta->lq, false); } }
Signature · 1 line
1.7.9.5
PATCH 27/28 iwlwifi: Update Copyright to 2014
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
Happy new year!
--- drivers/net/wireless/iwlwifi/dvm/agn.h | 4 ++-- drivers/net/wireless/iwlwifi/dvm/calib.c | 4 ++-- drivers/net/wireless/iwlwifi/dvm/calib.h | 4 ++-- drivers/net/wireless/iwlwifi/dvm/commands.h | 4 ++-- drivers/net/wireless/iwlwifi/dvm/debugfs.c | 2 +- drivers/net/wireless/iwlwifi/dvm/dev.h | 2 +- drivers/net/wireless/iwlwifi/dvm/devices.c | 2 +- drivers/net/wireless/iwlwifi/dvm/led.c | 2 +- drivers/net/wireless/iwlwifi/dvm/led.h | 2 +- drivers/net/wireless/iwlwifi/dvm/lib.c | 2 +- drivers/net/wireless/iwlwifi/dvm/mac80211.c | 2 +- drivers/net/wireless/iwlwifi/dvm/main.c | 2 +- drivers/net/wireless/iwlwifi/dvm/power.c | 2 +- drivers/net/wireless/iwlwifi/dvm/power.h | 2 +- drivers/net/wireless/iwlwifi/dvm/rs.c | 2 +- drivers/net/wireless/iwlwifi/dvm/rs.h | 2 +- drivers/net/wireless/iwlwifi/dvm/rx.c | 2 +- drivers/net/wireless/iwlwifi/dvm/rxon.c | 2 +- drivers/net/wireless/iwlwifi/dvm/scan.c | 2 +- drivers/net/wireless/iwlwifi/dvm/sta.c | 2 +- drivers/net/wireless/iwlwifi/dvm/tt.c | 2 +- drivers/net/wireless/iwlwifi/dvm/tt.h | 2 +- drivers/net/wireless/iwlwifi/dvm/tx.c | 2 +- drivers/net/wireless/iwlwifi/dvm/ucode.c | 2 +- drivers/net/wireless/iwlwifi/iwl-1000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-2000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-5000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-6000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-7000.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-agn-hw.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-config.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-csr.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-debug.h | 2 +- drivers/net/wireless/iwlwifi/iwl-devtrace.c | 2 +- drivers/net/wireless/iwlwifi/iwl-devtrace.h | 2 +- drivers/net/wireless/iwlwifi/iwl-drv.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-drv.h | 6 +++--- drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-eeprom-read.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-eeprom-read.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-fh.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-fw-file.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-fw.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-io.c | 2 +- drivers/net/wireless/iwlwifi/iwl-io.h | 2 +- drivers/net/wireless/iwlwifi/iwl-modparams.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-notif-wait.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-notif-wait.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-nvm-parse.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-nvm-parse.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-op-mode.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-phy-db.c | 4 ++-- drivers/net/wireless/iwlwifi/iwl-phy-db.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-prph.h | 4 ++-- drivers/net/wireless/iwlwifi/iwl-trans.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/binding.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/bt-coex.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/constants.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/d3.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/debugfs.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/debugfs.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-d3.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-power.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-rs.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-sta.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw-api.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/fw.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/led.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/mvm.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/nvm.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/ops.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/power.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/power_legacy.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/quota.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/rs.c | 2 +- drivers/net/wireless/iwlwifi/mvm/rs.h | 2 +- drivers/net/wireless/iwlwifi/mvm/rx.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/scan.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/sf.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/sta.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/sta.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/testmode.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/time-event.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/time-event.h | 4 ++-- drivers/net/wireless/iwlwifi/mvm/tt.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/tx.c | 4 ++-- drivers/net/wireless/iwlwifi/mvm/utils.c | 4 ++-- drivers/net/wireless/iwlwifi/pcie/drv.c | 4 ++-- drivers/net/wireless/iwlwifi/pcie/internal.h | 2 +- drivers/net/wireless/iwlwifi/pcie/rx.c | 2 +- drivers/net/wireless/iwlwifi/pcie/trans.c | 4 ++-- drivers/net/wireless/iwlwifi/pcie/tx.c | 2 +- 101 files changed, 169 insertions(+), 169 deletions(-)
drivers/net/wireless/iwlwifi/dvm/agn.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/dvm/calib.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/dvm/calib.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/dvm/commands.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/dvm/debugfs.c +1 -1
@@ -2,7 +2,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/dev.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/devices.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/led.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/led.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/lib.c +1 -1
@@ -2,7 +2,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/mac80211.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/main.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/power.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/power.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/rs.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/rs.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/rx.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portionhelp of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/rxon.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/scan.c +1 -1
@@ -2,7 +2,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/sta.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/tt.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/tt.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/dvm/tx.c +1 -1
@@ -2,7 +2,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/dvm/ucode.c +1 -1
@@ -2,7 +2,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-1000.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-2000.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-5000.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-6000.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-7000.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-agn-hw.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-config.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-csr.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-debug.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project. *
drivers/net/wireless/iwlwifi/iwl-devtrace.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2009 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2009 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-devtrace.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2009 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2009 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/iwl-drv.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-drv.h +3 -3
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@/* for all modules */ #define DRV_NAME "iwlwifi"#define IWLWIFI_VERSION "in-tree:" -#define DRV_COPYRIGHT "Copyright(c) 2003-2013 Intel Corporation" +#define DRV_COPYRIGHT "Copyright(c) 2003- 2014 Intel Corporation"#define DRV_AUTHOR "<[email protected]>"
drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-eeprom-read.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-eeprom-read.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-fh.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-fw-file.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-fw.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-io.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project. *
drivers/net/wireless/iwlwifi/iwl-io.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project. *
drivers/net/wireless/iwlwifi/iwl-modparams.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-notif-wait.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-notif-wait.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-nvm-parse.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-nvm-parse.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-op-mode.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-phy-db.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-phy-db.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-prph.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/iwl-trans.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/binding.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/bt-coex.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/constants.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/d3.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/debugfs.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/debugfs.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-d3.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-power.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-rs.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-sta.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw-api.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/fw.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/led.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/mac80211.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/mvm.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/nvm.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/ops.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/power.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/power_legacy.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/quota.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/rs.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/mvm/rs.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as
drivers/net/wireless/iwlwifi/mvm/rx.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/scan.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/sf.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/sta.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/sta.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/testmode.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/time-event.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/time-event.h +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/tt.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/tx.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/mvm/utils.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/pcie/drv.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/pcie/internal.h +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/pcie/rx.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
drivers/net/wireless/iwlwifi/pcie/trans.c +2 -2
@@ -5,7 +5,7 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without
drivers/net/wireless/iwlwifi/pcie/tx.c +1 -1
@@ -1,6 +1,6 @@/****************************************************************************** * -* Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. +* Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. * * Portions of this file are derived from the ipw3945 project, as well * as portions of the ieee80211 subsystem header files.
Signature · 1 line
1.7.9.5
PATCH 28/28 iwlwifi: mvm: fix coccinelle warnings
In reply to Emmanuel GrumbachFrom: Fengguang Wu <[email protected]>
drivers/net/wireless/iwlwifi/mvm/led.c:106:2-3: Unneeded semicolon
Removes unneeded semicolon.
Generated by: coccinelle/misc/semicolon.cocci
--- drivers/net/wireless/iwlwifi/mvm/led.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/led.c +1 -1
@@ -103,7 +103,7 @@ int iwl_mvm_leds_init(struct iwl_mvm *mvm)return 0 ;default :return -EINVAL ; - }; + } mvm->led.name =kasprintf (GFP_KERNEL ,"%s-led" ,wiphy_name (mvm->hw->wiphy));
Signature · 1 line
1.7.9.5
Quoted 20 lines · Emmanuel Grumbach
Hi John,
This is probably the last pull request for 3.14.
I have here a rework of the interrupt handling to meet RT kernel requirements - basically we don't take any lock in the primary interrupt handler. This gave me a good reason to clean things up a bit on the way. There is also a fix of the QoS mapping along with a few workarounds for hardware / firmware issues that are hard to hit.
Three fixes suggested by static analyzers, and other various stuff. Most importantly, I update the Copyright note to include the new year.I know it is quite late in the cycle (and probably not the best period to expect responsiveness:)) but I want to hope that this it will still make it to 3.14.
The following changes since commit
cf4ef65446443eb485afe9419ea82b2efbe582a7:iwlwifi: mvm: rs: fix variable shadowing (2013-12-17 22:32:57 +0200)
Quoted 8 lines
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next.git
for-johnfor you to fetch changes up to
14648d6534477952633ee3ecadb31cf227414f13:iwlwifi: mvm: fix coccinelle warnings (2013-12-31 19:03:53 +0200)
Pulling now...
Signature · 2 lines
John W. Linville Someday the world will need a hero, and you [email protected] might be all we have. Be ready.