19 Nov, 2009

40 commits

  • The RX data contains the netdev, which is
    duplicated since we have the sdata, and the
    RX status pointer, which is duplicate since
    we have the skb. Remove those two fields to
    have fewer fields that depend on each other
    and simply load them as necessary.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • The reorder buffer handling is written in a quite
    peculiar style (especially comments) and also has
    a quirk where it invokes the entire reorder code
    in ieee80211_sta_manage_reorder_buf() for just a
    handful of lines in it with a special argument.

    Split out ieee80211_release_reorder_frames which
    can then be invoked from BAR handling and other
    reordering code, clean up code and comments and
    remove function arguments that are now unused from
    ieee80211_sta_manage_reorder_buf().

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When we receive a michael MIC failure report from the
    hardware we currently do not check whether it is actually
    reported on a frame that is destined to us. It shouldn't
    be possible to get a michael MIC failure report on other
    frames, but it also doesn't hurt to verify.

    Also, since we then don't need the station struct that
    early, move looking it up a bit later in the RX path.

    Finally, while at it, a few code cleanups in the area.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • The entire aggregation code currently operates on the
    hw pointer and station addresses, but that needs to
    change to make stations purely per-vif; As one step
    preparing for that make the aggregation code callable
    with the station, or by the combination of virtual
    interface and station address.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Instead of filtering by device, directly look up by sdata.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Check for AR5416 ver 1.0 before calibrating 3 chains
    for multi-chain. This is a WAR for calibration
    failure.

    Signed-off-by: Sujith
    Signed-off-by: John W. Linville

    Sujith
     
  • ATH9K_ANT_VARIABLE is the default diversity control used.
    Consequently ath9k_hw_decrease_chain_power() does nothing.
    ath9k_hw_setantennaswitch() is unused too.

    Also, gbeacon_rate is unused.

    Signed-off-by: Sujith
    Signed-off-by: John W. Linville

    Sujith
     
  • axq_linkbuf, axq_aggr_depth, axq_lastdsWithCTS and
    axq_gatingds are unused.

    Signed-off-by: Sujith
    Signed-off-by: John W. Linville

    Sujith
     
  • * Remove a code chunk dealing with operating mode changes.
    As noted, all such policy changes are to be done in
    add_interface.

    * Remove pointless check for empty BSSID.
    Also, remove mode checks - mac80211 does all the needed checks.

    * Handle enabling/disabling beacon transmission properly.

    * Handle beacon interval changes for AP mode.
    The original code depended on config_interface() to update
    the HW TSF. Since that callback has been removed, handle
    it properly.

    * Remove unneeded code dealing with key/privacy.

    * Set the chainmasks to 1x1 for IBSS when the BSSID is set.
    This was happening uncondionally before.

    Signed-off-by: Sujith
    Signed-off-by: John W. Linville

    Sujith
     
  • This patch removes the need for separately allocated private tx info
    data in ath9k and brings the driver one small step closer to using the
    mac80211 rate control API properly.

    Signed-off-by: Felix Fietkau
    Signed-off-by: John W. Linville

    Felix Fietkau
     
  • Signed-off-by: Felix Fietkau
    Signed-off-by: John W. Linville

    Felix Fietkau
     
  • In order to handle association and authentication in AP mode,
    hostapd needs access to the tx status info of its own frames
    through a cooked monitor interface. Without this patch the
    cooked monitor interfaces also passed on tx status information
    for packets from other virtual interfaces. This creates a
    significant performance issue on embedded system. Hostapd
    tries to work around this by installing a Linux Socket Filter
    that only captures the frames it's interested in, however
    data duplication and socket filter matching still uses up
    enough CPU cycles to be very noticeable on small systems.
    This patch ensures that tx status information of non-injected
    frames does not make it to cooked monitor interfaces.

    Signed-off-by: Felix Fietkau
    Signed-off-by: John W. Linville

    Felix Fietkau
     
  • This patch enables the driver to process all incoming
    dupofdm-modulated frames when operating in HT40 mode.

    Signed-off-by: Christian Lamparter
    Signed-off-by: John W. Linville

    Christian Lamparter
     
  • Also regroup CSR_EEPROM and CSR_OTP bit field definitions.

    Signed-off-by: Ben Cahill
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Ben Cahill
     
  • Using the new mac80211 functionality, this makes
    iwlwifi handle unicast PS buffering correctly.
    The device works like this:

    * when a station goes to sleep, the microcode notices
    this and marks the station as asleep
    * when the station is marked asleep, the microcode
    refuses to transmit to the station and rejects all
    frames queued to it with the failure status code
    TX_STATUS_FAIL_DEST_PS (a previous patch handled
    this correctly)
    * when we need to send frames to the station _although_
    it is asleep, we need to tell the ucode how many,
    and this is asynchronous with sending so we cannot
    just send the frames, we need to wait for all other
    frames to be flushed, and then update the counter
    before sending out the poll response frames. This
    is handled partially in the driver and partially in
    mac80211.

    In order to do all this correctly, we need to
    * keep track of how many frames are pending for each
    associated client station (avoid doing it for other
    stations to avoid the atomic ops)
    * tell mac80211 that we driver-block the PS status
    while there are still frames pending on the queues,
    and once they are all rejected (due to the dest sta
    being in PS) unblock mac80211

    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This field was marked as reserved before since we didn't
    use it, but is present in all released firmwares afaict.
    We're going to need it soon, so add it now.

    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When a frame is sent to a sleeping station, the
    microcode reports TX_STATUS_FAIL_DEST_PS as its
    status -- we need to translate that to the flag
    that mac80211 expects.

    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Handle BSS_CHANGED_BEACON_ENABLED to enable the sending
    of beacons. Also set the correct HT RXON and QoS config.

    Signed-off-by: Daniel C Halperin
    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Daniel C Halperin
     
  • When sending beacon commands to the uCode, we must
    inform it of the offset in the beacon frame of the
    TIM Element so it can transmit packets from the
    correct queue. This functionality is implemented
    in iwl_set_beacon_tim().

    Fix a bug setting the rate_n_flags for the beacon
    packet. First, it should not use the station table's
    rate (it's a management frame), and second it needs
    to properly configure the TX antennas.

    Finally, also, clean up and comment relevant functions.

    Signed-off-by: Daniel C Halperin
    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Daniel C Halperin
     
  • A recent change optimized the power usage by the device by only powering it
    up during EEPROM load if it is required (for OTP devices). This change causes
    an error on the 1000 series devices during module load.

    The error looks as follows:
    [ 1624.024524] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, 1.3.27kds
    [ 1624.024527] iwlagn: Copyright(c) 2003-2009 Intel Corporation
    [ 1624.024711] iwlagn 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
    [ 1624.024749] iwlagn 0000:01:00.0: setting latency timer to 64
    [ 1624.024909] iwlagn 0000:01:00.0: Detected Intel Wireless WiFi Link 1000 Series BGN REV=0x6C
    [ 1624.081263] iwlagn 0000:01:00.0: MAC is in deep sleep!. CSR_GP_CNTRL = 0x080003D8
    [ 1624.092967] iwlagn 0000:01:00.0: OTP is empty
    [ 1624.092988] iwlagn 0000:01:00.0: Unable to init EEPROM
    [ 1624.093033] iwlagn 0000:01:00.0: PCI INT A disabled
    [ 1624.093065] iwlagn: probe of 0000:01:00.0 failed with error -2

    Adding a dump_stack() to where that error is printed shows the following:

    [ 1624.024524] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, 1.3.27kds
    [ 1624.024527] iwlagn: Copyright(c) 2003-2009 Intel Corporation
    [ 1624.024711] iwlagn 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
    [ 1624.024749] iwlagn 0000:01:00.0: setting latency timer to 64
    [ 1624.024909] iwlagn 0000:01:00.0: Detected Intel Wireless WiFi Link 1000 Series BGN REV=0x6C
    [ 1624.081263] iwlagn 0000:01:00.0: MAC is in deep sleep!. CSR_GP_CNTRL = 0x080003D8
    [ 1624.081263] Pid: 3073, comm: work_for_cpu Tainted: G W 2.6.31.5 #4
    [ 1624.081263] Call Trace:
    [ 1624.081263] [] T.726+0x22b/0x420 [iwlcore]
    [ 1624.081263] [] iwlcore_eeprom_acquire_semaphore+0x8a/0x190 [iwlcore]
    [ 1624.081263] [] ? __kmalloc+0x194/0x1c0
    [ 1624.081263] [] ? iwlcore_eeprom_verify_signature+0x25/0xf0 [iwlcore]
    [ 1624.081263] [] iwl_eeprom_init+0x107/0xf40 [iwlcore]
    [ 1624.081263] [] ? iwl_prepare_card_hw+0x11c/0x470 [iwlagn]
    [ 1624.081263] [] ? pci_bus_write_config_byte+0x64/0x80
    [ 1624.081263] [] iwl_pci_probe+0x308/0xac0 [iwlagn]
    [ 1624.081263] [] ? do_work_for_cpu+0x0/0x30
    [ 1624.081263] [] local_pci_probe+0x12/0x20
    [ 1624.081263] [] do_work_for_cpu+0x13/0x30
    [ 1624.081263] [] kthread+0xa6/0xb0
    [ 1624.081263] [] child_rip+0xa/0x20
    [ 1624.081263] [] ? kthread+0x0/0xb0
    [ 1624.081263] [] ? child_rip+0x0/0x20
    [ 1624.092967] iwlagn 0000:01:00.0: OTP is empty
    [ 1624.092988] iwlagn 0000:01:00.0: Unable to init EEPROM
    [ 1624.093033] iwlagn 0000:01:00.0: PCI INT A disabled
    [ 1624.093065] iwlagn: probe of 0000:01:00.0 failed with error -2

    We know that the routines in this trace, iwlcore_eeprom_acquire_semaphore
    and iwlcore_eeprom_verify_signature, only access CSR registers and thus do
    not need the device to be awake if it is EEPROM. But for OTP it is required
    for the device to be awake to read these registers. Ensure device is awake
    before accessing these registers.

    Signed-off-by: Reinette Chatre
    Acked-by: Ben Cahill
    Signed-off-by: John W. Linville

    Reinette Chatre
     
  • Align the format for tx_statistics and rx_statistics debugfs output for
    better readability

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • In both 6x00 and 6x50 series, the enhanced/extended tx power table in
    EEPROM is used to set the max. tx power limit.
    This new tx power table is in 1/2 dBm format, which creates an issue of
    possibility of 1/2 dBm loss when driver set the tx power limit; because
    of driver keep track and report the tx power in dBm format.

    In order to prevent the 1/2 dBm loss, keep track of the true max tx
    power in 1/2 dBm format in driver; do the comparison and adjust the tx
    power if needed when send tx power command to uCode.

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • Power-saving logic will not re-issue a POWER_TABLE_CMD if a new command
    matches the prior one. This can be bad if we re-start the device due to
    e.g. uCode error; the new POWER_TABLE_CMD (required to invoke power-saving)
    may match the prior POWER_TABLE_CMD issued before the uCode error.

    Ensure the POWER_TABLE_CMD is sent to device when uCode is up.

    Signed-off-by: Ben Cahill
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Ben Cahill
     
  • When issue REPLY_STATISTICS_CMD to uCode, two possible flag
    can be set in the configuration flags

    bit 0: Clear statistics
    0: Do not clear Statistics counters
    1: Clear to zero Statistics counters

    Allow "clear" parameter to be set from the caller.

    Add debugfs file to clear the statistics counters to help monitor and
    debug the uCode behavior.

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • Number of data structure for 6000 series no longer in production, the
    data structure already being removed; also need to remove the external
    reference define in iwl-dev.h

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • drop the non-production PCI-IDs for 6x50 series

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • Number of HT40 power parameters are not used; remove those from
    iwl_channel_info data structure

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • Temporary disable the coex function for wifi/wimax for 6x50
    series until the full implementation ready.

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • Validate enhanced tx power entry read from EEPROM before applying the
    tx power value. Different versions of EEPROM might contain different size
    of table; always a good idea to make sure the entry is valid before
    applying to the targeted channel.

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • David S. Miller
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall
     
  • In this file, function names are otherwise used as pointers without &.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier f;
    @@

    f(...) { ... }

    @@
    identifier r.f;
    @@

    - &f
    + f
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julia Lawall