Re: [ath5k-devel] [PATCH 5/7] ath5k: remove ts_retry from ath5k_tx_status

2011-04-12 Thread
Hi,

Isn't there any chance in which info-status.rates[x].count has
  different retry-count value from the one which the firmware actually did.

  For example, driver requests invalid value of retry count and firmware 
rejects it (take other value).

  no such chance  ?

Thanks
Takayuki Kaiso
 Reusing the configured retry counts from the skb cb is more efficient than
 reloading the data from uncached memory.
 Replace ts_longretry (unused) with ts_final_retry which contains the retry
 count for the final rate only

 Signed-off-by: Felix Fietkaun...@openwrt.org
 ---
   drivers/net/wireless/ath/ath5k/ath5k.h |3 +-
   drivers/net/wireless/ath/ath5k/base.c  |   11 -
   drivers/net/wireless/ath/ath5k/desc.c  |   34 
 ++-
   3 files changed, 13 insertions(+), 35 deletions(-)

 diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h 
 b/drivers/net/wireless/ath/ath5k/ath5k.h
 index aa588a0..fcaf4ed 100644
 --- a/drivers/net/wireless/ath/ath5k/ath5k.h
 +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
 @@ -452,11 +452,10 @@ struct ath5k_tx_status {
   u16 ts_seqnum;
   u16 ts_tstamp;
   u8  ts_status;
 - u8  ts_retry[4];
   u8  ts_final_idx;
 + u8  ts_final_retry;
   s8  ts_rssi;
   u8  ts_shortretry;
 - u8  ts_longretry;
   u8  ts_virtcol;
   u8  ts_antenna;
   };
 diff --git a/drivers/net/wireless/ath/ath5k/base.c 
 b/drivers/net/wireless/ath/ath5k/base.c
 index 753662f..1a561b8 100644
 --- a/drivers/net/wireless/ath/ath5k/base.c
 +++ b/drivers/net/wireless/ath/ath5k/base.c
 @@ -1573,20 +1573,27 @@ ath5k_tx_frame_completed(struct ath5k_softc *sc, 
 struct sk_buff *skb,
struct ath5k_txq *txq, struct ath5k_tx_status *ts)
   {
   struct ieee80211_tx_info *info;
 + u8 tries[3];
   int i;

   sc-stats.tx_all_count++;
   sc-stats.tx_bytes_count += skb-len;
   info = IEEE80211_SKB_CB(skb);

 + tries[0] = info-status.rates[0].count;
 + tries[1] = info-status.rates[1].count;
 + tries[2] = info-status.rates[2].count;
 +
   ieee80211_tx_info_clear_status(info);
 - for (i = 0; i= ts-ts_final_idx; i++) {
 +
 + for (i = 0; i  ts-ts_final_idx; i++) {
   struct ieee80211_tx_rate *r =
   info-status.rates[i];

 - r-count = ts-ts_retry[i];
 + r-count = tries[i];
   }

 + info-status.rates[ts-ts_final_idx].count = ts-ts_final_retry;
   info-status.rates[ts-ts_final_idx + 1].idx = -1;

   if (unlikely(ts-ts_status)) {
 diff --git a/drivers/net/wireless/ath/ath5k/desc.c 
 b/drivers/net/wireless/ath/ath5k/desc.c
 index e366d30..0391813 100644
 --- a/drivers/net/wireless/ath/ath5k/desc.c
 +++ b/drivers/net/wireless/ath/ath5k/desc.c
 @@ -366,7 +366,7 @@ static int ath5k_hw_proc_2word_tx_status(struct ath5k_hw 
 *ah,
   AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP);
   ts-ts_shortretry = AR5K_REG_MS(tx_status-tx_status_0,
   AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT);
 - ts-ts_longretry = AR5K_REG_MS(tx_status-tx_status_0,
 + ts-ts_final_retry = AR5K_REG_MS(tx_status-tx_status_0,
   AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT);
   /*TODO: ts-ts_virtcol + test*/
   ts-ts_seqnum = AR5K_REG_MS(tx_status-tx_status_1,
 @@ -375,7 +375,6 @@ static int ath5k_hw_proc_2word_tx_status(struct ath5k_hw 
 *ah,
   AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH);
   ts-ts_antenna = 1;
   ts-ts_status = 0;
 - ts-ts_retry[0] = ts-ts_longretry;
   ts-ts_final_idx = 0;

   if (!(tx_status-tx_status_0  AR5K_DESC_TX_STATUS0_FRAME_XMIT_OK)) {
 @@ -401,7 +400,7 @@ static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw 
 *ah,
   {
   struct ath5k_hw_4w_tx_ctl *tx_ctl;
   struct ath5k_hw_tx_status *tx_status;
 - u32 txstat0, txstat1, txctl2;
 + u32 txstat0, txstat1;

   tx_ctl =desc-ud.ds_tx5212.tx_ctl;
   tx_status =desc-ud.ds_tx5212.tx_stat;
 @@ -413,7 +412,6 @@ static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw 
 *ah,
   return -EINPROGRESS;

   txstat0 = ACCESS_ONCE(tx_status-tx_status_0);
 - txctl2 = ACCESS_ONCE(tx_ctl-tx_control_2);

   /*
* Get descriptor status
 @@ -422,7 +420,7 @@ static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw 
 *ah,
   AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP);
   ts-ts_shortretry = AR5K_REG_MS(txstat0,
   AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT);
 - ts-ts_longretry = AR5K_REG_MS(txstat0,
 + ts-ts_final_retry = AR5K_REG_MS(txstat0,
   AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT);
   ts-ts_seqnum = AR5K_REG_MS(txstat1,
   AR5K_DESC_TX_STATUS1_SEQ_NUM);
 @@ -435,32 +433,6 @@ static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw 
 *ah,
   ts-ts_final_idx = AR5K_REG_MS(txstat1,
   AR5K_DESC_TX_STATUS1_FINAL_TS_IX_5212);

 - /* The longretry counter has the number of 

Re: [ath5k-devel] [PATCH 4/5] ath5k: Reimplement clock rate to usec conversion

2009-12-23 Thread
 text/html; charset=UTF-16BE: Unrecognized 
___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel


Re: [ath5k-devel] [PATCH 4/5] ath5k: Reimplement clock rate to usec conversion

2009-12-21 Thread
,
 - AR5K_TIME_OUT), AR5K_TIME_OUT_CTS), ah-ah_turbo);
 + return ath5k_hw_clocktoh(ah, AR5K_REG_MS(ath5k_hw_reg_read(ah,
 + AR5K_TIME_OUT), AR5K_TIME_OUT_CTS));
  }
  
  /**
 @@ -231,17 +231,61 @@ unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw 
 *ah)
  int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int timeout)
  {
   ATH5K_TRACE(ah-ah_sc);
 - if (ath5k_hw_clocktoh(AR5K_REG_MS(0x, AR5K_TIME_OUT_CTS),
 - ah-ah_turbo) = timeout)
 + if (ath5k_hw_clocktoh(ah, AR5K_REG_MS(0x, AR5K_TIME_OUT_CTS))
 + = timeout)
   return -EINVAL;
  
   AR5K_REG_WRITE_BITS(ah, AR5K_TIME_OUT, AR5K_TIME_OUT_CTS,
 - ath5k_hw_htoclock(timeout, ah-ah_turbo));
 + ath5k_hw_htoclock(ah, timeout));
  
   return 0;
  }
  
  /**
 + * ath5k_hw_htoclock - Translate usec to hw clock units
 + *
 + * @ah: The struct ath5k_hw
 + * @usec: value in microseconds
 + */
 +unsigned int ath5k_hw_htoclock(struct ath5k_hw *ah, unsigned int usec)
 +{
 + return usec * ath5k_hw_get_clockrate(ah);
 +}
 +
 +/**
 + * ath5k_hw_clocktoh - Translate hw clock units to usec
 + * @clock: value in hw clock units
 + */
 +unsigned int ath5k_hw_clocktoh(struct ath5k_hw *ah, unsigned int clock)
 +{
 + return clock / ath5k_hw_get_clockrate(ah);
 +}
 +
 +/**
 + * ath5k_hw_get_clockrate - Get the clock rate for current mode
 + *
 + * @ah: The struct ath5k_hw
 + */
 +unsigned int ath5k_hw_get_clockrate(struct ath5k_hw *ah)
 +{
 + struct ieee80211_channel *channel = ah-ah_current_channel;
 + int clock;
 +
 + if (channel-hw_value  CHANNEL_5GHZ)
 + clock = 40; /* 802.11a */
 + else if (channel-hw_value  CHANNEL_CCK)
 + clock = 22; /* 802.11b */
 + else
 + clock = 44; /* 802.11g */
 +
 + /* Clock rate in turbo modes is twice the normal rate */
 + if (channel-hw_value  CHANNEL_TURBO)
 + clock *= 2;
 +
 + return clock;
 +}
 +
 +/**
   * ath5k_hw_set_lladdr - Set station id
   *
   * @ah: The struct ath5k_hw
 diff --git a/drivers/net/wireless/ath/ath5k/qcu.c 
 b/drivers/net/wireless/ath/ath5k/qcu.c
 index ed9021a..6af0ac8 100644
 --- a/drivers/net/wireless/ath/ath5k/qcu.c
 +++ b/drivers/net/wireless/ath/ath5k/qcu.c
 @@ -529,7 +529,7 @@ unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah)
   else
   slot_time_clock = ath5k_hw_reg_read(ah, AR5K_DCU_GBL_IFS_SLOT);
   
 - return ath5k_hw_clocktoh(slot_time_clock  0x, ah-ah_turbo);
 + return ath5k_hw_clocktoh(ah, slot_time_clock  0x);
  }
  
  /*
 @@ -537,7 +537,7 @@ unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah)
   */
  int ath5k_hw_set_slot_time(struct ath5k_hw *ah, unsigned int slot_time)
  {
 - u32 slot_time_clock = ath5k_hw_htoclock(slot_time, ah-ah_turbo);
 + u32 slot_time_clock = ath5k_hw_htoclock(ah, slot_time);
  
   ATH5K_TRACE(ah-ah_sc);
  
 diff --git a/drivers/net/wireless/ath/ath5k/reset.c 
 b/drivers/net/wireless/ath/ath5k/reset.c
 index 62954fc..f1dc4c8 100644
 --- a/drivers/net/wireless/ath/ath5k/reset.c
 +++ b/drivers/net/wireless/ath/ath5k/reset.c
 @@ -64,8 +64,7 @@ static inline int ath5k_hw_write_ofdm_timings(struct 
 ath5k_hw *ah,
* we scale coef by shifting clock value by 24 for
* better precision since we use integers */
   /* TODO: Half/quarter rate */
 - clock =  ath5k_hw_htoclock(1, channel-hw_value  CHANNEL_TURBO);
 -
 + clock =  (channel-hw_value  CHANNEL_TURBO) ? 80 : 40;
   coef_scaled = ((5 * (clock  24)) / 2) / channel-center_freq;
  
   /* Get exponent
   


-- 
*
株式会社 シンクチューブ
海藻 敬之 tka...@thinktube.com
〒658-0032 神戸市東灘区向洋町中6-9 KFMビル 4E-10
Phone: 078-857-8390
Fax: 078-857-8389
www.thinktube.com


___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel


Re: [ath5k-devel] [PATCH 4/5] ath5k: Reimplement clock rate to usec conversion

2009-12-21 Thread
 ath5k_hw_get_ack_timeout(struct ath5k_hw *ah)
 int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah, unsigned int timeout)
 {
ATH5K_TRACE(ah-ah_sc);
-   if (ath5k_hw_clocktoh(AR5K_REG_MS(0x, AR5K_TIME_OUT_ACK),
-   ah-ah_turbo) = timeout)
+   if (ath5k_hw_clocktoh(ah, AR5K_REG_MS(0x, AR5K_TIME_OUT_ACK))
+   = timeout)
return -EINVAL;
 
 	AR5K_REG_WRITE_BITS(ah, AR5K_TIME_OUT, AR5K_TIME_OUT_ACK,

-   ath5k_hw_htoclock(timeout, ah-ah_turbo));
+   ath5k_hw_htoclock(ah, timeout));
 
 	return 0;

 }
@@ -218,8 +218,8 @@ int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah, unsigned 
int timeout)
 unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah)
 {
ATH5K_TRACE(ah-ah_sc);
-   return ath5k_hw_clocktoh(AR5K_REG_MS(ath5k_hw_reg_read(ah,
-   AR5K_TIME_OUT), AR5K_TIME_OUT_CTS), ah-ah_turbo);
+   return ath5k_hw_clocktoh(ah, AR5K_REG_MS(ath5k_hw_reg_read(ah,
+   AR5K_TIME_OUT), AR5K_TIME_OUT_CTS));
 }
 
 /**

@@ -231,17 +231,61 @@ unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah)
 int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int timeout)
 {
ATH5K_TRACE(ah-ah_sc);
-   if (ath5k_hw_clocktoh(AR5K_REG_MS(0x, AR5K_TIME_OUT_CTS),
-   ah-ah_turbo) = timeout)
+   if (ath5k_hw_clocktoh(ah, AR5K_REG_MS(0x, AR5K_TIME_OUT_CTS))
+   = timeout)
return -EINVAL;
 
 	AR5K_REG_WRITE_BITS(ah, AR5K_TIME_OUT, AR5K_TIME_OUT_CTS,

-   ath5k_hw_htoclock(timeout, ah-ah_turbo));
+   ath5k_hw_htoclock(ah, timeout));
 
 	return 0;

 }
 
 /**

+ * ath5k_hw_htoclock - Translate usec to hw clock units
+ *
+ * @ah: The struct ath5k_hw
+ * @usec: value in microseconds
+ */
+unsigned int ath5k_hw_htoclock(struct ath5k_hw *ah, unsigned int usec)
+{
+   return usec * ath5k_hw_get_clockrate(ah);
+}
+
+/**
+ * ath5k_hw_clocktoh - Translate hw clock units to usec
+ * @clock: value in hw clock units
+ */
+unsigned int ath5k_hw_clocktoh(struct ath5k_hw *ah, unsigned int clock)
+{
+   return clock / ath5k_hw_get_clockrate(ah);
+}
+
+/**
+ * ath5k_hw_get_clockrate - Get the clock rate for current mode
+ *
+ * @ah: The struct ath5k_hw
+ */
+unsigned int ath5k_hw_get_clockrate(struct ath5k_hw *ah)
+{
+   struct ieee80211_channel *channel = ah-ah_current_channel;
+   int clock;
+
+   if (channel-hw_value  CHANNEL_5GHZ)
+   clock = 40; /* 802.11a */
+   else if (channel-hw_value  CHANNEL_CCK)
+   clock = 22; /* 802.11b */
+   else
+   clock = 44; /* 802.11g */
+
+   /* Clock rate in turbo modes is twice the normal rate */
+   if (channel-hw_value  CHANNEL_TURBO)
+   clock *= 2;
+
+   return clock;
+}
+
+/**
  * ath5k_hw_set_lladdr - Set station id
  *
  * @ah: The struct ath5k_hw
diff --git a/drivers/net/wireless/ath/ath5k/qcu.c 
b/drivers/net/wireless/ath/ath5k/qcu.c
index ed9021a..6af0ac8 100644
--- a/drivers/net/wireless/ath/ath5k/qcu.c
+++ b/drivers/net/wireless/ath/ath5k/qcu.c
@@ -529,7 +529,7 @@ unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah)
else
slot_time_clock = ath5k_hw_reg_read(ah, AR5K_DCU_GBL_IFS_SLOT);

-   return ath5k_hw_clocktoh(slot_time_clock  0x, ah-ah_turbo);
+   return ath5k_hw_clocktoh(ah, slot_time_clock  0x);
 }
 
 /*

@@ -537,7 +537,7 @@ unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah)
  */
 int ath5k_hw_set_slot_time(struct ath5k_hw *ah, unsigned int slot_time)
 {
-   u32 slot_time_clock = ath5k_hw_htoclock(slot_time, ah-ah_turbo);
+   u32 slot_time_clock = ath5k_hw_htoclock(ah, slot_time);
 
 	ATH5K_TRACE(ah-ah_sc);
 
diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c

index 62954fc..f1dc4c8 100644
--- a/drivers/net/wireless/ath/ath5k/reset.c
+++ b/drivers/net/wireless/ath/ath5k/reset.c
@@ -64,8 +64,7 @@ static inline int ath5k_hw_write_ofdm_timings(struct ath5k_hw 
*ah,
 * we scale coef by shifting clock value by 24 for
 * better precision since we use integers */
/* TODO: Half/quarter rate */
-   clock =  ath5k_hw_htoclock(1, channel-hw_value  CHANNEL_TURBO);
-
+   clock =  (channel-hw_value  CHANNEL_TURBO) ? 80 : 40;
coef_scaled = ((5 * (clock  24)) / 2) / channel-center_freq;
 
 	/* Get exponent
  




  



--
*
株式会社 シンクチューブ
海藻 敬之 tka...@thinktube.com
〒658-0032 神戸市東灘区向洋町中6-9 KFMビル 4E-10
Phone: 078-857-8390
Fax: 078-857-8389
www.thinktube.com

___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel


Re: [ath5k-devel] [PATCH 4/5] ath5k: Reimplement clock rate to usec conversion

2009-12-21 Thread
 text/html; charset=UTF-16BE: Unrecognized 
___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel


Re: [ath5k-devel] [PATCH 4/5] ath5k: Reimplement clock rate to usec conversion

2009-12-21 Thread
Hi, Lukas and Bob

my last post looks blank and corrupted, sorry for the junk mail..

Below shows my local patch.

Does original Atheros HAL calls the function just for 5GHz
or calls for both 2GHz and 5 GHz.?

In ath5k, ath5k_hw_write_ofdm_timings() is called when
AR_5212 and CHANNEL_OFDM are true, which means
for both 2GHz and 5GHz.

--- reset.c_org 2009-12-17 17:01:29.0 +0900
+++ reset.c 2009-12-22 09:51:16.0 +0900
@@ -64,7 +64,14 @@
* we scale coef by shifting clock value by 24 for
* better precision since we use integers */
/* TODO: Half/quarter rate */
- clock = (channel-hw_value  CHANNEL_TURBO) ? 80 : 40;
+ if (channel-hw_value  CHANNEL_2GHZ)
+ clock = 44; /* here, we do not have to worry about CCK */
+ else
+ clock = 40;
+
+ if (channel-hw_value  CHANNEL_TURBO)
+ clock *= 2;
+
coef_scaled = ((5 * (clock  24)) / 2) / channel-center_freq;

/* Get exponent

Takayuki Kaiso
 On 21.12.2009 11:26 wrote:
   
 Didn't we have to handle CHANNEL_2GHZ case in
 ath5k_hw_write_ofdm_timings() shown below ?
 
 The ath5k gives exactly the same results as original Atheros HAL:

   #define INIT_CLOCKMHZSCALED 0x6400
   unsigned long clockMhzScaled = INIT_CLOCKMHZSCALED;
   if (IS_CHAN_TURBO(chan)) clockMhzScaled *= 2;
   coef_scaled = clockMhzScaled / chan-channel;

 I don't know how the calculations work, they might be explained in the 
 referenced patent, but I didn't change their semantics at all.

   
 I think we should do. then I made my own patch to hadle it and it
 seemed to improve the throughput of 2.4GHz. (even still not as good as
 5Ghz case )
 
 Where's the patch?

 Lukas Turek
   

___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel


Re: [ath5k-devel] 802.11a vs. 802.11g performance

2009-11-21 Thread
: Connection refused

 ==  whuuum..  this shows the receiver kept on receiving for 51 seconds
while the sender completed its xmit at 30 seconds.
 38266 pkts were received while 38267 pkts were xmitted by the
 sender..   this is UDP, not TCP ..

thanks
Takayuki Kaiso





Hi,

  it helped in 11g for us.

Prevoius to the patch, Minstrel reported that 36Mbit/sec was optimal.
Even though the boxes were adjacent to each other.

Madwifi would have acieved 54 in that configuration.

With the patch, both boxes did 54.

In testing these calibration issues, minstrel is your friend. Minstrel 
reports what rates are tried, and what rates succeededd.


If throughput decreases after a softwar change, check the minstrel stats.
Is minstrel trying on all rates??

Derek.

On Fri, 20 Nov 2009, 海藻敬之 wrote:


Hi, Lukas and Nick
 


I'm sending my own patch in a hope it will finally make it through.

 Thanks.
 I did brief test with the patch and those test results show  the
throughput issues  (receiving throughput of ath5k) was fixed.  It's 
so great.
 Thanks a lot, Lukas.  (but with my cases, the problem was for 11g 
not for 11a )







--
*
株式会社 シンクチューブ
海藻 敬之 tka...@thinktube.com
〒658-0032 神戸市東灘区向洋町中6-9 KFMビル 4E-10
Phone: 078-857-8390
Fax: 078-857-8389
www.thinktube.com

___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel


Re: [ath5k-devel] Ath5k Packet loss

2009-10-14 Thread

Hi,
 
I am now facing the same (or similar) problem which Qasim reported  3 
weeks before.

(In my case, mode is Ad-Hoc rather than STA/AP )
Details are reported below, but in short things have bogged down here 
with me

while I am start looking around  ath5k_hw_noise_floor_calibration() and
related register settings in  reg.h,  


configuration of my network
-simple 2 nodes :
  one is Soekris 4826 with Madwifi-0.9.4 and
  the other is Ubiquity RS-Pro with Ath5k (compat-wireless-2009-0820)
- wireless card : SparkLAN 166AG (MAC AR5414)  on both nodes
- operation mode : IBSS a d-hoc

 test scenario 
 - iperf (UDP)  between  the PC(A) connected to Soekris 4826 with 
Madwifi-0.9.4 and
  another PC(B) connected to Ubiquity RS-Pro with Ath5k 
(compat-wireless-2009-0820)

 - IBSS ad-hoc wireless between Soekris 4826 and Ubiquity RS-Pro

 result 
 1. when iperf packets go from PC(B) to PC(A), iperf UDP receiver 
showed up to 16Mbps

 and loss is 0.0%   -- looks so great .

2.  change the flow direction and when iperf packets go from PC(A) to 
PC(B),
 iperf UDP receiver showed following results.   (in this case ath5 
is receiver side )

 (iperf -c x.x.x.x -u -b 12M -t 30 )

  - 90% loss  (when sender(madwifi) set as rate 54M fixed)
  -  90% loss  (when sender(madwifi) set as rate 48M fixed)
  -  1% ~ 3% loss (when sender(madwifi) set as rate 36M fixed)
  -  0.2% ~ 0.7% loss (when sender(madwifi) set as rate 24M fixed)
  - 5%~20%(when sender(madwifi) set as rate auto)

   I added some lines in ath5k_tasklet_rx() for investigating the error 
reason

  and found huge number of AR5K_RXERR_CRC error happened for
  54M and 48Mbps cases.

   Why AR5K_RXERR_CRC happened in just one direction ? 
   I modified AR5K_DEFAULT_ANTENNA from 0 to 1 to

  disable antenna diversity , but the iperf results showed no change.

   HW (wireless card / Antenna ) itself  does not have problem 
(verified  with  4 or 5  HW sets ), I believe.


Takayuki Kaiso



I have a gentoo system and the latest Ath5k drivers from 
compat-wireless. I downloaded them about a week back. I understand 
that the tarball is updated daily.


I have three Ubiquiti SRC cards (AR5212). I have configured one of 
them as an AP in 802.11a mode using channel 149. The other two are 
stations connected to the AP. I fixed the rate to 6Mbps.


I have an iperf server running on the AP which accepts UDP traffic. 
One of the stations sends UDP packets at a rate of 6Mbps to the AP. 
Because there are no surrounding APs in 802.11a mode, the band is very 
quiet. However, I am surprised that I get 2.6% packet loss when I run 
the above mentioned experiment. The distance of both stations is no 
more than 10 meters from the AP. Also, the txpower for both STAs is 30dbm.


One STA sends UDP packets to the AP at 6Mbps for 30 seconds and the 
report that iperf generates is as follows:


[ ID] Interval   Transfer Bandwidth 
JitterLost/Total Datagrams
[  3]  0.0-30.1 sec  18.3 MBytes  5.11 Mbits/sec  0.301 ms  352/13434 
(2.6%)


Considering that there is no activity on this channel except the 
beacons of AP and probe requests/responses from the other STA, how can 
352 packets get lost?


To make things worse, I tried the above experiment with minimal 
bandwidth. Very oddly, the results are as follows:


[ ID] Interval   Transfer Bandwidth
Jitter  Lost/Total Datagrams
[  3]  0.0-31.0 sec  44.5 KBytes  11.8 Kbits/sec  0.060 ms1/   32 
(3.1%)


Why would even a packet get lost at this very slow data rate? I have 
repeated the above several times, and it always results in about the 
same numbers.


Earlier, I had also noticed that if I ping one STA from the other STA, 
about every 10 seconds, the ping response time jumps from 0.8 
milliseconds to 25 milliseconds.


I would be really grateful if I can get some feedback fro myou guys on 
this so that we can fix whatever is messing things up here.


Thanks,
-Qasim



___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel
  



--
*
株式会社 シンクチューブ
海藻 敬之 tka...@thinktube.com
〒658-0032 神戸市東灘区向洋町中6-9 KFMビル 4E-10
Phone: 078-857-8390
Fax: 078-857-8389
www.thinktube.com

___
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel