Author: waldi Date: Thu Mar 6 11:03:58 2008 New Revision: 10733 Log: bnx2: Add.
Added: dists/trunk/firmware-nonfree/bnx2/ dists/trunk/firmware-nonfree/bnx2/LICENSE dists/trunk/firmware-nonfree/bnx2/defines dists/trunk/firmware-nonfree/bnx2/fwcutter/ dists/trunk/firmware-nonfree/bnx2/fwcutter/Makefile dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fw_file.h dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fwcutter.c dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fwcutter_2.6.25.c Added: dists/trunk/firmware-nonfree/bnx2/LICENSE ============================================================================== --- (empty file) +++ dists/trunk/firmware-nonfree/bnx2/LICENSE Thu Mar 6 11:03:58 2008 @@ -0,0 +1,7 @@ +This file contains firmware data derived from proprietary unpublished +source code, Copyright (c) 2004, 2005, 2006, 2007 Broadcom Corporation. + +Permission is hereby granted for the distribution of this firmware data +in hexadecimal or equivalent format, provided this copyright notice is +accompanying it. + Added: dists/trunk/firmware-nonfree/bnx2/defines ============================================================================== --- (empty file) +++ dists/trunk/firmware-nonfree/bnx2/defines Thu Mar 6 11:03:58 2008 @@ -0,0 +1,15 @@ +[base] +desc: Broadcom NetXtremeII +files: + bnx2-06-4.0.5.fw + bnx2-09-4.0.5.fw +longdesc: Broadcom NetXtremeII network adapters +uri: http://ftp.debian.org/debian/pool/non-free/f/firmware-nonfree + +[bnx2-06-4.0.5.fw_base] +desc: Broadcom NetXtremeII 5706 firmware +version: Linux 2.6.25 + +[bnx2-09-4.0.5.fw_base] +desc: Broadcom NetXtremeII 5709 firmware +version: Linux 2.6.25 Added: dists/trunk/firmware-nonfree/bnx2/fwcutter/Makefile ============================================================================== --- (empty file) +++ dists/trunk/firmware-nonfree/bnx2/fwcutter/Makefile Thu Mar 6 11:03:58 2008 @@ -0,0 +1,15 @@ +ifndef KERNEL_SOURCE +$(error Please define KERNEL_SOURCE) +endif +ifndef KERNEL_VERSION +$(error Please define KERNEL_VERSION) +endif + +CFLAGS += -I$(KERNEL_SOURCE)/drivers/net +CFLAGS += --std=gnu99 +LDFLAGS += -lz + +all: bnx2_fwcutter_$(KERNEL_VERSION) + +bnx2_fwcutter_$(KERNEL_VERSION): bnx2_fwcutter_$(KERNEL_VERSION).c + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ Added: dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fw_file.h ============================================================================== --- (empty file) +++ dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fw_file.h Thu Mar 6 11:03:58 2008 @@ -0,0 +1,25 @@ +struct bnx2_fw_file_section { + uint32_t addr; + uint32_t len; + uint32_t offset; +}; + +struct bnx2_fw_file_entry { + uint32_t start_addr; + struct bnx2_fw_file_section text; + struct bnx2_fw_file_section data; + struct bnx2_fw_file_section sbss; + struct bnx2_fw_file_section bss; + struct bnx2_fw_file_section rodata; +}; + +struct bnx2_fw_file { + struct bnx2_fw_file_entry com; + struct bnx2_fw_file_entry cp; + struct bnx2_fw_file_entry rxp; + struct bnx2_fw_file_entry tpat; + struct bnx2_fw_file_entry txp; + struct bnx2_fw_file_section rv2p_proc1; + struct bnx2_fw_file_section rv2p_proc2; +}; + Added: dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fwcutter.c ============================================================================== --- (empty file) +++ dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fwcutter.c Thu Mar 6 11:03:58 2008 @@ -0,0 +1,177 @@ +#include <assert.h> +#include <byteswap.h> +#include <endian.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <zlib.h> + +#include "bnx2_fw_file.h" + +struct fw_info { + const uint32_t ver_major; + const uint32_t ver_minor; + const uint32_t ver_fix; + + const uint32_t start_addr; + + /* Text section. */ + const uint32_t text_addr; + const uint32_t text_len; + const uint32_t text_index; + void *text; + const void *gz_text; + const uint32_t gz_text_len; + + /* Data section. */ + const uint32_t data_addr; + const uint32_t data_len; + const uint32_t data_index; + const uint32_t *data; + + /* SBSS section. */ + const uint32_t sbss_addr; + const uint32_t sbss_len; + const uint32_t sbss_index; + + /* BSS section. */ + const uint32_t bss_addr; + const uint32_t bss_len; + const uint32_t bss_index; + + /* Read-only section. */ + const uint32_t rodata_addr; + const uint32_t rodata_len; + const uint32_t rodata_index; + const uint32_t *rodata; +}; + +typedef uint8_t u8; +typedef uint32_t u32; + +#include "bnx2_fw.h" +#include "bnx2_fw2.h" + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define cpu_to_be32(x) bswap_32(x) +#elif __BYTE_ORDER == __BIG_ENDIAN +#define cpu_to_be32(x) (x) +#endif +#define le32_to_be32(x) bswap_32(x) + +void set_firmware_image_part(struct bnx2_fw_file_section *s, uint32_t addr, uint32_t len) +{ + s->addr = cpu_to_be32(addr); + s->len = cpu_to_be32(len); +} + +void write_firmware_flat(int fd, struct bnx2_fw_file_section *out, void *data, int len) +{ + off_t offset = lseek(fd, 0, SEEK_CUR); + + uint32_t buf[0x10000]; + struct z_stream_s strm; + memset(&strm, 0, sizeof strm); + + strm.next_in = (void *)data; + strm.avail_in = len; + strm.next_out = (void *)buf; + strm.avail_out = sizeof buf; + + int ret = inflateInit2(&strm, -MAX_WBITS); + assert(ret == Z_OK); + ret = inflate(&strm, Z_FINISH); + assert(ret == Z_STREAM_END); + unsigned int l = strm.total_out; + + out->len = cpu_to_be32(l); + out->offset = cpu_to_be32(offset); + + inflateEnd(&strm); + + for (unsigned int j = 0; j < (l / 4); j++) + buf[j] = le32_to_be32(buf[j]); + write(fd, buf, l); +} + +void write_firmware_image(int fd, struct bnx2_fw_file_entry *out, struct fw_info *fw) +{ + off_t offset = lseek(fd, 0, SEEK_CUR); + + out->start_addr = cpu_to_be32(fw->start_addr); + + set_firmware_image_part(&out->text, fw->text_addr, fw->text_len); + out->text.offset = cpu_to_be32(offset); + + uint32_t buf[0x10000]; + struct z_stream_s strm; + memset(&strm, 0, sizeof strm); + + strm.next_in = (void *)fw->gz_text; + strm.avail_in = fw->gz_text_len; + strm.next_out = (void *)buf; + strm.avail_out = sizeof buf; + + int ret = inflateInit2(&strm, -MAX_WBITS); + assert(ret == Z_OK); + ret = inflate(&strm, Z_FINISH); + assert(ret == Z_STREAM_END); + inflateEnd(&strm); + + for (unsigned int j = 0; j < (fw->text_len / 4); j++) + buf[j] = le32_to_be32(buf[j]); + offset += write(fd, buf, fw->text_len); + + if (fw->data_addr) + { + set_firmware_image_part(&out->data, fw->data_addr, fw->data_len); + out->data.offset = cpu_to_be32(offset); + for (unsigned int j = 0; j < (fw->data_len / 4); j++) + buf[j] = cpu_to_be32(fw->data[j]); + offset += write(fd, buf, fw->data_len); + } + + if (fw->sbss_len) + set_firmware_image_part(&out->sbss, fw->sbss_addr, fw->sbss_len); + + if (fw->bss_len) + set_firmware_image_part(&out->bss, fw->bss_addr, fw->bss_len); + + if (fw->rodata_addr) + { + set_firmware_image_part(&out->rodata, fw->rodata_addr, fw->rodata_len); + out->rodata.offset = cpu_to_be32(offset); + for (unsigned int j = 0; j < (fw->rodata_len / 4); j++) + buf[j] = cpu_to_be32(fw->rodata[j]); + offset += write(fd, buf, fw->rodata_len); + } +} + +void write_firmware(const char *filename, struct fw_info *com_fw, struct fw_info *cp_fw, struct fw_info *rxp_fw, struct fw_info *tpat_fw, struct fw_info *txp_fw, void *rv2p_proc1, int rv2p_proc1_len, void *rv2p_proc2, int rv2p_proc2_len) +{ + struct bnx2_fw_file out; + memset(&out, 0, sizeof out); + + int fd = open(filename, O_WRONLY | O_CREAT, 0666); + + lseek(fd, sizeof out, SEEK_SET); + + write_firmware_image(fd, &out.com, com_fw); + write_firmware_image(fd, &out.cp, cp_fw); + write_firmware_image(fd, &out.rxp, rxp_fw); + write_firmware_image(fd, &out.tpat, tpat_fw); + write_firmware_image(fd, &out.txp, txp_fw); + write_firmware_flat(fd, &out.rv2p_proc1, rv2p_proc1, rv2p_proc1_len); + write_firmware_flat(fd, &out.rv2p_proc2, rv2p_proc2, rv2p_proc2_len); + + lseek(fd, 0, SEEK_SET); + + write(fd, &out, sizeof out); + + close(fd); +} + Added: dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fwcutter_2.6.25.c ============================================================================== --- (empty file) +++ dists/trunk/firmware-nonfree/bnx2/fwcutter/bnx2_fwcutter_2.6.25.c Thu Mar 6 11:03:58 2008 @@ -0,0 +1,24 @@ +#include "bnx2_fwcutter.c" + +int main() +{ + write_firmware("bnx2-06-4.0.5.fw", + &bnx2_com_fw_06, + &bnx2_cp_fw_06, + &bnx2_rxp_fw_06, + &bnx2_tpat_fw_06, + &bnx2_txp_fw_06, + bnx2_rv2p_proc1, sizeof bnx2_rv2p_proc1, + bnx2_rv2p_proc2, sizeof bnx2_rv2p_proc2); + write_firmware("bnx2-09-4.0.5.fw", + &bnx2_com_fw_09, + &bnx2_cp_fw_09, + &bnx2_rxp_fw_09, + &bnx2_tpat_fw_09, + &bnx2_txp_fw_09, + bnx2_xi_rv2p_proc1, sizeof bnx2_xi_rv2p_proc2, + bnx2_xi_rv2p_proc2, sizeof bnx2_xi_rv2p_proc2); + + return EXIT_SUCCESS; +} + _______________________________________________ Kernel-svn-changes mailing list Kernel-svn-changes@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/kernel-svn-changes