openwrt/staging/blogic.git
12 years agowlcore: flush tx on CHANGE_CHANNEL
Eliad Peller [Tue, 15 May 2012 13:46:56 +0000 (16:46 +0300)]
wlcore: flush tx on CHANGE_CHANNEL

On CHANGE_CHANNEL indication, we should flush all the
queued tx frames, so they will be sent on the correct
(current) channel.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: fix the CONF_TX_AC_ANY_TID to be 0xff
Yoni Divinsky [Tue, 8 May 2012 11:02:14 +0000 (14:02 +0300)]
wlcore: fix the CONF_TX_AC_ANY_TID to be 0xff

In the enum conf_tx_ac CONF_TX_AC_ANY_TID should
be 0xff to match the firmware's implementation.

Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl12xx: set the irq polarity before loading the fw
Yoni Divinsky [Tue, 8 May 2012 11:02:12 +0000 (14:02 +0300)]
wl12xx: set the irq polarity before loading the fw

The polarity should be set before the firmware is loaded
since the firmware touches the same register. Access
of the firmware and driver to the same register will
cause a collision since there is no exclusion scheme.

Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: use psd_type indexing according to spec
Yoni Divinsky [Tue, 8 May 2012 11:02:11 +0000 (14:02 +0300)]
wlcore: use psd_type indexing according to spec

In ieee80211.h the uapsd bit mask is defined such that
VO=BIT(0), VI=BIT(1), BK=BIT(2), BE=BIT(3).
The firmware uses the indexing as defined in the ieee80211
spec, meaning that VO=3, VI=2, BK=1, BE=0.

In AP mode when adding peer wlcore needs to convert
the indexing accordingly.

Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: set wl->ht_cap per-band
Eliad Peller [Tue, 15 May 2012 14:09:00 +0000 (17:09 +0300)]
wlcore: set wl->ht_cap per-band

Save the ht_cap IE per-band, so we can configure different
params to BG and A bands (we currently don't support MIMO
on A band)

[Small fix for rx_highest - Arik]

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: add dependency on mac80211
Arik Nemtsov [Tue, 15 May 2012 14:08:59 +0000 (17:08 +0300)]
wl18xx: add dependency on mac80211

Add a dependency on mac80211 in Kconfig, and also replace some spaces
with tabs.

Reported-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: increase number of BA sessions to 3
Assaf Azulay [Tue, 15 May 2012 14:08:58 +0000 (17:08 +0300)]
wlcore: increase number of BA sessions to 3

With the new FW (sigle role X.3.8.0.108, multi role X.5.4.0.21)
we are supporting 3 RX BA sessions, this change is to support this
new ability.

Signed-off-by: Assaf Azulay <assaf@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: modify bss loss parameters
Igal Chernobelsky [Tue, 15 May 2012 14:08:57 +0000 (17:08 +0300)]
wlcore: modify bss loss parameters

Modify default parameters to reduce firmware BSS lose
probability in congested environment.

[Applied to 18xx configuration as well - Arik]

Signed-off-by: Igal Chernobelsky <igalc@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: flush before stopping AP
Eliad Peller [Tue, 15 May 2012 14:08:56 +0000 (17:08 +0300)]
wlcore: flush before stopping AP

Make sure the deauth bcast gets sent

[Make sure we are AP as well before the flush - Arik]

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: use correct link for bcast/multicast frames
Eliad Peller [Tue, 15 May 2012 14:08:55 +0000 (17:08 +0300)]
wlcore: use correct link for bcast/multicast frames

Multicast management frames (e.g. global deauth)
should be sent out on the bcast link, rather than
the global, which should be used only for pre-added
stations (e.g. for auth/assoc resp).

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Eyal Shapira <eyal@wizery.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: fixes for connection_loss_work
Arik Nemtsov [Tue, 15 May 2012 14:08:54 +0000 (17:08 +0300)]
wlcore: fixes for connection_loss_work

We can't use cancel_delayed_work_sync() from functions that take the
wl->mutex, since connection_loss_work also takes the mutex. This might
result in a deadlock. Restructure the code so the work is synchronously
canceled before taking the mutex.
Avoid a bug where we would indefinitely delay the connection loss
indication by re-queuing the connection loss work on consecutive beacon
loss events.

Cc: bartosz.markowski <bartosz.markowski@tieto.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: fix dynamic_ps_timeout time regression
Arik Nemtsov [Tue, 15 May 2012 14:08:53 +0000 (17:08 +0300)]
wlcore: fix dynamic_ps_timeout time regression

