From 9a409cff3ea5fd804c518c90f5f1c150a3fce691 Mon Sep 17 00:00:00 2001 From: nisimura Date: Thu, 23 Aug 2001 01:16:52 +0000 Subject: [PATCH] Add MX (PMAG-A), CX (PMAG-B), TX (PMAG-RO/PMAG[B]-J) TC framebuffer supports. None of them has any acceleration capability. --- sys/arch/alpha/conf/files.alpha | 14 +- sys/arch/alpha/tc/cfb.c | 386 -------------------------------- sys/arch/alpha/tc/cfbvar.h | 65 ------ sys/arch/alpha/tc/tcasic.c | 22 +- 4 files changed, 28 insertions(+), 459 deletions(-) delete mode 100644 sys/arch/alpha/tc/cfb.c delete mode 100644 sys/arch/alpha/tc/cfbvar.h diff --git a/sys/arch/alpha/conf/files.alpha b/sys/arch/alpha/conf/files.alpha index 643d2d5246e8..b52e05abd690 100644 --- a/sys/arch/alpha/conf/files.alpha +++ b/sys/arch/alpha/conf/files.alpha @@ -1,4 +1,4 @@ -# $NetBSD: files.alpha,v 1.141 2001/08/12 08:35:32 jdolecek Exp $ +# $NetBSD: files.alpha,v 1.142 2001/08/23 01:16:52 nisimura Exp $ # # alpha-specific configuration info @@ -169,13 +169,23 @@ file arch/alpha/tc/ioasic.c ioasic # PMAG-B CX device cfb: wsemuldisplaydev, wsrasteremulops attach cfb at tc -file arch/alpha/tc/cfb.c cfb needs-flag +file dev/tc/cfb.c cfb needs-flag # PMAGB-B HX or CXT device sfb: wsemuldisplaydev, rasops8 attach sfb at tc file dev/tc/sfb.c sfb needs-flag +# PMAG-A MX +device mfb: wsemuldisplaydev, wsrasteremulops +attach mfb at tc +file dev/tc/mfb.c mfb needs-flag + +# PMAG-RO/JA TX +device tfb: wsemuldisplaydev, wsrasteremulops +attach tfb at tc +file dev/tc/tfb.c tfb needs-flag + # PMAGD HX+ device sfbp: wsemuldisplaydev, rasops32 attach sfbp at tc diff --git a/sys/arch/alpha/tc/cfb.c b/sys/arch/alpha/tc/cfb.c deleted file mode 100644 index 59556a74d45d..000000000000 --- a/sys/arch/alpha/tc/cfb.c +++ /dev/null @@ -1,386 +0,0 @@ -/* $NetBSD: cfb.c,v 1.25 2000/06/26 04:55:22 simonb Exp $ */ - -/* - * Copyright (c) 1995, 1996 Carnegie-Mellon University. - * All rights reserved. - * - * Author: Chris G. Demetriou - * - * Permission to use, copy, modify and distribute this software and - * its documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND - * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie the - * rights to redistribute these changes. - */ - -#include /* RCS ID & Copyright macro defns */ - -__KERNEL_RCSID(0, "$NetBSD: cfb.c,v 1.25 2000/06/26 04:55:22 simonb Exp $"); - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -int cfbmatch __P((struct device *, struct cfdata *, void *)); -void cfbattach __P((struct device *, struct device *, void *)); - -struct cfattach cfb_ca = { - sizeof(struct cfb_softc), cfbmatch, cfbattach, -}; - -void cfb_getdevconfig __P((tc_addr_t dense_addr, struct cfb_devconfig *dc)); -struct cfb_devconfig cfb_console_dc; -tc_addr_t cfb_consaddr; - -struct wsdisplay_emulops cfb_emulfuncs = { - rcons_cursor, /* could use hardware cursor; punt */ - rcons_mapchar, - rcons_putchar, - rcons_copycols, - rcons_erasecols, - rcons_copyrows, - rcons_eraserows, - rcons_alloc_attr -}; - -struct wsscreen_descr cfb_stdscreen = { - "std", - 0, 0, /* will be filled in -- XXX shouldn't, it's global */ - &cfb_emulfuncs, - 0, 0 -}; - -const struct wsscreen_descr *_cfb_scrlist[] = { - &cfb_stdscreen, - /* XXX other formats, graphics screen? */ -}; - -struct wsscreen_list cfb_screenlist = { - sizeof(_cfb_scrlist) / sizeof(struct wsscreen_descr *), _cfb_scrlist -}; - -int cfbioctl __P((void *, u_long, caddr_t, int, struct proc *)); -paddr_t cfbmmap __P((void *, off_t, int)); - -int cfbintr __P((void *)); -static int cfb_alloc_screen __P((void *, const struct wsscreen_descr *, - void **, int *, int *, long *)); -static void cfb_free_screen __P((void *, void *)); -static int cfb_show_screen __P((void *, void *, int, - void (*) (void *, int, int), void *)); - -struct wsdisplay_accessops cfb_accessops = { - cfbioctl, - cfbmmap, - cfb_alloc_screen, - cfb_free_screen, - cfb_show_screen, - 0 /* load_font */ -}; - -int -cfbmatch(parent, match, aux) - struct device *parent; - struct cfdata *match; - void *aux; -{ - struct tc_attach_args *ta = aux; - - if (strncmp("PMAG-BA ", ta->ta_modname, TC_ROM_LLEN) != 0) - return (0); - - return (10); -} - -void -cfb_getdevconfig(dense_addr, dc) - tc_addr_t dense_addr; - struct cfb_devconfig *dc; -{ - struct raster *rap; - struct rcons *rcp; - char *ramdacregp; - int i; - - dc->dc_vaddr = dense_addr; - dc->dc_paddr = ALPHA_K0SEG_TO_PHYS(dc->dc_vaddr); /* XXX */ - dc->dc_size = CFB_SIZE; - - ramdacregp = (char *)dc->dc_vaddr + CFB_RAMDAC_OFFSET; - - dc->dc_wid = 1024; - dc->dc_ht = 864; - dc->dc_depth = 8; /* 8 plane */ - dc->dc_rowbytes = dc->dc_wid * (dc->dc_depth / 8); - - dc->dc_videobase = dc->dc_vaddr + CFB_FB_OFFSET; - - /* Initialize the RAMDAC/colormap */ - /* start XXX XXX XXX */ - (*(volatile u_int32_t *)(ramdacregp + CFB_RAMDAC_ADDRLOW)) = 0; - (*(volatile u_int32_t *)(ramdacregp + CFB_RAMDAC_ADDRHIGH)) = 0; - tc_wmb(); - for (i = 0; i < 256; i++) { - (*(volatile u_int32_t *)(ramdacregp + CFB_RAMDAC_CMAPDATA)) = - i ? 0xff : 0; - tc_wmb(); - (*(volatile u_int32_t *)(ramdacregp + CFB_RAMDAC_CMAPDATA)) = - i ? 0xff : 0; - tc_wmb(); - (*(volatile u_int32_t *)(ramdacregp + CFB_RAMDAC_CMAPDATA)) = - i ? 0xff : 0; - tc_wmb(); - } - /* end XXX XXX XXX */ - - /* clear the screen */ - for (i = 0; i < dc->dc_ht * dc->dc_rowbytes; i += sizeof(u_int32_t)) - *(u_int32_t *)(dc->dc_videobase + i) = 0x00000000; - - rap = &dc->dc_raster; - rap->width = dc->dc_wid; - rap->height = dc->dc_ht; - rap->depth = 8; - rap->linelongs = dc->dc_rowbytes / sizeof(u_int32_t); - rap->pixels = (u_int32_t *)dc->dc_videobase; - - /* initialize the raster console blitter */ - rcp = &dc->dc_rcons; - rcp->rc_sp = rap; - rcp->rc_crow = rcp->rc_ccol = -1; - rcp->rc_crowp = &rcp->rc_crow; - rcp->rc_ccolp = &rcp->rc_ccol; - rcons_init(rcp, 34, 80); - - cfb_stdscreen.nrows = dc->dc_rcons.rc_maxrow; - cfb_stdscreen.ncols = dc->dc_rcons.rc_maxcol; -} - -void -cfbattach(parent, self, aux) - struct device *parent, *self; - void *aux; -{ - struct cfb_softc *sc = (struct cfb_softc *)self; - struct tc_attach_args *ta = aux; - struct wsemuldisplaydev_attach_args waa; - int console; - - console = (ta->ta_addr == cfb_consaddr); - if (console) { - sc->sc_dc = &cfb_console_dc; - sc->nscreens = 1; - } else { - sc->sc_dc = (struct cfb_devconfig *) - malloc(sizeof(struct cfb_devconfig), M_DEVBUF, M_WAITOK); - cfb_getdevconfig(ta->ta_addr, sc->sc_dc); - } - if (sc->sc_dc->dc_vaddr == NULL) { - printf(": couldn't map memory space; punt!\n"); - return; - } - printf(": %d x %d, %dbpp\n", sc->sc_dc->dc_wid, sc->sc_dc->dc_ht, - sc->sc_dc->dc_depth); - - /* Establish an interrupt handler, and clear any pending interrupts */ - tc_intr_establish(parent, ta->ta_cookie, TC_IPL_TTY, cfbintr, sc); - *(volatile u_int32_t *)(sc->sc_dc->dc_vaddr + CFB_IREQCTRL_OFFSET) = 0; - - /* initialize the raster */ - waa.console = console; - waa.scrdata = &cfb_screenlist; - waa.accessops = &cfb_accessops; - waa.accesscookie = sc; - - config_found(self, &waa, wsemuldisplaydevprint); -} - -int -cfbioctl(v, cmd, data, flag, p) - void *v; - u_long cmd; - caddr_t data; - int flag; - struct proc *p; -{ - struct cfb_softc *sc = v; - struct cfb_devconfig *dc = sc->sc_dc; - - switch (cmd) { - case FBIOGTYPE: -#define fbt ((struct fbtype *)data) - fbt->fb_type = FBTYPE_CFB; - fbt->fb_height = sc->sc_dc->dc_ht; - fbt->fb_width = sc->sc_dc->dc_wid; - fbt->fb_depth = sc->sc_dc->dc_depth; - fbt->fb_cmsize = 256; /* XXX ??? */ - fbt->fb_size = sc->sc_dc->dc_size; -#undef fbt - return (0); - -#if 0 - case FBIOPUTCMAP: - return (*tgar->tgar_set_cmap)(dc, (struct fbcmap *)data); - - case FBIOGETCMAP: - return (*tgar->tgar_get_cmap)(dc, (struct fbcmap *)data); -#endif - - case FBIOGATTR: - return (ENOTTY); /* XXX ? */ - -#if 0 - case FBIOSVIDEO: - if (*(int *)data == FBVIDEO_OFF) - cfb_blank(sc->sc_dc); - else - cfb_unblank(sc->sc_dc); - return (0); -#endif - - case FBIOGVIDEO: - *(int *)data = dc->dc_blanked ? FBVIDEO_OFF : FBVIDEO_ON; - return (0); - -#if 0 - case FBIOSCURSOR: - return (*tgar->tgar_set_cursor)(dc, (struct fbcursor *)data); - - case FBIOGCURSOR: - return (*tgar->tgar_get_cursor)(dc, (struct fbcursor *)data); - - case FBIOSCURPOS: - return (*tgar->tgar_set_curpos)(dc, (struct fbcurpos *)data); - - case FBIOGCURPOS: - return (*tgar->tgar_get_curpos)(dc, (struct fbcurpos *)data); - - case FBIOGCURMAX: - return (*tgar->tgar_get_curmax)(dc, (struct fbcurpos *)data); -#endif - } - return (-1); -} - -paddr_t -cfbmmap(v, offset, prot) - void *v; - off_t offset; - int prot; -{ - struct cfb_softc *sc = v; - - if (offset >= CFB_SIZE || offset < 0) - return (-1); - return alpha_btop(sc->sc_dc->dc_paddr + offset); -} - -int -cfbintr(v) - void *v; -{ - struct cfb_softc *sc = v; - - *(volatile u_int32_t *)(sc->sc_dc->dc_vaddr + CFB_IREQCTRL_OFFSET) = 0; - - return (1); -} - -int -cfb_alloc_screen(v, type, cookiep, curxp, curyp, attrp) - void *v; - const struct wsscreen_descr *type; - void **cookiep; - int *curxp, *curyp; - long *attrp; -{ - struct cfb_softc *sc = v; - long defattr; - - if (sc->nscreens > 0) - return (ENOMEM); - - *cookiep = &sc->sc_dc->dc_rcons; /* one and only for now */ - *curxp = 0; - *curyp = 0; - rcons_alloc_attr(&sc->sc_dc->dc_rcons, 0, 0, 0, &defattr); - *attrp = defattr; - sc->nscreens++; - return (0); -} - -void -cfb_free_screen(v, cookie) - void *v; - void *cookie; -{ - struct cfb_softc *sc = v; - - if (sc->sc_dc == &cfb_console_dc) - panic("cfb_free_screen: console"); - - sc->nscreens--; -} - -int -cfb_show_screen(v, cookie, waitok, cb, cbarg) - void *v; - void *cookie; - int waitok; - void (*cb) __P((void *, int, int)); - void *cbarg; -{ - - return (0); -} - -int -cfb_cnattach(addr) - tc_addr_t addr; -{ - struct cfb_devconfig *dcp = &cfb_console_dc; - long defattr; - - cfb_getdevconfig(addr, dcp); - - rcons_alloc_attr(&dcp->dc_rcons, 0, 0, 0, &defattr); - - wsdisplay_cnattach(&cfb_stdscreen, &dcp->dc_rcons, - 0, 0, defattr); - cfb_consaddr = addr; - return(0); -} diff --git a/sys/arch/alpha/tc/cfbvar.h b/sys/arch/alpha/tc/cfbvar.h deleted file mode 100644 index 5171592a5723..000000000000 --- a/sys/arch/alpha/tc/cfbvar.h +++ /dev/null @@ -1,65 +0,0 @@ -/* $NetBSD: cfbvar.h,v 1.5 1998/10/22 01:03:08 briggs Exp $ */ - -/* - * Copyright (c) 1995, 1996 Carnegie-Mellon University. - * All rights reserved. - * - * Author: Chris G. Demetriou - * - * Permission to use, copy, modify and distribute this software and - * its documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND - * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie the - * rights to redistribute these changes. - */ - -#include -#include -#include - -extern int cfb_cnattach __P((tc_addr_t)); - -struct cfb_devconfig; -struct fbcmap; -struct fbcursor; -struct fbcurpos; - -struct cfb_devconfig { - vaddr_t dc_vaddr; /* memory space virtual base address */ - paddr_t dc_paddr; /* memory space physical base address */ - psize_t dc_size; /* size of slot memory */ - - int dc_wid; /* width of frame buffer */ - int dc_ht; /* height of frame buffer */ - int dc_depth; /* depth, bits per pixel */ - int dc_rowbytes; /* bytes in a FB scan line */ - - vaddr_t dc_videobase; /* base of flat frame buffer */ - - struct raster dc_raster; /* raster description */ - struct rcons dc_rcons; /* raster blitter control info */ - - int dc_blanked; /* currently has video disabled */ -}; - -struct cfb_softc { - struct device sc_dev; - - struct cfb_devconfig *sc_dc; /* device configuration */ - - int nscreens; -}; diff --git a/sys/arch/alpha/tc/tcasic.c b/sys/arch/alpha/tc/tcasic.c index 13f660f27508..c6e67370f9d1 100644 --- a/sys/arch/alpha/tc/tcasic.c +++ b/sys/arch/alpha/tc/tcasic.c @@ -1,4 +1,4 @@ -/* $NetBSD: tcasic.c,v 1.35 2001/07/27 00:25:21 thorpej Exp $ */ +/* $NetBSD: tcasic.c,v 1.36 2001/08/23 01:16:52 nisimura Exp $ */ /* * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. @@ -32,7 +32,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: tcasic.c,v 1.35 2001/07/27 00:25:21 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcasic.c,v 1.36 2001/08/23 01:16:52 nisimura Exp $"); #include #include @@ -173,15 +173,19 @@ tcasicprint(aux, pnp) #if NWSDISPLAY > 0 -#include "cfb.h" #include "sfb.h" #include "sfbp.h" +#include "cfb.h" +#include "mfb.h" +#include "tfb.h" #include "px.h" #include "pxg.h" extern void sfb_cnattach __P((tc_addr_t)); -extern void cfb_cnattach __P((tc_addr_t)); extern void sfbp_cnattach __P((tc_addr_t)); +extern void cfb_cnattach __P((tc_addr_t)); +extern void mfb_cnattach __P((tc_addr_t)); +extern void tfb_cnattach __P((tc_addr_t)); extern void px_cnattach __P((tc_addr_t)); extern void pxg_cnattach __P((tc_addr_t)); extern int tc_checkslot __P((tc_addr_t, char *)); @@ -193,11 +197,17 @@ struct cnboards { #if NSFB > 0 { "PMAGB-BA", sfb_cnattach }, #endif +#if NSFBP > 0 + { "PMAGD ", sfbp_cnattach }, +#endif #if NCFB > 0 { "PMAG-BA ", cfb_cnattach }, #endif -#if NSFBP > 0 - { "PMAGD ", sfbp_cnattach }, +#if NMFB > 0 + { "PMAG-AA ", mfb_cnattach }, +#endif +#if NTFB > 0 + { "PMAG-JA ", tfb_cnattach }, #endif #if NPX > 0 { "PMAG-CA ", px_cnattach },