1. 01 7月, 2016 1 次提交
    • S
      iwlwifi: pcie: workaround HW shadow registers bug · 1316d595
      Sara Sharon 提交于
      Integrated 9000 devices have a bug with shadow registers
      value retention.
      If driver writes RBD registers while MAC is asleep the
      values are stored in shadow registers to be copied whenever
      MAC wakes up.
      However, in 9000 devices a MAC wakeup is not triggered
      and when the bus powers down due to inactivity the shadow
      values and dirty bits are lost.
      Turn on the chicken-bits that cause MAC wakeup for RX-related
      values as well when the device is in D0.
      When the device is in low power mode turn the RX wakeup chicken
      bits off since driver is idle and this W/A is not needed.
      Remove previous W/A which was ineffective.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      1316d595
  2. 11 5月, 2016 5 次提交
  3. 30 3月, 2016 6 次提交
  4. 20 3月, 2016 1 次提交
  5. 07 3月, 2016 1 次提交
    • L
      iwlwifi: pcie: forbid RTPM on device removal · 4479a899
      Luca Coelho 提交于
      The pci driver keeps any unbound device in active state and forbids
      runtime PM.  When our driver gets probed, we take control of the
      state.  When the device is released (i.e. during unbind or module
      removal), we should return the state to what it was before.  To do so,
      we need to forbid RTPM in the driver remove op.
      
      Additionally, remove an unnecessary pm_runtime_disable() call, move
      the initial ref_count setting to a better place and add some comments
      explaining what is going on.
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      4479a899
  6. 28 2月, 2016 3 次提交
  7. 15 2月, 2016 2 次提交
    • A
      iwlwifi: pcie: fix erroneous return value · 20aa99bb
      Anton Protopopov 提交于
      The iwl_trans_pcie_start_fw() function may return the positive value EIO
      instead of -EIO in case of error.
      Signed-off-by: NAnton Protopopov <a.s.protopopov@gmail.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      20aa99bb
    • E
      iwlwifi: pcie: fix RF-Kill vs. firmware load race · a6bd005f
      Emmanuel Grumbach 提交于
      When we load the firmware, we hold trans_pcie->mutex to
      avoid nested flows. We also rely on the ISR to wake up the
      thread when the DMA has finished copying a chunk. During
      this flow, we enable the RF-Kill interrupt.
      
      The problem is that the RF-Kill interrupt handler can take
      the mutex and bring the device down. This means that if
      we load the firmware while the RF-Kill switch is enabled
      (which will happen when we load the INIT firmware to read
      the device's capabilities and register to mac80211), we
      may get an RF-Kill interrupt immediately and the ISR will
      be waiting for the mutex held by the thread that is
      currently loading the firmware. At this stage, the ISR
      won't be able to service the DMA's interrupt needed to
      wake up the thread that load the firmware. We are in a
      deadlock situation which ends when the thread that loads
      the firmware fails on timeout and releases the mutex.
      
      To fix this, take the mutex later in the flow, disable
      the interrupts and synchronize_irq() to give a chance to
      the RF-Kill interrupt to run and complete.
      After that, mask all the interrupts besides the DMA
      interrupt and proceed with firmware load. Make sure to
      check that there was no RF-Kill interrupt when the
      interrupts were disabled.
      
      This fixes https://bugzilla.kernel.org/show_bug.cgi?id=111361Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      a6bd005f
  8. 01 2月, 2016 4 次提交
  9. 31 1月, 2016 2 次提交
    • S
      iwlwifi: pcie: add 9000 series multi queue rx DMA support · 96a6497b
      Sara Sharon 提交于
      The 9000 series introduces several changes in the device
      DMA operation.
      As the device now supports multi-queue rx, several DMA channels
      should be configured.
      The flows of providing the device with the allocated RBDs now
      changes as well - the device maintains a separate table of used
      and free table.
      
      The hardware may use the free table to feed RBDs to any queue.
      This requires maintaing a shared table to map returned RBDs to
      the original RXB - for that purpose the VID is introduced - an
      internal identifier of the RB placed in the lower 12 bits and
      returned by HW in the used data.
      
      Another change is the support of 64 bit DMA address.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      96a6497b
    • S
      iwlwifi: pcie: add infrastructure for multi-queue rx · 78485054
      Sara Sharon 提交于
      The 9000 series devices will support multi rx queues.
      Current code has one static rx queue - change it to allocate
      a number of queues per the device capability (pre-9000 devices
      have the number of rx queues set to one).
      
      Subsequent generalizations are:
      
      Change the code to access an explicit numbered rx queue only
      when the queue number is known - when handling interrupt, when
      accessing the default queue and when iterating the queues.
      The rest of the functions will receive the rx queue as a pointer.
      
      Generalize the warning in allocation failure to consider the
      allocator status instead of a single rx queue status.
      
      Move the rx initial pool of memory buffers to be shared among
      all the queues and allocated to the default queue on init.
      Signed-off-by: NSara Sharon <sara.sharon@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      78485054
  10. 08 1月, 2016 2 次提交
  11. 21 12月, 2015 2 次提交
    • E
      iwlwifi: remove unused parameter from grab_nic_access · 23ba9340
      Emmanuel Grumbach 提交于
      All the callers used silent = false.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      23ba9340
    • E
      iwlwifi: pcie: build an A-MSDU using TSO core · 6eb5e529
      Emmanuel Grumbach 提交于
      When the op_mode sends an skb whose payload is bigger than
      MSS, PCIe will create an A-MSDU out of it. PCIe assumes
      that the skb that is coming from the op_mode can fit in one
      A-MSDU. It is the op_mode's responsibility to make sure
      that this guarantee holds.
      
      Additional headers need to be built for the subframes.
      The TSO core code takes care of the IP / TCP headers and
      the driver takes care of the 802.11 subframe headers.
      
      These headers are stored on a per-cpu page that is re-used
      for all the packets handled on that same CPU. Each skb
      holds a reference to that page and releases the page when
      it is reclaimed. When the page gets full, it is released
      and a new one is allocated.
      
      Since any SKB that doesn't go through the fast-xmit path
      of mac80211 will be segmented, we can assume here that the
      packet is not WEP / TKIP and has a proper SNAP header.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      6eb5e529
  12. 20 12月, 2015 2 次提交
  13. 13 12月, 2015 3 次提交
    • L
      iwlwifi: replace d0i3_mode and wowlan_d0i3 with more generic variables · b7282643
      Luca Coelho 提交于
      The d0i3_mode variable is used to distinguish between transports that
      handle d0i3 entry during suspend by themselves (i.e. the slave
      transports) and those which rely on the op_mode layer to do it.  The
      reason why the former do it by themselves is that they need to
      transition from d0i3 in runtime_suspend into d0i3 in system-wide
      suspend and this transition needs to happen before the op_mode's
      suspend flow is called.
      
      The wowlan_d0i3 element is also a bit confusing, because it just
      reflects the wowlan->any value for the trans to understand.  This is a
      bit unclear in the code and not generic enough for future use.
      
      To make it clearer and to generalize the platform power mode settings,
      introduce two variables to indicate the platform power management
      modes used by the transport.
      
      Additionally, in order not to take too big a step in one patch, treat
      this new variables semantically in the same way as the old d0i3_mode
      element, introducing a iwl_mvm_enter_d0i3_on_suspend() function to
      help with that.
      
      This commit also adds the foundation for a new concept where the
      firmware configuration state (i.e. D0, D3 or D0i3) is abstracted from
      the platform PM mode we are in (i.e. runtime suspend or system-wide
      suspend).
      Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      b7282643
    • S
      iwlwifi: update host command messages to new format · 39bdb17e
      Sharon Dvir 提交于
      Host commands now have a group id, express this in printed messages.
      Signed-off-by: NSharon Dvir <sharon.dvir@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      39bdb17e
    • E
      iwlwifi: pcie: allow the op_mode to block the tx queues · 0cd58eaa
      Emmanuel Grumbach 提交于
      In certain flows (see next patches), the op_mode may need to
      block the Tx queues for a short period. Provide an API for
      that. The transport is in charge of counting the number of
      times the queues are blocked since the op_mode may block the
      queues several times in a row before unblocking them.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      0cd58eaa
  14. 02 12月, 2015 1 次提交
  15. 26 11月, 2015 3 次提交
  16. 18 11月, 2015 1 次提交
  17. 25 10月, 2015 1 次提交