In patch d7b63b9fc7ee73e75a4c7fdb899 we have raised the dynamic
PS timeout to 200ms to improve user experience. Re-apply the change,
since it was reverted in the wlcore split.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: use the original elp time in forced_ps mode
Eliad Peller [Tue, 15 May 2012 14:08:52 +0000 (17:08 +0300)]
wlcore: use the original elp time in forced_ps mode

The dynamic PS timeout is meaningless in forced PS mode.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: fix sparse warnings related to static functions
Arik Nemtsov [Tue, 15 May 2012 14:08:51 +0000 (17:08 +0300)]
wlcore: fix sparse warnings related to static functions

The "static" modifier was mistakenly forgotten for some functions.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore/wl12xx/wl18xx: don't use TX align quirk for wl127x
Luciano Coelho [Mon, 4 Jun 2012 21:02:25 +0000 (00:02 +0300)]
wlcore/wl12xx/wl18xx: don't use TX align quirk for wl127x

Commit 4afc37 (wlcore: reorder identify_chip and get_hw_info) broke
support for wl127x chips.

When we moved the identify_chip operation to an earlier stage (ie. to
the probe function), we broke wl127x support because during HW init we
would set the WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN.

To avoid this, set this quirk in the identify_chip operations and only
force it to be unset if the bus module doesn't support it.  We were
doing the opposite and setting the flag if the bus module supports it.

Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: change default tcp_checksum to false
Assaf Azulay [Thu, 10 May 2012 09:14:23 +0000 (12:14 +0300)]
wl18xx: change default tcp_checksum to false

as tcp check sum is going to be removed from firmware, and as
there is a problem with getting dns in security when checksum is
enabled, it was decided to disable it by default.
for none security modes it can be enabled by module paramenter.

Signed-off-by: Assaf Azulay <assaf@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: use new fw stats structures
Luciano Coelho [Thu, 10 May 2012 09:14:22 +0000 (12:14 +0300)]
wl18xx: use new fw stats structures

Some of the structures were updated, other structures had a few
missing values and a few new ones were added.  Change the driver
structs accordingly.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: increase tx_ba_win_size to 64
Luciano Coelho [Thu, 10 May 2012 09:14:21 +0000 (12:14 +0300)]
wl18xx: increase tx_ba_win_size to 64

Now the firmware can support TX block ack sessions with 64 frames.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: increase aggregation buffer size by one page
Luciano Coelho [Thu, 10 May 2012 09:14:20 +0000 (12:14 +0300)]
wlcore: increase aggregation buffer size by one page

With 4 pages (16Kb), we can't fit 10 frames in the aggregation buffer
during iperf.  This is the optimal for the firmware.  Thus, increase
the buffer size by one page.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore/wl12xx/wl18xx: move lower driver debugfs to a subdir
Luciano Coelho [Thu, 10 May 2012 09:14:19 +0000 (12:14 +0300)]
wlcore/wl12xx/wl18xx: move lower driver debugfs to a subdir

Instead of adding more files from the lower drivers into the same
directory in debugfs as wlcore, we now add a subdirectory for the
lower driver.  This makes things a bit easier, because we can quickly
see where the debugfs entry is implemented and what is specific to the
lower driver.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: export pwr_limit_reference_11_abg value as a module parameter
Luciano Coelho [Thu, 10 May 2012 09:14:18 +0000 (12:14 +0300)]
wl18xx: export pwr_limit_reference_11_abg value as a module parameter

Yet another temporary module parameter requested by the firmware team.
This will be replaced by the conf binary.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: export low/high band component values as module params
Luciano Coelho [Thu, 10 May 2012 09:14:17 +0000 (12:14 +0300)]
wl18xx: export low/high band component values as module params

We use hardcoded values for the different board types.  In some cases
we may need to override the defaults, so export the values as module
params.  If not defined, the defaults for the specified board type
will be used.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add power limit reference value to mac_and_phy settings
Luciano Coelho [Thu, 10 May 2012 09:14:16 +0000 (12:14 +0300)]
wl18xx: add power limit reference value to mac_and_phy settings

With more recent PHY firmware versions (>8.1.0.0.116), we need to use
the correct value for the pwr_limit_reference_11_abg parameter when
setting the mac_and_phy options.

For now we use a hardcoded 0xc8 as the value.  This will be moved to
the configuration binary when it gets implemented.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add module parameter to force SISO 20MHz
Luciano Coelho [Thu, 10 May 2012 09:14:15 +0000 (12:14 +0300)]
wl18xx: add module parameter to force SISO 20MHz

In some cases it may be useful to force narrow-band SISO channels.
Add a new value to the ht_mode module parameter to force the device to
operate in SISO 20MHz.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: use proper values for supported local rates
Luciano Coelho [Thu, 10 May 2012 09:14:14 +0000 (12:14 +0300)]
wlcore: use proper values for supported local rates

