X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=fwcutter%2Ffwcutter.c;h=20337589192761ae17b351f9bbd4d488d242f85e;hb=c151c2f2d6f9c660294a25dd7e2d7bd01b5e0a6d;hp=c4b4af7674d5b0ee39469295b1b5add6fa4fd130;hpb=0ed1d91f9f40755769c79de5a2aff896cf0b2d0e;p=b43-tools.git diff --git a/fwcutter/fwcutter.c b/fwcutter/fwcutter.c index c4b4af7..2033758 100644 --- a/fwcutter/fwcutter.c +++ b/fwcutter/fwcutter.c @@ -2,7 +2,7 @@ * firmware cutter for broadcom 43xx wireless driver files * * Copyright (c) 2005 Martin Langer , - * 2005-2007 Michael Buesch + * 2005-2007 Michael Buesch * 2005 Alex Beregszaszi * 2007 Johannes Berg * @@ -38,7 +38,7 @@ #include #include -#ifdef __DragonFly__ +#if defined(__DragonFly__) || defined(__FreeBSD__) #include #else #include @@ -48,7 +48,7 @@ #include "fwcutter.h" #include "fwcutter_list.h" -#ifdef __DragonFly__ +#if defined(__DragonFly__) || defined(__FreeBSD__) #define V3_FW_DIRNAME "v3" #define V4_FW_DIRNAME "v4" #else @@ -65,18 +65,6 @@ static int file_ok(const struct file *f) return !(f->flags & FW_FLAG_UNSUPPORTED) || cmdargs.unsupported; } -/* Convert a CPU-endian 16bit integer to Big-Endian */ -static be16_t to_be16(uint16_t v) -{ - uint8_t ret[2]; - - ret[0] = (v & 0xFF00) >> 8; - ret[1] = (v & 0x00FF); - - return *((be16_t *)ret); -} - -#if 0 /* Convert a Big-Endian 16bit integer to CPU-endian */ static uint16_t from_be16(be16_t v) { @@ -87,19 +75,11 @@ static uint16_t from_be16(be16_t v) return ret; } -#endif -/* Convert a CPU-endian 32bit integer to Big-Endian */ -static be32_t to_be32(uint32_t v) +/* Convert a CPU-endian 16bit integer to Big-Endian */ +static be16_t to_be16(uint16_t v) { - uint8_t ret[4]; - - ret[0] = (v & 0xFF000000) >> 24; - ret[1] = (v & 0x00FF0000) >> 16; - ret[2] = (v & 0x0000FF00) >> 8; - ret[3] = (v & 0x000000FF); - - return *((be32_t *)ret); + return (be16_t)from_be16((be16_t)v); } /* Convert a Big-Endian 32bit integer to CPU-endian */ @@ -115,6 +95,12 @@ static uint32_t from_be32(be32_t v) return ret; } +/* Convert a CPU-endian 32bit integer to Big-Endian */ +static be32_t to_be32(uint32_t v) +{ + return (be32_t)from_be32((be32_t)v); +} + /* tiny disassembler */ static void print_ucode_version(struct insn *insn) { @@ -439,8 +425,6 @@ static void print_file(const struct file *file) printf("%s\t", file->ucode_version); if (strlen(file->ucode_version) < 8) printf("\t"); - printf("%s\t", file->id); - printf("%s\n", file->md5); } @@ -451,21 +435,16 @@ static void print_supported_files(void) print_banner(); printf("\nExtracting firmware is possible " "from these binary driver files.\n" - "The column shows the unique identifier string " - "for your firmware.\nYou must select the firmware with the " - "same ID as printed by the kernel driver on modprobe.\n" - "Note that only recent drivers print such a message on modprobe.\n" "Please read http://linuxwireless.org/en/users/Drivers/b43#devicefirmware\n\n"); printf("\t" "\t\t" "\t" - "\t" "\n\n"); /* print for legacy driver first */ - for (i = 0; i < FILES; i++) + for (i = 0; i < ARRAY_SIZE(files); i++) if (file_ok(&files[i]) && !(files[i].flags & FW_FLAG_V4)) print_file(&files[i]); - for (i = 0; i < FILES; i++) + for (i = 0; i < ARRAY_SIZE(files); i++) if (file_ok(&files[i]) && files[i].flags & FW_FLAG_V4) print_file(&files[i]); printf("\n"); @@ -491,7 +470,7 @@ static const struct file *find_file(FILE *fd) signature[8], signature[9], signature[10], signature[11], signature[12], signature[13], signature[14], signature[15]); - for (i = 0; i < FILES; ++i) { + for (i = 0; i < ARRAY_SIZE(files); i++) { if (file_ok(&files[i]) && strcasecmp(md5sig, files[i].md5) == 0) { printf("This file is recognised as:\n"); @@ -511,7 +490,9 @@ static const struct file *find_file(FILE *fd) static void print_usage(int argc, char *argv[]) { print_banner(); - printf("\nUsage: %s [OPTION] [driver.sys]\n", argv[0]); + printf("\nA tool to extract firmware for a Broadcom 43xx device\n"); + printf("from a proprietary Broadcom 43xx device driver file.\n"); + printf("\nUsage: %s [OPTION] [proprietary-driver-file]\n", argv[0]); printf(" --unsupported " "Allow working on extractable but unsupported drivers\n"); printf(" -l|--list " @@ -524,8 +505,9 @@ static void print_usage(int argc, char *argv[]) "Print b43-fwcutter version\n"); printf(" -h|--help " "Print this help\n"); - printf("\nExample: %s bcmwl5.sys\n" - " to extract the firmware blobs from bcmwl5.sys\n", + printf("\nExample: %s -w /lib/firmware wl_apsta.o\n" + " to extract the firmware blobs from wl_apsta.o and store\n" + " the resulting firmware in /lib/firmware\n", argv[0]); }