support FUJITSU MB86960/5 based ethernet cards
FMV-J181,182,182A
This commit is contained in:
parent
766857df86
commit
c4552cab7f
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: if_mbe_pcmcia.c,v 1.24 2001/12/18 11:32:47 ichiro Exp $ */
|
||||
/* $NetBSD: if_mbe_pcmcia.c,v 1.25 2001/12/23 09:25:19 ichiro Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_mbe_pcmcia.c,v 1.24 2001/12/18 11:32:47 ichiro Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_mbe_pcmcia.c,v 1.25 2001/12/23 09:25:19 ichiro Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -90,6 +90,8 @@ struct mbe_pcmcia_get_enaddr_args {
|
||||
int mbe_pcmcia_get_enaddr_from_cis __P((struct pcmcia_tuple *, void *));
|
||||
int mbe_pcmcia_get_enaddr_from_mem __P((struct mbe_pcmcia_softc *,
|
||||
struct mbe_pcmcia_get_enaddr_args *));
|
||||
int mbe_pcmcia_get_enaddr_from_io __P((struct mbe_pcmcia_softc *,
|
||||
struct mbe_pcmcia_get_enaddr_args *));
|
||||
|
||||
static const struct mbe_pcmcia_product {
|
||||
const char *mpp_name; /* product name */
|
||||
@ -98,6 +100,8 @@ static const struct mbe_pcmcia_product {
|
||||
const char *mpp_cisinfo[4]; /* CIS information */
|
||||
u_int32_t mpp_ioalign; /* required alignment */
|
||||
int mpp_enet_maddr;
|
||||
int flags;
|
||||
#define MBH10302 0x0001 /* FUJITSU MBH10302 */
|
||||
} mbe_pcmcia_products[] = {
|
||||
{ PCMCIA_STR_TDK_LAK_CD021BX, PCMCIA_VENDOR_TDK,
|
||||
PCMCIA_PRODUCT_TDK_LAK_CD021BX, PCMCIA_CIS_TDK_LAK_CD021BX,
|
||||
@ -110,7 +114,7 @@ static const struct mbe_pcmcia_product {
|
||||
#if 0 /* XXX 86960-based? */
|
||||
{ PCMCIA_STR_TDK_LAK_DFL9610, PCMCIA_VENDOR_TDK,
|
||||
PCMCIA_PRODUCT_TDK_LAK_DFL9610, PCMCIA_CIS_TDK_DFL9610,
|
||||
0, -1 },
|
||||
0, -1, MBH10302 /* XXX */ },
|
||||
#endif
|
||||
|
||||
{ PCMCIA_STR_CONTEC_CNETPC, PCMCIA_VENDOR_CONTEC,
|
||||
@ -121,14 +125,26 @@ static const struct mbe_pcmcia_product {
|
||||
PCMCIA_PRODUCT_FUJITSU_LA501, PCMCIA_CIS_FUJITSU_LA501,
|
||||
0x20, -1 },
|
||||
|
||||
{ PCMCIA_STR_FUJITSU_LA10S, PCMCIA_VENDOR_FUJITSU,
|
||||
PCMCIA_PRODUCT_FUJITSU_LA10S, PCMCIA_CIS_FUJITSU_LA10S,
|
||||
0, -1 },
|
||||
{ PCMCIA_STR_FUJITSU_FMV_J181, PCMCIA_VENDOR_FUJITSU,
|
||||
PCMCIA_PRODUCT_FUJITSU_FMV_J181, PCMCIA_CIS_FUJITSU_FMV_J181,
|
||||
0x20, -1, MBH10302 },
|
||||
|
||||
{ PCMCIA_STR_FUJITSU_FMV_J182, PCMCIA_VENDOR_FUJITSU,
|
||||
PCMCIA_PRODUCT_FUJITSU_FMV_J182, PCMCIA_CIS_FUJITSU_FMV_J182,
|
||||
0, 0xf2c },
|
||||
|
||||
{ PCMCIA_STR_FUJITSU_FMV_J182A, PCMCIA_VENDOR_FUJITSU,
|
||||
PCMCIA_PRODUCT_FUJITSU_FMV_J182A, PCMCIA_CIS_FUJITSU_FMV_J182A,
|
||||
0, 0x1cc },
|
||||
|
||||
{ PCMCIA_STR_FUJITSU_ITCFJ182A, PCMCIA_VENDOR_FUJITSU,
|
||||
PCMCIA_PRODUCT_FUJITSU_ITCFJ182A, PCMCIA_CIS_FUJITSU_ITCFJ182A,
|
||||
0, 0x1cc },
|
||||
|
||||
{ PCMCIA_STR_FUJITSU_LA10S, PCMCIA_VENDOR_FUJITSU,
|
||||
PCMCIA_PRODUCT_FUJITSU_LA10S, PCMCIA_CIS_FUJITSU_LA10S,
|
||||
0, -1 },
|
||||
|
||||
{ PCMCIA_STR_RATOC_REX_R280, PCMCIA_VENDOR_RATOC,
|
||||
PCMCIA_PRODUCT_RATOC_REX_R280, PCMCIA_CIS_RATOC_REX_R280,
|
||||
0, 0x1fc },
|
||||
@ -151,7 +167,9 @@ mbe_pcmcia_lookup(pa)
|
||||
strcmp(pa->card->cis1_info[0], mpp->mpp_cisinfo[0]) == 0 &&
|
||||
pa->card->cis1_info[1] != NULL &&
|
||||
mpp->mpp_cisinfo[1] != NULL &&
|
||||
strcmp(pa->card->cis1_info[1], mpp->mpp_cisinfo[1]) == 0)
|
||||
strcmp(pa->card->cis1_info[1], mpp->mpp_cisinfo[1]) == 0 &&
|
||||
(mpp->mpp_cisinfo[2] == NULL ||
|
||||
strcmp(pa->card->cis1_info[2], mpp->mpp_cisinfo[2]) == 0))
|
||||
return (mpp);
|
||||
|
||||
/* match by vendor/product id */
|
||||
@ -226,7 +244,8 @@ mbe_pcmcia_attach(parent, self, aux)
|
||||
* Don't bother checking flags; the back-end sets the chip
|
||||
* into 16-bit mode.
|
||||
*/
|
||||
if (pcmcia_io_map(pa->pf, PCMCIA_WIDTH_IO16, 0, cfe->iospace[0].length,
|
||||
if (pcmcia_io_map(pa->pf, PCMCIA_WIDTH_IO16, 0,
|
||||
mpp->mpp_ioalign ? mpp->mpp_ioalign : cfe->iospace[0].length,
|
||||
&psc->sc_pcioh, &psc->sc_io_window)) {
|
||||
printf(": can't map i/o space\n");
|
||||
goto iomap_failed;
|
||||
@ -234,7 +253,7 @@ mbe_pcmcia_attach(parent, self, aux)
|
||||
|
||||
printf(": %s\n", mpp->mpp_name);
|
||||
|
||||
/* Read station address from mem or CIS. */
|
||||
/* Read station address from io/mem or CIS. */
|
||||
if (mpp->mpp_enet_maddr >= 0) {
|
||||
pgea.maddr = mpp->mpp_enet_maddr;
|
||||
if (mbe_pcmcia_get_enaddr_from_mem(psc, &pgea) != 0) {
|
||||
@ -242,6 +261,14 @@ mbe_pcmcia_attach(parent, self, aux)
|
||||
"from mem\n", sc->sc_dev.dv_xname);
|
||||
goto no_enaddr;
|
||||
}
|
||||
} else if ((mpp->flags & MBH10302) != 0) {
|
||||
bus_space_write_1(sc->sc_bst, sc->sc_bsh, FE_MBH0 ,
|
||||
FE_MBH0_MASK | FE_MBH0_INTR_ENABLE);
|
||||
if (mbe_pcmcia_get_enaddr_from_io(psc, &pgea) != 0) {
|
||||
printf("%s: Couldn't get ethernet address "
|
||||
"from io\n", sc->sc_dev.dv_xname);
|
||||
goto no_enaddr;
|
||||
}
|
||||
} else {
|
||||
rv = pcmcia_scan_cis(parent,
|
||||
mbe_pcmcia_get_enaddr_from_cis, &pgea);
|
||||
@ -266,7 +293,10 @@ mbe_pcmcia_attach(parent, self, aux)
|
||||
}
|
||||
|
||||
/* Perform generic initialization. */
|
||||
mb86960_attach(sc, MB86960_TYPE_86965, pgea.enaddr);
|
||||
if ((mpp->flags & MBH10302) != 0)
|
||||
mb86960_attach(sc, MB86960_TYPE_86960, pgea.enaddr);
|
||||
else
|
||||
mb86960_attach(sc, MB86960_TYPE_86965, pgea.enaddr);
|
||||
|
||||
mb86960_config(sc, NULL, 0, 0);
|
||||
|
||||
@ -370,6 +400,22 @@ mbe_pcmcia_get_enaddr_from_cis(tuple, arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
mbe_pcmcia_get_enaddr_from_io(psc, ea)
|
||||
struct mbe_pcmcia_softc *psc;
|
||||
struct mbe_pcmcia_get_enaddr_args *ea;
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ETHER_ADDR_LEN; i++)
|
||||
ea->enaddr[i] = bus_space_read_1(psc->sc_pcioh.iot,
|
||||
psc->sc_pcioh.ioh, FE_MBH_ENADDR + i);
|
||||
|
||||
if (ea->enaddr == NULL)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
mbe_pcmcia_get_enaddr_from_mem(psc, ea)
|
||||
struct mbe_pcmcia_softc *psc;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pcmcia_cis_quirks.c,v 1.16 2001/12/16 06:07:50 ichiro Exp $ */
|
||||
/* $NetBSD: pcmcia_cis_quirks.c,v 1.17 2001/12/23 09:25:19 ichiro Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Marc Horowitz. All rights reserved.
|
||||
@ -30,7 +30,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pcmcia_cis_quirks.c,v 1.16 2001/12/16 06:07:50 ichiro Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pcmcia_cis_quirks.c,v 1.17 2001/12/23 09:25:19 ichiro Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -256,22 +256,22 @@ static const struct pcmcia_config_entry pcmcia_emtac_a2424i_func0_cfe0 = {
|
||||
0, /* maxtwins */
|
||||
};
|
||||
|
||||
static const struct pcmcia_function pcmcia_fujitsu_j182a_func0 = {
|
||||
static const struct pcmcia_function pcmcia_fujitsu_j181_func0 = {
|
||||
0, /* function number */
|
||||
PCMCIA_FUNCTION_NETWORK,
|
||||
0x3d, /* last cfe number */
|
||||
0x3f0, /* ccr_base */
|
||||
0x21, /* last cfe number */
|
||||
0xfe0, /* ccr_base */
|
||||
0xf, /* ccr_mask */
|
||||
};
|
||||
};
|
||||
|
||||
static const struct pcmcia_config_entry pcmcia_fujitsu_j182a_func0_cfe0 = {
|
||||
0x31, /* cfe number */
|
||||
PCMCIA_CFE_IO8 | PCMCIA_CFE_IO16 |
|
||||
PCMCIA_CFE_IRQLEVEL | PCMCIA_CFE_POWERDOWN,
|
||||
static const struct pcmcia_config_entry pcmcia_fujitsu_j181_func0_cfe0 = {
|
||||
0xc, /* cfe number */
|
||||
PCMCIA_CFE_MWAIT_REQUIRED | PCMCIA_CFE_WP_ACTIVE | PCMCIA_CFE_IO8 |
|
||||
PCMCIA_CFE_IO16 | PCMCIA_CFE_IRQLEVEL | PCMCIA_CFE_IRQPULSE,
|
||||
PCMCIA_IFTYPE_IO,
|
||||
1, /* num_iospace */
|
||||
10, /* iomask */
|
||||
{ { 0x20, 0x220 } }, /* iospace */
|
||||
{ { 0x20, 0x140 } }, /* iospace */
|
||||
0xffff, /* irqmask */
|
||||
0, /* num_memspace */
|
||||
{ { 0 } }, /* memspace */
|
||||
@ -311,8 +311,9 @@ static const struct pcmcia_cis_quirk pcmcia_cis_quirks[] = {
|
||||
&pcmcia_ndc_nd5100_func0, &pcmcia_ndc_nd5100_func0_cfe0 },
|
||||
{ PCMCIA_VENDOR_EMTAC, PCMCIA_PRODUCT_EMTAC_WLAN, PCMCIA_CIS_INVALID,
|
||||
&pcmcia_emtac_a2424i_func0, &pcmcia_emtac_a2424i_func0_cfe0 },
|
||||
{ PCMCIA_VENDOR_FUJITSU, PCMCIA_PRODUCT_FUJITSU_ITCFJ182A, PCMCIA_CIS_INVALID,
|
||||
&pcmcia_fujitsu_j182a_func0, &pcmcia_fujitsu_j182a_func0_cfe0 },
|
||||
{ PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID,
|
||||
PCMCIA_CIS_FUJITSU_FMV_J181,
|
||||
&pcmcia_fujitsu_j181_func0, &pcmcia_fujitsu_j181_func0_cfe0 },
|
||||
};
|
||||
|
||||
static int n_pcmcia_cis_quirks =
|
||||
|
Loading…
Reference in New Issue
Block a user