Search Linux Wireless

Re: [ath5k-devel] [PATCH 14/30] ath5k: Extend get_default_sifs/slot_time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 24, 2010 at 11:35 AM, Jonathan Guerin <jonathan@xxxxxxxxxxxx> wrote:
> On Wed, Nov 24, 2010 at 11:04 AM, Nick Kossifidis <mickflemm@xxxxxxxxx> wrote:
>> 2010/11/24 Nick Kossifidis <mickflemm@xxxxxxxxx>:
>>> 2010/11/24 Jonathan Guerin <jonathan@xxxxxxxxxxxx>:
>>>> On Wed, Nov 24, 2010 at 5:09 AM, Nick Kossifidis <mickflemm@xxxxxxxxx> wrote:
>>>>>  * Extend get_default_sifs/slot_time to include timings for turbo
>>>>>  half and quarter rate modes.
>>>>>
>>>>>  * AR5210 code for now uses timings already on core clock units
>>>>>  instead of usecs so rename them (we 'll clean it up later).
>>>>>
>>>>>  Signed-off-by: Nick Kossifidis <mickflemm@xxxxxxxxx>
>>>>> ---
>>>>>  drivers/net/wireless/ath/ath5k/ath5k.h |   24 ++++++++++++--
>>>>>  drivers/net/wireless/ath/ath5k/pcu.c   |   52 ++++++++++++++++++++++++--------
>>>>>  drivers/net/wireless/ath/ath5k/qcu.c   |   16 +++++----
>>>>>  3 files changed, 68 insertions(+), 24 deletions(-)
>>>>>
>>>>> diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
>>>>> index 005cad0..e11fc8f 100644
>>>>> --- a/drivers/net/wireless/ath/ath5k/ath5k.h
>>>>> +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
>>>>> @@ -226,16 +226,16 @@
>>>>>  #define AR5K_INIT_USEC                         39
>>>>>  #define AR5K_INIT_USEC_TURBO                   79
>>>>>  #define AR5K_INIT_USEC_32                      31
>>>>> -#define AR5K_INIT_SLOT_TIME                    396
>>>>> -#define AR5K_INIT_SLOT_TIME_TURBO              480
>>>>> +#define AR5K_INIT_SLOT_TIME_CLOCK              396
>>>>
>>>> This comes out as 9.9us (with a clock multiplier of 40), rather than 9
>>>> - should be 360?
>>>>
>>>>> +#define AR5K_INIT_SLOT_TIME_TURBO_CLOCK                480
>>>>>  #define AR5K_INIT_ACK_CTS_TIMEOUT              1024
>>>>
>>>> From a previous post I'd made:
>>>>
>>>> According to the 802.11-2007 spec document, the ACKTimeout value is
>>>> (Section 9.2.8 ACK procedure):
>>>> ACKTimeout = aSIFSTime + aSlotTime + aPHY-RX-START-Delay
>>>>
>>>> From Table 17-15—OFDM PHY characteristics, the values are:
>>>> aSIFSTime = 16
>>>> aSlotTime = 9
>>>> aPHY-RX-START-Delay = 25
>>>>
>>>> Therefore, ACKTimeout = 50
>>>>
>>>> With a value of 1024, the ACKTIMEOUT is actually 25.
>>>>
>>>>>  #define AR5K_INIT_ACK_CTS_TIMEOUT_TURBO                0x08000800
>>>>>  #define AR5K_INIT_PROG_IFS                     920
>>>>>  #define AR5K_INIT_PROG_IFS_TURBO               960
>>>>>  #define AR5K_INIT_EIFS                         3440
>>>>
>>>> From the 802.11-2007 Spec (9.2.10 DCF timing relations):
>>>> The EIFS is derived from the SIFS and the DIFS and the length of time
>>>> it takes to transmit an ACK Control frame at the lowest PHY mandatory
>>>> rate by the following equation:
>>>> EIFS = aSIFSTime + DIFS + ACKTxTime
>>>> where ACKTxTime is the time expressed in microseconds required to
>>>> transmit an ACK frame, including
>>>> preamble, PLCP header and any additional PHY dependent information, at
>>>> the lowest PHY mandatory rate.
>>>>
>>>> So, EIFS = 16 + 32 + 44 (ACKTX @ 24Mbps) = 92
>>>> or 16 + 32 + 60 (ACKTX @ 6Mbps) = 108
>>>>
>>>> The current value is 86, which I guess is a nice midpoint, but is
>>>> there any reasoning for this value? It should really be set to the
>>>> longest value of 108, as an EIFS is only used when we have no
>>>> information about a frame because it failed the checksum.
>>>>
>>>>>  #define AR5K_INIT_EIFS_TURBO                   6880
>>>>> -#define AR5K_INIT_SIFS                         560
>>>>> -#define AR5K_INIT_SIFS_TURBO                   480
>>>>> +#define AR5K_INIT_SIFS_CLOCK                   560
>>>>
>>>> This is wrong, when you divide by the clock rate, you get a SIFS of 14, not 16.
>>>>
>>>> Cheers,
>>>>
>>>> Jonathan
>>>>
>>>
>>> All _CLOCK variables are left here temporarily until we clean up
>>> AR5210 stuff later, i know it's wrong ;-)
>>> Check out patch 16 that adds the new set_ifs_intervals, there we set
>>> them property, i just left them here so that code can still compile.
>>>
>>
>> Also have in mind that clock on g is not 40 but 44 (for b
>> compatibility) so 396 is correct here (396/44 = 9).
>>
>> Anyway we clean it up + these are only for AR5210 that we still don't
>> support, i just put a _CLOCK prefix so that they don't get mixed up
>> with the correct definitions. Check out patch 16, it should be fine
>> ;-)
>
> Oops, my bad on the clock rate. So, for A mode, it's 40, and G mode,
> 44, or 44 for both?
>
> If that's the case, then some of the values are still wrong (they're
> also wrong in patch 16):
>
> EIFS = 3440 / 44 = 78, which is way shorter than it should be! This
> gives ath5k an advantage over other 802.11-2007-compliant stations.
>
> ACK/CTS TIMEOUT = 1024/44 = 23, which is still much, much shorter than
> the required 50us, once again giving ath5k an advantage for medium
> contention.
>
> SIFS = 560/44 = 12, which is shorter again than the required 16us!
>
> Not saying your work is bad, by the way, but just that the values have
> been wrong in ath5k for a while. :)
>
> Cheers,
>
> Jonathan


Never mind, I didn't read Patch 16 properly... :(

Cheers,

Jonathan

>>
>>
>> --
>> GPG ID: 0xD21DB2DB
>> As you read this post global entropy rises. Have Fun ;-)
>> Nick
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux