Le 04/25/15 12:21, Caleb James DeLisle a écrit :
> This patch adds support for Cisco/Linksys WAP-4410N
> Currently there is no way to update from the factory firmware other than 
> using "tricks"
> but for the amount of times that is required, it's judged not to be a 
> significant problem.
> 
> Also the location of the kernel is moved from the factory location because 
> the 3.x kernel
> is larger than the 2.6 kernel they were using so keeping the memory position 
> was not feasible,
> therefore there is no way to install without changing the uboot environment 
> variable.

In case this helps, this C program deconstructs Linksys' original firmware:
https://github.com/ffainelli/firmware-tools/blob/master/unlapbind.c

and attached is an attempt at re-creating their proprietary firmware
format. I was never sure if we could upgrade without re-flashing u-boot,
so I did not give this a try on a real device, device which is now with
Gabor.
--
Florian
From 8a3c7b1527d114b015286b6e89bf828d3130a340 Mon Sep 17 00:00:00 2001
From: Florian Fainelli <[email protected]>
Date: Wed, 26 Sep 2012 22:10:08 +0200
Subject: [PATCH 1/2] [tools] firmware-utils: add Linksys WAP4410N image
 creator

---
 tools/firmware-utils/Makefile       |   1 +
 tools/firmware-utils/src/wap4410n.c | 299 ++++++++++++++++++++++++++++++++++++
 2 files changed, 300 insertions(+)
 create mode 100644 tools/firmware-utils/src/wap4410n.c

diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile
index a490c9e..9954bea 100644
--- a/tools/firmware-utils/Makefile
+++ b/tools/firmware-utils/Makefile
@@ -60,6 +60,7 @@ define Host/Compile
 	$(call cc,mkbrnimg)
 	$(call cc,mkdapimg)
 	$(call cc, mkcameofw, -Wall)
+	$(call cc,wap4410n,-lcrypto)
 endef
 
 define Host/Install
