have to include proc.h before socketvar.h
[unix-history] / usr / src / sys / hp300 / dev / grf_tc.c
index 3a3d14a..9fc9af4 100644 (file)
@@ -9,9 +9,9 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- * from: Utah $Hdr: grf_tc.c 1.13 89/08/25$
+ * from: Utah $Hdr: grf_tc.c 1.18 91/04/02$
  *
  *
- *     @(#)grf_tc.c    7.1 (Berkeley) %G%
+ *     @(#)grf_tc.c    7.4 (Berkeley) %G%
  */
 
 #include "grf.h"
  */
 
 #include "grf.h"
 /*
  * Graphics routines for TOPCAT frame buffer
  */
 /*
  * Graphics routines for TOPCAT frame buffer
  */
-#include "param.h"
-#include "errno.h"
+#include "sys/param.h"
+#include "sys/errno.h"
 
 #include "grfioctl.h"
 #include "grfvar.h"
 #include "grf_tcreg.h"
 
 
 #include "grfioctl.h"
 #include "grfvar.h"
 #include "grf_tcreg.h"
 
-#include "machine/cpu.h"
+#include "../include/cpu.h"
 
 /*
  * Initialize hardware.
 
 /*
  * Initialize hardware.
  */
 tc_init(gp, addr)
        struct grf_softc *gp;
  */
 tc_init(gp, addr)
        struct grf_softc *gp;
-       u_char *addr;
+       caddr_t addr;
 {
        register struct tcboxfb *tp = (struct tcboxfb *) addr;
        struct grfinfo *gi = &gp->g_display;
        volatile u_char *fbp;
        u_char save;
        int fboff;
 {
        register struct tcboxfb *tp = (struct tcboxfb *) addr;
        struct grfinfo *gi = &gp->g_display;
        volatile u_char *fbp;
        u_char save;
        int fboff;
+       extern caddr_t sctopa(), iomap();
 
 
-#if defined(HP360) || defined(HP370)
-       extern char grfregs[];
-       if (addr == (u_char *)grfregs)
-               gi->gd_regaddr = (caddr_t) DIOIIBASE;
+       if (ISIIOVA(addr))
+               gi->gd_regaddr = (caddr_t) IIOP(addr);
        else
        else
-#endif
-       gi->gd_regaddr = (caddr_t) UNIOV(addr);
+               gi->gd_regaddr = sctopa(vatosc(addr));
        gi->gd_regsize = 0x10000;
        gi->gd_fbwidth = (tp->fbwmsb << 8) | tp->fbwlsb;
        gi->gd_fbheight = (tp->fbhmsb << 8) | tp->fbhlsb;
        gi->gd_regsize = 0x10000;
        gi->gd_fbwidth = (tp->fbwmsb << 8) | tp->fbwlsb;
        gi->gd_fbheight = (tp->fbhmsb << 8) | tp->fbhlsb;
+       gi->gd_fbsize = gi->gd_fbwidth * gi->gd_fbheight;
        fboff = (tp->fbomsb << 8) | tp->fbolsb;
        fboff = (tp->fbomsb << 8) | tp->fbolsb;
-       gi->gd_fbaddr = (caddr_t) (*(addr + fboff) << 16);
-#if defined(HP360) || defined(HP370)
-       /*
-        * For DIO II space addresses offset is relative to the DIO II space.
-        * XXX: this should apply to all frame buffer types.
-        */
-       if (gi->gd_regaddr >= (caddr_t)DIOIIBASE)
+       gi->gd_fbaddr = (caddr_t) (*((u_char *)addr + fboff) << 16);
+       if (gi->gd_regaddr >= (caddr_t)DIOIIBASE) {
+               /*
+                * For DIO II space the fbaddr just computed is the offset
+                * from the select code base (regaddr) of the framebuffer.
+                * Hence it is also implicitly the size of the register set.
+                */
+               gi->gd_regsize = (int) gi->gd_fbaddr;
                gi->gd_fbaddr += (int) gi->gd_regaddr;
                gi->gd_fbaddr += (int) gi->gd_regaddr;
-#endif
-       gi->gd_fbsize = gi->gd_fbwidth * gi->gd_fbheight;
+               gp->g_regkva = addr;
+               gp->g_fbkva = addr + gi->gd_regsize;
+       } else {
+               /*
+                * For DIO space we need to map the seperate framebuffer.
+                */
+               gp->g_regkva = addr;
+               gp->g_fbkva = iomap(gi->gd_fbaddr, gi->gd_fbsize);
+       }
        gi->gd_dwidth = (tp->dwmsb << 8) | tp->dwlsb;
        gi->gd_dheight = (tp->dhmsb << 8) | tp->dhlsb;
        gi->gd_planes = tp->num_planes;
        gi->gd_colors = 1 << gi->gd_planes;
        if (gi->gd_colors == 1) {
        gi->gd_dwidth = (tp->dwmsb << 8) | tp->dwlsb;
        gi->gd_dheight = (tp->dhmsb << 8) | tp->dhlsb;
        gi->gd_planes = tp->num_planes;
        gi->gd_colors = 1 << gi->gd_planes;
        if (gi->gd_colors == 1) {
-               fbp = (u_char *) IOV(gi->gd_fbaddr);
+               fbp = (u_char *) gp->g_fbkva;
                tp->wen = ~0;
                tp->prr = 0x3;
                tp->fben = ~0;
                tp->wen = ~0;
                tp->prr = 0x3;
                tp->fben = ~0;