1. 08 12月, 2009 8 次提交
    • L
      mwl8k: increase firmware loading timeouts · 89b872e2
      Lennert Buytenhek 提交于
      The time between loading the helper image and starting to upload the
      main firmware image should be at least 5 ms or so.  We were doing an
      msleep(1) before, and 1 ms appears to not be enough in almost all
      cases, but building with HZ=100 has always masked this so far.  Bumping
      the msleep argument to 5 fixes firmware loading e.g. when HZ=1000.
      
      Some firmware images need more than 200ms to initialize.  Bump the
      ready code timeout to 500ms to accommodate for this.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      89b872e2
    • L
      mwl8k: allow more time for transmit rings to drain · 7e1112d3
      Lennert Buytenhek 提交于
      Before issuing any firmware commands, we wait for the transmit rings
      to drain, to prevent control versus data path synchronization issues.
      In some cases, this can end up taking longer than the current hardcoded
      limit of 5 seconds, for example if the transmit rings are filled with
      packets for a host that has dropped off the air and we end up
      retransmitting every pending packet at the lowest rate a couple of
      times.
      
      This patch changes mwl8k_tx_wait_empty() to only bail out on timeout
      expiry if there was no change in the number of packets pending in the
      transmit rings during the waiting period.  If at least one transmit
      ring entry was reclaimed while we were waiting, we are apparently still
      making progress, and we'll allow waiting for another timeout period.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      7e1112d3
    • L
      mwl8k: allow more time for firmware commands to complete · 0c9cc640
      Lennert Buytenhek 提交于
      Some firmware commands can under some circumstances take more than 2
      seconds to complete.  This patch bumps the timeout up to 10 seconds,
      and prints a message whenever a command takes more than 2 seconds.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      0c9cc640
    • L
      mwl8k: properly report rate on received 40MHz packets · 8e9f33f0
      Lennert Buytenhek 提交于
      On 8366, bit 6 in the rx descriptor rate field indicates whether the
      packet was received on a 20MHz or 40MHz channel, and is not part of
      the MCS index.  Handle this properly, which then prevents hitting the
      WARN_ON and being dropped in ieee80211_rx().
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      8e9f33f0
    • L
      mwl8k: fix addr4 zeroing and payload overwrite on DMA header creation · ca009301
      Lennert Buytenhek 提交于
      When inserting a DMA header into a packet for transmission,
      mwl8k_add_dma_header() would blindly zero the addr4 field, which
      is not a good idea if the packet being transmitted is actually a
      4-address packet.
      
      Also, if the transmitted packet was a 4-address with QoS packet,
      the memmove() to do the needed header reshuffling would inadvertently
      overwrite the first two bytes of the packet payload with the QoS field.
      
      This fixes both of these issues.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      ca009301
    • L
      mwl8k: prevent corruption of QoS field on receive · 20f09c3d
      Lennert Buytenhek 提交于
      Packets exchanged between the mwl8k driver and the firmware always
      have a 4-address header without QoS field.  For QoS packets, the QoS
      field is passed to/from the firmware via the tx/rx descriptors.
      
      We were handling this correctly on transmit, but not on receive -- if
      a QoS packet was received, we would leave garbage in the QoS field in
      the packet passed up to the stack, which is Bad(tm).
      
      Also, if the packet received on the air was a 4-address without QoS
      packet, we would forget to skb_pull the 2-byte DMA length prefix off.
      
      This patch adds an argument to the ->rxd_process() receive descriptor
      operation to retrieve the QoS field from the receive descriptor, and
      extends mwl8k_remove_dma_header() to insert this field back into the
      packet if the packet received is a QoS packet.  It also fixes
      mwl8k_remove_dma_header() to strip off the length prefix in all cases.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      20f09c3d
    • L
      mwl8k: fix UPDATE_STADB command struct legacy_rates array length · 140eb5e2
      Lennert Buytenhek 提交于
      There exist 12 802.11b/g rates, but mwl8k supports two additional
      (non-standard) rates, and includes those rates in rate bitmasks and
      in its internal rate table that hardware rate indices index.
      
      Commit "mwl8k: report rate and other information for received frames"
      added one of the nonstandard rates to the mwl8k_rates table to make
      the OFDM rates in the table line up with the rate indices that are
      reported in the receive descriptor (so that we can just simply copy
      the receive descriptor rate index into ieee80211_rx_status::rate_idx)
      and bumped MWL8K_IEEE_LEGACY_DATA_RATES from 12 to 13, but this
      screwed up the UPDATE_STADB command struct layout, as it also uses
      that define, for its legacy_rates array.
      
      To avoid having to convert rate indices and legacy rate bitmaps (e.g.
      ieee80211_bss_conf::basic_rates) between the 12-rate mac80211 format
      and the 14-rate mwl8k format, we'll report all 14 rates in our wiphy's
      band, but filter out the nonstandard ones e.g. in the case of the
      UPDATE_STADB command which only accepts 12 rates.
      
      In the commands that accept 14 rates (SET_AID, SET_RATE), replace the
      use of the MWL8K_RATE_INDEX_MAX_ARRAY define in the command struct by
      the constant 14, to make it clearer that these commands accept 14 rates.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      140eb5e2
    • L
      mwl8k: fix MCS bitmap size in SET_RATE command · 0b5351a8
      Lennert Buytenhek 提交于
      The MCS bitmaps in the SET_RATE command structure were of the wrong
      size, due to use of the wrong define for the array length.  Just
      hardcode the lengths as 16, and do the same for the MCS bitmaps in
      other command structures.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      0b5351a8
  2. 19 11月, 2009 1 次提交
  3. 12 11月, 2009 1 次提交
  4. 07 11月, 2009 15 次提交
  5. 05 11月, 2009 14 次提交
  6. 29 8月, 2009 1 次提交