We were setting all the rates bits when starting the AP role.  Instead
of doing this, we should set only the rates we really support
(eg. MIMO rates or wide-channel rates).  This commit changes that so
that we always use the default rates (basic rates + MCS0-7) and add
the values returned by the ap_get_mimo_wide_rate_mask operation.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: don't use MIMO when ht_mode is set to wide
Luciano Coelho [Thu, 10 May 2012 09:14:13 +0000 (12:14 +0300)]
wl18xx: don't use MIMO when ht_mode is set to wide

If the wl18xx module is loaded with ht_mode=wide (the default), we
shouldn't use MIMO rates when the channel type is not HT40.  Fix this
by checking the ht_mode before deciding which rates to used.
Additionally, set the ht_mode parameter explicitly to "wide" as the
default.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: print the interrupt status when recovery is triggered
Luciano Coelho [Thu, 10 May 2012 09:14:12 +0000 (12:14 +0300)]
wlcore: print the interrupt status when recovery is triggered

In some cases it may be useful for debugging to check what is the
status of the interrupt register when a hardware recovery happens.
Print the contents of REG_INTERRUPT_NO_CLEAR (aka. HINT_STS_RAW) when
recovery starts.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: print the PHY firmware version from the private static data
Luciano Coelho [Thu, 10 May 2012 09:14:11 +0000 (12:14 +0300)]
wl18xx: print the PHY firmware version from the private static data

The wl18xx firmware writes the PHY firmware version in the static
data.  Add an operation to parse the static data and print the PHY
firmware version when booting.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: create private static_data area and add operation to parse it
Luciano Coelho [Thu, 10 May 2012 09:14:10 +0000 (12:14 +0300)]
wlcore: create private static_data area and add operation to parse it

The wl18xx firmware has more information in the static_data than
wl12xx.  To be able to parse that in an abstracted way, this patch
adds a priv area to the static data struct and an operation that
allows the lower driver to parse it if necessary.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: implement fw status debugfs entries
Luciano Coelho [Thu, 10 May 2012 09:14:09 +0000 (12:14 +0300)]
wl18xx: implement fw status debugfs entries

Implement the operations that are necessary to fetch the
wl18xx-specific FW statistics and export them in debugfs.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl12xx: implement fw status debugfs entries
Luciano Coelho [Thu, 10 May 2012 09:14:08 +0000 (12:14 +0300)]
wl12xx: implement fw status debugfs entries

Implement the operations that are necessary to fetch the
wl12xx-specific FW statistics.  Re-add some of the code removed from
wlcore.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: add debugfs macro to help print fw statistics arrays
Luciano Coelho [Thu, 10 May 2012 09:14:07 +0000 (12:14 +0300)]
wlcore: add debugfs macro to help print fw statistics arrays

Add a macro to make it easy to print arrays from the FW statistics
array in debugfs.  At the same time, increase the buffer size so
arrays fit more easily.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: abstract debugfs fw_stats to be handled by the lower drivers
Luciano Coelho [Thu, 10 May 2012 09:14:06 +0000 (12:14 +0300)]
wlcore: abstract debugfs fw_stats to be handled by the lower drivers

The FW statistics differ from hardware to hardware.  This commit
prepares for hardware-specific implementation of the FW statistics
debugfs entries.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: use all AP basic rates as default
Luciano Coelho [Thu, 10 May 2012 09:14:05 +0000 (12:14 +0300)]
wlcore: use all AP basic rates as default

Sometimes we get a BSS_CHANGED_BEACON_ENABLED event before the basic
rates have been properly set.  To avoid problems with the firmware not
expecting to receive frames at rates that are not set during
CMD_START_ROLE, we now start with all basic rates by default.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: update beacon and probe_resp templates when rates change
Luciano Coelho [Thu, 10 May 2012 09:14:04 +0000 (12:14 +0300)]
wlcore: update beacon and probe_resp templates when rates change

When the data rates change, we get BSS_CHANGED_BASIC_RATES.  At this
point, we should update all the templates to match the new rates.  We
were changing some of the templates, but the beacon and the probe
response templates were missing.

[Remove redundant min_rate variable - Arik]

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: disable MCS_13 for wl18xx PG 1.0
Luciano Coelho [Thu, 10 May 2012 09:14:03 +0000 (12:14 +0300)]
wl18xx: disable MCS_13 for wl18xx PG 1.0

There are some problems with MCS_13 in PG 1.0 hardware.  So we disable
it when PG 1.0 is detected.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: reorder identify_chip and get_hw_info
Luciano Coelho [Thu, 10 May 2012 09:14:02 +0000 (12:14 +0300)]
wlcore: reorder identify_chip and get_hw_info

