BSD 4_3_Net_2 release
[unix-history] / usr / src / sys / hp300 / dev / grf_gb.c
index 06836d4..31f18e6 100644 (file)
@@ -7,11 +7,37 @@
  * the Systems Programming Group of the University of Utah Computer
  * Science Department.
  *
  * the Systems Programming Group of the University of Utah Computer
  * Science Department.
  *
- * %sccs.include.redist.c%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
  *
  *
- * from: Utah $Hdr: grf_gb.c 1.1 90/07/09$
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  *
  *
- *     @(#)grf_gb.c    7.3 (Berkeley) %G%
+ * from: Utah $Hdr: grf_gb.c 1.16 91/04/02$
+ *
+ *     @(#)grf_gb.c    7.4 (Berkeley) 5/7/91
  */
 
 #include "grf.h"
  */
 
 #include "grf.h"
@@ -46,28 +72,34 @@ u_char crtc_init_data[CRTC_DATA_LENGTH] = {
  */
 gb_init(gp, addr)
        struct grf_softc *gp;
  */
 gb_init(gp, addr)
        struct grf_softc *gp;
-       u_char *addr;
+       caddr_t addr;
 {
        register struct gboxfb *gbp;
        struct grfinfo *gi = &gp->g_display;
        u_char *fbp, save;
        int fboff;
 {
        register struct gboxfb *gbp;
        struct grfinfo *gi = &gp->g_display;
        u_char *fbp, save;
        int fboff;
+       extern caddr_t sctopa(), iomap();
 
        gbp = (struct gboxfb *) addr;
 
        gbp = (struct gboxfb *) addr;
-       gi->gd_regaddr = (caddr_t) UNIOV(addr);
+       if (ISIIOVA(addr))
+               gi->gd_regaddr = (caddr_t) IIOP(addr);
+       else
+               gi->gd_regaddr = sctopa(vatosc(addr));
        gi->gd_regsize = 0x10000;
        gi->gd_fbwidth = 1024;          /* XXX */
        gi->gd_fbheight = 1024;         /* XXX */
        gi->gd_regsize = 0x10000;
        gi->gd_fbwidth = 1024;          /* XXX */
        gi->gd_fbheight = 1024;         /* XXX */
-       fboff = (gbp->fbomsb << 8) | gbp->fbolsb;
-       gi->gd_fbaddr = (caddr_t) (*(addr + fboff) << 16);
        gi->gd_fbsize = gi->gd_fbwidth * gi->gd_fbheight;
        gi->gd_fbsize = gi->gd_fbwidth * gi->gd_fbheight;
+       fboff = (gbp->fbomsb << 8) | gbp->fbolsb;
+       gi->gd_fbaddr = (caddr_t) (*((u_char *)addr + fboff) << 16);
+       gp->g_regkva = addr;
+       gp->g_fbkva = iomap(gi->gd_fbaddr, gi->gd_fbsize);
        gi->gd_dwidth = 1024;           /* XXX */
        gi->gd_dheight = 768;           /* XXX */
        gi->gd_planes = 0;              /* how do we do this? */
        /*
         * The minimal register info here is from the Gatorbox X driver.
         */
        gi->gd_dwidth = 1024;           /* XXX */
        gi->gd_dheight = 768;           /* XXX */
        gi->gd_planes = 0;              /* how do we do this? */
        /*
         * The minimal register info here is from the Gatorbox X driver.
         */
-       fbp = (u_char *) IOV(gi->gd_fbaddr);
+       fbp = (u_char *) gp->g_fbkva;
        gbp->write_protect = 0;
        gbp->interrupt = 4;             /** fb_enable ? **/
        gbp->rep_rule = 3;              /* GXcopy */
        gbp->write_protect = 0;
        gbp->interrupt = 4;             /** fb_enable ? **/
        gbp->rep_rule = 3;              /* GXcopy */
@@ -113,7 +145,7 @@ gb_mode(gp, cmd)
        struct gboxfb *gbp;
        int error = 0;
 
        struct gboxfb *gbp;
        int error = 0;
 
-       gbp = (struct gboxfb *) IOV(gp->g_display.gd_regaddr);
+       gbp = (struct gboxfb *) gp->g_regkva;
        switch (cmd) {
        case GM_GRFON:
                gbp->sec_interrupt = 1;
        switch (cmd) {
        case GM_GRFON:
                gbp->sec_interrupt = 1;