diff --git a/tools/firmware-utils/src/wap4410n.c b/tools/firmware-utils/src/wap4410n.c
new file mode 100644
index 0000000..b438440
--- /dev/null
+++ b/tools/firmware-utils/src/wap4410n.c
@@ -0,0 +1,299 @@
+/*
+ * Cisco/Linksys WAP4410N image creator
+ *
+ * Copyright (C) 2012, Florian Fainelli <[email protected]>
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <openssl/md5.h>
+
+/* Upgrade type is a bitmask, you can combine several upgrades */
+#define UPGRADE_TYPE_AUTO	0x00
+#define UPGRADE_TYPE_KERNEL	0x01
+#define UPGRADE_TYPE_ROOTFS	0x02
+#define UPGRADE_TYPE_BOOTROM	0x10
+#define UPGRADE_TYPE_BOARD_DATA	0x20
+
+#define PID_SIZE		112
+
+struct input_file {
+	const char *name;
+	uint8_t type;
+};
+
+/* valid upgrade types */
+static const struct input_file upgrade_types[] = {
+	{ "auto", UPGRADE_TYPE_AUTO },
+	{ "kernel", UPGRADE_TYPE_KERNEL },
+	{ "rootfs", UPGRADE_TYPE_ROOTFS },
+	{ "bootrom", UPGRADE_TYPE_BOOTROM },
+	{ "board", UPGRADE_TYPE_BOARD_DATA },
+};
+
+#define ARRAY_SIZE(x)	(sizeof((x)) / sizeof((x[0])))
+
+/* Main header */
+struct lap_hdr {
+	uint32_t	length;
+	uint8_t		upgrade_type;
+} __attribute__ ((__packed__));
+
+/* File descriptors headers */
+struct lap_desc_hdr {
+	uint8_t upgrade_type;
+	uint16_t version;
+	uint32_t length;
+} __attribute__ ((__packed__));
+
+static void usage(void)
+{
+	fprintf(stdout, "Usage: mkwap4410n [options]\n"
+			"-u:	upgrade type (auto, kernel, rootfs, bootrom...)\n"
+			"-p:	PID file\n"
+			"-b:	bootrom file\n"
+			"-k:	kernel file\n"
+			"-r:	roots file\n"
+			"-d:	board data file\n"
+			"-o:	output file\n");
+	exit(EXIT_FAILURE);
+}
+
+static uint8_t parse_upgrade_type(const char *upgrade_type)
+{
+	size_t i;
+
+	for (i = 0; i < ARRAY_SIZE(upgrade_types); i++) {
+		if (!strcmp(upgrade_types[i].name, upgrade_type))
+			return upgrade_types[i].type;
+	}
+
+	return 0xff;
+}
+
+static off_t get_file_size(const char *file)
+{
+	struct stat buf;
+	int ret;
+
+	ret = stat(file, &buf);
+	if (ret < 0)
+		return 0;
+	else
+		return buf.st_size;
+}
+
+#define MAX_FILES	5
+
+static int create_file(const char *upgrade_type, const char *version,
+			struct input_file *infiles, unsigned int num_infiles,
+			const char *outfile)
+{
+	int ret = 1;
+	char *buf;
+	FILE *fp;
+	struct lap_hdr *lap_hdr;
+	struct lap_desc_hdr *desc_hdr;
+	size_t offset = 0;
+	off_t file_size = 0;
+	MD5_CTX md5;
+	unsigned char digest[MD5_DIGEST_LENGTH];
+	unsigned int i;
+	uint16_t hex_version = 0;
+	uint8_t hex_upgrade_type = 0;
+
+	/* Parse version */
+	ret = sscanf(version, "%04hx", &hex_version);
+	if (ret < 0) {
+		fprintf(stderr, "failed to parse version\n");
+		return 1;
+	}
+
+	/* Parse upgrade type */
+	hex_upgrade_type = parse_upgrade_type(upgrade_type);
+	if (hex_upgrade_type > UPGRADE_TYPE_BOARD_DATA) {
+		fprintf(stderr, "invalid upgrade type: %s\n", upgrade_type);
+		return 1;
+	}
+
+	memset(&md5, 0, sizeof(md5));
+	MD5_Init(&md5);
+
+	/* Start writing the PID file */
+	offset = PID_SIZE + sizeof(struct lap_hdr);
+	buf = malloc(offset);
+	if (!buf) {
+		perror("malloc");
+		return 1;
+	}
+
+	fp = fopen(infiles[0].name, "rb");
+	if (!fp) {
+		perror("fopen");
+		goto out;
+	}
+
+	fread(buf, PID_SIZE, 1, fp);
+	fclose(fp);
+
+	/* prepare descriptors, PID file does not have one */
+	for (i = 1; i < num_infiles; i++) {
+		file_size = get_file_size(infiles[i].name);
+
+		/*
+ 		 FIXME: check whether we just need to skip files or if we
+		 should append an empty descriptor for them anyway
+		if (!file_size)
+			continue;
+		*/
+
+		fp = fopen(infiles[i].name, "rb");
+		if (!fp) {
+			perror("fopen");
+			goto out;
+		}
+
+		/* reallocate as many memory as we need to append this file
+		 * and its descriptor to the existing buffer
+		 */
+		buf = realloc(buf, offset + sizeof(struct lap_desc_hdr) + file_size);
+		if (!buf) {
+			perror("malloc");
+			goto out;
+		}
+
+		desc_hdr = (struct lap_desc_hdr *)(buf + offset);
+		desc_hdr->upgrade_type = infiles[i].type;
+		desc_hdr->length = htobe32(file_size);
+
+		/* version is valid only for bootrom or board data */
+		if (infiles[i].type & (UPGRADE_TYPE_BOOTROM | UPGRADE_TYPE_BOARD_DATA))
+			desc_hdr->version = htobe16(hex_version);
+
+		offset += sizeof(struct lap_desc_hdr);
+
+		/* read file into buffer at appropriate location */
+		fread(buf + offset, file_size, 1, fp);
+		fclose(fp);
+		offset += file_size;
+	}
+
+	/* Now build the main header */
+	lap_hdr = (struct lap_hdr *)(buf + PID_SIZE);
+	lap_hdr->upgrade_type = hex_upgrade_type;
+	lap_hdr->length = htobe32(offset);
+
+	/* Compute MD5Sum on the entire file */
+	MD5_Update(&md5, buf, offset);
+	MD5_Final(digest, &md5);
+
+	fp = fopen(outfile, "wb+");
+	if (!fp) {
+		perror("fopen");
+		goto out;
+	}
+
+	/* Write down the buffer */
+	fwrite(buf, offset, 1, fp);
+	fflush(fp);
+	/* And append the MD5 digest */
+	fwrite(digest, sizeof(digest), 1, fp);
+	fclose(fp);
+
+	ret = 0;
+
+out:
+	free(buf);
+	return ret;
+}
+
+int main(int argc, char **argv)
+{
+	int opt;
+	const char *upgrade_type = NULL;
+	const char *outfile = NULL;
+	const char *version = NULL;
+	struct input_file infiles[5];
+	unsigned int index = 0;
+
+	memset(&infiles, 0, sizeof(infiles));
+
+	while ((opt = getopt(argc, argv, "u:p:b:k:r:d:v:o:h")) > 0) {
+		switch (opt) {
+		case 'u':
+			upgrade_type = optarg;
+			break;
+
+		case 'p':
+			infiles[index].type = ~0;
+			infiles[index].name = optarg;
+			index++;
+			break;
+
+		case 'b':
+			infiles[index].type = UPGRADE_TYPE_BOOTROM;
+			infiles[index].name = optarg;
+			index++;
+			break;
+
+		case 'k':
+			infiles[index].type = UPGRADE_TYPE_KERNEL;
+			infiles[index].name = optarg;
+			index++;
+			break;
+
+		case 'r':
+			infiles[index].type = UPGRADE_TYPE_ROOTFS;
+			infiles[index].name = optarg;
+			index++;
+			break;
+
+		case 'd':
+			infiles[index].type = UPGRADE_TYPE_BOARD_DATA;
+			infiles[index].name = optarg;
+			index++;
+			break;
+
+		case 'v':
+			version = optarg;
+			break;
+		case 'o':
+			outfile = optarg;
+			break;
+		case 'h':
+		default:
+			usage();
+			return 1;
+		}
+	}
+
+	argc -= optind;
+	argv += optind;
+
+	if (index < 2) {
+		fprintf(stderr, "at least two input files are required\n");
+		return 1;
+	} else if (index > MAX_FILES) {
+		fprintf(stderr, "too many files specified\n");
+		return 1;
+	}
+
+	return create_file(upgrade_type, version, infiles, index, outfile);
+}
-- 
1.8.1.2

