My Future Domain TMC-1610 scsi card without BIOS is not
recognized at startup by linux kernel. Because I got it (and
didn't want to buy an EPROM for it) I've played a little with
the kernel sources to get it recognized even without the BIOS
presence.
The main point is this: because older fdomain.c driver didn't
allow you to say something like:
aha15xx=0x280,11,0xd0000
as a parameter to kernel at boot time (this is to supply information
about location of Adaptec SCSI card to the kernel), I had to patch
the source code to recognize it. It's very easy, but perhaps
not so clean as it should be.
According to Rickard Faith, The newer Linux kernels should have the boot option for this:
fdomain=<PORT_BASE>,<IRQ>,<ADAPTER_ID>
So, with the FD at base address 0x140, interrupt 11 you would say to lilo at boot:fdomain=0x140,11,7
I presume the number 7 is the SCSI id for the future domain card.
If this helps, you're lucky. If not, try to modify & recompile your kernel as seen on the rest of this page.
Linux (device driver) first searches for the presence of BIOS. Then, he (she,
or even it ?)
compares some strings defined in fdomain.c with content of this
BIOS. Every BIOS includes string (line of text) which describes its
manufacturer, year, chipset etc.(called signature).
So, if some textual
string from fdomain.c is identical to that one in the BIOS (at
specified offset from beginning of ROM) the driver reads some
additional info (mainly chipset used) from the signature's struct record and passes it to the real chipset detection program(which probes hw addresses and IRQs).
My patch is based on idea that empty string is equal to
everything, so if none of the known BIOSes are present,
driver treats it to be the card with NULL signature (that's
what you've to do-add a signature w/null string) and recognizes it always.
How to add an empty string signature ?
Well, first of all, find the fdomain.c source code
(linux/drivers/scsi/fdomain.c) and find the lines with
signatures. It might look like this example (a piece of code cut from it):
/* READ THIS BEFORE YOU ADD A SIGNATURE! READING THIS SHORT NOTE CAN SAVE YOU LOTS OF TIME! READ EVERY WORD, ESPECIALLY THE WORD *NOT* This driver works *ONLY* for Future Domain cards using the TMC-1800, TMC-18C50, or TMC-18C30 chip. This includes models TMC-1650, 1660, 1670, and 1680. The following BIOS signature signatures are for boards which do *NOT* work with this driver (these TMC-8xx and TMC-9xx boards may work with the Seagate driver): FUTURE DOMAIN CORP. (C) 1986-1988 V4.0I 03/16/88 FUTURE DOMAIN CORP. (C) 1986-1989 V5.0C2/14/89 FUTURE DOMAIN CORP. (C) 1986-1989 V6.0A7/28/89 FUTURE DOMAIN CORP. (C) 1986-1990 V6.0105/31/90 FUTURE DOMAIN CORP. (C) 1986-1990 V6.0209/18/90 FUTURE DOMAIN CORP. (C) 1986-1990 V7.009/18/90 FUTURE DOMAIN CORP. (C) 1992 V8.00.004/02/92 */ struct signature { char *signature; int sig_offset; int sig_length; int major_bios_version; int minor_bios_version; int flag; /* 1 == PCI_bus, 2 == ISA_200S, 3 == ISA_250MG, 4 == ISA_200S */ } signatures[] = { /* 1 2 3 4 5 6 */ /* 123456789012345678901234567890123456789012345678901234567890 */ { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V2.07/28/89", 5, 50, 2, 0, 0 }, { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V1.07/28/89", 5, 50, 2, 0, 0 }, { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V2.07/28/89", 72, 50, 2, 0, 2 }, { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V2.0", 73, 43, 2, 0, 3 }, { "FUTURE DOMAIN CORP. (C) 1991 1800-V2.0.", 72, 39, 2, 0, 4 }, { "FUTURE DOMAIN CORP. (C) 1992 V3.00.004/02/92", 5, 44, 3, 0, 0 }, { "FUTURE DOMAIN TMC-18XX (C) 1993 V3.203/12/93", 5, 44, 3, 2, 0 }, { "IBM F1 P2 BIOS v1.0104/29/93", 5, 28, 3, -1, 0 }, { "Future Domain Corp. V1.0008/18/93", 5, 33, 3, 4, 0 }, { "Future Domain Corp. V1.0008/18/93", 26, 33, 3, 4, 1 }, /* This next signature may not be a 3.5 bios */ { "Future Domain Corp. V2.0108/18/93", 5, 33, 3, 5, 0 }, { "FUTURE DOMAIN CORP. V3.5008/18/93", 5, 34, 3, 5, 0 }, { "FUTURE DOMAIN 18c30/18c50/1800 (C) 1994 V3.5", 5, 44, 3, 5, 0 }, { "FUTURE DOMAIN TMC-18XX", 5, 22, -1, -1, 0 }, /* READ NOTICE ABOVE *BEFORE* YOU WASTE YOUR TIME ADDING A SIGNATURE Also, fix the disk geometry code for your signature and send your changes for faith@cs.unc.edu. Above all, do *NOT* change any old signatures! Note that the last line will match a "generic" 18XX bios. Because Future Domain has changed the host SCSI ID and/or the location of the geometry information in the on-board RAM area for each of the first three BIOS's, it is still important to enter a fully qualified signature in the table for any new BIOS's (after the host SCSI ID and geometry location are verified). */ };Then, find the line that describes your card (by its type, for example TMC-1610 is the serie of mine,not listed here directly) and copy this line (whole struct record quoted by { }, - don't forget , at the end) after the last signature listed. Empty the string quoted by "" and fill the length and offset of this string to 0,0 (as shown in this example):
/* This next signature may not be a 3.5 bios */ { "Future Domain Corp. V2.0108/18/93", 5, 33, 3, 5, 0 }, { "FUTURE DOMAIN CORP. V3.5008/18/93", 5, 34, 3, 5, 0 }, { "FUTURE DOMAIN 18c30/18c50/1800 (C) 1994 V3.5", 5, 44, 3, 5, 0 }, { "FUTURE DOMAIN TMC-18XX", 5, 22, -1, -1, 0 }, { "", 0, 0, -1, -1, 0 }, ^^-- this is empty signature and its offset & length --^^-^^ ^^__^^ ^^--type of bus | | bios versions (major&minor) -------- /* READ NOTICE ABOVE *BEFORE* YOU WASTE YOUR TIME ADDING A SIGNATURE Also, fix the disk geometry code for your signature and send your changes for faith@cs.unc.edu. Above all, do *NOT* change any old signatures!Well, it's done! Now save this modified source and recompile the kernel (by issuing something like make dep ; make clean ; make zImage or whatever you compile by.
After the next boot, your card should be OK.
Here's an example of how it look like when the card is
recognized:
Dec 7 20:33:10 smrt kernel: scsi0: BIOS version ?.?. at 0xc8000 using scsi id 7 Dec 7 20:33:10 smrt kernel: scsi0 : TMC-18C30 chip at 0x150 irq 11 Dec 7 20:33:10 smrt kernel: scsi0 : Future Domain TMC-16x0 SCSI driver, version 5.28 Dec 7 20:33:10 smrt kernel: scsi : 1 host. Dec 7 20:33:10 smrt kernel: Vendor: TOSHIBA Model: CD-ROM XM-5201TA Rev: 3014 Dec 7 20:33:10 smrt kernel: Type: CD-ROM ANSI SCSI revision: 02 Dec 7 20:33:10 smrt kernel: Detected scsi CD-ROM sr0 at scsi0, id 0, lun 0 Dec 7 20:33:10 smrt kernel: scsi : detected 1 SCSI cdrom total.
Have fun and happy tweaking !
BTW, is Linux he, she or it (NOT he_s-sh_it) ?
What's the sex of Linux ?