We can do get the HW information and identify the chip already at
probe time.  This makes it easier to mangle with the parameters during
identify chip before registering the hardware with mac80211.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: change low_band_component_type value for COM8
Luciano Coelho [Thu, 10 May 2012 09:14:01 +0000 (12:14 +0300)]
wl18xx: change low_band_component_type value for COM8

Like HDK, COM8 uses 0x06 for the low_band_component_type as well.
Hardcode the value for COM8 until this configuration can be done in
the external configuration binary (to be implemented).

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: add space for private area when allocating fw_status
Luciano Coelho [Thu, 10 May 2012 09:14:00 +0000 (12:14 +0300)]
wlcore: add space for private area when allocating fw_status

When allocating the fw_status structure, the space for the
lower-driver private area was missing.  This was causing an illegal
write outside the allocated area, which was causing random oopses
around the kernel.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: changed default board_type to HDK
Luciano Coelho [Thu, 10 May 2012 09:13:59 +0000 (12:13 +0300)]
wl18xx: changed default board_type to HDK

Since the most common board we're using now is an HDK board, change
the default board_type to hdk.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: copy the default configuration before checking the board_type
Luciano Coelho [Thu, 10 May 2012 09:13:58 +0000 (12:13 +0300)]
wl18xx: copy the default configuration before checking the board_type

We were changing the low_band_component_type in the private
configuration structure before copying the default values to it, so
the change was overwritten and only took effect after HW recovery.

Reported-by: Dror Erez <drorer@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: add module parameter to dump SDIO reads and writes
Luciano Coelho [Thu, 10 May 2012 09:13:57 +0000 (12:13 +0300)]
wlcore: add module parameter to dump SDIO reads and writes

In some cases we may want to dump all the SDIO data in order to get
detailed information for debugging the communication with the
firmware.

Add printks to dump the data and a module parameter to enable/disable
it.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add a module parameter to control 11a support
Luciano Coelho [Thu, 10 May 2012 09:13:56 +0000 (12:13 +0300)]
wl18xx: add a module parameter to control 11a support

In wl18xx we don't have an NVS yet, so we need to control whether 11a
is supported with a module parameter for now.  11a support is enabled
by default and can be changed by setting enable_11a to false when
loading the module.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: derive the MAC address from the BD_ADDR in fuse ROM
Luciano Coelho [Thu, 10 May 2012 09:13:55 +0000 (12:13 +0300)]
wl18xx: derive the MAC address from the BD_ADDR in fuse ROM

Add the get_mac operation in order to fetch the BD_ADDR from fuse ROM,
so that we can derive the WLAN MAC addresses from it.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore/wl12xx/18xx: split fw_status struct into two
Arik Nemtsov [Thu, 10 May 2012 09:13:54 +0000 (12:13 +0300)]
wlcore/wl12xx/18xx: split fw_status struct into two

The number of RX packet descriptors may vary from chip to chip and
in different firmware versions.  Unfortunately, the array that
contains the actual descriptors is in the middle of the fw_status
structure.  To manage this, we split the struct into two so we can
calculate the offset of what comes after the array and access the last
elements more easily.

[Changed the STATUS_LEN macro to be placement agnostic - Arik]

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add module parameter to disable TCP checksum
Luciano Coelho [Thu, 10 May 2012 09:13:53 +0000 (12:13 +0300)]
wl18xx: add module parameter to disable TCP checksum

Add a new module parameter to disable TCP checksum offload.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add number of antennas and dc2dc type as module params
Luciano Coelho [Thu, 10 May 2012 09:13:52 +0000 (12:13 +0300)]
wl18xx: add number of antennas and dc2dc type as module params

We need to specify the number of 2.4GHz and 5GHz antennas and whether
the board has an internal or external DC2DC.  Add some module
parameters that allow changing that.

In the future this will come from the "NVS" file.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: change the low_band_component_type for HDK boards
Luciano Coelho [Thu, 10 May 2012 09:13:51 +0000 (12:13 +0300)]
wl18xx: change the low_band_component_type for HDK boards

Currently, all HDK boards use low_band_component_type 0x06.  In the
future this may change, but for now, we hardcode this value when the
board_type is set to HDK.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add plt_init operation
Luciano Coelho [Thu, 10 May 2012 09:13:50 +0000 (12:13 +0300)]
wl18xx: add plt_init operation

Add the correct FW name for PLT (which is the same as the normal
firmware) and implement the plt_init operation.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore/wl12xx: add plt_init op and move the code to wl12xx
Luciano Coelho [Thu, 10 May 2012 09:13:49 +0000 (12:13 +0300)]
wlcore/wl12xx: add plt_init op and move the code to wl12xx