From c4d8fe136c7c603768a6c81d7f72531b8da0a992 Mon Sep 17 00:00:00 2001
From: Florian Fainelli <[email protected]>
Date: Wed, 26 Sep 2012 22:10:35 +0200
Subject: [PATCH 2/2] [ar71xx] add support for the Linksys WAP4410N

---
 target/linux/ar71xx/base-files/etc/diag.sh         |   3 +
 .../linux/ar71xx/base-files/etc/uci-defaults/leds  |   4 +
 target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
 target/linux/ar71xx/config-3.3                     |   3 +-
 .../ar71xx/files/arch/mips/ath79/mach-wap4410n.c   | 141 +++++++++++++++++++++
 target/linux/ar71xx/generic/profiles/linksys.mk    |  10 ++
 target/linux/ar71xx/image/Makefile                 |   8 ++
 .../610-MIPS-ath79-openwrt-machines.patch          |  25 +++-
 .../611-MIPS-ath79-TL-MR3040-support.patch         |   2 +-
 9 files changed, 190 insertions(+), 9 deletions(-)
 create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-wap4410n.c

diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
index 420d690..477e129 100755
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -163,6 +163,9 @@ get_status_led() {
 	wp543)
 		status_led="wp543:green:diag"
 		;;
+	wap4410n)
+		status_led="wap4410n:green:power"
+		;;
 	wrt400n)
 		status_led="wrt400n:blue:wps"
 		;;
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/leds b/target/linux/ar71xx/base-files/etc/uci-defaults/leds
index e776fbf..16b13fc 100755
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/leds
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/leds
@@ -150,6 +150,10 @@ tl-wr2543n)
 	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
 	;;
 
