From da2f2cb79f40554d2f33bf2f40ac1b5a1ffca51f Mon Sep 17 00:00:00 2001 From: scottr Date: Tue, 2 Jun 1998 02:14:20 +0000 Subject: [PATCH] Store the PA of the framebuffer in the softc. This eliminates the need for the sc_phys callback; we can just store the PA in the grfbus attach args, rather than a function pointer, which simplifies the code nicely. --- sys/arch/mac68k/dev/grf.c | 11 +++++------ sys/arch/mac68k/dev/grf_subr.c | 7 +++---- sys/arch/mac68k/dev/grfvar.h | 17 +++++++++-------- sys/arch/mac68k/nubus/grf_nubus.c | 23 ++++++++--------------- sys/arch/mac68k/obio/grf_obio.c | 28 +++++----------------------- 5 files changed, 30 insertions(+), 56 deletions(-) diff --git a/sys/arch/mac68k/dev/grf.c b/sys/arch/mac68k/dev/grf.c index 8ef62b622576..4728f9c9587a 100644 --- a/sys/arch/mac68k/dev/grf.c +++ b/sys/arch/mac68k/dev/grf.c @@ -1,4 +1,4 @@ -/* $NetBSD: grf.c,v 1.52 1998/05/02 16:45:28 scottr Exp $ */ +/* $NetBSD: grf.c,v 1.53 1998/06/02 02:14:20 scottr Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -136,8 +136,8 @@ grfattach(parent, self, aux) sc->sc_slot = ga->ga_slot; sc->sc_tag = ga->ga_tag; sc->sc_handle = ga->ga_handle; - sc->sc_mode = ga->ga_mode; sc->sc_phys = ga->ga_phys; + sc->sc_mode = ga->ga_mode; sc->sc_flags = GF_ALIVE; /* XXX bogus */ @@ -295,7 +295,7 @@ grfmmap(dev, off, prot) #endif if (off < m68k_round_page(gm->fbsize + gm->fboff)) - addr = m68k_btop((*gp->sc_phys)(gp) + off); + addr = m68k_btop(gp->sc_phys + off); else addr = (-1); /* XXX bogus */ @@ -365,9 +365,8 @@ grfmap(dev, addrp, p) printf("grfmap(%d): addr %p\n", p->p_pid, *addrp); #endif - *addrp = (*gp->sc_phys)(gp); - ofs = (u_long)*addrp & PGOFSET; - *addrp = (caddr_t)m68k_trunc_page(*addrp); + *addrp = (caddr_t)m68k_trunc_page(gp->sc_phys); + ofs = (u_long)gp->sc_phys & PGOFSET; len = m68k_round_page(ofs + gm->fboff + gm->fbsize); flags = MAP_SHARED | MAP_FIXED; diff --git a/sys/arch/mac68k/dev/grf_subr.c b/sys/arch/mac68k/dev/grf_subr.c index c839c760bd04..723e6eec6ff9 100644 --- a/sys/arch/mac68k/dev/grf_subr.c +++ b/sys/arch/mac68k/dev/grf_subr.c @@ -1,4 +1,4 @@ -/* $NetBSD: grf_subr.c,v 1.11 1998/05/02 16:45:28 scottr Exp $ */ +/* $NetBSD: grf_subr.c,v 1.12 1998/06/02 02:14:21 scottr Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -47,11 +47,10 @@ #include void -grf_establish(sc, sp, g_mode, g_phys) +grf_establish(sc, sp, g_mode) struct grfbus_softc *sc; nubus_slot *sp; int (*g_mode) __P((struct grf_softc *, int, void *)); - caddr_t (*g_phys) __P((struct grf_softc *)); { struct grfmode *gm = &sc->curr_mode; struct grfbus_attach_args ga; @@ -69,8 +68,8 @@ grf_establish(sc, sp, g_mode, g_phys) ga.ga_slot = sp; ga.ga_tag = sc->sc_tag; ga.ga_handle = sc->sc_handle; + ga.ga_phys = sc->sc_bufpa; ga.ga_mode = g_mode; - ga.ga_phys = g_phys; (void)config_found(&sc->sc_dev, &ga, grfbusprint); } diff --git a/sys/arch/mac68k/dev/grfvar.h b/sys/arch/mac68k/dev/grfvar.h index 254777bd53d7..ef2012f1bc86 100644 --- a/sys/arch/mac68k/dev/grfvar.h +++ b/sys/arch/mac68k/dev/grfvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: grfvar.h,v 1.20 1997/08/03 07:17:31 scottr Exp $ */ +/* $NetBSD: grfvar.h,v 1.21 1998/06/02 02:14:21 scottr Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -51,6 +51,8 @@ struct grfbus_softc { struct device sc_dev; nubus_slot sc_slot; + caddr_t sc_bufpa; + bus_space_tag_t sc_tag; bus_space_handle_t sc_handle; bus_space_handle_t sc_regh; @@ -74,26 +76,26 @@ struct grf_softc { bus_space_handle_t sc_handle; int sc_flags; /* driver flags */ + caddr_t sc_phys; /* PA of framebuffer */ struct grfmode *sc_grfmode; /* forwarded ... */ nubus_slot *sc_slot; /* mode-change on/off/mode function */ int (*sc_mode) __P((struct grf_softc *, int, void *)); /* find framebuffer physical addr */ - caddr_t (*sc_phys) __P((struct grf_softc *)); }; /* * Attach grf and ite semantics to Mac video hardware. */ struct grfbus_attach_args { - char *ga_name; /* name of semantics to attach */ - bus_space_tag_t ga_tag; /* forwarded ... */ + char *ga_name; /* name of semantics to attach */ + bus_space_tag_t ga_tag; /* forwarded ... */ bus_space_handle_t ga_handle; struct grfmode *ga_grfmode; nubus_slot *ga_slot; - int (*ga_mode) __P((struct grf_softc *, int, void *)); - caddr_t (*ga_phys) __P((struct grf_softc *)); + caddr_t ga_phys; + int (*ga_mode) __P((struct grf_softc *, int, void *)); }; typedef caddr_t (*grf_phys_t) __P((struct grf_softc *gp, vm_offset_t addr)); @@ -158,6 +160,5 @@ int grfmap __P((dev_t dev, caddr_t *addrp, struct proc *p)); int grfunmap __P((dev_t dev, caddr_t addr, struct proc *p)); void grf_establish __P((struct grfbus_softc *, nubus_slot *, - int (*)(struct grf_softc *, int, void *), - caddr_t (*)(struct grf_softc *))); + int (*)(struct grf_softc *, int, void *))); int grfbusprint __P((void *, const char *)); diff --git a/sys/arch/mac68k/nubus/grf_nubus.c b/sys/arch/mac68k/nubus/grf_nubus.c index 79f6b26e4dcd..6a7315519970 100644 --- a/sys/arch/mac68k/nubus/grf_nubus.c +++ b/sys/arch/mac68k/nubus/grf_nubus.c @@ -1,4 +1,4 @@ -/* $NetBSD: grf_nubus.c,v 1.45 1998/05/23 22:08:41 briggs Exp $ */ +/* $NetBSD: grf_nubus.c,v 1.46 1998/06/02 02:14:21 scottr Exp $ */ /* * Copyright (c) 1995 Allen Briggs. All rights reserved. @@ -68,7 +68,6 @@ static void grfmv_intr_formac __P((void *vsc)); static void grfmv_intr_vimage __P((void *vsc)); static int grfmv_mode __P((struct grf_softc *gp, int cmd, void *arg)); -static caddr_t grfmv_phys __P((struct grf_softc *gp)); static int grfmv_match __P((struct device *, struct cfdata *, void *)); static void grfmv_attach __P((struct device *, struct device *, void *)); @@ -142,13 +141,14 @@ grfmv_attach(parent, self, aux) nubus_dir dir, mode_dir; int mode; - sc->sc_tag = na->na_tag; - sc->card_id = na->drhw; - bcopy(na->fmt, &sc->sc_slot, sizeof(nubus_slot)); - if (bus_space_map(sc->sc_tag, - NUBUS_SLOT2PA(na->slot), NBMEMSIZE, 0, &sc->sc_handle)) { + sc->sc_tag = na->na_tag; + sc->card_id = na->drhw; + sc->sc_bufpa = (caddr_t)NUBUS_SLOT2PA(na->slot); + + if (bus_space_map(sc->sc_tag, (bus_addr_t)sc->sc_bufpa, NBMEMSIZE, + 0, &sc->sc_handle)) { printf(": grfmv_attach: failed to map slot %d\n", na->slot); return; } @@ -319,7 +319,7 @@ bad: } /* Perform common video attachment. */ - grf_establish(sc, &sc->sc_slot, grfmv_mode, grfmv_phys); + grf_establish(sc, &sc->sc_slot, grfmv_mode); } static int @@ -342,13 +342,6 @@ grfmv_mode(gp, cmd, arg) return EINVAL; } -static caddr_t -grfmv_phys(gp) - struct grf_softc *gp; -{ - return (caddr_t)NUBUS_SLOT2PA(gp->sc_slot->slot); -} - /* Interrupt handlers... */ /* * Generic routine to clear interrupts for cards where it simply takes diff --git a/sys/arch/mac68k/obio/grf_obio.c b/sys/arch/mac68k/obio/grf_obio.c index b3af39119eba..79ac509afde5 100644 --- a/sys/arch/mac68k/obio/grf_obio.c +++ b/sys/arch/mac68k/obio/grf_obio.c @@ -1,4 +1,4 @@ -/* $NetBSD: grf_obio.c,v 1.32 1998/05/02 16:45:31 scottr Exp $ */ +/* $NetBSD: grf_obio.c,v 1.33 1998/06/02 02:14:21 scottr Exp $ */ /* * Copyright (c) 1995 Allen Briggs. All rights reserved. @@ -60,7 +60,6 @@ extern long videobitdepth; extern u_long videosize; static int grfiv_mode __P((struct grf_softc *gp, int cmd, void *arg)); -static caddr_t grfiv_phys __P((struct grf_softc *gp)); static int grfiv_match __P((struct device *, struct cfdata *, void *)); static void grfiv_attach __P((struct device *, struct device *, void *)); @@ -68,9 +67,9 @@ struct cfattach intvid_ca = { sizeof(struct grfbus_softc), grfiv_match, grfiv_attach }; -#define QUADRA_DAFB_BASE 0xF9800000 +#define QUADRA_DAFB_BASE 0xf9800000 #define CIVIC_CONTROL_BASE 0x50036000 -#define VALKYRIE_CONTROL_BASE 0x50f2A000 +#define VALKYRIE_CONTROL_BASE 0x50f2a000 static int grfiv_match(parent, cf, aux) @@ -103,13 +102,6 @@ grfiv_match(parent, cf, aux) goto nodafb; } - sense = (bus_space_read_4(oa->oa_tag, bsh, 0x1C) & 7); - -#if 0 /* XXX - fails on Quadras with certain 17" monitors */ - if (sense == 0) - found = 0; -#endif - /* Set "Turbo SCSI" configuration to default */ bus_space_write_4(oa->oa_tag, bsh, 0x24, 0x1d1); /* ch0 */ bus_space_write_4(oa->oa_tag, bsh, 0x28, 0x1d1); /* ch1 */ @@ -177,6 +169,7 @@ grfiv_attach(parent, self, aux) sc = (struct grfbus_softc *)self; sc->card_id = 0; + sc->sc_bufpa = (caddr_t)mac68k_vidphys; switch (current_mac_model->class) { case MACH_CLASSQ: @@ -209,7 +202,7 @@ grfiv_attach(parent, self, aux) gm->fboff = mac68k_vidlog & PGOFSET; /* Perform common video attachment. */ - grf_establish(sc, NULL, grfiv_mode, grfiv_phys); + grf_establish(sc, NULL, grfiv_mode); } static int @@ -231,14 +224,3 @@ grfiv_mode(sc, cmd, arg) } return EINVAL; } - -static caddr_t -grfiv_phys(gp) - struct grf_softc *gp; -{ - /* - * If we're using IIsi or similar, this will be 0. - * If we're using IIvx or similar, this will be correct. - */ - return (caddr_t)mac68k_vidphys; -}