summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--target/linux/image/Makefile4
-rw-r--r--target/linux/image/ar7/Makefile16
-rw-r--r--target/linux/image/brcm/Makefile5
-rw-r--r--target/linux/package/wlcompat/wlcompat.c77
-rw-r--r--target/utils/src/addpattern.c7
5 files changed, 89 insertions, 20 deletions
diff --git a/target/linux/image/Makefile b/target/linux/image/Makefile
index 6509952fac..b6a6c56914 100644
--- a/target/linux/image/Makefile
+++ b/target/linux/image/Makefile
@@ -1,9 +1,5 @@
include $(TOPDIR)/rules.mk
-ifeq ($(BOARD),)
-BOARD:=brcm
-endif
-
KDIR:=$(BUILD_DIR)/linux-$(KERNEL)-$(BOARD)
ifeq ($(BR2_TARGET_ROOTFS_JFFS2),y)
diff --git a/target/linux/image/ar7/Makefile b/target/linux/image/ar7/Makefile
index 1d1aea725b..4436fa9ba9 100644
--- a/target/linux/image/ar7/Makefile
+++ b/target/linux/image/ar7/Makefile
@@ -31,16 +31,14 @@ $(PKG_BUILD_DIR)/LzmaDecode.o: src/LzmaDecode.c
$(PKG_BUILD_DIR)/loader.o: src/loader.c
$(TARGET_CC) $(CFLAGS) -c -o $@ $<
-$(PKG_BUILD_DIR)/srec2bin: src/srec2bin.c
+$(STAGING_DIR)/bin/srec2bin: src/srec2bin.c
$(HOSTCC) -o $@ $<
-$(KDIR)/vmlinux.gz: $(KDIR)/vmlinux
- gzip -c -vf9 < $< > $@
-
$(KDIR)/vmlinux.lzma: $(KDIR)/vmlinux
cat $^ | $(STAGING_DIR)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $@ || (rm -f $@ && false)
-$(BIN_DIR)/openwrt-ar7-2.4-kernel.bin: $(KDIR)/vmlinux.lzma compile
+ifeq ($(IB),)
+$(KDIR)/vmlinux.bin: $(KDIR)/vmlinux.lzma
$(TARGET_CROSS)ld -T $(PKG_BUILD_DIR)/zimage.script -r -b binary $< -o $(KDIR)/zimage.o
$(TARGET_CROSS)ld -static -G 0 --defsym kernel_entry=$(KERNEL_ENTRY) -T $(PKG_BUILD_DIR)/ld.script \
$(PKG_BUILD_DIR)/loader.o \
@@ -48,7 +46,11 @@ $(BIN_DIR)/openwrt-ar7-2.4-kernel.bin: $(KDIR)/vmlinux.lzma compile
$(KDIR)/zimage.o \
-o $(KDIR)/loader
$(TARGET_CROSS)objcopy -O srec $(KDIR)/loader $(KDIR)/ram_zimage.sre
- $(PKG_BUILD_DIR)/srec2bin $(KDIR)/ram_zimage.sre $@
+ $(STAGING_DIR)/bin/srec2bin $(KDIR)/ram_zimage.sre $@
+endif
+
+$(BIN_DIR)/openwrt-ar7-2.4-kernel.bin: $(KDIR)/vmlinux.bin
+ cp $< $@
ifeq ($(FS),jffs2-8MB)
ALIGN:=bs=131072 conv=sync
@@ -79,6 +81,6 @@ clean:
rm -f $(BIN_DIR)/openwrt-ar7*
prepare: $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)/zimage.script $(PKG_BUILD_DIR)/ld.script
-compile: prepare $(PKG_BUILD_DIR)/loader.o $(PKG_BUILD_DIR)/LzmaDecode.o $(PKG_BUILD_DIR)/srec2bin
+compile: prepare $(PKG_BUILD_DIR)/loader.o $(PKG_BUILD_DIR)/LzmaDecode.o $(STAGING_DIR)/bin/srec2bin
install: $(BIN_DIR)/openwrt-ar7-2.4-kernel.bin $(BIN_DIR)/openwrt-ar7-$(KERNEL)-$(FS).bin
diff --git a/target/linux/image/brcm/Makefile b/target/linux/image/brcm/Makefile
index 3399047438..ec8f72ccac 100644
--- a/target/linux/image/brcm/Makefile
+++ b/target/linux/image/brcm/Makefile
@@ -29,15 +29,14 @@ FSNAME:=$(patsubst jffs2-%,jffs2,$(FS))
ifneq ($(FS),jffs2-8MB)
$(BIN_DIR)/openwrt-wrt54g-$(FSNAME).bin: $(BIN_DIR)/openwrt-brcm-$(KERNEL)-$(FS).trx
- $(STAGING_DIR)/bin/addpattern -2 -i $< -o $@ -g
- $(SED) "1s,^W54S,W54G," $@
+ $(STAGING_DIR)/bin/addpattern -4 -p W54G -v v4.20.6 -i $< -o $@ -g
install: $(BIN_DIR)/openwrt-wrt54g-$(FSNAME).bin
endif
ifneq ($(FS),jffs2-4MB)
$(BIN_DIR)/openwrt-wrt54gs-$(FSNAME).bin: $(BIN_DIR)/openwrt-brcm-$(KERNEL)-$(FS).trx
- $(STAGING_DIR)/bin/addpattern -2 -i $< -o $@ -g
+ $(STAGING_DIR)/bin/addpattern -4 -p W54S -v v4.70.6 -i $< -o $@ -g
install: $(BIN_DIR)/openwrt-wrt54gs-$(FSNAME).bin
endif
diff --git a/target/linux/package/wlcompat/wlcompat.c b/target/linux/package/wlcompat/wlcompat.c
index 037d9ce0f8..aaccc7bceb 100644
--- a/target/linux/package/wlcompat/wlcompat.c
+++ b/target/linux/package/wlcompat/wlcompat.c
@@ -2,7 +2,7 @@
* wlcompat.c
*
* Copyright (C) 2005 Mike Baker,
- * Felix Fietkau <nbd@vd-s.ath.cx>
+ * Felix Fietkau <openwrt@nbd.name>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -31,9 +31,9 @@
#include <net/iw_handler.h>
#include <wlioctl.h>
-#include <wlcompat.h>
static struct net_device *dev;
+static unsigned short bss_force;
char buf[WLC_IOCTL_MAXLEN];
/* The frequency of each channel in MHz */
@@ -341,20 +341,53 @@ static int wlcompat_ioctl(struct net_device *dev,
case SIOCSIWAP:
{
int ap = 0;
-
+ int infra = 0;
+ rw_reg_t reg;
+
+ memset(&reg, 0, sizeof(reg));
+
if (wrqu->ap_addr.sa_family != ARPHRD_ETHER)
return -EINVAL;
if (wl_ioctl(dev, WLC_GET_AP, &ap, sizeof(ap)) < 0)
return -EINVAL;
-
- if (wl_ioctl(dev, (ap ? WLC_SET_BSSID : WLC_REASSOC), wrqu->ap_addr.sa_data, 6) < 0)
+
+ if (wl_ioctl(dev, WLC_GET_INFRA, &infra, sizeof(infra)) < 0)
+ return -EINVAL;
+
+ if (!infra) {
+ wl_ioctl(dev, WLC_SET_BSSID, wrqu->ap_addr.sa_data, 6);
+
+ reg.size = 4;
+ reg.byteoff = 0x184;
+ wl_ioctl(dev, WLC_R_REG, &reg, sizeof(reg));
+
+ reg.val &= 0x0000ffff;
+ reg.val |= bss_force << 16;
+ wl_ioctl(dev, WLC_W_REG, &reg, sizeof(reg));
+ }
+
+ if (wl_ioctl(dev, ((ap || !infra) ? WLC_SET_BSSID : WLC_REASSOC), wrqu->ap_addr.sa_data, 6) < 0)
return -EINVAL;
break;
}
case SIOCGIWAP:
{
+#ifdef DEBUG
+ rw_reg_t reg;
+ memset(&reg, 0, sizeof(reg));
+
+ reg.size = 4;
+ reg.byteoff = 0x184;
+ wl_ioctl(dev, WLC_R_REG, &reg, sizeof(reg));
+ printk("bss time = 0x%08x", reg.val);
+
+ reg.byteoff = 0x180;
+ wl_ioctl(dev, WLC_R_REG, &reg, sizeof(reg));
+ printk("%08x\n", reg.val);
+#endif
+
wrqu->ap_addr.sa_family = ARPHRD_ETHER;
if (wl_ioctl(dev,WLC_GET_BSSID,wrqu->ap_addr.sa_data,6) < 0)
return -EINVAL;
@@ -661,6 +694,19 @@ static const iw_handler wlcompat_handler[] = {
wlcompat_ioctl, /* SIOCGIWENCODE */
};
+
+#define WLCOMPAT_SET_MONITOR SIOCIWFIRSTPRIV + 0
+#define WLCOMPAT_GET_MONITOR SIOCIWFIRSTPRIV + 1
+#define WLCOMPAT_SET_TXPWR_LIMIT SIOCIWFIRSTPRIV + 2
+#define WLCOMPAT_GET_TXPWR_LIMIT SIOCIWFIRSTPRIV + 3
+#define WLCOMPAT_SET_ANTDIV SIOCIWFIRSTPRIV + 4
+#define WLCOMPAT_GET_ANTDIV SIOCIWFIRSTPRIV + 5
+#define WLCOMPAT_SET_TXANT SIOCIWFIRSTPRIV + 6
+#define WLCOMPAT_GET_TXANT SIOCIWFIRSTPRIV + 7
+#define WLCOMPAT_SET_BSS_FORCE SIOCIWFIRSTPRIV + 8
+#define WLCOMPAT_GET_BSS_FORCE SIOCIWFIRSTPRIV + 9
+
+
static int wlcompat_private_ioctl(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu,
@@ -738,6 +784,16 @@ static int wlcompat_private_ioctl(struct net_device *dev,
break;
}
+ case WLCOMPAT_SET_BSS_FORCE:
+ {
+ bss_force = (unsigned short) *value;
+ break;
+ }
+ case WLCOMPAT_GET_BSS_FORCE:
+ {
+ *extra = (int) bss_force;
+ break;
+ }
default:
{
return -EINVAL;
@@ -789,6 +845,16 @@ static const struct iw_priv_args wlcompat_private_args[] =
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"get_txant"
},
+ { WLCOMPAT_SET_BSS_FORCE,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "set_bss_force"
+ },
+ { WLCOMPAT_GET_BSS_FORCE,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_bss_force"
+ },
};
static const iw_handler wlcompat_private[] =
@@ -861,6 +927,7 @@ static int __init wlcompat_init()
{
int found = 0, i;
char *devname = "eth0";
+ bss_force = 0;
while (!found && (dev = dev_get_by_name(devname))) {
if ((dev->wireless_handlers == NULL) && ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && i == WLC_IOCTL_MAGIC))
diff --git a/target/utils/src/addpattern.c b/target/utils/src/addpattern.c
index 084ecf29a5..5298f7b003 100644
--- a/target/utils/src/addpattern.c
+++ b/target/utils/src/addpattern.c
@@ -76,7 +76,7 @@ void usage(void) __attribute__ (( __noreturn__ ));
void usage(void)
{
- fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-{0|1|2}]\n");
+ fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-{0|1|2|4}]\n");
exit(EXIT_FAILURE);
}
@@ -136,6 +136,11 @@ int main(int argc, char **argv)
hdr->flags |= SUPPORT_INTEL_FLASH;
hdr->flags |= SUPPORT_5325E_SWITCH;
break;
+ case '4':
+ /* V4 firmware sets the flags to 0x1f */
+ hdr->hw_ver = 1;
+ hdr->flags = 0x1f;
+ break;
default:
usage();