diff options
author | 2005-10-18 23:08:23 +0000 | |
---|---|---|
committer | 2005-10-18 23:08:23 +0000 | |
commit | 6f9e0cee15af3d0977e9556443b8cfb6e2ceff16 (patch) | |
tree | 2c423c91f915bb6abde70c0d0b66543b3b098477 | |
parent | 1) indicate optional args (diff) | |
download | wireguard-openbsd-6f9e0cee15af3d0977e9556443b8cfb6e2ceff16.tar.xz wireguard-openbsd-6f9e0cee15af3d0977e9556443b8cfb6e2ceff16.zip |
Scan SMBIOS before calling config_attach() to prevent unnecessary kernel print.
Written with jordan@ help.
ok deraadt@
-rw-r--r-- | sys/arch/i386/i386/mainbus.c | 5 | ||||
-rw-r--r-- | sys/dev/ipmi.c | 34 | ||||
-rw-r--r-- | sys/dev/ipmivar.h | 4 |
3 files changed, 30 insertions, 13 deletions
diff --git a/sys/arch/i386/i386/mainbus.c b/sys/arch/i386/i386/mainbus.c index 4f506e23f8a..0afc46b6c29 100644 --- a/sys/arch/i386/i386/mainbus.c +++ b/sys/arch/i386/i386/mainbus.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mainbus.c,v 1.18 2005/10/04 22:04:23 marco Exp $ */ +/* $OpenBSD: mainbus.c,v 1.19 2005/10/18 23:08:24 marco Exp $ */ /* $NetBSD: mainbus.c,v 1.21 1997/06/06 23:14:20 thorpej Exp $ */ /* @@ -162,7 +162,8 @@ mainbus_attach(parent, self, aux) mba.mba_iaa.iaa_name = "ipmi"; mba.mba_iaa.iaa_iot = I386_BUS_SPACE_IO; mba.mba_iaa.iaa_memt = I386_BUS_SPACE_MEM; - config_found(self, &mba.mba_iaa, mainbus_print); + if (ipmi_probe(&mba.mba_iaa)) + config_found(self, &mba.mba_iaa, mainbus_print); } #endif diff --git a/sys/dev/ipmi.c b/sys/dev/ipmi.c index 0b0bfc69318..5ba7912756a 100644 --- a/sys/dev/ipmi.c +++ b/sys/dev/ipmi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ipmi.c,v 1.4 2005/10/17 23:54:21 deraadt Exp $ */ +/* $OpenBSD: ipmi.c,v 1.5 2005/10/18 23:08:23 marco Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave @@ -124,7 +124,7 @@ int ipmi_sendcmd(struct ipmi_softc *, int, int, int, int, int, const void*); int ipmi_recvcmd(struct ipmi_softc *, int, int *, void *); int ipmi_intr(void *); -int ipmi_probe(struct device *, void *, void *); +int ipmi_match(struct device *, void *, void *); void ipmi_attach(struct device *, struct device *, void *); long ipow(long, int); @@ -678,7 +678,7 @@ typedef struct { } ipmi_bmc_response_t; struct cfattach ipmi_ca = { - sizeof(struct ipmi_softc), ipmi_probe, ipmi_attach + sizeof(struct ipmi_softc), ipmi_match, ipmi_attach }; struct cfdriver ipmi_cd = { @@ -1473,26 +1473,40 @@ ipmi_unmap_regs(struct ipmi_softc *sc, struct ipmi_attach_args *ia) } int -ipmi_probe(struct device *parent, void *match, void *aux) +ipmi_probe(void *aux) { - struct ipmi_softc sc; struct ipmi_attach_args *ia = aux; - struct cfdata *cf = match; - - if (strcmp(ia->iaa_name, cf->cf_driver->cd_name)) - return (0); if (scan_smbios(SMBIOS_TYPE_IPMI, smbios_ipmi_probe, ia) == 0) { dmd_ipmi_t *pipmi; pipmi = (dmd_ipmi_t *)scan_sig(0xC0000L, 0xFFFFFL, 16, 4, "IPMI"); - if (pipmi == NULL) + if (pipmi == NULL) { + /* no IPMI found */ return (0); + } + /* we have an IPMI signature, fill in attach arg structure */ ia->iaa_if_type = pipmi->dmd_if_type; ia->iaa_if_rev = pipmi->dmd_if_rev; + + return (1); } + + return (1); +} + +int +ipmi_match(struct device *parent, void *match, void *aux) +{ + struct ipmi_softc sc; + struct ipmi_attach_args *ia = aux; + struct cfdata *cf = match; + + if (strcmp(ia->iaa_name, cf->cf_driver->cd_name)) + return (0); + /* Map registers */ if (ipmi_map_regs(&sc, ia) == 0) { sc.sc_if->probe(&sc); diff --git a/sys/dev/ipmivar.h b/sys/dev/ipmivar.h index 7d73a5fa93e..c2d5d3a8e53 100644 --- a/sys/dev/ipmivar.h +++ b/sys/dev/ipmivar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ipmivar.h,v 1.2 2005/10/04 22:04:25 deraadt Exp $ */ +/* $OpenBSD: ipmivar.h,v 1.3 2005/10/18 23:08:23 marco Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave @@ -314,4 +314,6 @@ typedef struct { u_int8_t name[1]; } __attribute__((packed)) sdrtype2; +int ipmi_probe(void *); + #endif /* _IPMIVAR_H_ */ |