+wap4410n)
+	set_led_wlan "wlan" "WLAN" "wap4410n:green:wlan" "phy0tpt"
+	;;
+
 wrt160nl)
 	ucidef_set_led_wlan "wlan" "WLAN" "wrt160nl:blue:wlan" "phy0tpt"
 	;;
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index 3ba23b7..2974a8d 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -390,6 +390,9 @@ ar71xx_board_detect() {
 	*WNR2000)
 		name="wnr2000"
 		;;
+	*WAP4410N)
+		name="wap4410n"
+		;;
 	*WRT160NL)
 		name="wrt160nl"
 		;;
diff --git a/target/linux/ar71xx/config-3.3 b/target/linux/ar71xx/config-3.3
index db53c2b..56f1598 100644
--- a/target/linux/ar71xx/config-3.3
+++ b/target/linux/ar71xx/config-3.3
@@ -69,6 +69,7 @@ CONFIG_ATH79_MACH_TL_WR841N_V1=y
 CONFIG_ATH79_MACH_TL_WR941ND=y
 CONFIG_ATH79_MACH_UBNT=y
 CONFIG_ATH79_MACH_UBNT_XM=y
+CONFIG_ATH79_MACH_WAP4410N=y
 CONFIG_ATH79_MACH_WHR_HP_G300N=y
 CONFIG_ATH79_MACH_WLAE_AG300N=y
 CONFIG_ATH79_MACH_WNDR3700=y
@@ -90,7 +91,7 @@ CONFIG_BCMA_POSSIBLE=y
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_CEVT_R4K=y
 CONFIG_CEVT_R4K_LIB=y
