⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gen_fw.c

📁 无线网卡驱动程序 802.11b无线网卡可直接移植到2.6内核中去
💻 C
字号:
/* $Id: gen_fw.c,v 1.6 2004/06/15 19:53:42 jal2 Exp $ *//* This file includes the old style firmwares and outputs new, binary files. */#include <stdio.h>#include <assert.h>typedef unsigned char u8;typedef unsigned int u32;#define BOARDTYPE_503_INTERSIL_3861 1#define BOARDTYPE_503_INTERSIL_3863 2#define BOARDTYPE_503_RFMD          3#define BOARDTYPE_503_RFMD_ACC      4#define BOARDTYPE_505_RFMD          5#define BOARDTYPE_505_RFMD_2958     6#define BOARDTYPE_505A_RFMD_2958    7#include "fw-rfmd-0.90.2-140.h"u8 intfw_503rfmd_0_90_2[] = FW_503RFMD_INTERNAL;u8 extfw_503rfmd_0_90_2[] = FW_503RFMD_EXTERNAL;#undef FW_503RFMD_INTERNAL#undef FW_503RFMD_EXTERNAL#include "fw-rfmd-1.101.0-84.h"#include "fw-rfmd-acc-1.101.0-84.h"#include "fw-i3861.h"#include "fw-i3863.h"#include "fw-r505.h"#include "fw-505rfmd2958-1.101.0-86.h"#define atuwi_fw_rfmd2958_smc_int intfw_505a_rfmd2958#define atuwi_fw_rfmd2958_smc_ext extfw_505a_rfmd2958#include "atuwi_rfmd2958-smc_fw.h"/* The struct of the firmware header: */typedef struct {        u32 crc;             // CRC32 of the whole image (seed ~0, no post-process)        u32 board_id;        // BOARDTYPE_xxx        u32 version;         // firmware version code        u32 str_offset;      // printable string offset (copyright)        u32 internal_offset; // internal firmware image offset        u32 internal_len;    // internal firmawre image len        u32 external_offset; // external firmware image offset        u32 external_len;    // external firmware image len} at76c50x_fw_t __attribute__((packed));#define cpu_to_le32(x) (x)// round to next multiple of four#define QUAD(x) ((x) % 4 ? (x) + (4 - ((x)%4)) : (x))u8 intfw_503rfmd[] = FW_503RFMD_INTERNAL;u8 extfw_503rfmd[] = FW_503RFMD_EXTERNAL;u8 intfw_503rfmd_acc[] = FW_503RFMD_ACC_INTERNAL;u8 extfw_503rfmd_acc[] = FW_503RFMD_ACC_EXTERNAL;u8 intfw_i3861[] = FW_I3861_INTERNAL;u8 extfw_i3861[] = FW_I3861_EXTERNAL;u8 intfw_i3863[] = FW_I3863_INTERNAL;u8 extfw_i3863[] = FW_I3863_EXTERNAL;u8 intfw_505rfmd[] = FW_505RFMD_INTERNAL;u8 extfw_505rfmd[] = FW_505RFMD_EXTERNAL;u8 intfw_505rfmd2958[] = FW_505RFMD2958_INTERNAL;u8 extfw_505rfmd2958[] = FW_505RFMD2958_EXTERNAL;struct fw {	const char *filename;	u32 board_id;	u32 version;	const char *str_id;	u8 *intfw;	u32 intfw_sz;	u8 *extfw;	u32 extfw_sz;} fws[] = {	{ "atmel_at76c503-rfmd-0.90.2-140.bin", BOARDTYPE_503_RFMD,	  0x005a028c, "0.90.2-140 503 RFMD "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_503rfmd_0_90_2, sizeof(intfw_503rfmd_0_90_2),          extfw_503rfmd_0_90_2, sizeof(extfw_503rfmd_0_90_2)},	{ "atmel_at76c503-rfmd.bin", BOARDTYPE_503_RFMD,	  0x01650054, "1.101.0-84 503 RFMD "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_503rfmd, sizeof(intfw_503rfmd),	  extfw_503rfmd, sizeof(extfw_503rfmd)},	{ "atmel_at76c503-rfmd-acc.bin", BOARDTYPE_503_RFMD_ACC,	  0x01650054, "1.101.0-84 503 RFMD Accton design "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_503rfmd_acc, sizeof(intfw_503rfmd_acc),	  extfw_503rfmd_acc, sizeof(extfw_503rfmd_acc)},	{ "atmel_at76c503-i3861.bin", BOARDTYPE_503_INTERSIL_3861,	  0x005a002c, "0.90.0-44 Intersil 3861 "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_i3861, sizeof(intfw_i3861),	  extfw_i3861, sizeof(extfw_i3861)},	{ "atmel_at76c503-i3863.bin", BOARDTYPE_503_INTERSIL_3863,	  0x005a002c, "0.90.0-44 Intersil 3863 "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_i3863, sizeof(intfw_i3863),	  extfw_i3863, sizeof(extfw_i3863)},	{ "atmel_at76c505-rfmd.bin", BOARDTYPE_505_RFMD,	  0x005b0004, "0.91.0-4 505 RFMD "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_505rfmd, sizeof(intfw_505rfmd),	  extfw_505rfmd, sizeof(extfw_505rfmd)},	{ "atmel_at76c505-rfmd2958.bin", BOARDTYPE_505_RFMD_2958,	  0x01650056, "1.101.0-86 505 RFMD2958 "	  "Copyright (c) 1999-2000 by Atmel Corporation",	  intfw_505rfmd2958, sizeof(intfw_505rfmd2958),	  extfw_505rfmd2958, sizeof(extfw_505rfmd2958)},	{ "atmel_at76c505a-rfmd2958.bin", BOARDTYPE_505A_RFMD_2958,	  0x01660071, "1.102.0-113 505A RFMD 2958"	  "Copyright (c) 1999-2004 by Atmel Corporation",	  intfw_505a_rfmd2958, sizeof(intfw_505a_rfmd2958),	  extfw_505a_rfmd2958, sizeof(extfw_505a_rfmd2958)},};int nr_fws = sizeof(fws) / sizeof(struct fw);const u8 zeros[] = {0,0,0};#define _CRCPOLY_LE 0xedb88320static u32 crc32 (u32 crc, u8 const *p, size_t len){        int i;        while (len--) {                crc ^= *p++;                for (i = 0; i < 8; i++)                        crc = (crc >> 1) ^ ((crc & 1) ? _CRCPOLY_LE : 0);        }        return crc;}int main(void){	int i;	u32 val, offs;	FILE *f;	struct fw *fw;	at76c50x_fw_t hd;	for(i=0,fw=fws; i < nr_fws; fw++,i++) {		if ((f=fopen(fw->filename, "w")) == NULL) {			fprintf(stderr,"#ERR cannot open %s for writing (errno %m)\n",				fw->filename);			continue;		}		hd.crc = ~0; /* the initial seed */		hd.board_id = cpu_to_le32(fw->board_id);		hd.version = cpu_to_le32(fw->version);		// string area starts after header		hd.str_offset = cpu_to_le32(sizeof(at76c50x_fw_t));		hd.internal_offset = hd.str_offset + strlen(fw->str_id) + 1;		hd.internal_offset = QUAD(hd.internal_offset);		hd.internal_len = fw->intfw_sz;		hd.external_offset = hd.internal_offset + hd.internal_len;		hd.external_offset = QUAD(hd.external_offset);		hd.external_len = fw->extfw_sz;		/* calc crc */		/* the header */		hd.crc = crc32(hd.crc, (u8 *)&hd.board_id, 0x20-0x4);		/* the string */		hd.crc = crc32(hd.crc, fw->str_id, strlen(fw->str_id) +1);		/* zeros in gap */		hd.crc = crc32(hd.crc, zeros, hd.internal_offset - 			       (hd.str_offset + strlen(fw->str_id)  + 1));		/* internal fw */		hd.crc = crc32(hd.crc, fw->intfw, fw->intfw_sz);		/* zeros in gap */		hd.crc = crc32(hd.crc, zeros, hd.external_offset - 			       (hd.internal_offset + fw->intfw_sz));		/* external fw */		hd.crc = crc32(hd.crc, fw->extfw, fw->extfw_sz);#define FWRITE(ptr,len,fp) \  if (len > 0) {\    if (fwrite(ptr,len,1,fp) < 1) {\      fprintf(stderr,"#ERR failed to write %d bytes, errno %m\n", len);\      fclose(fp);\      continue;\    }\  }		FWRITE((u8 *)&hd, sizeof(hd),f);		FWRITE(fw->str_id, strlen(fw->str_id)+1, f);		FWRITE(zeros, hd.internal_offset - 		       (hd.str_offset + strlen(fw->str_id)  + 1), f);		FWRITE(fw->intfw, fw->intfw_sz, f);		FWRITE(zeros, hd.external_offset - 		       (hd.internal_offset + fw->intfw_sz), f);		FWRITE(fw->extfw, fw->extfw_sz, f);		fclose(f);	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -