diff options
Diffstat (limited to 'sys/pci')
-rw-r--r-- | sys/pci/if_ax.c | 17 | ||||
-rw-r--r-- | sys/pci/if_axreg.h | 17 |
2 files changed, 24 insertions, 10 deletions
diff --git a/sys/pci/if_ax.c b/sys/pci/if_ax.c index fedd345..a9e5d40 100644 --- a/sys/pci/if_ax.c +++ b/sys/pci/if_ax.c @@ -29,11 +29,11 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_ax.c,v 1.4 1999/01/28 00:57:52 dillon Exp $ + * $Id: if_ax.c,v 1.9 1999/02/23 01:44:20 wpaul Exp $ */ /* - * ASIX AX88140A fast ethernet PCI NIC driver. + * ASIX AX88140A and AX88141 fast ethernet PCI NIC driver. * * Written by Bill Paul <wpaul@ctr.columbia.edu> * Electrical Engineering Department @@ -87,7 +87,7 @@ #ifndef lint static const char rcsid[] = - "$Id: if_ax.c,v 1.4 1999/01/28 00:57:52 dillon Exp $"; + "$Id: if_ax.c,v 1.9 1999/02/23 01:44:20 wpaul Exp $"; #endif /* @@ -96,6 +96,8 @@ static const char rcsid[] = static struct ax_type ax_devs[] = { { AX_VENDORID, AX_DEVICEID_AX88140A, "ASIX AX88140A 10/100BaseTX" }, + { AX_VENDORID, AX_DEVICEID_AX88140A, + "ASIX AX88141 10/100BaseTX" }, { 0, 0, NULL } }; @@ -1048,12 +1050,17 @@ ax_probe(config_id, device_id) pcidi_t device_id; { struct ax_type *t; + u_int32_t rev; t = ax_devs; while(t->ax_name != NULL) { if ((device_id & 0xFFFF) == t->ax_vid && ((device_id >> 16) & 0xFFFF) == t->ax_did) { + /* Check the PCI revision */ + rev = pci_conf_read(config_id, AX_PCI_REVID) & 0xFF; + if (rev >= AX_REVISION_88141) + t++; return(t->ax_name); } t++; @@ -2129,7 +2136,7 @@ static void ax_stop(sc) sc->ax_cdata.ax_rx_chain[i].ax_mbuf = NULL; } } - bzero((volatile char *)&sc->ax_ldata->ax_rx_list, + bzero((char *)&sc->ax_ldata->ax_rx_list, sizeof(sc->ax_ldata->ax_rx_list)); /* @@ -2142,7 +2149,7 @@ static void ax_stop(sc) } } - bzero((volatile char *)&sc->ax_ldata->ax_tx_list, + bzero((char *)&sc->ax_ldata->ax_tx_list, sizeof(sc->ax_ldata->ax_tx_list)); ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE); diff --git a/sys/pci/if_axreg.h b/sys/pci/if_axreg.h index 700c42c..6a78b51 100644 --- a/sys/pci/if_axreg.h +++ b/sys/pci/if_axreg.h @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_axreg.h,v 1.4 1999/01/16 20:33:34 wpaul Exp $ + * $Id: if_axreg.h,v 1.5 1999/02/23 01:44:20 wpaul Exp $ */ /* @@ -391,6 +391,13 @@ struct ax_softc { #define AX_DEVICEID_AX88140A 0x1400 /* + * The ASIX AX88140 and ASIX AX88141 have the same vendor and + * device IDs but different revision values. + */ +#define AX_REVISION_88140 0x00 +#define AX_REVISION_88141 0x10 + +/* * Texas Instruments PHY identifiers */ #define TI_PHY_VENDORID 0x4000 @@ -446,10 +453,10 @@ struct ax_softc { #define AX_PCI_EEPROM_DATA 0x4C /* power management registers */ -#define AX_PCI_CAPID 0xDC /* 8 bits */ -#define AX_PCI_NEXTPTR 0xDD /* 8 bits */ -#define AX_PCI_PWRMGMTCAP 0xDE /* 16 bits */ -#define AX_PCI_PWRMGMTCTRL 0xE0 /* 16 bits */ +#define AX_PCI_CAPID 0x44 /* 8 bits */ +#define AX_PCI_NEXTPTR 0x55 /* 8 bits */ +#define AX_PCI_PWRMGMTCAP 0x46 /* 16 bits */ +#define AX_PCI_PWRMGMTCTRL 0x48 /* 16 bits */ #define AX_PSTATE_MASK 0x0003 #define AX_PSTATE_D0 0x0000 |