Add support for some fxp devices from FreeBSD and OpenBSD.

{Free,Open}BSD say that we have to do some work to make fxp
stable.
This commit is contained in:
msaitoh 2011-09-02 03:16:18 +00:00
parent 0488e3f6ff
commit c67bb3dce4
4 changed files with 204 additions and 16 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: i82557.c,v 1.137 2011/03/30 17:52:45 jakllsch Exp $ */
/* $NetBSD: i82557.c,v 1.138 2011/09/02 03:16:18 msaitoh Exp $ */
/*-
* Copyright (c) 1997, 1998, 1999, 2001, 2002 The NetBSD Foundation, Inc.
@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.137 2011/03/30 17:52:45 jakllsch Exp $");
__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.138 2011/09/02 03:16:18 msaitoh Exp $");
#include "rnd.h"
@ -2329,6 +2329,7 @@ static const uint32_t fxp_ucode_d101ma[] = D101M_B_RCVBUNDLE_UCODE;
static const uint32_t fxp_ucode_d101s[] = D101S_RCVBUNDLE_UCODE;
static const uint32_t fxp_ucode_d102[] = D102_B_RCVBUNDLE_UCODE;
static const uint32_t fxp_ucode_d102c[] = D102_C_RCVBUNDLE_UCODE;
static const uint32_t fxp_ucode_d102e[] = D102_E_RCVBUNDLE_UCODE;
#define UCODE(x) x, sizeof(x)/sizeof(uint32_t)
@ -2357,6 +2358,12 @@ static const struct ucode {
{ FXP_REV_82550_C, UCODE(fxp_ucode_d102c),
D102_C_CPUSAVER_DWORD, D102_C_CPUSAVER_BUNDLE_MAX_DWORD },
{ FXP_REV_82551_F, UCODE(fxp_ucode_d102e),
D102_E_CPUSAVER_DWORD, D102_E_CPUSAVER_BUNDLE_MAX_DWORD },
{ FXP_REV_82551_10, UCODE(fxp_ucode_d102e),
D102_E_CPUSAVER_DWORD, D102_E_CPUSAVER_BUNDLE_MAX_DWORD },
{ 0, NULL, 0, 0, 0 }
};

View File

@ -1,4 +1,4 @@
/* $NetBSD: i82557reg.h,v 1.24 2009/04/17 15:37:43 tsutsui Exp $ */
/* $NetBSD: i82557reg.h,v 1.25 2011/09/02 03:16:19 msaitoh Exp $ */
/*-
* Copyright (c) 1998, 1999, 2001 The NetBSD Foundation, Inc.
@ -529,4 +529,6 @@ struct fxp_stats {
#define FXP_REV_82559S_A 9
#define FXP_REV_82550 12
#define FXP_REV_82550_C 13
#define FXP_REV_82551 15
#define FXP_REV_82551_E 14 /* 82551 */
#define FXP_REV_82551_F 15
#define FXP_REV_82551_10 16 /* 82551 */

View File

