176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Split out from 3c509.c to make build process more sane 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE ( BSD2 ); 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "etherboot.h" 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/mca.h> 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/isa.h> /* for ISA_ROM */ 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "nic.h" 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "3c509.h" 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Several other pieces of the MCA support code were shamelessly 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * borrowed from the Linux kernel source. 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MCA support added by Adam Fritzler (mid@auk.cx) 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Generalised out of the 3c529 driver and into a bus type by Michael 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Brown <mbrown@fensystems.co.uk> 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic int t529_probe ( struct nic *nic, struct mca_device *mca ) { 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Retrieve NIC parameters from MCA device parameters */ 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nic->ioaddr = ( ( mca->pos[4] & 0xfc ) | 0x02 ) << 8; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nic->irqno = mca->pos[5] & 0x0f; 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf ( "3c529 board found on MCA at %#hx IRQ %d -", 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nic->ioaddr, nic->irqno ); 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Hand off to generic t5x9 probe routine */ 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return t5x9_probe ( nic, MCA_ID ( mca ), 0xffff ); 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic void t529_disable ( struct nic *nic, struct mca_device *mca __unused ) { 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t5x9_disable ( nic ); 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic struct mca_device_id el3_mca_adapters[] = { 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { "3Com 3c529 EtherLink III (10base2)", 0x627c }, 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { "3Com 3c529 EtherLink III (10baseT)", 0x627d }, 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { "3Com 3c529 EtherLink III (test mode)", 0x62db }, 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { "3Com 3c529 EtherLink III (TP or coax)", 0x62f6 }, 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { "3Com 3c529 EtherLink III (TP)", 0x62f7 }, 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4976d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanMCA_DRIVER ( t529_driver, el3_mca_adapters ); 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5176d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanDRIVER ( "3c529", nic_driver, mca_driver, t529_driver, 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t529_probe, t529_disable ); 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanISA_ROM( "3c529", "3c529 == MCA 3c509" ); 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Local variables: 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * c-basic-offset: 8 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * c-indent-level: 8 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * tab-width: 8 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * End: 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 63