diff options
author | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-09-04 14:50:59 -0700 |
---|---|---|
committer | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-10-19 15:55:55 +0900 |
commit | 923d708fed9d47c7b4d67694500d766337663e29 (patch) | |
tree | 54cc91baf9f495f924e467625e2bf50cbce79f48 /include/linux/wimax | |
parent | ebc5f62b76ad540ff7b3e438506638009e7812a6 (diff) | |
download | linux-stable-923d708fed9d47c7b4d67694500d766337663e29.tar.gz linux-stable-923d708fed9d47c7b4d67694500d766337663e29.tar.bz2 linux-stable-923d708fed9d47c7b4d67694500d766337663e29.zip |
wimax/i2400m: fix reboot echo/ack barker deadlock
The i2400m based devices can get in a sort of a deadlock some times;
when they boot, they send a reboot "barker" (a magic number) and then
the driver has to echo that same barker to ack reception
(echo/ack). Then the device does a final ack by sending an ACK barker.
The first time this happens, we don't know ahead of time with barker
the device is going to send, as different device models and SKUs will
send different barker depending on the EEPROM programming.
If the device has sent the barker before the driver has been able to
read it, the driver looses, as it doesn't know which barker it has to
echo/ack back. With older devices, we tried a couple of combinations
and that always worked; but now, with adding support for more, in
which we have an unlimited number of new barkers, that is not an
option.
So we rework said case so that when the device gets stuck, we just
cycle through all the known types until one forces the device to send
an ack. Otherwise, the driver gives up and aborts.
Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
Diffstat (limited to 'include/linux/wimax')
-rw-r--r-- | include/linux/wimax/i2400m.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h index d6e2a3595682..fd5af05083cb 100644 --- a/include/linux/wimax/i2400m.h +++ b/include/linux/wimax/i2400m.h @@ -138,7 +138,7 @@ struct i2400m_bcf_hdr { __le32 module_id; __le32 module_vendor; __le32 date; /* BCD YYYMMDD */ - __le32 size; + __le32 size; /* in dwords */ __le32 key_size; /* in dwords */ __le32 modulus_size; /* in dwords */ __le32 exponent_size; /* in dwords */ |