From bc458b38b8a200f47f3119e406920334334512a8 Mon Sep 17 00:00:00 2001 From: David Kilroy Date: Sun, 26 Oct 2008 21:35:13 +0000 Subject: [PATCH] Allow dump_fw to build against wl_lkm_722 for h2 and h25 fw. --- README.dump_fw | 3 +-- dump_fw.c | 30 +++++++++++++++++++++++++---- dump_fw.mk | 60 +++++++++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 76 insertions(+), 17 deletions(-) diff --git a/README.dump_fw b/README.dump_fw index c5208c9..5b729e0 100644 --- a/README.dump_fw +++ b/README.dump_fw @@ -27,7 +27,7 @@ To use the programs just do: Which will produce _ap_fw.bin and _sta_fw.bin. -If you want to use the wl_lkm_714 source tree instead, you can. See +You can use the wl_lkm_714 or wl_lkm_722 source tree instead. See instructions in dump_fw.mk KNOWN BUGS @@ -35,7 +35,6 @@ KNOWN BUGS N/A - hfwget ------ diff --git a/dump_fw.c b/dump_fw.c index 9b099a3..67e389b 100644 --- a/dump_fw.c +++ b/dump_fw.c @@ -368,15 +368,22 @@ void dump_compat(FILE *f, CFG_RANGE20_STRCT *c) void dump_image(FILE* f, memimage *image) { +#if __wl_lkm < 722 + #define PDA pdaplug + #define PRI priplug +#else + #define PDA place_holder_1 + #define PRI place_holder_2 +#endif u32 image_header[6]; u32 blocks = count_blocks(image); u32 blk_offset = 0; /* Immediately after header */ u32 pdr_offset = (acc_block_size(image) + ((blocks + 1) * (sizeof(u32) + sizeof(u16)))); u32 pri_offset = pdr_offset + - ((count_pdr(image->pdaplug) + 1) * sizeof(u32) * 3); + ((count_pdr(image->PDA) + 1) * sizeof(u32) * 3); u32 cpt_offset = pri_offset + - ((count_pdr(image->priplug) + 1) * sizeof(u32) * 3); + ((count_pdr(image->PRI) + 1) * sizeof(u32) * 3); u16 headersize = ((sizeof(VERSION)-1) + sizeof(u16) + (sizeof(u32)*6) @@ -407,15 +414,21 @@ void dump_image(FILE* f, memimage *image) #endif dump_blocks(f, image); - dump_pdr(f, image->pdaplug); - dump_pdr(f, image->priplug); + dump_pdr(f, image->PDA); + dump_pdr(f, image->PRI); dump_compat(f, image->compat); return; } +#if __wl_lkm < 722 extern memimage ap; extern memimage station; +#else +extern memimage fw_image; +#define ap fw_image +#define station fw_image +#endif int main (int argc, char** argv) { @@ -438,6 +451,10 @@ int main (int argc, char** argv) check_endianess(); len = strlen(argv[1]); + + if (ap.identity->comp_id != COMP_ID_FW_AP) + goto sta; + ap_filename = malloc(len + sizeof(AP_SUFFIX) + 1); if (!ap_filename) { @@ -462,6 +479,10 @@ int main (int argc, char** argv) } free(ap_filename); +sta: + if (station.identity->comp_id != COMP_ID_FW_STA) + goto out; + sta_filename = malloc(len + sizeof(STA_SUFFIX) + 1); if (!sta_filename) { @@ -486,5 +507,6 @@ int main (int argc, char** argv) } free(sta_filename); +out: return rc; } diff --git a/dump_fw.mk b/dump_fw.mk index b397f2c..d0de496 100644 --- a/dump_fw.mk +++ b/dump_fw.mk @@ -5,27 +5,35 @@ # NOTE if compiling wl_lkm_714: # - the firmware files need to be modified to include "mmd.h" instead of "..\hcf\mmd.h" # - include/hcf/hcfcfg.h line 775 should be commented out -# - select the appropriate DIR_FW and LKM_CFLAGS values below +# - set LKM on next line to 714 718 or 722 +LKM=718 + +ifeq ($(LKM),714) + DIR_FW := dhf + LKM_CFLAGS = -D__wl_lkm=714 +endif +ifeq ($(LKM),718) + DIR_FW := firmware + LKM_CFLAGS := -DHCF_DLV -D__wl_lkm=718 +endif +ifeq ($(LKM),722) + DIR_FW :=hcf + LKM_CFLAGS := -D__wl_lkm=722 +endif DIR_HCF := hcf DIR_DHF := dhf -# 714 firmware is in -#DIR_FW = dhf -# 718 firmware is in -DIR_FW := firmware DIR_CONFIG := include/hcf DIR_WIRELESS := include/wireless OBJS := dump_fw.o CFLAGS := -O3 -Wall -Wstrict-prototypes -pipe -# CFLAGS for wl_lkm_714 -#LKM_CFLAGS = -D__wl_lkm=714 -# CFLAGS for wl_lkm_718 -LKM_CFLAGS := -DHCF_DLV -D__wl_lkm=718 CPPFLAGS := CC := gcc -I$(DIR_CONFIG) -I$(DIR_HCF) -I$(DIR_DHF) +H25_OBJS := $(DIR_FW)/ap_h25.o $(DIR_FW)/sta_h25.o + H2_OBJS := $(DIR_FW)/ap_h2.o $(DIR_FW)/sta_h2.o H2_CFLAGS := -DHCF_TYPE=4 @@ -43,13 +51,19 @@ ifneq (,$(findstring $(DIR_FW),$(wildcard $(DIR_FW)))) endif ifeq ($(IN_ROOT),y) -TARGETS+=dump_h1_fw dump_h2_fw + ifneq ($(LKM),722) + TARGETS+=dump_h1_fw dump_h2_fw + else + TARGETS+=dump_h2_sta_fw dump_h2_ap_fw + TARGETS+=dump_h25_sta_fw dump_h25_ap_fw + endif else $(info Info: Not in wl_lkm directory, so not building wl_lkm dumpers) endif all: $(TARGETS) +ifneq ($(LKM),722) dump_h1_fw : CFLAGS+= $(LKM_CFLAGS) $(H1_CFLAGS) dump_h1_fw : $(OBJS) $(H1_OBJS) gcc $(CFLAGS) $^ -o $@ @@ -58,8 +72,32 @@ dump_h2_fw : CFLAGS+= $(LKM_CFLAGS) $(H2_CFLAGS) dump_h2_fw : $(OBJS) $(H2_OBJS) gcc $(CFLAGS) $^ -o $@ +else +$(DIR_HCF)/ap_h%.c : $(DIR_HCF)/fw_h%.c.ap + cp $^ $@ + +$(DIR_HCF)/sta_h%.c : $(DIR_HCF)/fw_h%.c.sta + cp $^ $@ + +dump_h2_ap_fw : CFLAGS+= $(LKM_CFLAGS) +dump_h2_ap_fw : $(OBJS) $(DIR_HCF)/ap_h2.o + gcc $(CFLAGS) $^ -o $@ + +dump_h2_sta_fw : CFLAGS+= $(LKM_CFLAGS) +dump_h2_sta_fw : $(OBJS) $(DIR_HCF)/sta_h2.o + gcc $(CFLAGS) $^ -o $@ + +dump_h25_ap_fw : CFLAGS+= $(LKM_CFLAGS) +dump_h25_ap_fw : $(OBJS) $(DIR_HCF)/ap_h25.o + gcc $(CFLAGS) $^ -o $@ + +dump_h25_sta_fw : CFLAGS+= $(LKM_CFLAGS) +dump_h25_sta_fw : $(OBJS) $(DIR_HCF)/sta_h25.o + gcc $(CFLAGS) $^ -o $@ +endif + hfwget : hfwget.c gcc $(CFLAGS) $^ -o $@ clean : - rm $(TARGETS) $(OBJS) $(H1_OBJS) $(H2_OBJS) + rm $(TARGETS) $(OBJS) $(H1_OBJS) $(H2_OBJS) $(H25_OBJS) -- 2.11.4.GIT