summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2013-08-12 08:03:56 +0000
committermpi <mpi@openbsd.org>2013-08-12 08:03:56 +0000
commit5704e7bd2896175fb2a96912efa67e8918da49ae (patch)
tree6827be6261feff66e503d60526ddbbf66f22bb73
parentIn the common IPv4 and IPv6 file ip_carp.c an #ifdef INET6 was (diff)
downloadwireguard-openbsd-5704e7bd2896175fb2a96912efa67e8918da49ae.tar.xz
wireguard-openbsd-5704e7bd2896175fb2a96912efa67e8918da49ae.zip
Match the framebuffer device against its OpenFirmware node in order
to share the console detection logic with sparc64 in radeondrm(4). ok miod@
-rw-r--r--sys/arch/macppc/macppc/ofw_machdep.c18
-rw-r--r--sys/arch/macppc/pci/vgafb.c10
-rw-r--r--sys/arch/macppc/pci/vgafb_pci.c34
-rw-r--r--sys/arch/macppc/pci/vgafb_pcivar.h4
-rw-r--r--sys/arch/macppc/pci/vgafbvar.h3
5 files changed, 32 insertions, 37 deletions
diff --git a/sys/arch/macppc/macppc/ofw_machdep.c b/sys/arch/macppc/macppc/ofw_machdep.c
index bd879bbd9a0..ab1883f284b 100644
--- a/sys/arch/macppc/macppc/ofw_machdep.c
+++ b/sys/arch/macppc/macppc/ofw_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ofw_machdep.c,v 1.38 2013/08/07 07:29:19 mpi Exp $ */
+/* $OpenBSD: ofw_machdep.c,v 1.39 2013/08/12 08:03:56 mpi Exp $ */
/* $NetBSD: ofw_machdep.c,v 1.1 1996/09/30 16:34:50 ws Exp $ */
/*
@@ -184,7 +184,6 @@ save_ofw_mapping()
return 0;
}
-#include <dev/pci/pcivar.h>
#include <arch/macppc/pci/vgafb_pcivar.h>
struct ppc_bus_space ppc_membus;
@@ -195,6 +194,7 @@ int cons_display_ofh;
u_int32_t cons_addr;
int cons_brightness;
int cons_backlight_available;
+int fbnode;
#include "vgafb_pci.h"
@@ -358,7 +358,6 @@ of_display_console()
char name[32];
int len;
int stdout_node;
- int display_node;
int err;
stdout_node = OF_instance_to_package(OF_stdout);
@@ -389,15 +388,15 @@ of_display_console()
ofw_find_keyboard();
- display_node = stdout_node;
+ fbnode = stdout_node;
len = OF_getprop(stdout_node, "assigned-addresses", addr, sizeof(addr));
if (len == -1) {
- display_node = OF_parent(stdout_node);
- len = OF_getprop(display_node, "name", name, 20);
+ fbnode = OF_parent(stdout_node);
+ len = OF_getprop(fbnode, "name", name, 20);
name[len] = 0;
printf("using parent %s:", name);
- len = OF_getprop(display_node, "assigned-addresses",
+ len = OF_getprop(fbnode, "assigned-addresses",
addr, sizeof(addr));
if (len < sizeof(addr[0])) {
panic(": no address");
@@ -407,11 +406,6 @@ of_display_console()
if (OF_getnodebyname(0, "backlight") != 0)
cons_backlight_available = 1;
- vgafb_pci_console_tag = PCITAG_CREATE(display_node,
- OFW_PCI_PHYS_HI_BUS(addr[1].phys_hi),
- OFW_PCI_PHYS_HI_DEVICE(addr[1].phys_hi),
- OFW_PCI_PHYS_HI_FUNCTION(addr[1].phys_hi));
-
#if 1
printf(": memaddr %x size %x, ", addr[0].phys_lo, addr[0].size_lo);
printf(": consaddr %x, ", cons_addr);
diff --git a/sys/arch/macppc/pci/vgafb.c b/sys/arch/macppc/pci/vgafb.c
index 91d3cb8bc74..19523be8b0a 100644
--- a/sys/arch/macppc/pci/vgafb.c
+++ b/sys/arch/macppc/pci/vgafb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vgafb.c,v 1.48 2013/07/06 18:08:47 mpi Exp $ */
+/* $OpenBSD: vgafb.c,v 1.49 2013/08/12 08:03:56 mpi Exp $ */
/* $NetBSD: vga.c,v 1.3 1996/12/02 22:24:54 cgd Exp $ */
/*
@@ -298,6 +298,14 @@ vgafb_mmap(void *v, off_t off, int prot)
}
int
+vgafb_is_console(int node)
+{
+ extern int fbnode;
+
+ return (fbnode == node);
+}
+
+int
vgafb_cnattach(bus_space_tag_t iot, bus_space_tag_t memt, int type, int check)
{
struct vga_config *vc = &vgafbcn;
diff --git a/sys/arch/macppc/pci/vgafb_pci.c b/sys/arch/macppc/pci/vgafb_pci.c
index a1994ee5815..a32a9d21080 100644
--- a/sys/arch/macppc/pci/vgafb_pci.c
+++ b/sys/arch/macppc/pci/vgafb_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vgafb_pci.c,v 1.31 2013/06/04 02:26:36 mpi Exp $ */
+/* $OpenBSD: vgafb_pci.c,v 1.32 2013/08/12 08:03:56 mpi Exp $ */
/* $NetBSD: vga_pci.c,v 1.4 1996/12/05 01:39:38 cgd Exp $ */
/*
@@ -62,7 +62,6 @@ const struct cfattach vgafb_pci_ca = {
sizeof(struct vga_pci_softc), vgafb_pci_match, vgafb_pci_attach,
};
-pcitag_t vgafb_pci_console_tag;
struct vga_config vgafbcn;
void
@@ -140,6 +139,7 @@ int
vgafb_pci_match(struct device *parent, void *match, void *aux)
{
struct pci_attach_args *pa = aux;
+ int node;
if (DEVICE_IS_VGA_PCI(pa->pa_class) == 0) {
/*
@@ -151,23 +151,15 @@ vgafb_pci_match(struct device *parent, void *match, void *aux)
return (0);
}
- /* If it's the console, we have a winner! */
- if (!bcmp(&pa->pa_tag, &vgafb_pci_console_tag, sizeof(pa->pa_tag))) {
- return (1);
- }
-
-#ifdef DEBUG_VGAFB
- {
- int i;
- pci_chipset_tag_t pc = pa->pa_pc;
- for (i = 0x10; i < 0x24; i+=4) {
- printf("vgafb confread %x %x\n",
- i, pci_conf_read(pc, pa->pa_tag, i));
- }
- }
-#endif
+ /*
+ * XXX Non-console devices do not get configured by the PROM,
+ * XXX so do not attach them yet.
+ */
+ node = PCITAG_NODE(pa->pa_tag);
+ if (!vgafb_is_console(node))
+ return (0);
- return (0);
+ return (1);
}
void
@@ -178,15 +170,17 @@ vgafb_pci_attach(struct device *parent, struct device *self, void *aux)
struct vga_config *vc;
u_int32_t memaddr, memsize;
u_int32_t mmioaddr, mmiosize;
- int console;
+ int console, node;
pcireg_t reg;
+ node = PCITAG_NODE(pa->pa_tag);
+
vga_pci_bar_init(sc, pa);
vgafb_pci_mem_init(sc, &memaddr, &memsize, &mmioaddr, &mmiosize);
- console = (!bcmp(&pa->pa_tag, &vgafb_pci_console_tag, sizeof(pa->pa_tag)));
+ console = vgafb_is_console(node);
if (console) {
vc = sc->sc_vc = &vgafbcn;
diff --git a/sys/arch/macppc/pci/vgafb_pcivar.h b/sys/arch/macppc/pci/vgafb_pcivar.h
index b21b0fcaa46..d2f47cc18c9 100644
--- a/sys/arch/macppc/pci/vgafb_pcivar.h
+++ b/sys/arch/macppc/pci/vgafb_pcivar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vgafb_pcivar.h,v 1.7 2012/12/13 13:55:18 mpi Exp $ */
+/* $OpenBSD: vgafb_pcivar.h,v 1.8 2013/08/12 08:03:56 mpi Exp $ */
/* $NetBSD: vga_pcivar.h,v 1.1 1996/11/19 04:38:36 cgd Exp $ */
/*
@@ -28,7 +28,5 @@
* rights to redistribute these changes.
*/
-extern pcitag_t vgafb_pci_console_tag;
-
/* XXX */
int vgafb_cnattach(bus_space_tag_t, bus_space_tag_t, int, int);
diff --git a/sys/arch/macppc/pci/vgafbvar.h b/sys/arch/macppc/pci/vgafbvar.h
index a49396cb977..c5816575d0f 100644
--- a/sys/arch/macppc/pci/vgafbvar.h
+++ b/sys/arch/macppc/pci/vgafbvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vgafbvar.h,v 1.19 2013/06/04 02:29:32 mpi Exp $ */
+/* $OpenBSD: vgafbvar.h,v 1.20 2013/08/12 08:03:56 mpi Exp $ */
/* $NetBSD: vgavar.h,v 1.2 1996/11/23 06:06:43 cgd Exp $ */
/*
@@ -53,6 +53,7 @@ struct vga_config {
};
int vgafb_cnattach(bus_space_tag_t, bus_space_tag_t, int, int);
+int vgafb_is_console(int);
void vgafb_init(bus_space_tag_t, bus_space_tag_t,
struct vga_config *, u_int32_t, size_t);