-CONFIG_CMDLINE="rootfstype=squashfs,yaffs,jffs2 noinitrd"
+CONFIG_CMDLINE="rootfstype=squashfs,yaffs,jffs2 noinitrd board=WAP4410N"
 CONFIG_CMDLINE_BOOL=y
 # CONFIG_CMDLINE_OVERRIDE is not set
 CONFIG_CPU_BIG_ENDIAN=y
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-wap4410n.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-wap4410n.c
new file mode 100644
index 0000000..ba91138
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-wap4410n.c
@@ -0,0 +1,141 @@
+/*
+ *  Linksys WAP4410N board support
+ *
+ *  Copyright (C) 2012 Florian Fainelli <[email protected]>
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/physmap.h>
+
+#include <asm/mach-ath79/ar71xx_regs.h>
+#include <asm/mach-ath79/ath79.h>
+
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define WAP4410N_GPIO_LED_WLAN		0	/* active low */
+#define WAP4410N_GPIO_LED_POWER		1	/* active high */
+
+#define WAP4410N_GPIO_BTN_RESET		21	/* active low */
+
+#define WAP4410N_KEYS_POLL_INTERVAL	20	/* msecs */
+#define WAP4410N_KEYS_DEBOUNE_INTERVAL	(3 * WAP4410N_KEYS_POLL_INTERVAL)
+
+#define WAP4410N_SERCOMM_OFFSET		0x3ff70
+#define WAP4410N_MAC0_OFFSET		0x30
+
+static struct mtd_partition wap4410n_partitions[] = {
+	{
+		.name		= "uboot",
+		.offset		= 0,
+		.size		= 0x040000,
+		.mask_flags	= MTD_WRITEABLE,
+	}, {
+		.name		= "env",
+		.offset		= 0x040000,
+		.size		= 0x010000,
+		.mask_flags	= MTD_WRITEABLE,
+	}, {
+		.name		= "rootfs",
+		.offset		= 0x050000,
+		.size		= 0x650000,
+	}, {
+		.name		= "linux",
+		.offset		= 0x6a0000,
+		.size		= 0x140000,
+	}, {
+		.name		= "nvram",
+		.offset		= 0x7e0000,
+		.size		= 0x010000,
+		.mask_flags	= MTD_WRITEABLE,
+	}, {
+		.name		= "caldata",
+		.offset		= 0x7f0000,
+		.size		= 0x010000,
+		.mask_flags	= MTD_WRITEABLE,
+	},
+};
+
+static struct physmap_flash_data wap4410n_flash_data = {
+	.width		= 2,
+	.parts		= wap4410n_partitions,
+	.nr_parts	= ARRAY_SIZE(wap4410n_partitions),
+};
+
+static struct resource wap4410n_flash_resources[] = {
+	[0] = {
+		.start	= AR71XX_SPI_BASE,
+		.end	= AR71XX_SPI_BASE + AR71XX_SPI_SIZE - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+};
+
+static struct platform_device wap4410n_flash_device = {
+	.name		= "physmap-flash",
+	.id		= -1,
+	.resource	= wap4410n_flash_resources,
+	.num_resources	= ARRAY_SIZE(wap4410n_flash_resources),
+	.dev		= {
+		.platform_data = &wap4410n_flash_data,
+	},
+};
+
+static struct gpio_led wap4410n_leds_gpio[] __initdata = {
+	{
+		.name		= "wap4410n:green:wlan",
+		.gpio		= WAP4410N_GPIO_LED_WLAN,
+		.active_low	= 1,
+	}, {
+		.name		= "wap4410n:green:power",
+		.gpio		= WAP4410N_GPIO_LED_POWER,
+		.active_low	= 1,
+		.default_trigger = "default-on",
+	}
+};
+
+static struct gpio_keys_button wap4410n_gpio_keys[] __initdata = {
+	{
+		.desc		= "reset",
+		.type		= EV_KEY,
+		.code		= KEY_RESTART,
+		.debounce_interval = WAP4410N_KEYS_DEBOUNE_INTERVAL,
+		.gpio		= WAP4410N_GPIO_BTN_RESET,
+		.active_low	= 1,
+	}
+};
+
+static void __init wap4410n_setup(void)
+{
+	u8 *eeprom = (u8 *)KSEG1ADDR(0x1fff1000);
+	u8 *mac = (u8 *)KSEG1ADDR(0x1f000000 + WAP4410N_SERCOMM_OFFSET +
+				WAP4410N_MAC0_OFFSET);
+
+	ath79_register_mdio(0, 0x0);
+
+	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
+	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
+	ath79_eth0_data.phy_mask = 0x1;
+
+	ath79_register_eth(0);
+
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(wap4410n_leds_gpio),
+				 wap4410n_leds_gpio);
+
+	ath79_register_gpio_keys_polled(-1, WAP4410N_KEYS_POLL_INTERVAL,
+					ARRAY_SIZE(wap4410n_gpio_keys),
+					wap4410n_gpio_keys);
+
+	ath79_register_wmac(eeprom, NULL);
+
+	platform_device_register(&wap4410n_flash_device);
+}
+
+MIPS_MACHINE(ATH79_MACH_WAP4410N, "WAP4410N", "Linksys WAP4410N", wap4410n_setup);
diff --git a/target/linux/ar71xx/generic/profiles/linksys.mk b/target/linux/ar71xx/generic/profiles/linksys.mk
index bedf3a3..a4426a7 100644
--- a/target/linux/ar71xx/generic/profiles/linksys.mk
+++ b/target/linux/ar71xx/generic/profiles/linksys.mk
@@ -5,6 +5,15 @@
 # See /LICENSE for more information.
 #
 
