summaryrefslogtreecommitdiffstats
path: root/sys/dev/fb/creator.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/fb/creator.c')
-rw-r--r--sys/dev/fb/creator.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/sys/dev/fb/creator.c b/sys/dev/fb/creator.c
index f9f293c..4fa88fa 100644
--- a/sys/dev/fb/creator.c
+++ b/sys/dev/fb/creator.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003 Jake Burkholder.
+ * Copyright (c) 2005 - 2006 Marius Strobl <marius@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,13 +38,12 @@ __FBSDID("$FreeBSD$");
#include <sys/module.h>
#include <sys/resource.h>
+#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/openfirm.h>
#include <machine/bus.h>
#include <machine/bus_private.h>
-#include <machine/nexusvar.h>
#include <machine/ofw_machdep.h>
-#include <machine/ofw_upa.h>
#include <machine/resource.h>
#include <machine/sc_machdep.h>
@@ -63,7 +63,6 @@ struct creator_softc {
struct cdev *sc_si;
- int sc_rid[FFB_NREG];
struct resource *sc_reg[FFB_NREG];
bus_space_tag_t sc_bt[FFB_NREG];
bus_space_handle_t sc_bh[FFB_NREG];
@@ -172,9 +171,7 @@ static devclass_t creator_devclass;
DEFINE_CLASS_0(creator, creator_bus_driver, creator_bus_methods,
sizeof(struct creator_softc));
DRIVER_MODULE(creator, nexus, creator_bus_driver, creator_devclass, 0, 0);
-#if 0
DRIVER_MODULE(creator, upa, creator_bus_driver, creator_devclass, 0, 0);
-#endif
static d_open_t creator_fb_open;
static d_close_t creator_fb_close;
@@ -880,8 +877,8 @@ creator_bus_probe(device_t dev)
phandle_t node;
int type;
- name = nexus_get_name(dev);
- node = nexus_get_node(dev);
+ name = ofw_bus_get_name(dev);
+ node = ofw_bus_get_node(dev);
if (strcmp(name, "SUNW,ffb") == 0) {
if (OF_getprop(node, "board_type", &type, sizeof(type)) == -1)
return (ENXIO);
@@ -906,18 +903,15 @@ static int
creator_bus_attach(device_t dev)
{
struct creator_softc *sc;
- struct upa_regs *reg;
video_adapter_t *adp;
video_switch_t *sw;
phandle_t node;
- bus_addr_t phys;
- bus_size_t size;
int error;
- int nreg;
+ int rid;
int unit;
int i;
- node = nexus_get_node(dev);
+ node = ofw_bus_get_node(dev);
if ((sc = (struct creator_softc *)vid_get_adapter(vid_find_adapter(
CREATOR_DRIVER_NAME, 0))) != NULL && sc->sc_node == node) {
device_printf(dev, "console\n");
@@ -940,20 +934,10 @@ creator_bus_attach(device_t dev)
* allocate more than these two resources and just limit the
* range accessible via creator_fb_mmap() accordingly.
*/
- reg = nexus_get_reg(dev);
- nreg = nexus_get_nreg(dev);
- if (nreg <= FFB_FBC) {
- device_printf(dev, "not enough resources\n");
- error = ENXIO;
- goto fail;
- }
- for (i = 0; i < nreg; i++) {
- phys = UPA_REG_PHYS(reg + i);
- size = UPA_REG_SIZE(reg + i);
- sc->sc_rid[i] = i;
- sc->sc_reg[i] = bus_alloc_resource(dev, SYS_RES_MEMORY,
- &sc->sc_rid[i], phys, phys + size - 1, size,
- RF_ACTIVE);
+ for (i = 0; i < FFB_NREG; i++) {
+ rid = i;
+ sc->sc_reg[i] = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE);
if (sc->sc_reg[i] == NULL) {
if (i <= FFB_FBC) {
device_printf(dev,
@@ -1000,7 +984,7 @@ creator_bus_attach(device_t dev)
for (i = 0; i < devclass_get_maxunit(creator_devclass); i++)
if (vid_find_adapter(CREATOR_DRIVER_NAME, i) < 0)
break;
- if (strcmp(nexus_get_name(dev), "SUNW,afb") == 0)
+ if (strcmp(ofw_bus_get_name(dev), "SUNW,afb") == 0)
sc->sc_flags |= CREATOR_AFB;
if ((error = sw->init(i, adp, 0)) != 0) {
device_printf(dev, "cannot initialize adapter\n");
@@ -1031,8 +1015,8 @@ creator_bus_attach(device_t dev)
fail:
for (i = 0; i < FFB_NREG && sc->sc_reg[i] != NULL; i++)
- bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_rid[i],
- sc->sc_reg[i]);
+ bus_release_resource(dev, SYS_RES_MEMORY,
+ rman_get_rid(sc->sc_reg[i]), sc->sc_reg[i]);
return (error);
}
OpenPOWER on IntegriCloud