[BACK]Return to tvrx.c CVS log [TXT][DIR] Up to [local] / sys / arch / hp300 / dev

Annotation of sys/arch/hp300/dev/tvrx.c, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: tvrx.c,v 1.1 2006/04/14 21:05:43 miod Exp $   */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2006, Miodrag Vallat.
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or without
        !             8:  * modification, are permitted provided that the following conditions
        !             9:  * are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer in the
        !            14:  *    documentation and/or other materials provided with the distribution.
        !            15:  *
        !            16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
        !            18:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        !            19:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
        !            20:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
        !            21:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        !            22:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
        !            24:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
        !            25:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            26:  * POSSIBILITY OF SUCH DAMAGE.
        !            27:  *
        !            28:  */
        !            29:
        !            30: /*
        !            31:  * Graphics routines for the TurboVRX frame buffer
        !            32:  */
        !            33:
        !            34: #include <sys/param.h>
        !            35: #include <sys/systm.h>
        !            36: #include <sys/conf.h>
        !            37: #include <sys/device.h>
        !            38: #include <sys/proc.h>
        !            39: #include <sys/ioctl.h>
        !            40:
        !            41: #include <machine/autoconf.h>
        !            42: #include <machine/bus.h>
        !            43: #include <machine/cpu.h>
        !            44:
        !            45: #include <hp300/dev/dioreg.h>
        !            46: #include <hp300/dev/diovar.h>
        !            47: #include <hp300/dev/diodevs.h>
        !            48:
        !            49: #include <dev/cons.h>
        !            50:
        !            51: #include <dev/wscons/wsconsio.h>
        !            52: #include <dev/wscons/wsdisplayvar.h>
        !            53: #include <dev/rasops/rasops.h>
        !            54:
        !            55: #include <hp300/dev/diofbreg.h>
        !            56: #include <hp300/dev/diofbvar.h>
        !            57:
        !            58: struct tvrx_softc {
        !            59:        struct device   sc_dev;
        !            60:        struct diofb    *sc_fb;
        !            61:        struct diofb    sc_fb_store;
        !            62:        int             sc_scode;
        !            63: };
        !            64:
        !            65: int    tvrx_match(struct device *, void *, void *);
        !            66: void   tvrx_attach(struct device *, struct device *, void *);
        !            67:
        !            68: struct cfattach tvrx_ca = {
        !            69:        sizeof(struct tvrx_softc), tvrx_match, tvrx_attach
        !            70: };
        !            71:
        !            72: struct cfdriver tvrx_cd = {
        !            73:        NULL, "tvrx", DV_DULL
        !            74: };
        !            75:
        !            76: int    tvrx_reset(struct diofb *, int, struct diofbreg *);
        !            77:
        !            78: int    tvrx_ioctl(void *, u_long, caddr_t, int, struct proc *);
        !            79:
        !            80: struct wsdisplay_accessops     tvrx_accessops = {
        !            81:        tvrx_ioctl,
        !            82:        diofb_mmap,
        !            83:        diofb_alloc_screen,
        !            84:        diofb_free_screen,
        !            85:        diofb_show_screen,
        !            86:        NULL,   /* load_font */
        !            87:        NULL,   /* scrollback */
        !            88:        NULL,   /* getchar */
        !            89:        NULL    /* burner */
        !            90: };
        !            91:
        !            92: /*
        !            93:  * Attachment glue
        !            94:  */
        !            95:
        !            96: int
        !            97: tvrx_match(struct device *parent, void *match, void *aux)
        !            98: {
        !            99:        struct dio_attach_args *da = aux;
        !           100:
        !           101:        if (da->da_id != DIO_DEVICE_ID_FRAMEBUFFER ||
        !           102:            da->da_secid != DIO_DEVICE_SECID_TIGERSHARK)
        !           103:                return (0);
        !           104:
        !           105:        return (1);
        !           106: }
        !           107:
        !           108: void
        !           109: tvrx_attach(struct device *parent, struct device *self, void *aux)
        !           110: {
        !           111:        struct tvrx_softc *sc = (struct tvrx_softc *)self;
        !           112:        struct dio_attach_args *da = aux;
        !           113:        struct diofbreg *fbr;
        !           114:
        !           115:        sc->sc_scode = da->da_scode;
        !           116:        if (sc->sc_scode == conscode) {
        !           117:                fbr = (struct diofbreg *)conaddr;       /* already mapped */
        !           118:                sc->sc_fb = &diofb_cn;
        !           119:        } else {
        !           120:                sc->sc_fb = &sc->sc_fb_store;
        !           121:                fbr = (struct diofbreg *)
        !           122:                    iomap(dio_scodetopa(sc->sc_scode), da->da_size);
        !           123:                if (fbr == NULL ||
        !           124:                    tvrx_reset(sc->sc_fb, sc->sc_scode, fbr) != 0) {
        !           125:                        printf(": can't map framebuffer\n");
        !           126:                        return;
        !           127:                }
        !           128:        }
        !           129:
        !           130:        diofb_end_attach(sc, &tvrx_accessops, sc->sc_fb,
        !           131:            sc->sc_scode == conscode, NULL);
        !           132: }
        !           133:
        !           134: /*
        !           135:  * Initialize hardware and display routines.
        !           136:  */
        !           137: int
        !           138: tvrx_reset(struct diofb *fb, int scode, struct diofbreg *fbr)
        !           139: {
        !           140:        int rc;
        !           141:
        !           142:        if ((rc = diofb_fbinquire(fb, scode, fbr)) != 0)
        !           143:                return (rc);
        !           144:
        !           145:        /*
        !           146:         * We rely on the PROM to initialize the frame buffer in the mode
        !           147:         * we expect it: cleared, overlay plane enabled and accessible
        !           148:         * at the beginning of the video memory.
        !           149:         *
        !           150:         * This is NOT the mode we would end up by simply resetting the
        !           151:         * board.
        !           152:         */
        !           153:
        !           154:        fb->ri.ri_depth = 1;
        !           155:        fb->bmv = diofb_mono_windowmove;
        !           156:        diofb_fbsetup(fb);
        !           157:
        !           158:        return (0);
        !           159: }
        !           160:
        !           161: int
        !           162: tvrx_ioctl(void *v, u_long cmd, caddr_t data, int flags, struct proc *p)
        !           163: {
        !           164:        struct diofb *fb = v;
        !           165:        struct wsdisplay_fbinfo *wdf;
        !           166:
        !           167:        switch (cmd) {
        !           168:        case WSDISPLAYIO_GTYPE:
        !           169:                *(u_int *)data = WSDISPLAY_TYPE_TVRX;
        !           170:                break;
        !           171:        case WSDISPLAYIO_SMODE:
        !           172:                fb->mapmode = *(u_int *)data;
        !           173:                break;
        !           174:        case WSDISPLAYIO_GINFO:
        !           175:                wdf = (void *)data;
        !           176:                wdf->width = fb->ri.ri_width;
        !           177:                wdf->height = fb->ri.ri_height;
        !           178:                wdf->depth = fb->ri.ri_depth;
        !           179:                wdf->cmsize = 0;
        !           180:                break;
        !           181:        case WSDISPLAYIO_LINEBYTES:
        !           182:                *(u_int *)data = fb->ri.ri_stride;
        !           183:                break;
        !           184:        case WSDISPLAYIO_GETCMAP:
        !           185:        case WSDISPLAYIO_PUTCMAP:
        !           186:                break;          /* until color support is implemented */
        !           187:        case WSDISPLAYIO_GVIDEO:
        !           188:        case WSDISPLAYIO_SVIDEO:
        !           189:                /* unsupported */
        !           190:                return (-1);
        !           191:        default:
        !           192:                return (-1);
        !           193:        }
        !           194:
        !           195:        return (0);
        !           196: }
        !           197:
        !           198: /*
        !           199:  * Console support
        !           200:  */
        !           201:
        !           202: void
        !           203: tvrxcninit()
        !           204: {
        !           205:        tvrx_reset(&diofb_cn, conscode, (struct diofbreg *)conaddr);
        !           206:        diofb_cnattach(&diofb_cn);
        !           207: }

CVSweb