提交 bb1fee86 编写于 作者: D David S. Miller
...@@ -55,6 +55,8 @@ ...@@ -55,6 +55,8 @@
#include <asm/system.h> #include <asm/system.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/firmware.h>
#include <linux/platform_device.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/if_arp.h> #include <linux/if_arp.h>
...@@ -71,8 +73,6 @@ ...@@ -71,8 +73,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/yam.h> #include <linux/yam.h>
#include "yam9600.h"
#include "yam1200.h"
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
...@@ -82,6 +82,9 @@ static const char yam_drvinfo[] __initdata = KERN_INFO \ ...@@ -82,6 +82,9 @@ static const char yam_drvinfo[] __initdata = KERN_INFO \
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
#define FIRMWARE_9600 "yam/9600.bin"
#define FIRMWARE_1200 "yam/1200.bin"
#define YAM_9600 1 #define YAM_9600 1
#define YAM_1200 2 #define YAM_1200 2
...@@ -342,9 +345,51 @@ static int fpga_write(int iobase, unsigned char wrd) ...@@ -342,9 +345,51 @@ static int fpga_write(int iobase, unsigned char wrd)
return 0; return 0;
} }
static unsigned char *add_mcs(unsigned char *bits, int bitrate) /*
* predef should be 0 for loading user defined mcs
* predef should be YAM_1200 for loading predef 1200 mcs
* predef should be YAM_9600 for loading predef 9600 mcs
*/
static unsigned char *add_mcs(unsigned char *bits, int bitrate,
unsigned int predef)
{ {
const char *fw_name[2] = {FIRMWARE_9600, FIRMWARE_1200};
const struct firmware *fw;
struct platform_device *pdev;
struct yam_mcs *p; struct yam_mcs *p;
int err;
switch (predef) {
case 0:
fw = NULL;
break;
case YAM_1200:
case YAM_9600:
predef--;
pdev = platform_device_register_simple("yam", 0, NULL, 0);
if (IS_ERR(pdev)) {
printk(KERN_ERR "yam: Failed to register firmware\n");
return NULL;
}
err = request_firmware(&fw, fw_name[predef], &pdev->dev);
platform_device_unregister(pdev);
if (err) {
printk(KERN_ERR "Failed to load firmware \"%s\"\n",
fw_name[predef]);
return NULL;
}
if (fw->size != YAM_FPGA_SIZE) {
printk(KERN_ERR "Bogus length %zu in firmware \"%s\"\n",
fw->size, fw_name[predef]);
release_firmware(fw);
return NULL;
}
bits = (unsigned char *)fw->data;
break;
default:
printk(KERN_ERR "yam: Invalid predef number %u\n", predef);
return NULL;
}
/* If it already exists, replace the bit data */ /* If it already exists, replace the bit data */
p = yam_data; p = yam_data;
...@@ -359,6 +404,7 @@ static unsigned char *add_mcs(unsigned char *bits, int bitrate) ...@@ -359,6 +404,7 @@ static unsigned char *add_mcs(unsigned char *bits, int bitrate)
/* Allocate a new mcs */ /* Allocate a new mcs */
if ((p = kmalloc(sizeof(struct yam_mcs), GFP_KERNEL)) == NULL) { if ((p = kmalloc(sizeof(struct yam_mcs), GFP_KERNEL)) == NULL) {
printk(KERN_WARNING "YAM: no memory to allocate mcs\n"); printk(KERN_WARNING "YAM: no memory to allocate mcs\n");
release_firmware(fw);
return NULL; return NULL;
} }
memcpy(p->bits, bits, YAM_FPGA_SIZE); memcpy(p->bits, bits, YAM_FPGA_SIZE);
...@@ -366,6 +412,7 @@ static unsigned char *add_mcs(unsigned char *bits, int bitrate) ...@@ -366,6 +412,7 @@ static unsigned char *add_mcs(unsigned char *bits, int bitrate)
p->next = yam_data; p->next = yam_data;
yam_data = p; yam_data = p;
release_firmware(fw);
return p->bits; return p->bits;
} }
...@@ -383,9 +430,11 @@ static unsigned char *get_mcs(int bitrate) ...@@ -383,9 +430,11 @@ static unsigned char *get_mcs(int bitrate)
/* Load predefined mcs data */ /* Load predefined mcs data */
switch (bitrate) { switch (bitrate) {
case 1200: case 1200:
return add_mcs(bits_1200, bitrate); /* setting predef as YAM_1200 for loading predef 1200 mcs */
return add_mcs(NULL, bitrate, YAM_1200);
default: default:
return add_mcs(bits_9600, bitrate); /* setting predef as YAM_9600 for loading predef 9600 mcs */
return add_mcs(NULL, bitrate, YAM_9600);
} }
} }
...@@ -936,7 +985,8 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) ...@@ -936,7 +985,8 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
kfree(ym); kfree(ym);
return -EINVAL; return -EINVAL;
} }
add_mcs(ym->bits, ym->bitrate); /* setting predef as 0 for loading userdefined mcs data */
add_mcs(ym->bits, ym->bitrate, 0);
kfree(ym); kfree(ym);
break; break;
...@@ -1159,6 +1209,8 @@ static void __exit yam_cleanup_driver(void) ...@@ -1159,6 +1209,8 @@ static void __exit yam_cleanup_driver(void)
MODULE_AUTHOR("Frederic Rible F1OAT frible@teaser.fr"); MODULE_AUTHOR("Frederic Rible F1OAT frible@teaser.fr");
MODULE_DESCRIPTION("Yam amateur radio modem driver"); MODULE_DESCRIPTION("Yam amateur radio modem driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_FIRMWARE(FIRMWARE_1200);
MODULE_FIRMWARE(FIRMWARE_9600);
module_init(yam_init_driver); module_init(yam_init_driver);
module_exit(yam_cleanup_driver); module_exit(yam_cleanup_driver);
......
此差异已折叠。
此差异已折叠。
/*
This file contains the firmware of Seven of Diamonds from OSITECH.
(Special thanks to Kevin MacPherson of OSITECH)
This software may be used and distributed according to the terms of
the GNU General Public License, incorporated herein by reference.
*/
static const u_char __Xilinx7OD[] = {
0xFF, 0x04, 0xA0, 0x36, 0xF3, 0xEC, 0xFF, 0xFF, 0xFF, 0xDF, 0xFB, 0xFF,
0xF3, 0xFF, 0xFF, 0xFF,
0xEF, 0x3F, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7F, 0xFE, 0xFF,
0xCE, 0xFE, 0xFE, 0xFE,
0xFE, 0xDE, 0xBD, 0xDD, 0xFD, 0xFF, 0xFD, 0xCF, 0xF7, 0xBF, 0x7F, 0xFF,
0x7F, 0x3F, 0xFE, 0xBF,
0xFF, 0xFF, 0xFF, 0xBC, 0xFF, 0xFF, 0xBD, 0xB5, 0x7F, 0x7F, 0xBF, 0xBF,
0x7F, 0xFF, 0xEF, 0xFF,
0xFF, 0xFF, 0xFB, 0xFF, 0xF7, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDE,
0xFE, 0xFE, 0xFA, 0xDE,
0xBD, 0xFD, 0xED, 0xFD, 0xFD, 0xCF, 0xEF, 0xEF, 0xEF, 0xEF, 0xC7, 0xDF,
0xDF, 0xDF, 0xDF, 0xDF,
0xFF, 0x7E, 0xFE, 0xFD, 0x7D, 0x6D, 0xEE, 0xFE, 0x7C, 0xFB, 0xF4, 0xFB,
0xCF, 0xDB, 0xDF, 0xFF,
0xFF, 0xBB, 0x7F, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF, 0x9E, 0xBF, 0x3B, 0xBF,
0xBF, 0x7F, 0x7F, 0x7F,
0x7E, 0x6F, 0xDF, 0xEF, 0xF5, 0xF6, 0xFD, 0xF6, 0xF5, 0xED, 0xEB, 0xFF,
0xEF, 0xEF, 0xEF, 0x7E,
0x7F, 0x7F, 0x6F, 0x7F, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xEF, 0xBF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0x1F, 0x1F, 0xEE, 0xFF, 0xBC,
0xB7, 0xFF, 0xDF, 0xFF,
0xDF, 0xEF, 0x3B, 0xE3, 0xD3, 0xFF, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF,
0xFF, 0xBA, 0xBF, 0x2D,
0xDB, 0xBD, 0xFD, 0xDB, 0xDF, 0xFA, 0xFB, 0xFF, 0xEF, 0xFB, 0xDB, 0xF3,
0xFF, 0xDF, 0xFD, 0x7F,
0xEF, 0xFB, 0xFF, 0xFF, 0xBE, 0xBF, 0x27, 0xBA, 0xFE, 0xFB, 0xDF, 0xFF,
0xF6, 0xFF, 0xFF, 0xEF,
0xFB, 0xDB, 0xF3, 0xD9, 0x9A, 0x3F, 0xFF, 0xAF, 0xBF, 0xFF, 0xFF, 0xBE,
0x3F, 0x37, 0xBD, 0x96,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0xFB, 0xF3, 0xF3, 0xEB, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xF7, 0xFA, 0xBC, 0xAE, 0xFE, 0xBE, 0xFE, 0xBB, 0x7F, 0xFD, 0xFF,
0x7F, 0xEF, 0xF7, 0xFB,
0xBB, 0xD7, 0xF7, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0xF7, 0xBC, 0xED, 0xFD,
0xBD, 0x9D, 0x7D, 0x7B,
0xFB, 0x7B, 0x7B, 0xFB, 0xAF, 0xFF, 0xFE, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xF7,
0xAA, 0xB9, 0xBF, 0x8F, 0xBF, 0xDF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xCF,
0xFB, 0xEB, 0xCB, 0xEB,
0xEE, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0x3E, 0x33, 0x3F, 0x1C, 0x7C,
0xFC, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xCF, 0xD3, 0xF3, 0xE3, 0xF3, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xEB, 0xFE, 0x35,
0x3F, 0x3D, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xEF, 0x6F, 0xE3,
0xE3, 0xE3, 0xEF, 0xFF,
0xFF, 0xDF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3E, 0x5E, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFD, 0xFF, 0xFF,
0xAF, 0xCF, 0xF2, 0xCB, 0xCF, 0x8E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
0xFC, 0x3E, 0x1F, 0x9E,
0xAD, 0xFD, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xEF, 0xFF, 0xB3, 0xF7, 0xE7,
0xF7, 0xFA, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xEE, 0xEB, 0xAB, 0xAF, 0x9F, 0xE3, 0x7F, 0xFF, 0xDE,
0xFF, 0x7F, 0xEE, 0xFF,
0xFF, 0xFB, 0x3A, 0xFA, 0xFF, 0xF2, 0x77, 0xFF, 0xFF, 0xF7, 0xFE, 0xFF,
0xFE, 0xBD, 0xAE, 0xDE,
0x7D, 0x7D, 0xFD, 0xFF, 0xBF, 0xEE, 0xFF, 0xFD, 0xFF, 0xDB, 0xFB, 0xFF,
0xF7, 0xEF, 0xFB, 0xFF,
0xFF, 0xFE, 0xFF, 0x2D, 0xAF, 0xB9, 0xFD, 0x79, 0xFB, 0xFA, 0xFF, 0xBF,
0xEF, 0xFF, 0xFF, 0x91,
0xFA, 0xFB, 0xDF, 0xF7, 0xF7, 0xFF, 0xFF, 0xFF, 0xFC, 0xCF, 0x37, 0xBF,
0xBF, 0xFF, 0x7F, 0x7F,
0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xF3, 0xFB, 0xFB, 0xFF, 0xF5, 0xEF,
0xFF, 0xFF, 0xF7, 0xFA,
0xFF, 0xFF, 0xEE, 0xFA, 0xFE, 0xFB, 0x55, 0xDD, 0xFF, 0x7F, 0xAF, 0xFE,
0xFF, 0xFB, 0xFB, 0xF5,
0xFF, 0xF7, 0xEF, 0xFF, 0xFF, 0xFF, 0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0x7D,
0x7B, 0x7B, 0x7B, 0x7B,
0xFB, 0xAE, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xF7, 0xDA, 0xB7, 0x61,
0xFF, 0xB9, 0x59, 0xF3, 0x73, 0xF3, 0xDF, 0x7F, 0x6F, 0xDF, 0xEF, 0xF7,
0xEB, 0xEB, 0xD7, 0xFF,
0xD7, 0xFF, 0xFF, 0xF7, 0xFE, 0x7F, 0xFB, 0x3E, 0x38, 0x73, 0xF6, 0x7F,
0xFC, 0xFF, 0xFF, 0xCF,
0xFF, 0xB7, 0xFB, 0xB3, 0xB3, 0x67, 0xFF, 0xE7, 0xFD, 0xFF, 0xEF, 0xF6,
0x7F, 0xB7, 0xBC, 0xF5,
0x7B, 0xF6, 0xF7, 0xF5, 0xFF, 0xFF, 0xEF, 0xFF, 0xF7, 0xFF, 0xF7, 0xCE,
0xE7, 0xFF, 0x9F, 0xFF,
0xFF, 0xF5, 0xFE, 0x7D, 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xEF, 0xFF, 0xF6,
0xCB, 0xDB, 0xEE, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xBE,
0x1E, 0x3E, 0xFE, 0xFF,
0x7D, 0xFE, 0xFF, 0xFF, 0xEF, 0xBF, 0xE7, 0xFF, 0xE3, 0xE3, 0xFF, 0xDF,
0xE7, 0xFF, 0xFF, 0xFF,
0xB8, 0xEF, 0xB7, 0x2F, 0xEE, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0x7F, 0xEF,
0xEB, 0xBF, 0xA3, 0xD3,
0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xFD, 0x3F, 0xCF, 0xFD,
0xFB, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xAF, 0xFB, 0xBF, 0xBB, 0xBF, 0xDB, 0xFD, 0xFB, 0xFF, 0xFF,
0xFF, 0xFF, 0x3E, 0xFE,
0x3F, 0xBA, 0xBA, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xEF, 0xC3, 0x7F,
0xB2, 0x9B, 0xFF, 0xFF,
0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x3C, 0xFF, 0x3F, 0x3C, 0xFF, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xAF, 0xF3, 0xFE, 0xF3, 0xE3, 0xEB, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xF7,
0x9A, 0xFE, 0xAF, 0x9E,
0xBE, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0x7B, 0xEF, 0xF7, 0xBF, 0xFB, 0xFB,
0xFB, 0xFF, 0xFF, 0x7F,
0xFF, 0xFF, 0xFF, 0xBC, 0xBD, 0xFD, 0xBD, 0xDD, 0x7D, 0x7B, 0x7B, 0x7B,
0x7B, 0xFB, 0xAE, 0xFF,
0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0x9A, 0xFF,
0x9F, 0xFF, 0xAF, 0xEF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xF3, 0xFF, 0xEB, 0xFF, 0xEB, 0xFF,
0xFF, 0xBF, 0xFF, 0xFF,
0xEF, 0xFE, 0xFF, 0x37, 0xFC, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xCF, 0xEF, 0xFD, 0xF3,
0xFF, 0xEE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0xFD, 0x2F, 0xFD,
0xFF, 0xFD, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xEF, 0xCF, 0xFF, 0xF3, 0xBF, 0x69, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE,
0xFB, 0x9F, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x87,
0xFE, 0xDA, 0xEF, 0xCF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xEF, 0xBF, 0xEF, 0xEF, 0xFD,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xEF, 0xFD, 0xFF, 0x7B, 0xFF, 0xEB, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xEB, 0xF8, 0xFF, 0xEF,
0xAF, 0xFF, 0xFF, 0xBD, 0xFF, 0xFF, 0xFF, 0x7F, 0xEE, 0x7F, 0xEF, 0xFF,
0xBB, 0xFF, 0xBF, 0xFB,
0xFF, 0xFF, 0xFF, 0xF7, 0xF6, 0xFB, 0xBD, 0xFD, 0xDD, 0xF5, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xAF,
0xFF, 0x5F, 0xF5, 0xDF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6,
0xF3, 0xFF, 0xDE, 0xFE,
0xEF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xDE, 0xDF, 0x5F, 0xDF,
0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0xAF, 0xFF, 0xFF,
0xEF, 0xED, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xDA, 0xBD, 0xBE,
0xAE, 0xFE, 0x7F, 0xFD,
0xDF, 0xFF, 0xFF, 0x7F, 0xEF, 0xFF, 0xFB, 0xFB, 0xFB, 0x7F, 0xF7, 0xFF,
0xFF, 0xFF, 0xFF, 0xF7,
0xBC, 0xFD, 0xBD, 0xBD, 0xBD, 0xFD, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAE,
0xFF, 0xFF, 0xFD, 0xFF,
0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x9F, 0xBF, 0xBF, 0xCF,
0x7F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xAF, 0xFF, 0xEB, 0xEB, 0xEB, 0xFF, 0xD7, 0xFE, 0xFF, 0xFF,
0xBF, 0xE7, 0xFE, 0xBF,
0x7F, 0xFC, 0xFF, 0xFF, 0xED, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFB,
0xFB, 0xFF, 0xFF, 0xDD,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBD, 0xDF, 0x9D, 0xFD, 0xDF, 0xB9,
0xFF, 0xFF, 0xFF, 0xFF,
0xEF, 0xFF, 0xFB, 0xEF, 0xEB, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xF6, 0x9F, 0xFF, 0xFC,
0xFE, 0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xDF, 0xFA, 0xCD, 0xCF,
0xBF, 0x9F, 0xFF, 0xFF,
0xFF, 0xFF, 0xF7, 0xFE, 0xBF, 0xFF, 0xDF, 0xEF, 0x5F, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0x6F, 0xFF,
0xBB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0xFF,
0x5F, 0xFF, 0xBF, 0xBF,
0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0x6E, 0x7B, 0xFF, 0xEF, 0xFD, 0xEB, 0xDF,
0xFF, 0xFF, 0xFF, 0xFF,
0xF7, 0xB6, 0x3E, 0xFC, 0xFD, 0xBF, 0x7E, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7,
0xEF, 0xF7, 0xF3, 0xF7,
0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x35, 0x79, 0xFF,
0xBF, 0xFC, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xEF, 0xFB, 0x53, 0xDF, 0xFF, 0xEB, 0xBF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xBC,
0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xF5,
0xFF, 0xF7, 0xFF, 0xFB,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBA, 0xAA, 0xEE, 0xFE, 0x3F, 0x7D,
0xFD, 0xFF, 0xFF, 0xFF,
0x7F, 0xAF, 0x77, 0xFB, 0xFB, 0xFF, 0xFB, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF,
0xF7, 0xBE, 0xBD, 0xBD,
0xBD, 0xBD, 0xFD, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAE, 0xFF, 0xEF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0x9A, 0xD9, 0xB8, 0xFF, 0xFF, 0x79, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF,
0xFB, 0xFF, 0xEB, 0xFF, 0xEB, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xDE,
0xF8, 0xFB, 0xFE, 0x3F,
0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xAD, 0xBF, 0xFA, 0xFF, 0x73,
0xDF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x3A, 0xF5, 0xB7, 0xFC, 0x3F, 0xF9, 0xFD, 0xFF, 0xFF, 0xFF,
0x7F, 0xEF, 0xF3, 0xFF,
0xBF, 0xFE, 0xF3, 0x9F, 0xFE, 0xFF, 0xFF, 0xFF, 0xF7, 0x3E, 0xFF, 0xFF,
0xFF, 0xBF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xD3, 0xFE, 0xDB, 0xFF, 0xDB, 0xDF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0x3E, 0xFF, 0xBF, 0xFF, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
0xF3, 0xFF, 0xED, 0xFF,
0xF7, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF6, 0x3C, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x9F, 0xEF, 0xEF, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7E, 0xBF,
0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBB, 0xEF, 0xDF, 0xF1,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE, 0x3E, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xBF,
0xEF, 0xFD, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF,
0xFC, 0x3E, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0xEF, 0xF3, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xF7, 0xBA, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0xAF, 0xFB,
0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF2, 0xD6, 0xED,
0xBD, 0xBD, 0xBD, 0x7D,
0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x92, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xAF, 0xEB, 0xEB, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFE, 0x2E, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x4F, 0xEF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE,
0x3C, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xCE,
0xC3, 0xFD, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5D, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xEF, 0xCF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xF7, 0xEE, 0x3E, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xEF, 0xDF, 0xE2, 0xFF,
0xFF, 0xFF, 0xFB, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xBE, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0xEE,
0x5F, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E,
0x7D, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF3, 0xFB, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xBF, 0xF7, 0x36, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xEF, 0xD3, 0xF6,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xEE,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xEF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xBA, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE,
0xFB, 0xFA, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xD6, 0xFD, 0xBD, 0xBD, 0xBD,
0x7D, 0x7B, 0x7B, 0x7B,
0x7B, 0xFB, 0xAE, 0xFF, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xF7, 0xBA, 0xBF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xEF, 0xEB, 0x6B,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0x4F, 0xEF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x3E, 0x6E, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xC3, 0xC9, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x3E, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xEF, 0xFB,
0xD5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE,
0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0xEF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFB,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xF6, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE,
0xEF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFE, 0xFF, 0xF7, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0xFA, 0xEF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xE7, 0xFF, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xEF, 0xBF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xA7, 0xFF, 0xFC, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F,
0xFE, 0xAE, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7,
0xF7, 0xFA, 0xFF, 0xFD,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xAF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B,
0x7B, 0x7B, 0xFB, 0xAF,
0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xE7, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF,
0xFF, 0xE7, 0xF2, 0xFC,
0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xAE, 0xEF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x7E, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF,
0xFE, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xEF, 0xDD, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xAF, 0xEF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBA, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFA, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xF6, 0x9C, 0xBD, 0xBD, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB,
0xAE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x7A, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFF, 0xFF,
0xFF, 0xFF, 0x6F, 0xEF, 0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xF7, 0xFE,
0xFE, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xEB,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9E, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xEF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xEF, 0xCB, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFD,
0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xEF,
0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
0xFF, 0xFF, 0xFF, 0xFF,
0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFB, 0xAF, 0x7F, 0xFF,
0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xEF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xBF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xF7, 0xBC, 0xBD,
0xBD, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F,
0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF,
0xFF, 0xFF, 0xEF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xBF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xEF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFE, 0xFF, 0x9F, 0x9F,
0x9F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0xFF, 0xEF, 0xDF, 0xDF, 0xDF, 0xDF, 0xCF, 0xB7, 0xBF, 0xBF,
0xBF, 0xBF, 0xFF, 0xBC,
0xB9, 0x9D, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xEF, 0xD7,
0xF5, 0xF3, 0xF1, 0xD1,
0x65, 0xE3, 0xE3, 0xE3, 0xA3, 0xFF, 0xFE, 0x7F, 0xFE, 0xDE, 0xDE, 0xFF,
0xBD, 0xBD, 0xBD, 0xBD,
0xDF, 0xEF, 0xFB, 0xF7, 0xF3, 0xF3, 0xF3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
0xFB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/mii.h> #include <linux/mii.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/firmware.h>
#include <pcmcia/cs_types.h> #include <pcmcia/cs_types.h>
#include <pcmcia/cs.h> #include <pcmcia/cs.h>
...@@ -55,17 +56,18 @@ ...@@ -55,17 +56,18 @@
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
/* Ositech Seven of Diamonds firmware */
#include "ositech.h"
/*====================================================================*/ /*====================================================================*/
static const char *if_names[] = { "auto", "10baseT", "10base2"}; static const char *if_names[] = { "auto", "10baseT", "10base2"};
/* Firmware name */
#define FIRMWARE_NAME "ositech/Xilinx7OD.bin"
/* Module parameters */ /* Module parameters */
MODULE_DESCRIPTION("SMC 91c92 series PCMCIA ethernet driver"); MODULE_DESCRIPTION("SMC 91c92 series PCMCIA ethernet driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_FIRMWARE(FIRMWARE_NAME);
#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0) #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
...@@ -771,6 +773,26 @@ static int osi_config(struct pcmcia_device *link) ...@@ -771,6 +773,26 @@ static int osi_config(struct pcmcia_device *link)
return i; return i;
} }
static int osi_load_firmware(struct pcmcia_device *link)
{
const struct firmware *fw;
int i, err;
err = request_firmware(&fw, FIRMWARE_NAME, &link->dev);
if (err) {
pr_err("Failed to load firmware \"%s\"\n", FIRMWARE_NAME);
return err;
}
/* Download the Seven of Diamonds firmware */
for (i = 0; i < fw->size; i++) {
outb(fw->data[i], link->io.BasePort1 + 2);
udelay(50);
}
release_firmware(fw);
return err;
}
static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid) static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid)
{ {
struct net_device *dev = link->priv; struct net_device *dev = link->priv;
...@@ -811,11 +833,9 @@ static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid) ...@@ -811,11 +833,9 @@ static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid)
(cardid == PRODID_OSITECH_SEVEN)) || (cardid == PRODID_OSITECH_SEVEN)) ||
((manfid == MANFID_PSION) && ((manfid == MANFID_PSION) &&
(cardid == PRODID_PSION_NET100))) { (cardid == PRODID_PSION_NET100))) {
/* Download the Seven of Diamonds firmware */ rc = osi_load_firmware(link);
for (i = 0; i < sizeof(__Xilinx7OD); i++) { if (rc)
outb(__Xilinx7OD[i], link->io.BasePort1+2); goto free_cfg_mem;
udelay(50);
}
} else if (manfid == MANFID_OSITECH) { } else if (manfid == MANFID_OSITECH) {
/* Make sure both functions are powered up */ /* Make sure both functions are powered up */
set_bits(0x300, link->io.BasePort1 + OSITECH_AUI_PWR); set_bits(0x300, link->io.BasePort1 + OSITECH_AUI_PWR);
...@@ -862,10 +882,10 @@ static int smc91c92_resume(struct pcmcia_device *link) ...@@ -862,10 +882,10 @@ static int smc91c92_resume(struct pcmcia_device *link)
(smc->cardid == PRODID_OSITECH_SEVEN)) || (smc->cardid == PRODID_OSITECH_SEVEN)) ||
((smc->manfid == MANFID_PSION) && ((smc->manfid == MANFID_PSION) &&
(smc->cardid == PRODID_PSION_NET100))) { (smc->cardid == PRODID_PSION_NET100))) {
/* Download the Seven of Diamonds firmware */ i = osi_load_firmware(link);
for (i = 0; i < sizeof(__Xilinx7OD); i++) { if (i) {
outb(__Xilinx7OD[i], link->io.BasePort1+2); pr_err("smc91c92_cs: Failed to load firmware\n");
udelay(50); return i;
} }
} }
if (link->open) { if (link->open) {
......
...@@ -62,6 +62,7 @@ ...@@ -62,6 +62,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/firmware.h>
#include <net/checksum.h> #include <net/checksum.h>
...@@ -73,8 +74,10 @@ ...@@ -73,8 +74,10 @@
static char version[] __devinitdata = static char version[] __devinitdata =
"3c359.c v1.2.0 2/17/01 - Mike Phillips (mikep@linuxtr.net)" ; "3c359.c v1.2.0 2/17/01 - Mike Phillips (mikep@linuxtr.net)" ;
#define FW_NAME "3com/3C359.bin"
MODULE_AUTHOR("Mike Phillips <mikep@linuxtr.net>") ; MODULE_AUTHOR("Mike Phillips <mikep@linuxtr.net>") ;
MODULE_DESCRIPTION("3Com 3C359 Velocity XL Token Ring Adapter Driver \n") ; MODULE_DESCRIPTION("3Com 3C359 Velocity XL Token Ring Adapter Driver \n") ;
MODULE_FIRMWARE(FW_NAME);
/* Module paramters */ /* Module paramters */
...@@ -114,8 +117,6 @@ MODULE_PARM_DESC(message_level, "3c359: Level of reported messages") ; ...@@ -114,8 +117,6 @@ MODULE_PARM_DESC(message_level, "3c359: Level of reported messages") ;
* will be stuck with 1555 lines of hex #'s in the code. * will be stuck with 1555 lines of hex #'s in the code.
*/ */
#include "3c359_microcode.h"
static struct pci_device_id xl_pci_tbl[] = static struct pci_device_id xl_pci_tbl[] =
{ {
{PCI_VENDOR_ID_3COM,PCI_DEVICE_ID_3COM_3C359, PCI_ANY_ID, PCI_ANY_ID, }, {PCI_VENDOR_ID_3COM,PCI_DEVICE_ID_3COM_3C359, PCI_ANY_ID, PCI_ANY_ID, },
...@@ -364,10 +365,30 @@ static int __devinit xl_probe(struct pci_dev *pdev, ...@@ -364,10 +365,30 @@ static int __devinit xl_probe(struct pci_dev *pdev,
return 0; return 0;
} }
static int xl_init_firmware(struct xl_private *xl_priv)
{
int err;
err = request_firmware(&xl_priv->fw, FW_NAME, &xl_priv->pdev->dev);
if (err) {
printk(KERN_ERR "Failed to load firmware \"%s\"\n", FW_NAME);
return err;
}
if (xl_priv->fw->size < 16) {
printk(KERN_ERR "Bogus length %zu in \"%s\"\n",
xl_priv->fw->size, FW_NAME);
release_firmware(xl_priv->fw);
err = -EINVAL;
}
return err;
}
static int __devinit xl_init(struct net_device *dev) static int __devinit xl_init(struct net_device *dev)
{ {
struct xl_private *xl_priv = netdev_priv(dev); struct xl_private *xl_priv = netdev_priv(dev);
int err;
printk(KERN_INFO "%s \n", version); printk(KERN_INFO "%s \n", version);
printk(KERN_INFO "%s: I/O at %hx, MMIO at %p, using irq %d\n", printk(KERN_INFO "%s: I/O at %hx, MMIO at %p, using irq %d\n",
...@@ -375,8 +396,11 @@ static int __devinit xl_init(struct net_device *dev) ...@@ -375,8 +396,11 @@ static int __devinit xl_init(struct net_device *dev)
spin_lock_init(&xl_priv->xl_lock) ; spin_lock_init(&xl_priv->xl_lock) ;
return xl_hw_reset(dev) ; err = xl_init_firmware(xl_priv);
if (err == 0)
err = xl_hw_reset(dev);
return err;
} }
...@@ -396,6 +420,9 @@ static int xl_hw_reset(struct net_device *dev) ...@@ -396,6 +420,9 @@ static int xl_hw_reset(struct net_device *dev)
u16 start ; u16 start ;
int j ; int j ;
if (xl_priv->fw == NULL)
return -EINVAL;
/* /*
* Reset the card. If the card has got the microcode on board, we have * Reset the card. If the card has got the microcode on board, we have
* missed the initialization interrupt, so we must always do this. * missed the initialization interrupt, so we must always do this.
...@@ -458,25 +485,30 @@ static int xl_hw_reset(struct net_device *dev) ...@@ -458,25 +485,30 @@ static int xl_hw_reset(struct net_device *dev)
/* /*
* Now to write the microcode into the shared ram * Now to write the microcode into the shared ram
* The microcode must finish at position 0xFFFF, so we must subtract * The microcode must finish at position 0xFFFF,
* to get the start position for the code * so we must subtract to get the start position for the code
*
* Looks strange but ensures compiler only uses
* 16 bit unsigned int
*/ */
start = (0xFFFF - (xl_priv->fw->size) + 1) ;
start = (0xFFFF - (mc_size) + 1 ) ; /* Looks strange but ensures compiler only uses 16 bit unsigned int for this */
printk(KERN_INFO "3C359: Uploading Microcode: "); printk(KERN_INFO "3C359: Uploading Microcode: ");
for (i = start, j = 0; j < mc_size; i++, j++) { for (i = start, j = 0; j < xl_priv->fw->size; i++, j++) {
writel(MEM_BYTE_WRITE | 0XD0000 | i, xl_mmio + MMIO_MAC_ACCESS_CMD) ; writel(MEM_BYTE_WRITE | 0XD0000 | i,
writeb(microcode[j],xl_mmio + MMIO_MACDATA) ; xl_mmio + MMIO_MAC_ACCESS_CMD);
writeb(xl_priv->fw->data[j], xl_mmio + MMIO_MACDATA);
if (j % 1024 == 0) if (j % 1024 == 0)
printk("."); printk(".");
} }
printk("\n") ; printk("\n") ;
for (i=0;i < 16; i++) { for (i = 0; i < 16; i++) {
writel( (MEM_BYTE_WRITE | 0xDFFF0) + i, xl_mmio + MMIO_MAC_ACCESS_CMD) ; writel((MEM_BYTE_WRITE | 0xDFFF0) + i,
writeb(microcode[mc_size - 16 + i], xl_mmio + MMIO_MACDATA) ; xl_mmio + MMIO_MAC_ACCESS_CMD);
writeb(xl_priv->fw->data[xl_priv->fw->size - 16 + i],
xl_mmio + MMIO_MACDATA);
} }
/* /*
...@@ -1782,6 +1814,7 @@ static void __devexit xl_remove_one (struct pci_dev *pdev) ...@@ -1782,6 +1814,7 @@ static void __devexit xl_remove_one (struct pci_dev *pdev)
struct net_device *dev = pci_get_drvdata(pdev); struct net_device *dev = pci_get_drvdata(pdev);
struct xl_private *xl_priv=netdev_priv(dev); struct xl_private *xl_priv=netdev_priv(dev);
release_firmware(xl_priv->fw);
unregister_netdev(dev); unregister_netdev(dev);
iounmap(xl_priv->xl_mmio) ; iounmap(xl_priv->xl_mmio) ;
pci_release_regions(pdev) ; pci_release_regions(pdev) ;
......
...@@ -284,5 +284,8 @@ struct xl_private { ...@@ -284,5 +284,8 @@ struct xl_private {
u8 xl_laa[6] ; u8 xl_laa[6] ;
u32 rx_ring_dma_addr ; u32 rx_ring_dma_addr ;
u32 tx_ring_dma_addr ; u32 tx_ring_dma_addr ;
/* firmware section */
const struct firmware *fw;
}; };
此差异已折叠。
此差异已折叠。
...@@ -26,6 +26,7 @@ fw-shipped- += acenic/tg1.bin ...@@ -26,6 +26,7 @@ fw-shipped- += acenic/tg1.bin
else else
acenic-objs := acenic/tg1.bin acenic/tg2.bin acenic-objs := acenic/tg1.bin acenic/tg2.bin
endif endif
fw-shipped-$(CONFIG_3C359) += 3com/3C359.bin
fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs) fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs)
fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \ fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \
adaptec/starfire_tx.bin adaptec/starfire_tx.bin
...@@ -39,6 +40,7 @@ fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ ...@@ -39,6 +40,7 @@ fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
e100/d102e_ucode.bin e100/d102e_ucode.bin
fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin
fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin
fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \ fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
...@@ -91,6 +93,7 @@ fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw ...@@ -91,6 +93,7 @@ fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw
fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw
fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw
fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin
fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-) fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
......
...@@ -493,3 +493,53 @@ Licence: ...@@ -493,3 +493,53 @@ Licence:
Found in hex form in kernel source. Found in hex form in kernel source.
-------------------------------------------------------------------------- --------------------------------------------------------------------------
Driver: YAM - YAM driver for AX.25
File: yam/1200.bin
File: yam/9600.bin
Licence:
* (C) F6FBB 1998
Found in hex form in kernel source.
--------------------------------------------------------------------------
Driver: 3C359 - 3Com 3C359 Token Link Velocity XL adapter
File: 3com/3C359.bin
Licence:
/*
* The firmware this driver downloads into the tokenring card is a
* separate program and is not GPL'd source code, even though the Linux
* side driver and the routine that loads this data into the card are.
*
* This firmware is licensed to you strictly for use in conjunction
* with the use of 3Com 3C359 TokenRing adapters. There is no
* waranty expressed or implied about its fitness for any purpose.
*/
/* 3c359_microcode.mac: 3Com 3C359 Tokenring microcode.
*
* Notes:
* - Loaded from xl_init upon adapter initialization.
*
* Available from 3Com as part of their standard 3C359 driver.
*/
Found in hex form in kernel source.
--------------------------------------------------------------------------
Driver: PCMCIA_SMC91C92 - SMC 91Cxx PCMCIA
File: ositech/Xilinx7OD.bin
Licence: Allegedly GPL, but no source visible. Marked:
This file contains the firmware of Seven of Diamonds from OSITECH.
(Special thanks to Kevin MacPherson of OSITECH)
Found in hex form in kernel source.
--------------------------------------------------------------------------
:10000000FF04A036F3ECFFFFFFDFFBFFF3FFFFFF72
:10001000EF3FFFF7FFFFFFFFEF7FFEFFCEFEFEFE8D
:10002000FEDEBDDDFDFFFDCFF7BF7FFF7F3FFEBFE3
:10003000FFFFFFBCFFFFBDB57F7FBFBF7FFFEFFFAF
:10004000FFFFFBFFF7F7FFFFFFFFFEDEFEFEFADE1E
:10005000BDFDEDFDFDCFEFEFEFEFC7DFDFDFDFDF52
:10006000FF7EFEFD7D6DEEFE7CFBF4FBCFDBDFFF54
:10007000FFBB7FFF7FFFF7FF9EBF3BBFBF7F7F7F41
:100080007E6FDFEFF5F6FDF6F5EDEBFFEFEFEF7EC0
:100090007F7F6F7FFFFEFEFEFEFEEFBFFFFFFFFFD5
:1000A000FFFFFFFFFFFFBC1F1FEEFFBCB7FFDFFF1F
:1000B000DFEF3BE3D3FFFBFFFFDFFFFFFFBABF2D07
:1000C000DBBDFDDBDFFAFBFFEFFBDBF3FFDFFD7FDB
:1000D000EFFBFFFFBEBF27BAFEFBDFFFF6FFFFEF20
:1000E000FBDBF3D99A3FFFAFBFFFFFBE3F37BD96A3
:1000F000FFFFFFFFFFFFAEFBF3F3EBFFFFFFFFFF91
:10010000FFF7FABCAEFEBEFEBB7FFDFF7FEFF7FB45
:10011000BBD7F77FFFF7FFFFF7BCEDFDBD9D7D7BF4
:10012000FB7B7BFBAFFFFEFDFDFEFEFFFFFFFFF74E
:10013000AAB9BF8FBFDFFF7FFFFF7FCFFBEBCBEB0A
:10014000EEFFFFD7FFFFFF3E333F1C7CFCFFFFFFAE
:10015000FFFFCFD3F3E3F3FBFFFFFFFFFFEBFE3522
:100160003F3DFDFDFFFFFFBFFFEF6FE3E3E3EFFF69
:10017000FFDFFFFFF7FE3E5EFEFFFFFFFFFDFFFF1D
:10018000AFCFF2CBCF8EFFFFFFFFFFFDFC3E1F9EE8
:10019000ADFDFFFFBFFFFFEFFFB3F7E7F7FAFFFF8C
:1001A000FFFFFFEEEBABAF9FE37FFFDEFF7FEEFFD6
:1001B000FFFB3AFAFFF277FFFFF7FEFFFEBDAEDE70
:1001C0007D7DFDFFBFEEFFFDFFDBFBFFF7EFFBFFDC
:1001D000FFFEFF2DAFB9FD79FBFAFFBFEFFFFF91E7
:1001E000FAFBDFF7F7FFFFFFFCCF37BFBFFF7F7FD3
:1001F000FFFFFFAFFFFFF3FBFBFFF5EFFFFFF7FA9A
:10020000FFFFEEFAFEFB55DDFF7FAFFEFFFBFBF5C8
:10021000FFF7EFFFFFFFBEBDBDBDBD7D7B7B7B7BE1
:10022000FBAEFFFDFEFFFFFFFFFFFFFFF7DAB76149
:10023000FFB959F373F3DF7F6FDFEFF7EBEBD7FF16
:10024000D7FFFFF7FE7FFB3E3873F67FFCFFFFCF43
:10025000FFB7FBB3B367FFE7FDFFEFF67FB7BCF572
:100260007BF6F7F5FFFFEFFFF7FFF7CEE7FF9FFF06
:10027000FFF5FE7DFF5FFFFFFFFFFFFFFFEFFFF6D4
:10028000CBDBEEFEFFDFFFFFFFFE7FBE1E3EFEFF6D
:100290007DFEFFFFEFBFE7FFE3E3FFDFE7FFFFFFC9
:1002A000B8EFB72FEEFFDFFFBFFF7FEFEBBFA3D3AA
:1002B000FF7FFFFFFFFFF7BEFD3FCFFDFBFFFFFF0F
:1002C000FFFFAFFBBFBBBFDBFDFBFFFFFFFF3EFE42
:1002D0003FBABAFEFFFFFFEFFFEFC37FB29BFFFF06
:1002E000FFFFFEFFFF3CFF3F3CFFFEFFFFFFFFFF66
:1002F000AFF3FEF3E3EBFFFFFFFBFFF79AFEAF9ECA
:10030000BEFEFFDFFFFF7BEFF7BFFBFBFBFFFF7FC7
:10031000FFFFFFBCBDFDBDDD7D7B7B7B7BFBAEFFBF
:10032000FFFFFEFEFFFDFFFFFFF79AFF9FFFAFEF0E
:10033000FFFFFFFF7FCFF3FFEBFFEBFFFFBFFFFFF1
:10034000EFFEFF37FCBFFFFFFFFFFFFFCFEFFDF327
:10035000FFEEFEFFFFFFFFFF6EFD2FFDFFFDFFFF26
:10036000FFFFFFEFCFFFF3BF69FFFFFFFFFFFFFEC0
:10037000FB9FFFBFFDFFFFFFFFFFEF87FEDAEFCF21
:10038000FFFFFFFFFFFFFEEFBFEFEFFDFFFFFFFFF0
:10039000FFEFFDFF7BFFEBFEFFFFFFFFEBF8FFEF43
:1003A000AFFFFFBDFFFFFF7FEE7FEFFFBBFFBFFB98
:1003B000FFFFFFF7F6FBBDFDDDF5FFFFFFFFFFAF22
:1003C000FF5FF5DFFF7FFFFFFFFFFFF6F3FFDEFEBE
:1003D000EFFDFFFFFFFFEFFFDEDF5FDFFDFFFFFF52
:1003E000FFFFFEFFFFFEFEFFFDFFFFFFFFAFFFFF72
:1003F000EFEDFFDFFFFFFBFFFFDABDBEAEFE7FFDCF
:10040000DFFFFF7FEFFFFBFBFB7FF7FFFFFFFFF748
:10041000BCFDBDBDBDFD7B7B7B7BFBAEFFFFFDFF60
:10042000FFFFFDFFFFFFFFFA9FBFBFCF7FFFFFFF73
:10043000FFFFAFFFEBEBEBFFD7FEFFFFBFE7FEBF1A
:100440007FFCFFFFEDFFFFFFFF4FFFFBFBFFFFDD2B
:10045000FFFFFFFFFFFEBDDF9DFDDFB9FFFFFFFFD9
:10046000EFFFFBEFEBFFDEFFFFFFFFFFF69FFFFC61
:10047000FEFBFDFFFFFFFFEFDFFACDCFBF9FFFFFCA
:10048000FFFFF7FEBFFFDFEF5FFFFFFFFF7F6FFFA5
:10049000BBFDFFFFFFFFFFFFFFFF7EFF5FFFBFBF53
:1004A000F9FFFFFF7F6E7BFFEFFDEBDFFFFFFFFF3D
:1004B000F7B63EFCFDBF7EFBFFFFFFF7EFF7F3F75C
:1004C000FFFBFFFFFFFFFFFF6E3579FFBFFCFFFF64
:1004D000FFFFFFEFFB53DFFFEBBFFFFFFFFFFFBCA3
:1004E000FFFFFFBFFFFDFFFFFFFFAFF5FFF7FFFBC4
:1004F000FFFFFFFFFFFFBAAAEEFE3F7DFDFFFFFFFC
:100500007FAF77FBFBFFFBF7FFFFFFFFF7BEBDBD34
:10051000BDBDFD7B7B7B7BFBAEFFEFFFFFFFFFFCE9
:10052000FFFFFFFF9AD9B8FFFF79FFFFFFFFFFCF63
:10053000FBFFEBFFEBD7FFFFFFFFE7DEF8FBFE3F24
:10054000FBFDFFFFFFFFCFADBFFAFF73DFFFFFFF34
:10055000FFFF3AF5B7FC3FF9FDFFFFFF7FEFF3FF29
:10056000BFFEF39FFEFFFFFFF73EFFFFFFBFFFFF52
:10057000FFFFFFFFAFD3FEDBFFDBDFFFFFFFFFFF70
:100580003EFFBFFF7FFFFDFFFFFFFF8FF3FFEDFF8C
:10059000F7FBFFFFFFFFEFF63CFEFFFFFFFFFFFF54
:1005A000FF9FEFEFD1FFFFFFFFFFFFFFFFFF7EBFCA
:1005B000FDFFFFFFFFFFFFFFBBEFDFF1FFFFFFFFCF
:1005C000FFFFFFFFFFEE3EFEFFFFFFFFFFFFFFBF4E
:1005D000EFFDC3FFFFFFFFFFFFFFBFFFFC3EFEFF7E
:1005E000FFFFFFFFFFFFFF2EEFF3FFFFFFFFFFFF08
:1005F000FFFFF7BABEFEFFFFFFFFFFFFFF7FAFFB6E
:10060000FBFDFFFFFFFEFFFFFFF2D6EDBDBDBD7D91
:100610007B7B7B7BFBAFDFFFFFFFFFFFFFFFFFFF6E
:10062000FF92BFFFFFFFFFFFFFFFFF7FAFEBEBFF7F
:10063000FFFFFFFFFFFFFFE7FE2EFEFFFFFFFFFFB5
:10064000FFFFFF4FEFF3FFFFFFFFFFFFFFFFFFFE87
:100650003CFEFFFFFFFFFFFFFFFFEFCEC3FDFFFFED
:10066000FFFFFFFFFFFFFE5DFFFFFFFFFFFFFFFF3D
:10067000FFEFCFEBFFFFFFFFFFFFFFFFF7EE3EFFB8
:10068000FFFFFFFFFFFFFF7FEFDFE2FFFFFFFBFF4B
:10069000FFFFFFFFF6BEFCFFFFFFFFFFFFFF7FEE48
:1006A0005FE6FFFFFFFFFFFFFFFFFF3E7DFFFFFF56
:1006B000FFFFFFFFFFFFEFF3FBFFFFFFFFFFFFFF6A
:1006C000BFF736BEFEFFFFFFFFFFFFFFFFEFD3F6D2
:1006D000FEFFFFFFFFFFFFFFFFFC7FEEFFFFFFFFBF
:1006E000FFFFFFFFAFEFEBFFFFFFFFFFFFFFFFFF8E
:1006F000BABEFEFFFFFFFFFFFFFFFFEEFBFAFFFFAB
:10070000FFFFFFFFFFFFF7D6FDBDBDBD7D7B7B7B00
:100710007BFBAEFF7EFFFFFFFFFFFFFFFFF7BABFD0
:10072000FFFFFFFFFFFFFFFF7FEFEB6BFFFFFFFF11
:10073000FFFFFFFFF7FEBEFEFFFFFFFFFFFFFFFF14
:100740004FEFF7FFFFFFFFFFFFFFFFEF3E6EFCFFE6
:10075000FFFFFFFFFFFFFFEFC3C9FFFFFFFFFFFF2B
:10076000FFFFFF3EBFFFFFFFFFFFFFFFFFFFEFFBAE
:10077000D5FFFFFFFFFFFFFFFFFFFEFEFEFFFFFFB6
:10078000FFFFFFFFFF6FEFFBFFFFFFFBFFFFFFFF21
:10079000FFF6DFFFFFFFFFFFFFFF7FFEEFFFFFFF23
:1007A000FFFFFFFFFFFFE7FFFEFFF7FFFFFFFFFF7A
:1007B000FF7FFAEFBFFFFFFFFFFFFFFFFFE7FFFE37
:1007C000FFFFFFFFFFFFFFFF7FFEEFBFFFFFFFFF0A
:1007D000FFFFFFFFA7FFFCF7FFFFFFFFFFFFFF7F0C
:1007E000FEAEFFFFFDFFFFFFFFFFFFE7F7FAFFFD94
:1007F000FFFFFFFFFFFFFF7FAFFFFFFFFFFFFFFFD9
:10080000FFFFFFF7BEBDBDBDBD7D7B7B7B7BFBAF2F
:100810007FFFFFFFFFFFFFFFFFFFFFCAFFFFFFFF9D
:10082000FFFFFFFFFF7F6FFFFFFFFFFFFFFFFFFFE8
:10083000FFE7FEFFFFFFFFFFFFFFFFFFFFCFFEFF12
:10084000FFFFFFFFFFFFFFFFFFFEDFFFFFFFFFFFD9
:10085000FFFFFFFFEFFFFEFFFFFFFFFFFFFFFFFFB9
:10086000FEFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFA9
:10087000FFFFFFFFFFFFF7FEFFFFFFFFFFFFFFFF91
:10088000FFFFEFFFFEFFFFFFFBFFFFFFFFE7F2FCB5
:10089000EFFFFFFFFFFFFFFF7FAEEFFFFFFFFFFF59
:1008A000FFFFFFFFF77EFDFFFFFFFFFFFFFFFFFFE3
:1008B000EFFFFEFFFFFFBFFFFFFFBFFFFEFEFFFFDB
:1008C000FFFFFFFFFFFFDFEFDDFEFFFFFFFFFFFF8B
:1008D000FFFFFFFEFEFFFFFFFFFFFFFFFFFFAFEF8A
:1008E000FFFFFFFFFFFFFFFFFFFFBAFEFFFFFFFF5E
:1008F000FFFFFFFFFFEFFAFEFFFFFFFFFFFFFFFF1E
:10090000F69CBDBDBDBD7D7B7B7B7BFBAEFFFFFF52
:10091000FFFFFFFFFFFFFFF77AFFFFFFFFDFFFFF94
:10092000FFFF6FEFF7FFFFFFDFFFFFFFFFFFF7FEA8
:10093000FEFFFFFFDFFFFFFFFFFFCFEBFFFFFFFF2C
:10094000FFFFFFFFFFEF9EFCFFFFFFFFFFFFFFFF2B
:10095000FFEFEFFFFFFFFFFFFFFFFFFFFFFEFFFFC8
:10096000FFFFFFFFFFFFFF7FEFCBFFFFFFFFFFFD5D
:10097000FFFFFFFFBEFDFFFFFFFFFFFFFFFFFFEFDA
:10098000EFFFFFFFDFFFFFFFFFFFFFF8FFFFFFFFAE
:10099000BFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFB7
:1009A000FFFFFEFFFFFFFFFFFFFFFFFFFBAF7FFF2C
:1009B000FFFFDFFFFFFFFFFFFFFEEFFFFFFFFFFF78
:1009C000FFFFFFFFEFFFFFFFFFFFFFFFFFFFBFFF87
:1009D000FEFFFFFFFFFFFFFFFFFFFFAEFFFFFFFF79
:1009E000FFFFFFFFFFFFF7FAFFFFFFFFFFFFFFFF24
:1009F000FF7FEFFFFFFFFFFFFFFFFFFFFFF7BCBD24
:100A0000BDBDBD7D7B7B7B7BFBAFFFFFFFFFFFFFA2
:100A1000FFFFFFFFF7FAFFFFFFFFFFFFFFFFFF7F73
:100A2000AF7FFFFFFFFFFFFFFFFFFFEFFEFFFFFFB7
:100A3000FFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFF6
:100A4000FFFFFFFEFFFFFFFFFFFFFBFFFFFFEFFFCB
:100A5000FFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFA7
:100A6000FFFFFFFFFFEFFFFFFFFFFFFFBFFFFFFFE6
:100A7000FFFCFFFFFFFFFFFFFFFFFFFFEFFFFFFF99
:100A8000FFFFFBFFFFFFFFEFFEFF9F9F9F3F3F3FEB
:100A90003F3FFFEFDFDFDFDFCFB7BFBFBFBFFFBC31
:100AA000B99DBDBD7D7B7B7B7BFBEFD7F5F3F1D1A2
:100AB00065E3E3E3A3FFFE7FFEDEDEFFBDBDBDBD5C
:100AC000DFEFFBF7F3F3F3E7E7E7E7E7FBFEFFFF13
:0A0AD000FFFFFFFFFFFFFFFFFFFF26
:00000001FF
This file contains the firmware of Seven of Diamonds from OSITECH.
(Special thanks to Kevin MacPherson of OSITECH)
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册