PLT mode needs to be initialized differently for each chip.  This
patch adds an operation to init PLT and moves the existing PLT
initialization into the wl12xx driver.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: change board type enum according to new FW
Arik Nemtsov [Thu, 10 May 2012 09:13:48 +0000 (12:13 +0300)]
wl18xx: change board type enum according to new FW

Add more board types and remove a now unneeded write to SCR_PAD2 setting
the board type.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: don't upload NVS to FW
Arik Nemtsov [Thu, 10 May 2012 09:13:47 +0000 (12:13 +0300)]
wl18xx: don't upload NVS to FW

In this chip family the NVS file should not be uploaded to FW. In fact,
we encounter strange bugs (sdio errors) when trying to upload it with
certain parameters.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: init Tx-released index to 0 on HW init
Arik Nemtsov [Thu, 10 May 2012 09:13:46 +0000 (12:13 +0300)]
wl18xx: init Tx-released index to 0 on HW init

This ensures the index is 0 on FW recovery and prevents spurious error
prints - "WARNING illegal id in tx completion".

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore/wl12xx: move rx_mem_pool_addr element to wl12xx
Luciano Coelho [Thu, 10 May 2012 09:13:45 +0000 (12:13 +0300)]
wlcore/wl12xx: move rx_mem_pool_addr element to wl12xx

Only wl127x chips use the rx_mem_pool_addr values, which need to be
given to the firmware as part of the RX path.  Move this from core to
the wl12xx driver.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: implement hw op to read PG version
Arik Nemtsov [Thu, 10 May 2012 09:13:44 +0000 (12:13 +0300)]
wl18xx: implement hw op to read PG version

Read the HW PG version of the 18xx chip from FUSE.

Based on an earlier patch by Luciano Coelho <coelho@ti.com>.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore/wl12xx: move ref_clock and tcxo_clock elements to wl12xx
Luciano Coelho [Thu, 10 May 2012 09:13:43 +0000 (12:13 +0300)]
wlcore/wl12xx: move ref_clock and tcxo_clock elements to wl12xx

Only wl12xx needs to get the ref_clock anc tcxo_clock values from the
platform data.  Move these elements from the wl1271 structure to
wl12xx's private data.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore: rename wl12xx.h to wlcore_i.h
Luciano Coelho [Thu, 10 May 2012 09:13:42 +0000 (12:13 +0300)]
wlcore: rename wl12xx.h to wlcore_i.h

The wl12xx.h file now contains mostly definitions that are internal to
wlcore.  Still, some things need to me moved to the public header, so
for now we keep including it in wlcore.h.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: read clock frequency and do top init accordingly
Luciano Coelho [Thu, 10 May 2012 09:13:41 +0000 (12:13 +0300)]
wl18xx: read clock frequency and do top init accordingly

Instead of using hardcoded values for a single frequency, we need to
read the frequency and use the appropriate values for it in the top
initialization.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: disable FW log functionality
Arik Nemtsov [Thu, 10 May 2012 09:13:40 +0000 (12:13 +0300)]
wl18xx: disable FW log functionality

Currently (Fw .67) appears to do more harm than good.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: read FW pc on recovery
Arik Nemtsov [Thu, 10 May 2012 09:13:39 +0000 (12:13 +0300)]
wl18xx: read FW pc on recovery

Define the FW pc in the 18xx register translation table. This specific
register is only valid in the boot partition, so change the momentarily
change partitions. This doesn't damage 12xx cards, where the FW pc is
accessible via boot partition as well.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: translate and write the board type to SCR_PAD2
Luciano Coelho [Thu, 10 May 2012 09:13:38 +0000 (12:13 +0300)]
wl18xx: translate and write the board type to SCR_PAD2

The firmware uses the SCR_PAD2 register to read the board type passed
from the driver.  The values don't match the ones used in the mac and
phy configuration, so we need to map them before writing.  This commit
adds a translation table that is used when writing the board type to
SCR_PAD2.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add board type module argument
Luciano Coelho [Thu, 10 May 2012 09:13:37 +0000 (12:13 +0300)]
wl18xx: add board type module argument

Different board types (ie. FPGA, HDK and DVP/EVB) require slightly
different init configuration options.  Since we cannot probe the type
of board from the actual hardware, we need to pass it as an option
during module load.

This patch adds a module parameters that accepts the 3 different board
types, with DVP/EVB as the default, and uses this value where needed.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add module param for overriding HT caps
Arik Nemtsov [Thu, 10 May 2012 09:13:36 +0000 (12:13 +0300)]
wl18xx: add module param for overriding HT caps

Set an alternate HT cap allowing MIMO rates (but only 20mhz) channels,
when the module is loaded with ht_mode=mimo.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: set HT capabilities
Arik Nemtsov [Thu, 10 May 2012 09:13:35 +0000 (12:13 +0300)]
wl18xx: set HT capabilities