+define Profile/WAP4410N
+	NAME:=Linksys WAP4410N
+	PACKAGES:=
+endef
+
+define Profile/WAP4410N/Description
+	Package set optimized for the Linksys WAP4410N.
+endef
+
 define Profile/WRT160NL
 	NAME:=Linksys WRT160NL
 	PACKAGES:=kmod-usb-core kmod-usb2
@@ -23,5 +32,6 @@ define Profile/WRT400N/Description
 	Package set optimized for the Linksys WRT400N.
 endef
 
+$(eval $(call Profile,WAP4410N))
 $(eval $(call Profile,WRT160NL))
 $(eval $(call Profile,WRT400N))
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
index f93e195..207ed3c 100644
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -192,6 +192,13 @@ define Image/BuildKernel
 	$(call Image/Build/Initramfs)
 endef
 
+define Image/Build/WAP4410N
+	$(call MkuImageGzip,$(2),$(3))
+	if [ -e "$(call sysupname,$(1),$(2))" ]; then \
+		wap4410n -u auto -v 1007 -k $(KDIR_TMP)/vmlinux-$(2).uImage -r $(KDIR)/root.$(1) -o $(call factoryname,$(1),$(2)); \
+	fi
+endef
+
 define Image/Build/WRT400N
 	$(call MkuImageLzma,$(2),$(3))
 	$(call Sysupgrade/KRuImage,$(1),$(2),1310720,6488064)
