[patch 3/5] Hotplug firmware loader for Keyspan usb-serial driver

From: Jan Harkes
Date: Tue Apr 05 2005 - 15:46:45 EST



Simple program to convert the keyspan firmware header files to IHEX
formatted files that can be loaded with hotplug.

This is really only needed once to convert the existing keyspan firmware
headers, which is what the next patch does.


Index: linux/drivers/usb/serial/dumpfw.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux/drivers/usb/serial/dumpfw.c 2005-03-10 23:16:37.240765747 -0500
@@ -0,0 +1,98 @@
+/*
+ * Convert keyspan firmware header files to Intel HEX format
+ * cc -I/usr/src/linux/drivers/usb/serial -o dumpfw dumpfw.c
+ */
+#include <stdint.h>
+#include <stdio.h>
+
+//#include "keyspan.h" /* ezusb_hex_record */
+
+struct ezusb_hex_record {
+ uint16_t address;
+ uint8_t size;
+ uint8_t data[64];
+};
+
+#include "keyspan_usa28_fw.h"
+#include "keyspan_usa28x_fw.h"
+#include "keyspan_usa28xa_fw.h"
+#include "keyspan_usa28xb_fw.h"
+#include "keyspan_usa19_fw.h"
+#include "keyspan_usa19qi_fw.h"
+#include "keyspan_mpr_fw.h"
+#include "keyspan_usa19qw_fw.h"
+#include "keyspan_usa18x_fw.h"
+#include "keyspan_usa19w_fw.h"
+#include "keyspan_usa49w_fw.h"
+#include "keyspan_usa49wlc_fw.h"
+
+char *boilerplate = "\
+# This firmware for the Keyspan %s USB-to-Serial adapter is\n\
+#\n\
+# Copyright (C) 1999-2003\n\
+# Keyspan, A division of InnoSys Incorporated (\"Keyspan\")\n\
+#\n\
+# as an unpublished work. This notice does not imply unrestricted or\n\
+# public access to the source code from which this firmware image is\n\
+# derived. Except as noted below this firmware image may not be\n\
+# reproduced, used, sold or transferred to any third party without\n\
+# Keyspan's prior written consent. All Rights Reserved.\n\
+#\n\
+# Permission is hereby granted for the distribution of this firmware\n\
+# image as part of a Linux or other Open Source operating system kernel\n\
+# in text or binary form as required.\n\
+#\n\
+# This firmware may not be modified and may only be used with\n\
+# Keyspan hardware. Distribution of this firmware, in whole or in\n\
+# part, requires the inclusion of this statement.\n\
+#\n";
+
+void dumpfw(char *name, const struct ezusb_hex_record *record)
+{
+ char fw_name[20];
+ char NAME[10];
+ uint16_t address, i;
+ uint8_t crc;
+ FILE *f;
+
+ for (i = 0; name[i] != '\0'; i++)
+ NAME[i] = toupper(name[i]);
+ NAME[i] = '\0';
+
+ sprintf(fw_name, "keyspan-%s.fw", name);
+ printf("writing %s\n", fw_name);
+
+ f = fopen(fw_name, "w");
+ fprintf(f, boilerplate, NAME);
+
+ while (record->address != 0xffff) {
+ crc = record->size + (record->address >> 8) + record->address;
+ fprintf(f, ":%02X%04X00", record->size, record->address);
+ for (i = 0; i < record->size; i++) {
+ fprintf(f, "%02X", record->data[i]);
+ crc += record->data[i];
+ }
+ fprintf(f, "%02X\n", (uint8_t)-crc);
+ record++;
+ }
+ fprintf(f, ":00000001FF\n");
+
+ fclose(f);
+}
+
+int main(int argc, char **argv)
+{
+ dumpfw("mpr", keyspan_mpr_firmware);
+ dumpfw("usa18x", keyspan_usa18x_firmware);
+ dumpfw("usa19", keyspan_usa19_firmware);
+ dumpfw("usa19qi", keyspan_usa19qi_firmware);
+ dumpfw("usa19qw", keyspan_usa19qw_firmware);
+ dumpfw("usa19w", keyspan_usa19w_firmware);
+ dumpfw("usa28", keyspan_usa28_firmware);
+ dumpfw("usa28x", keyspan_usa28x_firmware);
+ dumpfw("usa28xa", keyspan_usa28xa_firmware);
+ dumpfw("usa28xb", keyspan_usa28xb_firmware);
+ dumpfw("usa49w", keyspan_usa49w_firmware);
+ dumpfw("usa49wlc", keyspan_usa49wlc_firmware);
+}
+

--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/