Define the default HT capabilities of the 18xx chip family - these include
support for wide-channel.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore/wl18xx: enable MIMO/wide-chan rates in AP-mode rate config
Arik Nemtsov [Thu, 10 May 2012 09:13:34 +0000 (12:13 +0300)]
wlcore/wl18xx: enable MIMO/wide-chan rates in AP-mode rate config

Add a HW op to add extra enabled rates for AP-mode data-rates. Since
the rates might depend on channel properties, reconfigure AP-mode rates
when these change.

Implement the HW op for the 18xx family, where MIMO or wide-chan rates
can be added.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: support peer MIMO rates
Arik Nemtsov [Thu, 10 May 2012 09:13:33 +0000 (12:13 +0300)]
wlcore: support peer MIMO rates

Parse the peer ht_cap element containing MCS8-MCS15 rates and pass it
to the FW. Rates unsupported by the HW will be sanitized by mac80211
before reaching us.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: ipmlement ap_rate_mask hw op
Arik Nemtsov [Thu, 10 May 2012 09:13:32 +0000 (12:13 +0300)]
wl18xx: ipmlement ap_rate_mask hw op

Enable wide-chan or MIMO rates when appropriate.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: send channel type to FW on role start
Arik Nemtsov [Thu, 10 May 2012 09:13:31 +0000 (12:13 +0300)]
wl18xx: send channel type to FW on role start

Translate the NL80211 channel type to a FW-specific channel type and send
it to the FW as part of the role-start command. For wl12xx this has no
effect - this element is treated as padding.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore: track current channel type per vif
Arik Nemtsov [Thu, 10 May 2012 09:13:30 +0000 (12:13 +0300)]
wlcore: track current channel type per vif

Track the current 802.11 channel type, defaulting to a NO_HT channel.
Update the channel type element when changed by mac80211.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: add runtime configuration parameters
Luciano Coelho [Thu, 10 May 2012 09:13:29 +0000 (12:13 +0300)]
wl18xx: add runtime configuration parameters

Now wlcore requires the lower drivers to set the correct
configuration.  Move the existing private configuration to the proper
place and add all generic configuration parameters.

The important changes are in Tx interrupt pacing and Rx BA window size.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore/wl18xx: add hw op for Rx HW checksum
Arik Nemtsov [Thu, 10 May 2012 09:13:28 +0000 (12:13 +0300)]
wlcore/wl18xx: add hw op for Rx HW checksum

Some chip families can checksum certain classes of Rx packets in FW.
Implement the Rx-checksum feature as a HW-op. For the 18xx chip-family,
set Rx-checsum according to indication from FW.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowlcore/wl18xx: add hw op for setting Tx HW checksum
Arik Nemtsov [Thu, 10 May 2012 09:13:27 +0000 (12:13 +0300)]
wlcore/wl18xx: add hw op for setting Tx HW checksum

Some chip families are capable of checksumming certain classes of Tx
packets in HW. Indicate this fact in the netdev features and perform the
HW checksum by protocol type for the 18xx family.

Fix the location of the skb network header when we move it so we can
rely on it when setting the checksum.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: add hw_init operation
Luciano Coelho [Thu, 10 May 2012 09:13:26 +0000 (12:13 +0300)]
wl18xx: add hw_init operation

Add wl18xx-specific HW initialization operation and create acx.[ch]
files to support that.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: implement immediate Tx completion
Arik Nemtsov [Thu, 10 May 2012 09:13:25 +0000 (12:13 +0300)]
wl18xx: implement immediate Tx completion

Implement immediate Tx completion for the 18xx family. Move 18xx
specific Tx code to new tx.c/h files and create helper header files
for definitions.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: implement hw op for getting rx packet data length
Arik Nemtsov [Thu, 10 May 2012 09:13:24 +0000 (12:13 +0300)]
wl18xx: implement hw op for getting rx packet data length

Implement the 18xx-specific way for getting the length of a Rx packet.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: implement hw op for getting rx buffer data alignment
Arik Nemtsov [Thu, 10 May 2012 09:13:23 +0000 (12:13 +0300)]
wl18xx: implement hw op for getting rx buffer data alignment

Implement the HW op for getting alignment state in wl18xx. The FW aligns
the Rx Ethernet payload data.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: set Rx block-size alignment quirk
Arik Nemtsov [Thu, 10 May 2012 09:13:22 +0000 (12:13 +0300)]
wl18xx: set Rx block-size alignment quirk

The 18xx FW sends Rx blocks with aligned length.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: add fw_status private data
Arik Nemtsov [Thu, 10 May 2012 09:13:21 +0000 (12:13 +0300)]
wl18xx: add fw_status private data

