Advansys ABP-970U notes
Option ROM loader
The ABP-970U SCSI adapter option ROM does not run in the X7SBL-LN2 motherboard due to a memory map conflict: the SCSI adapter wants the option ROM mapped below the 1 MB area, but the option ROM area below 1 MB is completely filled by motherboard devices, and there is no way to disable their mappings. Since I needed to run the SCSI board configuration program I wrote a small assembler program for loading the SCSI board option ROM.
The aschack program is loaded as a bootsector or by chainloading using GRUB, and does the following:
- map the ABP-970U option ROM on physical address space and copy it to a temporary buffer in RAM
- configure the ABP-970U using PCI config space accesses, disabling the option ROM
- scan the system BIOS for the PnP installation structure
(
$PnPheader signature); when found call the option ROM entrypoint - do an
int 0x19to resume booting
| User: guest, password: guest (info) | |||
| aschack.tar.xz [SIG] | source code | 3 KB | 2026-Feb-20 |
Linux advansys driver bug?
The advansys driver in Linux version 6.10.5 does not work out of
the box with the ABP-970U. The problem is in
function advansys_init in
file drivers/scsi/advansys.c:
static int __init advansys_init(void)
{
int error;
error = isa_register_driver(&advansys_vlb_driver,
ASC_IOADR_TABLE_MAX_IX);
if (error)
goto fail;
error = eisa_driver_register(&advansys_eisa_driver);
if (error)
goto unregister_vlb;
error = pci_register_driver(&advansys_pci_driver);
if (error)
goto unregister_eisa;
return 0;
unregister_eisa:
eisa_driver_unregister(&advansys_eisa_driver);
unregister_vlb:
isa_unregister_driver(&advansys_vlb_driver);
fail:
return error;
}
If there is no Advansys ISA or EISA board in the system, then the
call to either isa_register_driver
or eisa_driver_register will
terminate advansys_init without
reaching pci_register_driver; since the ABP-970U is a
PCI board, the driver is never registered.
I am not familiar enough with the Linux driver architecture to say this is a bug, but the driver can be hacked to load by deleting the ISA and EISA calls:
int error;
- error = isa_register_driver(&advansys_vlb_driver,
- ASC_IOADR_TABLE_MAX_IX);
- if (error)
- goto fail;
-
- error = eisa_driver_register(&advansys_eisa_driver);
- if (error)
- goto unregister_vlb;
error = pci_register_driver(&advansys_pci_driver);
if (error)
- goto unregister_eisa;
+ goto fail;
return 0;
-unregister_eisa:
- eisa_driver_unregister(&advansys_eisa_driver);
-unregister_vlb:
- isa_unregister_driver(&advansys_vlb_driver);
fail:
After applying the patch, the driver works fine with the ABP-970U.