rendered paste bodyIndex: tools/firmware-utils/src/addpattern.c===================================================================--- tools/firmware-utils/src/addpattern.c (revision 17037)+++ tools/firmware-utils/src/addpattern.c (working copy)@@ -29,11 +29,11 @@ */ /* January 12, 2005- * + * * Modified by rodent at rodent dot za dot net * Support added for the new WRT54G v2.2 and WRT54GS v1.1 "flags" * Without the flags set to 0x7, the above units will refuse to flash.- * + * * Extensions: * -{0|1|2} sets {0|1} sets hw_ver flag to 0/1. {2} sets hw_ver to 1 * and adds the new hardware "flags" for the v2.2/v1.1 units@@ -87,16 +87,48 @@ unsigned char res2[10]; } ; +struct board_info {+ char *id;+ char *pattern;+ char hw_ver;+ char unused;+ char flags[2];+};++struct board_info boards[] = {+ {+ .id = "WRT160NL",+ .pattern = "NL16",+ .hw_ver = 0x00,+ .unused = 0x0f,+ .flags = {0x3f, 0x00},+ }, {+ /* Terminating entry */+ .id = NULL,+ }+};+ /**********************************************************************/ void usage(void) __attribute__ (( __noreturn__ )); void usage(void) {- fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-r #.#] [-{0|1|2|4}] -h\n");+ fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-B board_id] [-p pattern] [-g] [-b] [-v v#.#.#] [-r #.#] [-{0|1|2|4}] -h\n"); exit(EXIT_FAILURE); } +struct board_info *find_board(char *id)+{+ struct board_info *board;++ for (board = boards; board->id != NULL; board++)+ if (strcasecmp(id, board->id) == 0)+ return board;++ return NULL;+}+ int main(int argc, char **argv) { char buf[1024]; /* keep this at 1k or adjust garbage calc below */@@ -108,6 +140,8 @@ char *pattern = CODE_PATTERN; char *pbotpat = PBOT_PATTERN; char *version = CYBERTAN_VERSION;+ char *board_id = NULL;+ struct board_info *board = NULL; int gflag = 0; int pbotflag = 0; int c;@@ -121,7 +155,7 @@ hdr = (struct code_header *) buf; memset(hdr, 0, sizeof(struct code_header)); - while ((c = getopt(argc, argv, "i:o:p:gbv:0124hr:")) != -1) {+ while ((c = getopt(argc, argv, "i:o:p:gbv:0124hr:B:")) != -1) { switch (c) { case 'i': ifn = optarg;@@ -161,6 +195,9 @@ case 'r': hdr->hw_ver = (char)(atof(optarg)*10)+0x30; break;+ case 'B':+ board_id = optarg;+ break; case 'h': default:@@ -173,6 +210,19 @@ usage(); } + if (board_id) {+ board = find_board(board_id);+ if (board == NULL) {+ fprintf(stderr, "unknown board \"%s\"\n", board_id);+ usage();+ }+ pattern = board->pattern;+ hdr->hw_ver = board->hw_ver;+ hdr->unused = board->unused;+ hdr->flags[0] = board->flags[0];+ hdr->flags[1] = board->flags[1];+ }+ if (strlen(pattern) != 4) { fprintf(stderr, "illegal pattern \"%s\": length != 4\n", pattern); usage();@@ -239,7 +289,7 @@ return EXIT_FAILURE; } }- + if (ferror(in)) { goto FREAD_ERROR; }Index: target/linux/ar71xx/image/Makefile===================================================================--- target/linux/ar71xx/image/Makefile (revision 17037)+++ target/linux/ar71xx/image/Makefile (working copy)@@ -159,6 +159,25 @@ -o $(call imgname,$(1),$(2)).uni endef +define Image/Build/CyberTAN+ cp $(KDIR)/vmlinux $(KDIR)/vmlinux-$(2)+ $(STAGING_DIR_HOST)/bin/patch-cmdline $(KDIR)/vmlinux-$(2) '$(strip $(3))'+ gzip -9 -c $(KDIR)/vmlinux-$(2) > $(KDIR)/vmlinux-$(2).bin.gzip+ mkimage -A mips -O linux -T kernel -a 0x80060000 -C gzip -e \+ 0x80060000 \+ -n 'MIPS OpenWrt Linux-$(LINUX_VERSION)' \+ -d $(KDIR)/vmlinux-$(2).bin.gzip $(KDIR)/vmlinux-$(2).uImage+ ( \+ dd if=$(KDIR)/vmlinux-$(2).uImage bs=1441732 count=1 conv=sync; \+ dd if=$(KDIR)/root.$(1) bs=64k; \+ ) > $(KDIR)/vmlinux-$(2).image+ $(STAGING_DIR_HOST)/bin/trx -o $(KDIR)/vmlinux-$(2).trx \+ -f $(KDIR)/vmlinux-$(2).image+ -$(STAGING_DIR_HOST)/bin/addpattern -B $(2) -v v$(4) -g \+ -i $(KDIR)/vmlinux-$(2).trx \+ -o $(call imgname,$(1),$(2)).bin+endef+ define Image/Build/Template/Compex $(call Image/Build/MyLoader,$(1),$(2)) endef@@ -179,6 +198,14 @@ $(call Image/Build/Template/WRT400N,jffs2-64k,$(1),$(2),$(3)) endef +define Image/Build/Template/CyberTAN+ $(call Image/Build/CyberTAN,$(1),$(2),$(3),$(4))+endef++define Image/Build/Template/CyberTAN/squashfs+ $(call Image/Build/Template/CyberTAN,squashfs,$(1),$(2),$(3))+endef+ define Image/Build/Template/AP81 $(call Image/Build/AP81,$(1),$(2),$(3),$(4)) endef@@ -305,6 +332,10 @@ $(call Image/Build/Template/WRT400N/$(1),wrt400n,board=WRT400N) endef +define Image/Build/Profile/WRT160NL+ $(call Image/Build/Template/CyberTAN/$(1),wrt160nl,board=WRT160NL,1.00.01)+endef+ define Image/Build/Profile/Default $(call Image/Build/Profile/AP83,$(1)) $(call Image/Build/Profile/A02RBW300N,$(1))@@ -319,6 +350,7 @@ $(call Image/Build/Profile/UBNT,$(1)) $(call Image/Build/Profile/WP543,$(1)) $(call Image/Build/Profile/WRT400N,$(1))+ $(call Image/Build/Profile/WRT160NL,$(1)) endef define Image/Build/Profile/Madwifi