The wl18xx chip passes extra information in the firmware status to the
driver.  Add a private data section to handle that.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: define HW-rate translation elements/tables
Arik Nemtsov [Thu, 10 May 2012 09:13:20 +0000 (12:13 +0300)]
wl18xx: define HW-rate translation elements/tables

Define HW-rate conversion tables for the 18xx chip. Initialize
the appropriate wlcore elements with these tables and values to allow
conversion of HW-rates.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: implement hw op for setting frame length in tx_hw_desc
Arik Nemtsov [Thu, 10 May 2012 09:13:19 +0000 (12:13 +0300)]
wl18xx: implement hw op for setting frame length in tx_hw_desc

Set the frame length during Tx in a way compatible with the 18xx FW.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: implement hw op for setting blocks in hw_tx_desc
Arik Nemtsov [Thu, 10 May 2012 09:13:18 +0000 (12:13 +0300)]
wl18xx: implement hw op for setting blocks in hw_tx_desc

Add the 18xx variant to the HW Tx descriptor union and set the 18xx
specific values during Tx.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: implement hw op for calculating hw block count per packet
Arik Nemtsov [Thu, 10 May 2012 09:13:17 +0000 (12:13 +0300)]
wl18xx: implement hw op for calculating hw block count per packet

Implement the calc_tx_blocks op for the 18xx family.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: set normal/GEM Tx spare block counts
Arik Nemtsov [Thu, 10 May 2012 09:13:16 +0000 (12:13 +0300)]
wl18xx: set normal/GEM Tx spare block counts

Initialize the Tx spare block counts for all operating modes in the 18xx
card.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: set the number of Tx descriptors
Arik Nemtsov [Thu, 10 May 2012 09:13:15 +0000 (12:13 +0300)]
wl18xx: set the number of Tx descriptors

Initialize the number of Tx-descriptors for the 18xx family.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: create per-chip-family private storage
Arik Nemtsov [Thu, 10 May 2012 09:13:14 +0000 (12:13 +0300)]
wl18xx: create per-chip-family private storage

Make use of the wlcore provided private storage in the 18xx low-level
driver.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
12 years agowl18xx: add trigger command and ack event operations
Luciano Coelho [Thu, 10 May 2012 09:13:13 +0000 (12:13 +0300)]
wl18xx: add trigger command and ack event operations

Add the operations that allow wlcore to trigger commands to the
firmware and acknowledge when an event has been fully received.

Allocate a private buffer to hold the maximum sized cmd. Send the
entire length of the buffer each time a command is sent to signal
EOT. Remove the previous EOT mechanism.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add some boot operations and hw-specific configurations
Luciano Coelho [Thu, 10 May 2012 09:13:12 +0000 (12:13 +0300)]
wl18xx: add some boot operations and hw-specific configurations

Implement the boot operation.  Add a wl18xx-specific configuration
structure (namely to configure the mac and phy parameters).

The default hw configuration matches the DVP board.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add identify chip operation
Luciano Coelho [Thu, 10 May 2012 09:13:11 +0000 (12:13 +0300)]
wl18xx: add identify chip operation

Add identify_chip operation to detect the chip ID for wl185x and set
the correct firmware name.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add register table
Luciano Coelho [Thu, 10 May 2012 09:13:10 +0000 (12:13 +0300)]
wl18xx: add register table

Add the register table with the appropriate values for wl18xx.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add partition table
Luciano Coelho [Thu, 10 May 2012 09:13:09 +0000 (12:13 +0300)]
wl18xx: add partition table

Define and add the partition table in the wlcore struct.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add empty operations struct
Luciano Coelho [Thu, 10 May 2012 09:13:08 +0000 (12:13 +0300)]
wl18xx: add empty operations struct

We don't have any chip-specific operations yet, but now wlcore has
defined an operations structure and requires the pointer to be set.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowlcore_sdio/wl18xx: use SDIO revision number to identify wl18xx chips
Luciano Coelho [Thu, 10 May 2012 09:13:07 +0000 (12:13 +0300)]
wlcore_sdio/wl18xx: use SDIO revision number to identify wl18xx chips

At least in PG1, the wl18xx chips use the same SDIO vendor/device ID,
so it's not possible to figure out which driver is to be used.  As a
workaround, we can check the SDIO revision number, because wl18xx uses
3.00 and wl12xx does not.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agowl18xx: add new module
Luciano Coelho [Thu, 10 May 2012 09:13:06 +0000 (12:13 +0300)]
wl18xx: add new module

