summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarco <marco@openbsd.org>2005-10-18 23:08:23 +0000
committermarco <marco@openbsd.org>2005-10-18 23:08:23 +0000
commit6f9e0cee15af3d0977e9556443b8cfb6e2ceff16 (patch)
tree2c423c91f915bb6abde70c0d0b66543b3b098477
parent1) indicate optional args (diff)
downloadwireguard-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.c5
-rw-r--r--sys/dev/ipmi.c34
-rw-r--r--sys/dev/ipmivar.h4
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_ */