123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599 |
- /*
- * GRUB -- GRand Unified Bootloader
- * Copyright (C) 2001,2002 Free Software Foundation, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
- /* Based on "src/config.c" in etherboot-5.0.5. */
- /*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2, or (at
- * your option) any later version.
- */
- #define GRUB 1
- #include <etherboot.h>
- #include <nic.h>
- #undef INCLUDE_PCI
- #if defined(INCLUDE_NS8390) || defined(INCLUDE_EEPRO100) || defined(INCLUDE_LANCE) || defined(INCLUDE_EPIC100) || defined(INCLUDE_TULIP) || defined(INCLUDE_OTULIP) || defined(INCLUDE_3C90X) || defined(INCLUDE_3C595) || defined(INCLUDE_RTL8139) || defined(INCLUDE_VIA_RHINE) || defined(INCLUDE_W89C840) || defined(INCLUDE_DAVICOM) || defined(INCLUDE_SIS900) || defined(INCLUDE_NATSEMI) || defined(INCLUDE_TLAN)
- /* || others later */
- # define INCLUDE_PCI
- # include <pci.h>
- static unsigned short pci_ioaddrs[16];
- static struct pci_device pci_nic_list[] =
- {
- #ifdef INCLUDE_NS8390
- { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8029,
- "Realtek 8029", 0, 0, 0, 0},
- { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C940,
- "Winbond NE2000-PCI", 0, 0, 0, 0},
- { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL2000,
- "Compex ReadyLink 2000", 0, 0, 0, 0},
- { PCI_VENDOR_ID_KTI, PCI_DEVICE_ID_KTI_ET32P2,
- "KTI ET32P2", 0, 0, 0, 0},
- { PCI_VENDOR_ID_NETVIN, PCI_DEVICE_ID_NETVIN_NV5000SC,
- "NetVin NV5000SC", 0, 0, 0, 0},
- { PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_HT80232,
- "Holtek HT80232", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_3C90X
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO,
- "3Com900-TPO", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO,
- "3Com900-Combo", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905TX,
- "3Com905-TX", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905T4,
- "3Com905-T4", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9004,
- "3Com900B-TPO", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9005,
- "3Com900B-Combo", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9006,
- "3Com900B-2/T", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x900A,
- "3Com900B-FL", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905B_TX,
- "3Com905B-TX", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9056,
- "3Com905B-T4", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x905A,
- "3Com905B-FL", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905C_TXM,
- "3Com905C-TXM", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9800,
- "3Com980-Cyclone", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9805,
- "3Com9805", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x7646,
- "3CSOHO100-TX", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_3C595
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C590,
- "3Com590", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595,
- "3Com595", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_1,
- "3Com595", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_2,
- "3Com595", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO,
- "3Com900-TPO", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO,
- "3Com900-Combo", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9004,
- "3Com900B-TPO", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9005,
- "3Com900B-Combo", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9006,
- "3Com900B-2/T", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x900A,
- "3Com900B-FL", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9800,
- "3Com980-Cyclone", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x9805,
- "3Com9805", 0, 0, 0, 0},
- { PCI_VENDOR_ID_3COM, 0x7646,
- "3CSOHO100-TX", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_EEPRO100
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82557,
- "Intel EtherExpressPro100", 0, 0, 0, 0},
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82559ER,
- "Intel EtherExpressPro100 82559ER", 0, 0, 0, 0},
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1029,
- "Intel EtherExpressPro100 ID1029", 0, 0, 0, 0},
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1030,
- "Intel Corporation 82559 InBusiness 10/100", 0, 0, 0, 0},
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82562,
- "Intel EtherExpressPro100 82562EM", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_EPIC100
- { PCI_VENDOR_ID_SMC, PCI_DEVICE_ID_SMC_EPIC100,
- "SMC EtherPowerII", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_LANCE
- { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE,
- "AMD Lance/PCI", 0, 0, 0, 0},
- { PCI_VENDOR_ID_AMD_HOMEPNA, PCI_DEVICE_ID_AMD_HOMEPNA,
- "AMD Lance/HomePNA", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_RTL8139
- { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139,
- "Realtek 8139", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DLINK, PCI_DEVICE_ID_DFE530TXP,
- "DFE530TX+/DFE538TX", 0, 0, 0, 0},
- { PCI_VENDOR_ID_SMC_1211, PCI_DEVICE_ID_SMC_1211,
- "SMC EZ10/100", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_OTULIP
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
- "Digital Tulip", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST,
- "Digital Tulip Fast", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
- "Digital Tulip+", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142,
- "Digital Tulip 21142", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_TULIP
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
- "Digital Tulip", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST,
- "Digital Tulip Fast", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
- "Digital Tulip+", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142,
- "Digital Tulip 21142", 0, 0, 0, 0},
- { PCI_VENDOR_ID_MACRONIX, PCI_DEVICE_ID_MX987x5,
- "Macronix MX987x5", 0, 0, 0, 0},
- { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_LC82C115,
- "LinkSys LNE100TX", 0, 0, 0, 0},
- { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_DEC_TULIP,
- "Netgear FA310TX", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102,
- "Davicom 9102", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009,
- "Davicom 9009", 0, 0, 0, 0},
- { PCI_VENDOR_ID_ADMTEK, PCI_DEVICE_ID_ADMTEK_0985,
- "ADMtek Centaur-P", 0, 0, 0, 0},
- { PCI_VENDOR_ID_ADMTEK, 0x0981,
- "ADMtek AN981 Comet", 0, 0, 0, 0},
- { 0x125B, 0x1400,
- "ASIX AX88140", 0, 0, 0, 0 },
- { 0x11F6, 0x9881,
- "Compex RL100-TX", 0, 0, 0, 0 },
- #endif
- #ifdef INCLUDE_DAVICOM
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102,
- "Davicom 9102", 0, 0, 0, 0},
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009,
- "Davicom 9009", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_VIA_RHINE
- { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_VT6102,
- "VIA 6102", 0, 0, 0, 0},
- { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_RHINE_I,
- "VIA 3043", 0, 0, 0, 0},
- { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_86C100A,
- "VIA 86C100A", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_W89C840
- { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C840,
- "Winbond W89C840F", 0, 0, 0, 0},
- { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL100ATX,
- "Compex RL100ATX", 0, 0, 0, 0},
- #endif
- #ifdef INCLUDE_SIS900
- { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900,
- "SIS900", 0, 0, 0, 0},
- { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016,
- "SIS7016", 0, 0, 0, 0},
- #endif
-
- #ifdef INCLUDE_NATSEMI
- { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_DP83815,
- "DP83815", 0, 0, 0, 0},
- #endif
-
- #ifdef INCLUDE_TLAN
- { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326,
- "OC2326", 0, 0, 0, 0},
- #endif
- /* other PCI NICs go here */
- {0, 0, NULL, 0, 0, 0, 0}
- };
- #endif /* INCLUDE_*PCI */
- #include <cards.h>
- #ifdef INCLUDE_PCI
- struct pci_dispatch_table
- {
- unsigned short vendor;
- unsigned short dev_id;
- struct nic *(*eth_probe) (struct nic *, unsigned short *,
- struct pci_device *);
- };
- static struct pci_dispatch_table PCI_NIC[] =
- {
- # ifdef INCLUDE_NS8390
- { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8029, nepci_probe },
- { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C940, nepci_probe },
- { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL2000, nepci_probe },
- { PCI_VENDOR_ID_KTI, PCI_DEVICE_ID_KTI_ET32P2, nepci_probe },
- { PCI_VENDOR_ID_NETVIN, PCI_DEVICE_ID_NETVIN_NV5000SC, nepci_probe },
- { PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_HT80232, nepci_probe },
- # endif /* INCLUDE_NS8390 */
- # ifdef INCLUDE_3C90X
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905TX, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905T4, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x9004, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x9005, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x9006, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x900A, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905B_TX, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x9056, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x905A, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905C_TXM, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x9800, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x9805, a3c90x_probe },
- { PCI_VENDOR_ID_3COM, 0x7646, a3c90x_probe },
- # endif /* INCLUDE_3C90X */
- # ifdef INCLUDE_3C595
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C590, t595_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595, t595_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_1, t595_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_2, t595_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO, t595_probe },
- { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x9004, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x9005, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x9006, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x900A, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x9800, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x9805, t595_probe },
- { PCI_VENDOR_ID_3COM, 0x7646, t595_probe },
- # endif /* INCLUDE_3C595 */
- # ifdef INCLUDE_EEPRO100
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82557, eepro100_probe },
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82559ER, eepro100_probe },
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1029, eepro100_probe },
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1030, eepro100_probe },
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82562, eepro100_probe },
- # endif /* INCLUDE_EEPRO100 */
- # ifdef INCLUDE_EPIC100
- { PCI_VENDOR_ID_SMC, PCI_DEVICE_ID_SMC_EPIC100, epic100_probe },
- # endif /* INCLUDE_EPIC100 */
- # ifdef INCLUDE_LANCE
- { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, lancepci_probe },
- { PCI_VENDOR_ID_AMD_HOMEPNA, PCI_DEVICE_ID_AMD_HOMEPNA, lancepci_probe },
- # endif /* INCLUDE_LANCE */
- # ifdef INCLUDE_RTL8139
- { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139, rtl8139_probe },
- { PCI_VENDOR_ID_DLINK, PCI_DEVICE_ID_DFE530TXP, rtl8139_probe },
- { PCI_VENDOR_ID_SMC_1211, PCI_DEVICE_ID_SMC_1211, rtl8139_probe },
- # endif /* INCLUDE_RTL8139 */
- # ifdef INCLUDE_OTULIP
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP, otulip_probe },
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST, otulip_probe },
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS, otulip_probe },
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, otulip_probe },
- # endif /* INCLUDE_OTULIP */
- # ifdef INCLUDE_TULIP
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP, tulip_probe },
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST, tulip_probe },
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS, tulip_probe },
- { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, tulip_probe },
- { PCI_VENDOR_ID_MACRONIX, PCI_DEVICE_ID_MX987x5, tulip_probe },
- { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_LC82C115, tulip_probe },
- { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_DEC_TULIP, tulip_probe },
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102, tulip_probe },
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009, tulip_probe },
- { PCI_VENDOR_ID_ADMTEK, PCI_DEVICE_ID_ADMTEK_0985, tulip_probe },
- { PCI_VENDOR_ID_ADMTEK, 0x0981, tulip_probe },
- { 0x125B, 0x1400, tulip_probe },
- { 0x11F6, 0x9881, tulip_probe },
- # endif /* INCLUDE_TULIP */
- # ifdef INCLUDE_DAVICOM
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102, davicom_probe },
- { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009, davicom_probe },
- # endif /* INCLUDE_DAVICOM */
- # ifdef INCLUDE_VIA_RHINE
- { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_VT6102, rhine_probe },
- { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_RHINE_I, rhine_probe },
- { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_86C100A, rhine_probe },
- # endif /* INCLUDE_VIA_RHINE */
- # ifdef INCLUDE_W89C840
- { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C840, w89c840_probe },
- { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL100ATX, w89c840_probe },
- # endif /* INCLUDE_W89C840 */
- # ifdef INCLUDE_SIS900
- { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900, sis900_probe },
- { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016, sis900_probe },
- # endif /* INCLUDE_SIS900 */
- # ifdef INCLUDE_NATSEMI
- { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_DP83815, natsemi_probe },
- # endif /* INCLUDE_NATSEMI */
- # ifdef INCLUDE_TLAN
- { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326, tlan_probe },
- # endif /* INCLUDE_TLAN */
- { 0, 0, 0 }
- };
- #endif /* GRUB && INCLUDE_PCI */
- struct dispatch_table
- {
- const char *nic_name;
- #ifdef INCLUDE_PCI
- struct nic *(*eth_probe) (struct nic *, unsigned short *,
- struct pci_device *);
- #else
- struct nic *(*eth_probe) (struct nic *, unsigned short *);
- #endif /* INCLUDE_PCI */
- unsigned short *probe_ioaddrs; /* for probe overrides */
- };
- /*
- * NIC probing is in order of appearance in this table.
- * If for some reason you want to change the order,
- * just rearrange the entries (bracketed by the #ifdef/#endif)
- */
- static struct dispatch_table NIC[] =
- {
- #ifdef INCLUDE_RTL8139
- { "RTL8139", rtl8139_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_SIS900
- { "SIS900", sis900_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_NATSEMI
- { "NATSEMI", natsemi_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_WD
- { "WD", wd_probe, 0 },
- #endif
- #ifdef INCLUDE_3C503
- { "3C503", t503_probe, 0 },
- #endif
- #ifdef INCLUDE_NE
- { "NE*000", ne_probe, 0 },
- #endif
- #ifdef INCLUDE_3C509
- { "3C5x9", t509_probe, 0 },
- #endif
- #ifdef INCLUDE_3C529
- { "3C5x9", t529_probe, 0 },
- #endif
- #ifdef INCLUDE_3C595
- { "3C595", t595_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_3C90X
- { "3C90X", a3c90x_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_EEPRO
- { "EEPRO", eepro_probe, 0 },
- #endif
- #ifdef INCLUDE_EEPRO100
- { "EEPRO100", eepro100_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_EPIC100
- { "EPIC100", epic100_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_OTULIP
- { "OTulip", otulip_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_TULIP
- { "Tulip", tulip_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_DAVICOM
- { "DAVICOM", davicom_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_CS89X0
- { "CS89x0", cs89x0_probe, 0 },
- #endif
- #ifdef INCLUDE_NE2100
- { "NE2100", ne2100_probe, 0 },
- #endif
- #ifdef INCLUDE_NI6510
- { "NI6510", ni6510_probe, 0 },
- #endif
- #ifdef INCLUDE_SK_G16
- { "SK_G16", SK_probe, 0 },
- #endif
- #ifdef INCLUDE_3C507
- { "3C507", t507_probe, 0 },
- #endif
- #ifdef INCLUDE_NI5010
- { "NI5010", ni5010_probe, 0 },
- #endif
- #ifdef INCLUDE_NI5210
- { "NI5210", ni5210_probe, 0 },
- #endif
- #ifdef INCLUDE_EXOS205
- { "EXOS205", exos205_probe, 0 },
- #endif
- #ifdef INCLUDE_SMC9000
- { "SMC9000", smc9000_probe, 0 },
- #endif
- #ifdef INCLUDE_TIARA
- { "TIARA", tiara_probe, 0 },
- #endif
- #ifdef INCLUDE_DEPCA
- { "DEPCA", depca_probe, 0 },
- #endif
- #ifdef INCLUDE_NS8390
- { "NE2000/PCI", nepci_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_LANCE
- { "LANCE/PCI", lancepci_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_VIA_RHINE
- { "VIA 86C100", rhine_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_W89C840
- { "W89C840F", w89c840_probe, pci_ioaddrs },
- #endif
- #ifdef INCLUDE_TLAN
- { "Olicom 2326", tlan_probe, pci_ioaddrs },
- #endif
- /* this entry must always be last to mark the end of list */
- { 0, 0, 0 }
- };
- #define NIC_TABLE_SIZE (sizeof (NIC) / sizeof (NIC[0]))
- static int
- eth_dummy (struct nic *dummy)
- {
- return 0;
- }
- static char packet[ETH_FRAME_LEN];
- struct nic nic =
- {
- (void (*) (struct nic *)) eth_dummy, /* reset */
- eth_dummy, /* poll */
- (void (*) (struct nic *, const char *,
- unsigned int, unsigned int,
- const char *)) eth_dummy, /* transmit */
- (void (*) (struct nic *)) eth_dummy, /* disable */
- #ifdef T503_AUI
- 1, /* aui */
- #else
- 0, /* no aui */
- #endif
- &rom, /* rom_info */
- arptable[ARP_CLIENT].node, /* node_addr */
- packet, /* packet */
- 0, /* packetlen */
- 0, /* priv_data */
- };
- void
- eth_reset (void)
- {
- (*nic.reset) (&nic);
- }
- int
- eth_probe (void)
- {
- struct pci_device *p;
- const struct dispatch_table *t;
- static int probed = 0;
- /* If already probed, don't try to probe it any longer. */
- if (probed)
- return 1;
-
- /* Clear the ready flag. */
- network_ready = 0;
- /* Clear the ARP table. */
- grub_memset ((char *) arptable, 0,
- MAX_ARP * sizeof (struct arptable_t));
-
- p = 0;
-
- #ifdef INCLUDE_PCI
- /* In GRUB, the ROM info is initialized here. */
- rom = *((struct rom_info *) ROM_INFO_LOCATION);
-
- eth_pci_init(pci_nic_list);
- pci_ioaddrs[0] = 0;
- pci_ioaddrs[1] = 0;
- /* at this point we have a list of possible PCI candidates
- we just pick the first one with a non-zero ioaddr */
- for (p = pci_nic_list; p->vendor != 0; ++p)
- {
- if (p->ioaddr != 0)
- {
- pci_ioaddrs[0] = p->ioaddr;
- break;
- }
- }
- #endif
-
- etherboot_printf("Probing...");
-
- #ifdef INCLUDE_PCI
- if (p->vendor)
- {
- struct pci_dispatch_table *pt;
-
- for (pt = PCI_NIC; pt->eth_probe != 0; pt++)
- if (p->vendor == pt->vendor && p->dev_id == pt->dev_id)
- {
- etherboot_printf ("[%s]", p->name);
- if ((pt->eth_probe) (&nic, pci_ioaddrs, p))
- {
- probed = 1;
- return 1;
- }
- }
- }
- #endif /* INCLUDE_PCI */
-
- for (t = NIC; t->nic_name != 0; ++t)
- {
- etherboot_printf("[%s]", t->nic_name);
- #ifdef INCLUDE_PCI
- if ((*t->eth_probe) (&nic, t->probe_ioaddrs, p))
- {
- probed = 1;
- return 1;
- }
- #else
- if ((*t->eth_probe) (&nic, t->probe_ioaddrs))
- {
- probed = 1;
- return 1;
- }
- #endif /* INCLUDE_PCI */
- }
-
- return 0;
- }
- int
- eth_poll (void)
- {
- return ((*nic.poll) (&nic));
- }
- void
- eth_transmit (const char *d, unsigned int t, unsigned int s, const void *p)
- {
- (*nic.transmit) (&nic, d, t, s, p);
- if (t == IP)
- twiddle ();
- }
- void
- eth_disable (void)
- {
- (*nic.disable) (&nic);
- }
|