@ -1,4 +1,4 @@
/* $NetBSD: rcvbundl.h,v 1.3 2005/12/11 12:22:27 christos Exp $ */
/* $NetBSD: rcvbundl.h,v 1.4 2011/09/02 03:16:18 msaitoh Exp $ */
/*
Copyright (c) 1999-2001, Intel Corporation
@ -1126,3 +1126,150 @@ rcvbundl.h file given above).
0x00000000, \
0x00000000, \
}
/********************************************************/
/* Micro code for the D102 E-step */
/********************************************************/
/* Parameter values for the D102 E-step */
#define D102_E_CPUSAVER_DWORD 42
#define D102_E_CPUSAVER_BUNDLE_MAX_DWORD 54
#define D102_E_CPUSAVER_MIN_SIZE_DWORD 46
#define D102_E_RCVBUNDLE_UCODE \
{\
0x007D028F, \
0x0E4204F9, \
0x14ED0C85, \
0x14FA14E9, \
0x0EF70E36, \
0x1FFF1FFF, \
0x00E014B9, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00E014BD, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00E014D5, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00E014C1, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00E014C8, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00200600, \
0x00E014EE, \
0x00000000, \
0x00000000, \
0x0030FF80, \
0x00940E46, \
0x00038200, \
0x00102000, \
0x00E00E43, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00300006, \
0x00E014FB, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00906E41, \
0x00800E3C, \
0x00E00E39, \
0x00000000, \
0x00906EFD, \
0x00900EFD, \
0x00E00EF8, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
0x00000000, \
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_fxp_pci.c,v 1.75 2011/05/17 17:34:54 dyoung Exp $ */
/* $NetBSD: if_fxp_pci.c,v 1.76 2011/09/02 03:16:18 msaitoh Exp $ */
/*-
* Copyright (c) 1997, 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: if_fxp_pci.c,v 1.75 2011/05/17 17:34:54 dyoung Exp $");
__KERNEL_RCSID(0, "$NetBSD: if_fxp_pci.c,v 1.76 2011/09/02 03:16:18 msaitoh Exp $");
#include "rnd.h"
@ -100,18 +100,16 @@ static const struct fxp_pci_product {
uint32_t fpp_prodid; /* PCI product ID */
const char *fpp_name; /* device name */
} fxp_pci_products[] = {
{ PCI_PRODUCT_INTEL_82552,
"Intel i82552 10/100 Network Connection" },
{ PCI_PRODUCT_INTEL_82557,
"Intel i82557 Ethernet" },
{ PCI_PRODUCT_INTEL_82559ER,
"Intel i82559ER Ethernet" },
{ PCI_PRODUCT_INTEL_IN_BUSINESS,
"Intel InBusiness Ethernet" },
{ PCI_PRODUCT_INTEL_82801BA_LAN,
"Intel i82562 Ethernet" },
{ PCI_PRODUCT_INTEL_82801E_LAN_1,
"Intel i82801E Ethernet" },
{ PCI_PRODUCT_INTEL_82801E_LAN_2,
"Intel i82801E Ethernet" },
{ PCI_PRODUCT_INTEL_PRO_100,
"Intel PRO/100 Ethernet" },
{ PCI_PRODUCT_INTEL_PRO_100_VE_0,
"Intel PRO/100 VE Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VE_1,
@ -130,6 +128,12 @@ static const struct fxp_pci_product {
"Intel PRO/100 VE Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VE_8,
"Intel PRO/100 VE Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VE_9,
"Intel PRO/100 VE Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VE_10,
"Intel PRO/100 VE Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VE_11,
"Intel PRO/100 VE Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_0,
"Intel PRO/100 VM Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_1,
@ -144,12 +148,40 @@ static const struct fxp_pci_product {
"Intel PRO/100 VM (MOB) Network Controller" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_6,
"Intel PRO/100 VM Network Controller with 82562ET/EZ PHY" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_7,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_8,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_9,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_10,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_11,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_12,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_13,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_14,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_15,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_VM_16,
"Intel PRO/100 VM Network Connection" },
{ PCI_PRODUCT_INTEL_PRO_100_M,
"Intel PRO/100 M Network Controller" },
{ PCI_PRODUCT_INTEL_82801BA_LAN,
"Intel i82562 Ethernet" },
{ PCI_PRODUCT_INTEL_82801E_LAN_1,
"Intel i82801E Ethernet" },
{ PCI_PRODUCT_INTEL_82801E_LAN_2,
"Intel i82801E Ethernet" },
{ PCI_PRODUCT_INTEL_82801EB_LAN,
"Intel 82801EB/ER (ICH5) Network Controller" },
{ PCI_PRODUCT_INTEL_82801FB_LAN,
"Intel 82562EZ (ICH6)" },
"Intel i82801FB LAN Controller" },
{ PCI_PRODUCT_INTEL_82801FB_LAN_2,
"Intel i82801FB LAN Controller" },
{ PCI_PRODUCT_INTEL_82801G_LAN,
"Intel 82801GB/GR (ICH7) Network Controller" },
{ PCI_PRODUCT_INTEL_82801GB_LAN,
@ -369,7 +401,7 @@ fxp_pci_attach(device_t parent, device_t self, void *aux)
sc->sc_flags &= ~FXPF_82559_RXCSUM;
sc->sc_flags |= FXPF_EXT_RFA;
}
if (sc->sc_rev >= FXP_REV_82551)
if (sc->sc_rev >= FXP_REV_82551_E)
chipname = "i82551 Ethernet";
/*
@ -398,7 +430,7 @@ fxp_pci_attach(device_t parent, device_t self, void *aux)
if (pa->pa_flags & PCI_FLAGS_MWI_OKAY)
sc->sc_flags |= FXPF_MWI;
if (sc->sc_rev >= FXP_REV_82551)
if (sc->sc_rev >= FXP_REV_82551_E)
chipname = "Intel i82551ER Ethernet";
aprint_normal(": %s, rev %d\n", chipname != NULL ? chipname :