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