mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-15 15:06:42 +00:00
o It turns out that most of the ne-2000 cards that I have got real unhappy
with the latest changes. They actually have valid ROM data at location 0 of memory, just like a real NE-2000 ISA card. Use this data, if the ROM passes a few basic tests, as an additional source for the MAC address. Prefer the CIS over this source, but have it take precidence over falling back to reading the attribtue memory. o Minor cleanup of a few devices that we match on based on CIS string.
This commit is contained in:
parent
05df7aed21
commit
b658387fbd
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=141930
@ -155,6 +155,7 @@ static const struct ed_product {
|
||||
{ PCMCIA_CARD(NETGEAR, FA410TXC, 0), NE2000DVF_DL10019},
|
||||
{ PCMCIA_CARD(NETGEAR, FA411, 0), NE2000DVF_AX88190},
|
||||
{ PCMCIA_CARD(NEXTCOM, NEXTHAWK, 0), 0},
|
||||
{ PCMCIA_CARD(OEM2, ETHERNET, 0), 0},
|
||||
{ PCMCIA_CARD(PLANET, SMARTCOM2000, 0), 0 },
|
||||
{ PCMCIA_CARD(PREMAX, PE200, 0), 0},
|
||||
{ PCMCIA_CARD(RACORE, ETHERNET, 0), 0},
|
||||
@ -167,7 +168,7 @@ static const struct ed_product {
|
||||
{ PCMCIA_CARD(SOCKET, LP_ETH_10_100_CF, 0), NE2000DVF_DL10019},
|
||||
{ PCMCIA_CARD(SVEC, COMBOCARD, 0), 0},
|
||||
{ PCMCIA_CARD(SVEC, LANCARD, 0), 0},
|
||||
{ PCMCIA_CARD(SYNERGY21, S21810, 0), 0},
|
||||
{ PCMCIA_CARD(TAMARACK, ETHERNET, 0), 0},
|
||||
{ PCMCIA_CARD(TDK, LAK_CD031, 0), 0},
|
||||
{ PCMCIA_CARD(TELECOMDEVICE, TCD_HPC100, 0), NE2000DVF_AX88190 },
|
||||
{ PCMCIA_CARD(XIRCOM, CFE_10, 0), 0},
|
||||
@ -236,11 +237,35 @@ ed_pccard_probe(device_t dev)
|
||||
return (error);
|
||||
}
|
||||
|
||||
static int
|
||||
ed_pccard_rom_mac(device_t dev, uint8_t *enaddr)
|
||||
{
|
||||
struct ed_softc *sc = device_get_softc(dev);
|
||||
uint8_t romdata[16];
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Read in the rom data at location 0. We should see one of
|
||||
* two patterns. Either you'll see odd locations 0xff and
|
||||
* even locations data, or you'll see odd and even locations
|
||||
* mirror each other. In addition, the last two even locations
|
||||
* should be 0. If they aren't 0, then we'll assume that
|
||||
* there's no valid ROM data on this card and try another method
|
||||
* to recover the MAC address. Since there are no NE-1000
|
||||
* based PC Card devices, we'll assume we're 16-bit.
|
||||
*/
|
||||
ed_pio_readmem(sc, 0, romdata, 16);
|
||||
if (romdata[12] != 0 || romdata[14] != 0)
|
||||
return 0;
|
||||
for (i = 0; i < ETHER_ADDR_LEN; i++)
|
||||
enaddr[i] = romdata[i * 2];
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
ed_pccard_attach(device_t dev)
|
||||
{
|
||||
int error;
|
||||
int i;
|
||||
int error, i;
|
||||
struct ed_softc *sc = device_get_softc(dev);
|
||||
u_char sum;
|
||||
u_char enaddr[ETHER_ADDR_LEN];
|
||||
@ -265,12 +290,14 @@ ed_pccard_attach(device_t dev)
|
||||
}
|
||||
|
||||
/*
|
||||
* For the older cards, we have to get the MAC address from the
|
||||
* card in some way. Let's try the standard way first. If that
|
||||
* fails, check to see if the card has a hint about where to look
|
||||
* in its CIS. If that fails, maybe we should look at some default
|
||||
* value. In all fails, we should fail the attach, but don't right
|
||||
* now.
|
||||
* For the older cards, we have to get the MAC address from
|
||||
* the card in some way. Let's try the standard PCMCIA way
|
||||
* first. If that fails, then check to see if we have valid
|
||||
* data from the standard NE-2000 data roms. If that fails,
|
||||
* check to see if the card has a hint about where to look in
|
||||
* its CIS. If that fails, maybe we should look at some
|
||||
* default value. In all fails, we should fail the attach,
|
||||
* but don't right now.
|
||||
*/
|
||||
if (sc->chip_type == ED_CHIP_TYPE_DP8390) {
|
||||
pccard_get_ether(dev, enaddr);
|
||||
@ -278,6 +305,12 @@ ed_pccard_attach(device_t dev)
|
||||
device_printf(dev, "CIS MAC %6D\n", enaddr, ":");
|
||||
for (i = 0, sum = 0; i < ETHER_ADDR_LEN; i++)
|
||||
sum |= enaddr[i];
|
||||
if (sum == 0 && ed_pccard_rom_mac(dev, enaddr)) {
|
||||
if (bootverbose)
|
||||
device_printf(dev, "ROM mac %6D\n", enaddr,
|
||||
":");
|
||||
sum++;
|
||||
}
|
||||
if (sum == 0 && pp->flags & NE2000DVF_ENADDR) {
|
||||
for (i = 0; i < ETHER_ADDR_LEN; i++) {
|
||||
ed_pccard_memread(dev, pp->enoff + i * 2,
|
||||
|
@ -559,7 +559,6 @@ vendor INTERSIL2 -1 Intersil
|
||||
vendor IODATA3 -1 I-O DATA
|
||||
vendor LANTECH -1 Lantech Computer Company
|
||||
vendor MELCO2 -1 Melco Corporation
|
||||
vendor NAKAGAWAMETAL -1 NAKAGAWA METAL
|
||||
vendor NDC -1 NDC
|
||||
vendor NEC -1 NEC
|
||||
vendor OEM2 -1 Generic OEM
|
||||
@ -567,7 +566,7 @@ vendor PLANET -1 Planet
|
||||
vendor PREMAX -1 Premax
|
||||
vendor RPTI -1 RPTI
|
||||
vendor SVEC -1 SVEC/Hawking Technology
|
||||
vendor SYNERGY21 -1 Synergy 21
|
||||
vendor TAMARACK -1 Tamarack
|
||||
vendor TEAC -1 TEAC
|
||||
vendor TOSHIBA -1 TOSHIBA
|
||||
vendor WORKBIT2 -1 WORKBIT
|
||||
@ -631,7 +630,6 @@ product LINKSYS ECARD_2 { "LINKSYS", "E-CARD", NULL, NULL } Linksys E-Card
|
||||
product MACNICA MPS100 { "MACNICA", "MIRACLE&spSCSI", "mPS100", "D.0" } Macnica Miracle SCSI mPS100
|
||||
product MEGAHERTZ XJ2288 { "MEGAHERTZ", "MODEM&spXJ2288", NULL, NULL } Megahertz XJ2288 Modem
|
||||
product MELCO2 LPC2_TX { "MELCO", "LPC2-TX", NULL, NULL } Melco LPC2-TX
|
||||
product NAKAGAWAMETAL LNT10TN { "PCMCIA", "LNT-10TN", NULL, NULL } NAKAGAWA METAL LNT-10TN NE2000 Compatible Card
|
||||
product NANOSPEED PRISM2 { "NANOSPEED", "HFA384x/IEEE", "Version&sp01.02", NULL } NANOSPEED ROOT-RZ2000 WLAN Card
|
||||
product NDC ND5100_E { "NDC", "Ethernet", "A", NULL } Sohoware ND5100E NE2000 Compatible Card
|
||||
product NEC CMZ_RT_WP { "NEC", "Wireless&spCard&spCMZ-RT-WP", "Version&sp01.01", NULL } NEC Wireless Card CMZ-RT-WP
|
||||
@ -640,6 +638,7 @@ product NEWMEDIA BASICS_SCSI { "BASICS&spby&spNew&spMedia&spCorporation" "SCSI&s
|
||||
product NTT_ME WLAN { "NTT-ME", "11Mbps&spWireless&spLAN&spPC&spCard", NULL, NULL } NTT-ME 11Mbps Wireless LAN PC Card
|
||||
product OEM2 CDROM1 { "PCMCIA", "CD-ROM", NULL, NULL } Generic PCMCIA CD-ROM
|
||||
product OEM2 IDE { "PCMCIA", "IDE&spCARD", NULL, NULL } Generic PCMCIA IDE CARD
|
||||
product OEM2 ETHERNET { "PCMCIA", "Ethernet", NULL, NULL } NE2000 PC Card
|
||||
product PLANET SMARTCOM2000 { "PCMCIA", "UE2212", NULL, NULL } Planet SmartCOM 2000
|
||||
product RPTI EP400 { "RPTI&spLTD.", "EP400", "CISV100", NULL } RPTI EP400
|
||||
product RPTI EP401 { "RPTI", "EP401&spEthernet&spNE2000&spCompatible", NULL, NULL } RPTI EP401
|
||||
@ -655,7 +654,7 @@ product SMC 2632W { "SMC", "SMC2632W", "Version&sp01.02", NULL } SMC 2632 EZ Co
|
||||
product SMC 8041 { "SMC", "8041TX-10/100-PC-Card-V2", NULL, NULL } SMC 8041TX 10/100 PC Card
|
||||
product SVEC COMBOCARD { "Ethernet", "Adapter", NULL, NULL } SVEC/Hawking Tech. Combo Card
|
||||
product SVEC LANCARD { "SVEC", "FD605&spPCMCIA&spEtherNet&spCard", "V1-1", NULL } SVEC PCMCIA Lan Card
|
||||
product SYNERGY21 S21810 { "PCMCIA", "Ethernet", "A", "004743118001" } Synergy 21 S21810+ NE2000 Compatible Card
|
||||
product TAMARACK ETHERNET { "TAMARACK", "Ethernet", NULL, NULL } TAMARACK NE2000 PC Card
|
||||
product TEAC IDECARDII { NULL, "NinjaATA-", NULL, NULL } TEAC IDE Card/II
|
||||
product TOSHIBA CBIDE2 { "LOOKMEET", "CBIDE2&sp&sp&sp&sp&sp&sp", NULL, NULL } TOSHIBA PA2673U CBIDE2/16-bit mode (IO-DATA OEM)
|
||||
product WORKBIT2 NINJA_SCSI3 { "WBT", "NinjaSCSI-3", NULL, NULL } WORKBIT Ninja SCSI series
|
||||
|
Loading…
Reference in New Issue
Block a user