From: Ivo van Doorn <[EMAIL PROTECTED]> Optimize RATE flags by using the FIELD32() macro's, also make the unit in which the rate is handled the same as is used in the dscape stack.
Signed-off-by: Ivo van Doorn <[EMAIL PROTECTED]> diff -uprN wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2400pci.c wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2400pci.c --- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 2006-04-27 21:38:23.000000000 +0200 +++ wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 2006-04-27 21:39:24.000000000 +0200 @@ -550,7 +550,7 @@ rt2400pci_config_duration(struct rt2x00_ rt2x00_register_read(rt2x00pci, CSR19, ®); value = SIFS + (2 * short_slot_time); rt2x00_set_field32(®, CSR19_DIFS, value); - value = SIFS + get_duration(IEEE80211_HEADER + ACK_SIZE, 2); + value = SIFS + get_duration(IEEE80211_HEADER + ACK_SIZE, 10); rt2x00_set_field32(®, CSR19_EIFS, value); rt2x00_register_write(rt2x00pci, CSR19, reg); @@ -580,11 +580,11 @@ rt2400pci_config_rate(struct rt2x00_pci value = SIFS + PLCP + (2 * (conf->short_slot_time ? SHORT_SLOT_TIME : SLOT_TIME)) + preamble - + get_duration(ACK_SIZE, 2); + + get_duration(ACK_SIZE, 10); rt2x00_set_field32(®[0], TXCSR1_ACK_TIMEOUT, value); value = SIFS + PLCP + preamble - + get_duration(ACK_SIZE, 2); + + get_duration(ACK_SIZE, 10); rt2x00_set_field32(®[0], TXCSR1_ACK_CONSUME_TIME, value); rt2x00_register_write(rt2x00pci, TXCSR1, reg[0]); diff -uprN wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2500pci.c wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2500pci.c --- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 2006-04-27 21:38:23.000000000 +0200 +++ wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 2006-04-27 21:39:24.000000000 +0200 @@ -565,7 +565,7 @@ rt2500pci_config_duration(struct rt2x00_ rt2x00_register_read(rt2x00pci, CSR19, ®); value = SIFS + (2 * short_slot_time); rt2x00_set_field32(®, CSR19_DIFS, value); - value = SIFS + get_duration(IEEE80211_HEADER + ACK_SIZE, 2); + value = SIFS + get_duration(IEEE80211_HEADER + ACK_SIZE, 10); rt2x00_set_field32(®, CSR19_EIFS, value); rt2x00_register_write(rt2x00pci, CSR19, reg); @@ -595,11 +595,11 @@ rt2500pci_config_rate(struct rt2x00_pci value = SIFS + PLCP + (2 * (conf->short_slot_time ? SHORT_SLOT_TIME : SLOT_TIME)) + preamble - + get_duration(ACK_SIZE, 2); + + get_duration(ACK_SIZE, 10); rt2x00_set_field32(®[0], TXCSR1_ACK_TIMEOUT, value); value = SIFS + PLCP + preamble - + get_duration(ACK_SIZE, 2); + + get_duration(ACK_SIZE, 10); rt2x00_set_field32(®[0], TXCSR1_ACK_CONSUME_TIME, value); rt2x00_register_write(rt2x00pci, TXCSR1, reg[0]); diff -uprN wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2500usb.c wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2500usb.c --- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 2006-04-27 21:38:23.000000000 +0200 +++ wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 2006-04-27 21:39:24.000000000 +0200 @@ -467,7 +467,7 @@ rt2500usb_config_rate(struct rt2x00_usb value = SIFS + PLCP + (2 * (conf->short_slot_time ? SHORT_SLOT_TIME : SLOT_TIME)) + preamble - + get_duration(ACK_SIZE, 2); + + get_duration(ACK_SIZE, 10); rt2x00_set_field16_nb(®, TXRX_CSR1_ACK_TIMEOUT, value); rt2x00_register_write(rt2x00usb, TXRX_CSR1, reg); diff -uprN wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2x00.h wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2x00.h --- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2x00.h 2006-04-27 21:36:19.000000000 +0200 +++ wireless-dev-rt2x00-patch/drivers/net/wireless/d80211/rt2x00/rt2x00.h 2006-04-27 21:39:24.000000000 +0200 @@ -609,71 +609,69 @@ struct scanning{ * passed to the ieee80211 kernel. We need to make it a consist of * multiple fields because we want to store more then 1 device specific * values inside the value. - * 1 - rate, stored as 0.5Mbit/s. - * 2 - MASK_RATE, which rates are enabled in this mode, this mask + * 1 - rate, stored as 100 kbit/s. + * 2 - preamble, short_preamble enabled flag. + * 3 - MASK_RATE, which rates are enabled in this mode, this mask * corresponds with the TX register format for the current device. - * 3 - plcp, 802.11b rates are device specific, + * 4 - plcp, 802.11b rates are device specific, * 802.11g rates are set according to the ieee802.11a-1999 p.14. - * 4 - preamble, short_preamble enabled flag. * The bit to enable preamble is set in a seperate define. */ -#define OFFSET_RATE 0 -#define MASK_RATE 0x000000ff -#define OFFSET_RATEMASK 8 -#define MASK_RATEMASK 0x00000fff -#define OFFSET_PLCP 20 -#define MASK_PLCP 0x000000ff -#define OFFSET_PREAMBLE 28 -#define MASK_PREAMBLE 0x000000ff +#define DEV_RATE FIELD32(0x000007ff) +#define DEV_PREAMBLE FIELD32(0x00000800) +#define DEV_RATEMASK FIELD32(0x00fff000) +#define DEV_PLCP FIELD32(0xff000000) /* - * Macro to set or get a field in the device - * specific value. + * Macro's for creating the device specific rate value. */ #define DEVICE_RATE_VALUE(__rate, __mask, __plcp) \ - (int)( (__rate) << OFFSET_RATE \ - | (__mask) << OFFSET_RATEMASK \ - | (__plcp) << OFFSET_PLCP ) + (int) ((((__rate) << DEV_RATE.bit_offset) & DEV_RATE.bit_mask) \ + | (((__mask) << DEV_RATEMASK.bit_offset) & DEV_RATEMASK.bit_mask) \ + | (((__plcp) << DEV_PLCP.bit_offset) & DEV_PLCP.bit_mask) ) #define DEVICE_RATE_PREAMBLE(__value) \ - (int)( (__value) | 1 << OFFSET_PREAMBLE ) + (int)( (__value) | (1 << DEV_PREAMBLE.bit_offset) ) +/* + * Macro for reading the device specific rate value. + */ #define DEVICE_RATE_FIELD(__value, __mask) \ - (int)( ((__value) >> OFFSET_##__mask) & MASK_##__mask ) + (int)( ((__value) & DEV_##__mask.bit_mask) >> DEV_##__mask.bit_offset) -#define DEVICE_RATE_1MB DEVICE_RATE_VALUE(2, 0x001, 0x00) -#define DEVICE_RATE_2MB DEVICE_RATE_VALUE(4, 0x003, 0x01) +#define DEVICE_RATE_1MB DEVICE_RATE_VALUE(10, 0x001, 0x00) +#define DEVICE_RATE_2MB DEVICE_RATE_VALUE(20, 0x003, 0x01) #define DEVICE_RATE_2MB_PREAMBLE DEVICE_RATE_PREAMBLE(DEVICE_RATE_2MB) -#define DEVICE_RATE_55MB DEVICE_RATE_VALUE(11, 0x007, 0x02) +#define DEVICE_RATE_55MB DEVICE_RATE_VALUE(55, 0x007, 0x02) #define DEVICE_RATE_55MB_PREAMBLE DEVICE_RATE_PREAMBLE(DEVICE_RATE_55MB) -#define DEVICE_RATE_11MB DEVICE_RATE_VALUE(22, 0x00f, 0x03) +#define DEVICE_RATE_11MB DEVICE_RATE_VALUE(110, 0x00f, 0x03) #define DEVICE_RATE_11MB_PREAMBLE DEVICE_RATE_PREAMBLE(DEVICE_RATE_11MB) -#define DEVICE_RATE_6MB DEVICE_RATE_VALUE(12, 0x01f, 0x0b) -#define DEVICE_RATE_9MB DEVICE_RATE_VALUE(18, 0x03f, 0x0f) -#define DEVICE_RATE_12MB DEVICE_RATE_VALUE(24, 0x07f, 0x0a) -#define DEVICE_RATE_18MB DEVICE_RATE_VALUE(36, 0x0ff, 0x0e) -#define DEVICE_RATE_24MB DEVICE_RATE_VALUE(48, 0x1ff, 0x09) -#define DEVICE_RATE_36MB DEVICE_RATE_VALUE(72, 0x3ff, 0x0d) -#define DEVICE_RATE_48MB DEVICE_RATE_VALUE(96, 0x7ff, 0x08) -#define DEVICE_RATE_54MB DEVICE_RATE_VALUE(108, 0xfff, 0x0c) +#define DEVICE_RATE_6MB DEVICE_RATE_VALUE(60, 0x01f, 0x0b) +#define DEVICE_RATE_9MB DEVICE_RATE_VALUE(90, 0x03f, 0x0f) +#define DEVICE_RATE_12MB DEVICE_RATE_VALUE(120, 0x07f, 0x0a) +#define DEVICE_RATE_18MB DEVICE_RATE_VALUE(180, 0x0ff, 0x0e) +#define DEVICE_RATE_24MB DEVICE_RATE_VALUE(240, 0x1ff, 0x09) +#define DEVICE_RATE_36MB DEVICE_RATE_VALUE(360, 0x3ff, 0x0d) +#define DEVICE_RATE_48MB DEVICE_RATE_VALUE(480, 0x7ff, 0x08) +#define DEVICE_RATE_54MB DEVICE_RATE_VALUE(540, 0xfff, 0x0c) /* * Duration calculations - * The rate variable passed is: 0.5MBs. + * The rate variable passed is: 100kbs. * To convert from bytes to bits we multiply size with 8, - * then the size is multiplied with 2 to make the + * then the size is multiplied with 10 to make the * real rate -> rate argument correction. */ static inline u16 get_duration(const unsigned int size, const u8 rate) { - return ((size * 8 * 2) / rate); + return ((size * 8 * 10) / rate); } static inline u16 get_duration_res(const unsigned int size, const u8 rate) { - return ((size * 8 * 2) % rate); + return ((size * 8 * 10) % rate); } #define ACK_SIZE 14
pgp0zYbRnhG8X.pgp
Description: PGP signature