Jim McCloskey wrote:
> I've been trying the new combined patch (combined_2.6.20.2.patch)
> posted by Larry Finger on Sun March 11.
>
> This is a 4318 card:
>
> ----------------------------------------------------------------------
> kernel: bcm43xx: Chip ID 0x4318, rev 0x2
> kernel: bcm43xx: Number of cores: 4
> kernel: bcm43xx: Core 0: ID 0x800, rev 0xd, vendor 0x4243
> kernel: bcm43xx: Core 1: ID 0x812, rev 0x9, vendor 0x4243
> kernel: bcm43xx: Core 2: ID 0x804, rev 0xc, vendor 0x4243
> kernel: bcm43xx: Core 3: ID 0x80d, rev 0x7, vendor 0x4243
> kernel: bcm43xx: PHY connected
> kernel: bcm43xx: Detected PHY: Analog: 3, Type 2, Revision 7
> kernel: bcm43xx: Detected Radio: ID: 8205017f (Manuf: 17f Ver: 2050 Rev: 8)
> ----------------------------------------------------------------------
>
> Assocation seems to be about as reliable as before (best when in the
> same room as the access point, which is a LinkSys WRT54GL).
>
> iwconfig reveals:
>
> wlang IEEE 802.11b/g ESSID:"branci40" Nickname:"Broadcom 4318"
> Mode:Managed Frequency=2.437 GHz Access Point: 00:14:BF:BA:77:03
>
> Bit Rate=54 Mb/s Tx-Power=19 dBm
> RTS thr:off Fragment thr:off
> Encryption key:off
> Link Quality=68/100 Signal level=-46 dBm Noise level=-73 dBm
> Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
> Tx excessive retries:0 Invalid misc:0 Missed beacon:0
>
> Using iperf on the internal network (iperf -c 192.168.1.100 -r), I get
> these speeds (averaged over 4 tries for each rate):
>
> 6M: 16.4 Mbits/sec
> 9M: 16.9 Mbits/sec
> (11M: 13.8 Mbits/sec)
> 12M: 17.5 Mbits/sec
> 18M: 17.6 Mbits/sec
> 24M: 18.0 Mbits/sec
> 36M: 18.2 Mbits/sec
> 48M: 18.2 Mbits/sec
> 54M: 18.2 Mbits/sec
You appear to have averaged transmit and receive speeds. It would be better to
report them
separately, as the AP will always send at the highest rate it can.
The (not-yet completed) bash script that I use is attached. The main bug in
this version is that it
sometimes gets a receive rate in the transmit data and vice-versa. I also want
to add some
statistics such as max/min, mean and std. deviation for each rate.
>
> By comparison, an Orinoco Gold card in exactly the same encironment:
>
> wlan1 IEEE 802.11b ESSID:"branci40" Nickname:"HERMES I"
> Mode:Managed Frequency:2.437 GHz Access Point: 00:14:BF:BA:77:03
>
> Bit Rate:11 Mb/s Sensitivity:1/3
> Retry limit:4 RTS thr:off Fragment thr:off
> Encryption key:off
> Power Management:off
> Link Quality=58/92 Signal level=-27 dBm Noise level=-85 dBm
> Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:16
> Tx excessive retries:3 Invalid misc:0 Missed beacon:0
>
> yields speeds in the range between 4.9 and 5.07 MBits/sec under iperf.
>
> Using wget to get a large file from a distant host, I get download
> speeds in the range of 590--615 KB/sec (i.e. about 1min 30secs to
> download the bzipped tarball of the kernel source).
If you use a wired connection, what is your rate? How close is wireless to
saturating your broadband
connection?
There is one patch that may help that is not in 2.6.21-rc4 - it does help my
system at 48 Mbs. It is
also attached.
> Thanks once more,
You are welcome.
Larry
#!/bin/bash
# Shell script to test network performance of a wireless device using iperf
with a server on the LAN
# Version of 03/18/07: Larry Finger
#
# This script has three parameters - the name of the interface, the name of the
iperf server, and
# an optional time per test that defaults to 10 seconds. The wireless utility
'iwconfig' is used
# to change the wireless rate, therefore this script must be run as root.
#
# Sample: ./perf_test eth1 192.168.1.50 2
#
Usage() {
echo
echo "Usage: perf_test <interface> <server address>" [time]
echo
exit
}
#====================================================================================
#----------------------------------- main
-------------------------------------------
#====================================================================================
#
# Check arguments
#
if [ "$1" == "" ] ; then
Usage
fi
if [ "$2" == "" ] ; then
Usage
fi
time="$3"
if [ "$time" == "" ] ; then
time="10"
fi
#
for i in 6 9 11 18 24 36 48 ; do
iwconfig $1 rate "$i"M
echo
echo "iIwconfig rate set to $i Mbs"
for j in 0 1 2 3 4; do
iperf -f m -c $2 -r -t $time > perf.tmp 2>&1
Trans['j']=`grep Mbits perf.tmp | grep 5\] | awk '{i=split($0,a) ;
print a[i-1]}'`
Recv['j']=`grep Mbits perf.tmp | grep 4\] | awk '{i=split($0,a) ; print
a[i-1]}'`
done
echo -n "Transmit rate: "
for j in 0 1 2 3 4; do
echo -n "${Trans['j']} "
done
echo " Mbits/sec"
echo -n " Receive rate: "
for j in 0 1 2 3 4; do
echo -n "${Recv['j']} "
done
echo " Mbits/sec"
unset Trans
unset Recv
done
iwconfig $1 rate 24M
echo
echo "Iwconfig rate reset to 24 Mbs"
exit
There are several places where the PHY version and revision were interchanged.
These are changed in the specifications and now use the new name (analog) for
version.
Signed-off-by: Larry Finger <[EMAIL PROTECTED]>
---
Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_radio.c
===================================================================
--- wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_radio.c
+++ wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_radio.c
@@ -458,7 +458,7 @@ static void bcm43xx_calc_nrssi_offset(st
bcm43xx_phy_write(bcm, 0x005A, 0x0480);
bcm43xx_phy_write(bcm, 0x0059, 0x0810);
bcm43xx_phy_write(bcm, 0x0058, 0x000D);
- if (phy->rev == 0) {
+ if (phy->analog == 0) {
bcm43xx_phy_write(bcm, 0x0003, 0x0122);
} else {
bcm43xx_phy_write(bcm, 0x000A,
@@ -570,9 +570,9 @@ void bcm43xx_calc_nrssi_slope(struct bcm
nrssi0 = (s16)bcm43xx_phy_read(bcm, 0x0027);
bcm43xx_radio_write16(bcm, 0x007A,
bcm43xx_radio_read16(bcm, 0x007A) &
0x007F);
- if (phy->rev >= 2) {
+ if (phy->analog >= 2) {
bcm43xx_write16(bcm, 0x03E6, 0x0040);
- } else if (phy->rev == 0) {
+ } else if (phy->analog == 0) {
bcm43xx_write16(bcm, 0x03E6, 0x0122);
} else {
bcm43xx_write16(bcm, BCM43xx_MMIO_CHANNEL_EXT,
@@ -596,7 +596,7 @@ void bcm43xx_calc_nrssi_slope(struct bcm
bcm43xx_phy_write(bcm, 0x0015, backup[5]);
bcm43xx_phy_write(bcm, 0x002A, backup[6]);
bcm43xx_synth_pu_workaround(bcm, radio->channel);
- if (phy->rev != 0)
+ if (phy->analog != 0)
bcm43xx_write16(bcm, 0x03F4, backup[13]);
bcm43xx_phy_write(bcm, 0x0020, backup[7]);
@@ -692,7 +692,7 @@ void bcm43xx_calc_nrssi_slope(struct bcm
bcm43xx_radio_write16(bcm, 0x007A,
bcm43xx_radio_read16(bcm, 0x007A) &
0x007F);
- if (phy->rev >= 2) {
+ if (phy->analog >= 2) {
bcm43xx_phy_write(bcm, 0x0003,
(bcm43xx_phy_read(bcm, 0x0003)
& 0xFF9F) | 0x0040);
---
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev