On 09/23/2012 11:07 PM, Nathan Hintz wrote: > This is partly based on patches sent by Ćukasz Kwestarz (See > https://lists.openwrt.org/pipermail/openwrt-devel/2012-March/014356.html). > > Signed-off-by: Nathan Hintz <nlhintz at hotmail.com> > > Index: trunk/package/broadcom-wl/Makefile > =================================================================== > --- trunk/package/broadcom-wl/Makefile (revision 33530) > +++ trunk/package/broadcom-wl/Makefile (working copy) > @@ -10,7 +10,7 @@ > > PKG_NAME:=broadcom-wl > PKG_VERSION:=5.10.56.27.3 > -PKG_RELEASE:=4 > +PKG_RELEASE:=5 > > PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(ARCH).tar.bz2 > PKG_SOURCE_URL:=http://downloads.openwrt.org/sources > Index: trunk/package/broadcom-wl/src/wlc.c > =================================================================== > --- trunk/package/broadcom-wl/src/wlc.c (revision 33530) > +++ trunk/package/broadcom-wl/src/wlc.c (working copy) > @@ -499,8 +499,8 @@ > /* driver doesn't support GET */ > > if ((param & PARAM_MODE) == SET) { > - strncpy(pmk.key, value, WSEC_MAX_PSK_LEN); > - pmk.key_len = strlen(value); > + strncpy(pmk.key, str, WSEC_MAX_PSK_LEN); > + pmk.key_len = strlen(str); > > if (pmk.key_len > WSEC_MAX_PSK_LEN) > pmk.key_len = WSEC_MAX_PSK_LEN; > @@ -912,6 +912,41 @@ > .handler = wlc_ioctl, > .desc = "G Mode" > }, > + { > + .name = "phytype", > + .param = INT, > + .data.num = (WLC_GET_PHYTYPE << 16), > + .handler = wlc_ioctl, > + .desc = "PHY Type" > + }, > + { > + .name = "nmode", > + .param = INT, > + .handler = wlc_iovar, > + .data.str = "nmode", > + .desc = "N Mode" > + }, > + { > + .name = "nreqd", > + .param = INT, > + .handler = wlc_iovar, > + .data.str = "nreqd", > + .desc = "N Mode required" > + }, > + { > + .name = "chanspec", > + .param = INT, > + .handler = wlc_iovar, > + .data.str = "chanspec", > + .desc = "Channel Spec (See bcmwifi.h)" > + }, > + { > + .name = "band", > + .param = INT, > + .data.num = ((WLC_GET_BAND << 16) | WLC_SET_BAND), > + .handler = wlc_ioctl, > + .desc = "Band" > + }, > }; > #define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call)) > > @@ -971,7 +1006,7 @@ > set = 1; > switch(cmd->param & PARAM_TYPE) { > case INT: > - intval = strtoul(arg, &end, 10); > + intval = strtoul(arg, &end, 0); > if (end && !(*end)) { > memcpy(buf, &intval, sizeof(intval)); > } else { > Index: trunk/package/broadcom-wl/files/lib/wifi/broadcom.sh > =================================================================== > --- trunk/package/broadcom-wl/files/lib/wifi/broadcom.sh (revision 33530) > +++ trunk/package/broadcom-wl/files/lib/wifi/broadcom.sh (working copy) > @@ -131,6 +131,7 @@ > config_get frag "$device" frag > config_get rts "$device" rts > config_get hwmode "$device" hwmode > + config_get htmode "$device" htmode > local vif_pre_up vif_post_up vif_do_up vif_txpower > local doth=0 > local wmm=1 > @@ -161,15 +162,40 @@ > ;; > esac > > + [ ${channel:-0} -ge 1 -a ${channel:-0} -le 14 ] && band=2 > + [ ${channel:-0} -ge 36 ] && band=1 > + > case "$hwmode" in > - *b) hwmode=0;; > - *bg) hwmode=1;; > - *g) hwmode=2;; > - *gst) hwmode=4;; > - *lrs) hwmode=5;; > - *) hwmode=1;; > + *na) nmode=1; nreqd=0;; > + *a) nmode=0;; > + *ng) gmode=1; nmode=1; nreqd=0;; > + *n) nmode=1; nreqd=1;; > + *b) gmode=0; nmode=0;; > + *bg) gmode=1; nmode=0;; > + *g) gmode=2; nmode=0;; > + *gst) gmode=4; nmode=0;; > + *lrs) gmode=5; nmode=0;; > + *) case "$band" in > + 2) gmode=1; nmode=1; nreqd=0;; > + 1) nmode=1; nreqd=0;; > + *) gmode=1; nmode=1; nreqd=0;; > + esac > + ;; > esac > > + # Use 'nmode' for N-Phy only > + [ "$(wlc ifname $device phytype)" = 4 ] || nmode= > + > + # Use 'chanspec' instead of 'channel' for 'N' modes (See bcmwifi.h) > + [ ${nmode:-0} -ne 0 -a -n "$band" ] && { > + case "$htmode" in > + HT40-) chanspec=$(printf 0x%x%x%02x $band 0xe > $(($channel - 2))); channel=;; > + HT40+) chanspec=$(printf 0x%x%x%02x $band 0xd > $(($channel + 2))); channel=;; > + HT20) chanspec=$(printf 0x%x%x%02x $band 0xb > $channel); channel=;; > + *) ;; > + esac > + } > + > for vif in $vifs; do > config_get vif_txpower "$vif" txpower > > @@ -322,7 +348,10 @@ > wlc ifname "$device" stdin <<EOF > $ifdown > > -gmode ${hwmode:-1} > +${nmode:+band ${band:-0}} > +${nmode:+nmode $nmode} > +${nmode:+${nreqd:+nreqd $nreqd}} > +${gmode:+gmode $gmode} > apsta $apsta > ap $ap > ${mssid:+mssid $mssid} > @@ -344,6 +373,7 @@ > ${wds:+wds $wds} > country ${country:-US} > ${channel:+channel $channel} > +${chanspec:+chanspec $chanspec} > maxassoc ${maxassoc:-128} > slottime ${slottime:--1} > ${frameburst:+frameburst $frameburst} > Hi Nathan,
I had a look at this patch some time earlier, but it somehow slipped through. This looks nice to me. The detect part should also be extended to write a correct initial config. Hauke _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
