aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mii
diff options
context:
space:
mode:
authorPyun YongHyeon <yongari@FreeBSD.org>2015-04-23 01:39:28 +0000
committerPyun YongHyeon <yongari@FreeBSD.org>2015-04-23 01:39:28 +0000
commit0d3c2a9a16a15ad8b2650e0794756802dde6ff7e (patch)
tree815f59de0721e2d14888f64a18680a4143e93188 /sys/dev/mii
parent08a75d1f0e7d885f5a891e0e3e64a540daf15689 (diff)
downloadsrc-0d3c2a9a16a15ad8b2650e0794756802dde6ff7e.tar.gz
src-0d3c2a9a16a15ad8b2650e0794756802dde6ff7e.zip
Add another variant of BCM5708S controller to IBM HS21 workaround
list. PR: 118238 MFC after: 2 weeks
Notes
Notes: svn path=/head/; revision=281877
Diffstat (limited to 'sys/dev/mii')
-rw-r--r--sys/dev/mii/brgphy.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/sys/dev/mii/brgphy.c b/sys/dev/mii/brgphy.c
index 0d22430720fe..32914a386484 100644
--- a/sys/dev/mii/brgphy.c
+++ b/sys/dev/mii/brgphy.c
@@ -160,25 +160,33 @@ static const struct mii_phy_funcs brgphy_funcs = {
brgphy_reset
};
-#define HS21_PRODUCT_ID "IBM eServer BladeCenter HS21"
-#define HS21_BCM_CHIPID 0x57081021
+static const struct hs21_type {
+ const uint32_t id;
+ const char *prod;
+} hs21_type_lists[] = {
+ { 0x57081021, "IBM eServer BladeCenter HS21" },
+ { 0x57081011, "IBM eServer BladeCenter HS21 -[8853PAU]-" },
+};
static int
detect_hs21(struct bce_softc *bce_sc)
{
char *sysenv;
- int found;
+ int found, i;
found = 0;
- if (bce_sc->bce_chipid == HS21_BCM_CHIPID) {
- sysenv = kern_getenv("smbios.system.product");
- if (sysenv != NULL) {
- if (strncmp(sysenv, HS21_PRODUCT_ID,
- strlen(HS21_PRODUCT_ID)) == 0)
- found = 1;
- freeenv(sysenv);
+ sysenv = kern_getenv("smbios.system.product");
+ if (sysenv == NULL)
+ return (found);
+ for (i = 0; i < nitems(hs21_type_lists); i++) {
+ if (bce_sc->bce_chipid == hs21_type_lists[i].id &&
+ strncmp(sysenv, hs21_type_lists[i].prod,
+ strlen(hs21_type_lists[i].prod)) == 0) {
+ found++;
+ break;
}
}
+ freeenv(sysenv);
return (found);
}