Add the wl18xx module and the probe functions.  Use wlcore for the
main parts (not functional at this point due to differences in the
wl18xx initialization).

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
12 years agoLinux 3.5-rc1
Linus Torvalds [Sun, 3 Jun 2012 01:29:26 +0000 (18:29 -0700)]
Linux 3.5-rc1

12 years agoMerge tag 'dm-3.5-changes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/agk...
Linus Torvalds [Sun, 3 Jun 2012 00:39:40 +0000 (17:39 -0700)]
Merge tag 'dm-3.5-changes-1' of git://git./linux/kernel/git/agk/linux-dm

Pull device-mapper updates from Alasdair G Kergon:
 "Improve multipath's retrying mechanism in some defined circumstances
  and provide a simple reserve/release mechanism for userspace tools to
  access thin provisioning metadata while the pool is in use."

* tag 'dm-3.5-changes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm:
  dm thin: provide userspace access to pool metadata
  dm thin: use slab mempools
  dm mpath: allow ioctls to trigger pg init
  dm mpath: delay retry of bypassed pg
  dm mpath: reduce size of struct multipath

12 years agodm thin: provide userspace access to pool metadata
Joe Thornber [Sat, 2 Jun 2012 23:30:01 +0000 (00:30 +0100)]
dm thin: provide userspace access to pool metadata

This patch implements two new messages that can be sent to the thin
pool target allowing it to take a snapshot of the _metadata_.  This,
read-only snapshot can be accessed by userland, concurrently with the
live target.

Only one metadata snapshot can be held at a time.  The pool's status
line will give the block location for the current msnap.

Since version 0.1.5 of the userland thin provisioning tools, the
thin_dump program displays the msnap as follows:

    thin_dump -m <msnap root> <metadata dev>

Available here: https://github.com/jthornber/thin-provisioning-tools

Now that userland can access the metadata we can do various things
that have traditionally been kernel side tasks:

     i) Incremental backups.

     By using metadata snapshots we can work out what blocks have
     changed over time.  Combined with data snapshots we can ensure
     the data doesn't change while we back it up.

     A short proof of concept script can be found here:

     https://github.com/jthornber/thinp-test-suite/blob/master/incremental_backup_example.rb

     ii) Migration of thin devices from one pool to another.

     iii) Merging snapshots back into an external origin.

     iv) Asyncronous replication.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
12 years agodm thin: use slab mempools
Mike Snitzer [Sat, 2 Jun 2012 23:30:00 +0000 (00:30 +0100)]
dm thin: use slab mempools

Use dedicated caches prefixed with a "dm_" name rather than relying on
kmalloc mempools backed by generic slab caches so the memory usage of
thin provisioning (and any leaks) can be accounted for independently.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
12 years agodm mpath: allow ioctls to trigger pg init
Mikulas Patocka [Sat, 2 Jun 2012 23:29:58 +0000 (00:29 +0100)]
dm mpath: allow ioctls to trigger pg init

After the failure of a group of paths, any alternative paths that
need initialising do not become available until further I/O is sent to
the device.  Until this has happened, ioctls return -EAGAIN.

With this patch, new paths are made available in response to an ioctl
too.  The processing of the ioctl gets delayed until this has happened.

Instead of returning an error, we submit a work item to kmultipathd
(that will potentially activate the new path) and retry in ten
milliseconds.

Note that the patch doesn't retry an ioctl if the ioctl itself fails due
to a path failure.  Such retries should be handled intelligently by the
code that generated the ioctl in the first place, noting that some SCSI
commands should not be retried because they are not idempotent (XOR write
commands).  For commands that could be retried, there is a danger that
if the device rejected the SCSI command, the path could be errorneously
marked as failed, and the request would be retried on another path which
might fail too.  It can be determined if the failure happens on the
device or on the SCSI controller, but there is no guarantee that all
SCSI drivers set these flags correctly.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
12 years agodm mpath: delay retry of bypassed pg
Mike Christie [Sat, 2 Jun 2012 23:29:45 +0000 (00:29 +0100)]
dm mpath: delay retry of bypassed pg

If I/O needs retrying and only bypassed priority groups are available,
set the pg_init_delay_retry flag to wait before retrying.

If, for example, the reason for the bypass is that the controller is
getting reset or there is a firmware upgrade happening, retrying right
away would cause a flood of log messages and retries for what could be a
few seconds or even several minutes.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Acked-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
12 years agodm mpath: reduce size of struct multipath
Mike Snitzer [Sat, 2 Jun 2012 23:29:43 +0000 (00:29 +0100)]
dm mpath: reduce size of struct multipath

Move multipath structure's 'lock' and 'queue_size' members to eliminate
two 4-byte holes.  Also use a bit within a single unsigned int for each
existing flag (saves 8-bytes).  This allows future flags to be added
without each consuming an unsigned int.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Acked-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>