@@ -843,6 +850,7 @@ $(eval $(call SingleProfile,WHRHPG300N,$(fs_64k),WHRHPG300N,whr-hp-g300n,WHR-HP-
 $(eval $(call SingleProfile,WHRHPG300N,$(fs_64k),WHRHPGN,whr-hp-gn,WHR-HP-GN,ttyS0,115200,$$(whrhpg300n_mtdlayout),WHR-HP-GN))
 $(eval $(call SingleProfile,WHRHPG300N,$(fs_64k),WLAEAG300N,wlae-ag300n,WLAE-AG300N,ttyS0,115200,$$(whrhpg300n_mtdlayout),WLAE-AG300N))
 
+$(eval $(call SingleProfile,WAP4410N,$(fs_64k),WAP4410N,wap4410n,WAP4410N,ttyS0,115200))
 $(eval $(call SingleProfile,WRT400N,$(fs_64k),WRT400N,wrt400n,WRT400N,ttyS0,115200))
 
 $(eval $(call SingleProfile,WZRHPG30XNH,$(fs_128k),WZRHPG300NH,wzr-hp-g300nh,WZR-HP-G300NH,ttyS0,115200,WZR-HP-G300NH))
diff --git a/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch
index 6f6da2d..5b71091 100644
--- a/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch
+++ b/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch
@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -16,18 +16,98 @@
+@@ -16,18 +16,99 @@
  
  enum ath79_mach_type {
  	ATH79_MACH_GENERIC = 0,
@@ -81,6 +81,7 @@
 +	ATH79_MACH_UBNT_RS,		/* Ubiquiti RouterStation */
  	ATH79_MACH_UBNT_UNIFI, 		/* Ubiquiti Unifi */
  	ATH79_MACH_UBNT_XM,		/* Ubiquiti Networks XM board rev 1.0 */
++	ATH79_MACH_WAP4410N,		/* Linksys WAP4410N */
 +	ATH79_MACH_WHR_G301N,		/* Buffalo WHR-G301N */
 +	ATH79_MACH_WHR_HP_G300N,	/* Buffalo WHR-HP-G300N */
 +	ATH79_MACH_WHR_HP_GN,		/* Buffalo WHR-HP-GN */
@@ -202,7 +203,7 @@
  config ATH79_MACH_PB44
  	bool "Atheros PB44 reference board"
  	select SOC_AR71XX
-@@ -67,6 +147,447 @@ config ATH79_MACH_PB44
+@@ -67,6 +147,456 @@ config ATH79_MACH_PB44
  	  Say 'Y' here if you want your kernel to support the
  	  Atheros PB44 reference board.
  
@@ -358,6 +359,15 @@
 +	select ATH79_DEV_M25P80
 +	select ATH79_DEV_USB
 +
++config ATH79_MACH_WAP4410N
++	bool "Linksys WAP4410N board support"
++	select SOC_AR913X
++	select ATH79_DEV_ETH
++	select ATH79_DEV_GPIO_BUTTONS
++	select ATH79_DEV_LEDS_GPIO
++	select ATH79_DEV_WMAC
++	select ATH79_NVRAM
++
 +config ATH79_MACH_WRT160NL
 +	bool "Linksys WRT160NL board support"
 +	select SOC_AR913X
@@ -650,7 +660,7 @@
  config ATH79_MACH_UBNT_XM
  	bool "Ubiquiti Networks XM (rev 1.0) board"
  	select SOC_AR724X
-@@ -80,6 +601,24 @@ config ATH79_MACH_UBNT_XM
+@@ -80,6 +610,24 @@ config ATH79_MACH_UBNT_XM
  	  Say 'Y' here if you want your kernel to support the
  	  Ubiquiti Networks XM (rev 1.0) board.
  
@@ -675,7 +685,7 @@
  endmenu
  
  config SOC_AR71XX
-@@ -115,10 +654,6 @@ config SOC_QCA955X
+@@ -115,10 +663,6 @@ config SOC_QCA955X
  	select PCI_AR724X if PCI
  	def_bool n
  
@@ -686,7 +696,7 @@
  config ATH79_DEV_AP9X_PCI
  	select ATH79_PCI_ATH9K_FIXUP
  	def_bool n
-@@ -129,7 +664,14 @@ config ATH79_DEV_DSA
+@@ -129,7 +673,14 @@ config ATH79_DEV_DSA
  config ATH79_DEV_ETH
  	def_bool n
  
@@ -702,7 +712,7 @@
  	def_bool n
  
  config ATH79_DEV_GPIO_BUTTONS
-@@ -161,4 +703,7 @@ config ATH79_PCI_ATH9K_FIXUP
+@@ -161,4 +712,7 @@ config ATH79_PCI_ATH9K_FIXUP
  config ATH79_ROUTERBOOT
  	def_bool n
  
@@ -712,7 +722,7 @@
  endif
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -38,9 +38,65 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
+@@ -38,9 +38,66 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
  #
  # Machines
  #
@@ -766,6 +776,7 @@
 +obj-$(CONFIG_ATH79_MACH_TL_WR703N)	+= mach-tl-wr703n.o
 +obj-$(CONFIG_ATH79_MACH_UBNT)		+= mach-ubnt.o
  obj-$(CONFIG_ATH79_MACH_UBNT_XM)	+= mach-ubnt-xm.o
++obj-$(CONFIG_ATH79_MACH_WAP4410N)	+= mach-wap4410n.o
 +obj-$(CONFIG_ATH79_MACH_WHR_HP_G300N)	+= mach-whr-hp-g300n.o
 +obj-$(CONFIG_ATH79_MACH_WLAE_AG300N)	+= mach-wlae-ag300n.o
 +obj-$(CONFIG_ATH79_MACH_WNDR3700)	+= mach-wndr3700.o
diff --git a/target/linux/ar71xx/patches-3.3/611-MIPS-ath79-TL-MR3040-support.patch b/target/linux/ar71xx/patches-3.3/611-MIPS-ath79-TL-MR3040-support.patch
index 4e6d491..d8db56e 100644
--- a/target/linux/ar71xx/patches-3.3/611-MIPS-ath79-TL-MR3040-support.patch
+++ b/target/linux/ar71xx/patches-3.3/611-MIPS-ath79-TL-MR3040-support.patch
@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
-@@ -412,7 +412,7 @@ config ATH79_MACH_EAP7660D
+@@ -421,7 +421,7 @@ config ATH79_MACH_EAP7660D
  	select ATH79_DEV_M25P80
  
  config ATH79_MACH_TL_MR11U
-- 
1.8.1.2

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to