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

Reply via email to