summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/files.pci4
-rw-r--r--sys/dev/pci/glxpcib.c49
-rw-r--r--sys/dev/pci/glxvar.h10
3 files changed, 58 insertions, 5 deletions
diff --git a/sys/dev/pci/files.pci b/sys/dev/pci/files.pci
index b4af38167a9..a9359be20c1 100644
--- a/sys/dev/pci/files.pci
+++ b/sys/dev/pci/files.pci
@@ -1,4 +1,4 @@
-# $OpenBSD: files.pci,v 1.291 2013/01/12 13:02:22 sf Exp $
+# $OpenBSD: files.pci,v 1.292 2013/01/14 21:18:47 pirofti Exp $
# $NetBSD: files.pci,v 1.20 1996/09/24 17:47:15 christos Exp $
#
# Config file and device description for machine-independent PCI code.
@@ -819,7 +819,7 @@ attach itherm at pci
file dev/pci/itherm.c itherm
# AMD Geode CS5536 PCI-ISA bridge
-device glxpcib: isabus, gpiobus, i2cbus
+device glxpcib{}: isabus, gpiobus, i2cbus
attach glxpcib at pci
file dev/pci/glxpcib.c glxpcib
diff --git a/sys/dev/pci/glxpcib.c b/sys/dev/pci/glxpcib.c
index 9f89180cde7..5ae0ef9978e 100644
--- a/sys/dev/pci/glxpcib.c
+++ b/sys/dev/pci/glxpcib.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: glxpcib.c,v 1.7 2012/10/17 22:32:01 deraadt Exp $ */
+/* $OpenBSD: glxpcib.c,v 1.8 2013/01/14 21:18:47 pirofti Exp $ */
/*
* Copyright (c) 2007 Marc Balmer <mbalmer@openbsd.org>
@@ -211,6 +211,8 @@ struct cfdriver glxpcib_cd = {
int glxpcib_match(struct device *, void *, void *);
void glxpcib_attach(struct device *, struct device *, void *);
int glxpcib_activate(struct device *, int);
+int glxpcib_search(struct device *, void *, void *);
+int glxpcib_print(void *, const char *);
struct cfattach glxpcib_ca = {
sizeof(struct glxpcib_softc), glxpcib_match, glxpcib_attach,
@@ -300,7 +302,8 @@ glxpcib_attach(struct device *parent, struct device *self, void *aux)
/* count in seconds (as upper level desires) */
bus_space_write_2(sc->sc_iot, sc->sc_ioh, AMD5536_MFGPT0_SETUP,
AMD5536_MFGPT_CNT_EN | AMD5536_MFGPT_CMP2EV |
- AMD5536_MFGPT_CMP2 | AMD5536_MFGPT_DIV_MASK);
+ AMD5536_MFGPT_CMP2 | AMD5536_MFGPT_DIV_MASK |
+ AMD5536_MFGPT_STOP_EN);
wdog_register(glxpcib_wdogctl_cb, sc);
sc->sc_wdog = 1;
printf(", watchdog");
@@ -396,6 +399,8 @@ glxpcib_attach(struct device *parent, struct device *self, void *aux)
if (i2c)
config_found(&sc->sc_dev, &iba, iicbus_print);
#endif
+
+ config_search(glxpcib_search, self, pa);
}
int
@@ -684,6 +689,46 @@ glxpcib_smb_read_byte(void *arg, uint8_t *bytep, int flags)
}
int
+glxpcib_print(void *args, const char *parentname)
+{
+ struct glxpcib_attach_args *gaa = (struct glxpcib_attach_args *)args;
+
+ if (parentname != NULL)
+ printf("%s at %s", gaa->gaa_name, parentname);
+
+ return UNCONF;
+}
+
+int
+glxpcib_search(struct device *parent, void *gcf, void *args)
+{
+ struct glxpcib_softc *sc = (struct glxpcib_softc *)parent;
+ struct cfdata *cf = (struct cfdata *)gcf;
+ struct pci_attach_args *pa = (struct pci_attach_args *)args;
+ struct glxpcib_attach_args gaa;
+
+ gaa.gaa_name = cf->cf_driver->cd_name;
+ gaa.gaa_pa = pa;
+ gaa.gaa_iot = sc->sc_iot;
+ gaa.gaa_ioh = sc->sc_ioh;
+
+ /*
+ * These devices are attached directly, either from
+ * glxpcib_attach() or later in time from pcib_callback().
+ */
+ if (strcmp(cf->cf_driver->cd_name, "gpio") == 0 ||
+ strcmp(cf->cf_driver->cd_name, "iic") == 0 ||
+ strcmp(cf->cf_driver->cd_name, "isa") == 0)
+ return 0;
+
+ if (cf->cf_attach->ca_match(parent, cf, &gaa) == 0)
+ return 0;
+
+ config_attach(parent, cf, &gaa, glxpcib_print);
+ return 1;
+}
+
+int
glxpcib_smb_write_byte(void *arg, uint8_t byte, int flags)
{
struct glxpcib_softc *sc = arg;
diff --git a/sys/dev/pci/glxvar.h b/sys/dev/pci/glxvar.h
index 93c80a7ccba..2eef5ced737 100644
--- a/sys/dev/pci/glxvar.h
+++ b/sys/dev/pci/glxvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: glxvar.h,v 1.1 2010/10/14 21:23:05 pirofti Exp $ */
+/* $OpenBSD: glxvar.h,v 1.2 2013/01/14 21:18:47 pirofti Exp $ */
/*
* Copyright (c) 2009 Miodrag Vallat.
@@ -20,3 +20,11 @@ void glx_init(pci_chipset_tag_t, pcitag_t, int);
uint64_t rdmsr(uint);
void wrmsr(uint, uint64_t);
+
+struct glxpcib_attach_args {
+ const char *gaa_name;
+
+ struct pci_attach_args *gaa_pa;
+ bus_space_tag_t gaa_iot;
+ bus_space_handle_t gaa_ioh;
+};