update the network support to etherboot-4.5.8.

This commit is contained in:
okuji committed 2000-04-22 01:17:09 +00:00
1 parent 26fef18cb8
commit 5ff25f9b8f
51 files changed
+5395 -3479

No files matched your search

+68 -185
View File
@@ -17,27 +17,28 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* Based on "src/config.c" in etherboot-4.4.2. Some parts are stolen
from "include/linux/pci.h" in linux-2.2.14. */
/* Based on "src/config.c" in etherboot-4.5.8. */
/*
* 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.
*/
#include "etherboot.h"
#include "nic.h"
#include "netboot_config.h"
struct pci_device; /* for the probe prototype */
#undef INCLUDE_PCI
#if defined(INCLUDE_NEPCI) || defined(INCLUDE_EEPRO100) || defined(INCLUDE_LANCEPCI) || defined(INCLUDE_EPIC100) || defined(INCLUDE_TULIP) || defined(INCLUDE_NTULIP) || defined(INCLUDE_3C90X) || defined(INCLUDE_RTL8139) || defined(INCLUDE_VIA_RHINE) || defined(INCLUDE_3C59X)
#if defined(INCLUDE_NS8390) || defined(INCLUDE_EEPRO100) || defined(INCLUDE_LANCE) || defined(INCLUDE_EPIC100) || defined(INCLUDE_TULIP) || defined(INCLUDE_OTULIP) || defined(INCLUDE_3C90X) || defined(INCLUDE_RTL8139) || defined(INCLUDE_VIA_RHINE)
/* || others later */
#if defined(ETHERBOOT32) /* only for 32 bit machines */
#define INCLUDE_PCI
/*#include <linux/pci.h>*/
#include "pci.h"
static unsigned short pci_ioaddrs[16];
static struct pci_device pci_nic_list[] = {
#ifdef INCLUDE_NEPCI
#ifdef INCLUDE_NS8390
{ PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8029,
"Realtek 8029", 0, 0, 0},
{ PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C940,
@@ -85,17 +86,17 @@ static struct pci_device pci_nic_list[] = {
{ PCI_VENDOR_ID_SMC, PCI_DEVICE_ID_SMC_EPIC100,
"SMC EtherPowerII", 0, 0, 0},
#endif
#ifdef INCLUDE_LANCEPCI
#ifdef INCLUDE_LANCE
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE,
"AMD Lance/PCI", 0, 0, 0},
#endif
#ifdef INCLUDE_RTL8139
#ifdef INCLUDE_RTL8139
{ PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139,
"Realtek 8139", 0, 0, 0},
{ PCI_VENDOR_ID_SMC_1211, PCI_DEVICE_ID_SMC_1211,
"SMC EZ10/100", 0, 0, 0},
#endif
#ifdef INCLUDE_TULIP
#ifdef INCLUDE_OTULIP
{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
"Digital Tulip", 0, 0, 0},
{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST,
@@ -105,7 +106,7 @@ static struct pci_device pci_nic_list[] = {
{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142,
"Digital Tulip 21142", 0, 0, 0},
#endif
#ifdef INCLUDE_NTULIP
#ifdef INCLUDE_TULIP
{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
"Digital Tulip", 0, 0, 0},
{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST,
@@ -121,163 +122,33 @@ static struct pci_device pci_nic_list[] = {
{ PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_DEC_TULIP,
"Netgear FA310TX", 0, 0, 0},
#endif
#ifdef INCLUDE_VIA_RHINE
#ifdef INCLUDE_VIA_RHINE
{ PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_RHINE_I,
"VIA 3043", 0, 0, 0},
{ PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_86C100A,
"VIA 86C100A", 0, 0, 0},
#endif
#ifdef INCLUDE_3C59X
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C590,
"3c590 Vortex 10Mbps", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595TX,
"3c595 Vortex 100baseTX", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595T4,
"3c595 Vortex 100baseT4", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVIVE_ID_3COM_3C595MII,
"3c595 Vortex 100base-MII", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO,
"3c900 Boomerang 10baseT", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO,
"3c900 Boomerang 10Mbps/Combo", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905TX,
"3c905 Boomerang 100baseTx", 0, 0, 0},
{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905T4,
"3c905 Boomerang 100baseT4", 0, 0, 0},
#endif
/* other PCI NICs go here */
{0,}
{0, 0, NULL, 0, 0, 0}
};
#endif /* ETHERBOOT32 */
#endif /* INCLUDE_*PCI */
#include "cards.h"
struct dispatch_table
{
char *nic_name;
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 */
};
#ifdef INCLUDE_WD
extern struct nic *wd_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_3C503
extern struct nic *t503_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_VIA_RHINE
extern struct nic *rhine_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_NE
extern struct nic *ne_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_NEPCI
extern struct nic *nepci_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_3C509
extern struct nic *t509_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_3C529
extern struct nic *t529_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_3C90X
extern struct nic *a3c90x_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_EEPRO100
extern struct nic *eepro100_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_EPIC100
extern struct nic *epic100_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_TULIP
extern struct nic *tulip_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_NTULIP
extern struct nic *ntulip_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_CS89x0
extern struct nic *cs89x0_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_LANCEPCI
extern struct nic *lancepci_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_NE2100
extern struct nic *ne2100_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_NI6510
extern struct nic *ni6510_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_SK_G16
extern struct nic *SK_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_3C507
extern struct nic *t507_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_NI5210
extern struct nic *ni5210_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_EXOS205
extern struct nic *exos205_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_SMC9000
extern struct nic *smc9000_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_TIARA
extern struct nic *tiara_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_RTL8139
extern struct nic *rtl8139_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
#ifdef INCLUDE_3C59X
extern struct nic *VX_probe(struct nic *, unsigned short *,
struct pci_device *);
#endif
/*
* NIC probing is in order of appearance in this table.
* If for some reason you want to change the order,
@@ -312,13 +183,13 @@ static struct dispatch_table NIC[] =
#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_NTULIP
{ "NTulip", ntulip_probe, pci_ioaddrs },
#endif
#ifdef INCLUDE_CS89x0
#ifdef INCLUDE_CS89X0
{ "CS89x0", cs89x0_probe, 0 },
#endif
#ifdef INCLUDE_NE2100
@@ -345,17 +216,17 @@ static struct dispatch_table NIC[] =
#ifdef INCLUDE_TIARA
{ "TIARA", tiara_probe, 0 },
#endif
#ifdef INCLUDE_NEPCI
#ifdef INCLUDE_DEPCA
{ "DEPCA", depca_probe, 0 },
#endif
#ifdef INCLUDE_NS8390
{ "NE2000/PCI", nepci_probe, pci_ioaddrs },
#endif
#ifdef INCLUDE_LANCEPCI
#ifdef INCLUDE_LANCE
{ "LANCE/PCI", lancepci_probe, pci_ioaddrs },
#endif
#ifdef INCLUDE_VIA_RHINE
#ifdef INCLUDE_VIA_RHINE
{ "VIA 86C100", rhine_probe, pci_ioaddrs },
#endif
#ifdef INCLUDE_3C59X
{ "VorTex/PCI", VX_probe, pci_ioaddrs },
#endif
/* this entry must always be last to mark the end of list */
{ 0, 0, 0 }
@@ -368,16 +239,16 @@ static int eth_dummy(struct nic *nic)
return (0);
}
char packet[ETH_MAX_PACKET];
static char packet[ETH_MAX_PACKET];
struct nic nic =
{
#ifdef ETHERBOOT32
(void (*)(struct nic *))eth_dummy, /* reset */
eth_dummy, /* poll */
(void (*)(struct nic *, char *,
(void (*)(struct nic *, const char *,
unsigned int, unsigned int,
char *))eth_dummy, /* transmit */
const char *))eth_dummy, /* transmit */
(void (*)(struct nic *))eth_dummy, /* disable */
#endif
/* bcc has problems with complicated casts */
@@ -398,7 +269,7 @@ struct nic nic =
0 /* priv_data */
};
#if 0
#ifndef GRUB
void print_config(void)
{
struct dispatch_table *t;
@@ -414,7 +285,7 @@ void print_config(void)
printf("[%s]", t->nic_name);
putchar('\n');
}
#endif
#endif /* ! GRUB */
void eth_reset(void)
{
@@ -425,24 +296,31 @@ int eth_probe(void)
{
struct pci_device *p;
struct dispatch_table *t;
#ifdef GRUB
static int probed = 0;
#endif /* GRUB */
/* If already probed, don't try to probe it any longer. */
if (probed)
return 1;
#ifdef GRUB
/* 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));
network_ready = 0;
/* Clear the ARP table. */
grub_memset ((char *) arptable, 0,
MAX_ARP * sizeof (struct arptable_t));
#endif /* GRUB */
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);
# ifdef GRUB
/* In GRUB, the ROM info is initialized here. */
rom = *((struct rom_info *) ROM_INFO_LOCATION);
# endif /* GRUB */
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
@@ -458,11 +336,16 @@ int eth_probe(void)
for (t = NIC; t->nic_name != 0; ++t)
{
printf("[%s]", t->nic_name);
if ((*t->eth_probe)(&nic, t->probe_ioaddrs, p))
{
probed = 1;
return (1);
}
#ifdef INCLUDE_PCI
if ((*t->eth_probe)(&nic, t->probe_ioaddrs, p)) {
#else
if ((*t->eth_probe)(&nic, t->probe_ioaddrs)) {
#endif /* INCLUDE_PCI */
#ifdef GRUB
probed = 1;
#endif /* GRUB */
return (1);
}
}
return (0);
}
@@ -472,7 +355,7 @@ int eth_poll(void)
return ((*nic.poll)(&nic));
}
void eth_transmit(char *d, unsigned int t, unsigned int s, char *p)
void eth_transmit(const char *d, unsigned int t, unsigned int s, const void *p)
{
(*nic.transmit)(&nic, d, t, s, p);
twiddle();