summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/sti.c59
-rw-r--r--sys/dev/ic/stireg.h3
-rw-r--r--sys/dev/ic/stivar.h3
3 files changed, 44 insertions, 21 deletions
diff --git a/sys/dev/ic/sti.c b/sys/dev/ic/sti.c
index 6420752f427..475860957b1 100644
--- a/sys/dev/ic/sti.c
+++ b/sys/dev/ic/sti.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sti.c,v 1.16 2003/01/31 03:44:26 mickey Exp $ */
+/* $OpenBSD: sti.c,v 1.17 2003/01/31 17:00:19 miod Exp $ */
/*
* Copyright (c) 2000-2003 Michael Shalayeff
@@ -193,7 +193,7 @@ sti_attach_common(sc)
"end=%x, mmap=%x, msto=%x, timo=%d, mont=%x, ua=%x\n"
"memrq=%x, pwr=%d, bus=%x, ebus=%x, altt=%x, cfb=%x\n"
"code=",
- dd->dd_type, dd->dd_grrev, dd->dd_lrrev,
+ dd->dd_type & 0xff, dd->dd_grrev, dd->dd_lrrev,
dd->dd_grid[0], dd->dd_grid[1],
dd->dd_fntaddr, dd->dd_maxst, dd->dd_romend,
dd->dd_reglst, dd->dd_maxreent,
@@ -342,13 +342,20 @@ sti_attach_common(sc)
{
struct wsemuldisplaydev_attach_args waa;
- /* attach WSDISPLAY */
- bzero(&waa, sizeof(waa));
waa.console = sc->sc_flags & STI_CONSOLE? 1 : 0;
waa.scrdata = &sti_default_screenlist;
waa.accessops = &sti_accessops;
waa.accesscookie = sc;
+ /* attach as console if required */
+ if (waa.console) {
+ long defattr;
+
+ sti_alloc_attr(sc, 0, 0, 0, &defattr);
+ wsdisplay_cnattach(&sti_default_screen, sc,
+ 0, sti_default_screen.nrows - 1, defattr);
+ }
+
config_found(&sc->sc_dev, &waa, wsemuldisplaydevprint);
}
#endif
@@ -467,6 +474,7 @@ sti_bmove(sc, x1, y1, x2, y2, h, w, f)
a.in.bg_colour = 0;
break;
case bmf_invert:
+ a.flags.flags |= STI_BLKMVF_COLR;
a.in.fg_colour = 0;
a.in.bg_colour = 1;
break;
@@ -506,7 +514,7 @@ sti_mmap(v, offset, prot)
int prot;
{
/* XXX not finished */
- return offset;
+ return -1;
}
int
@@ -517,7 +525,17 @@ sti_alloc_screen(v, type, cookiep, cxp, cyp, defattr)
int *cxp, *cyp;
long *defattr;
{
- return -1;
+ struct sti_softc *sc = v;
+
+ if (sc->sc_nscreens > 0)
+ return ENOMEM;
+
+ *cookiep = sc;
+ *cxp = 0;
+ *cyp = 0;
+ sti_alloc_attr(sc, 0, 0, 0, defattr);
+ sc->sc_nscreens++;
+ return 0;
}
void
@@ -525,6 +543,9 @@ sti_free_screen(v, cookie)
void *v;
void *cookie;
{
+ struct sti_softc *sc = v;
+
+ sc->sc_nscreens--;
}
int
@@ -556,9 +577,9 @@ sti_cursor(v, on, row, col)
struct sti_font *fp = sc->sc_curfont;
sti_bmove(sc,
- row * fp->height, col * fp->width,
- row * fp->height, col * fp->width,
- fp->width, fp->height, bmf_invert);
+ col * fp->width, row * fp->height,
+ col * fp->width, row * fp->height,
+ fp->height, fp->width, bmf_invert);
}
int
@@ -610,9 +631,9 @@ sti_copycols(v, row, srccol, dstcol, ncols)
struct sti_font *fp = sc->sc_curfont;
sti_bmove(sc,
- row * fp->height, srccol * fp->width,
- row * fp->height, dstcol * fp->width,
- ncols * fp->width, fp->height, bmf_copy);
+ srccol * fp->width, row * fp->height,
+ dstcol * fp->width, row * fp->height,
+ fp->height, ncols * fp->width, bmf_copy);
}
void
@@ -625,9 +646,9 @@ sti_erasecols(v, row, startcol, ncols, attr)
struct sti_font *fp = sc->sc_curfont;
sti_bmove(sc,
- row * fp->height, startcol * fp->width,
- row * fp->height, startcol * fp->width,
- ncols * fp->width, fp->height, bmf_clear);
+ startcol * fp->width, row * fp->height,
+ startcol * fp->width, row * fp->height,
+ fp->height, ncols * fp->width, bmf_clear);
}
void
@@ -638,8 +659,8 @@ sti_copyrows(v, srcrow, dstrow, nrows)
struct sti_softc *sc = v;
struct sti_font *fp = sc->sc_curfont;
- sti_bmove(sc, srcrow * fp->height, 0, dstrow * fp->height, 0,
- sc->sc_cfg.fb_width, nrows + fp->height, bmf_copy);
+ sti_bmove(sc, 0, srcrow * fp->height, 0, dstrow * fp->height,
+ nrows * fp->height, sc->sc_cfg.fb_width, bmf_copy);
}
void
@@ -651,8 +672,8 @@ sti_eraserows(v, srcrow, nrows, attr)
struct sti_softc *sc = v;
struct sti_font *fp = sc->sc_curfont;
- sti_bmove(sc, srcrow * fp->height, 0, srcrow * fp->height, 0,
- sc->sc_cfg.fb_width, nrows + fp->height, bmf_clear);
+ sti_bmove(sc, 0, srcrow * fp->height, 0, srcrow * fp->height,
+ nrows * fp->height, sc->sc_cfg.fb_width, bmf_clear);
}
int
diff --git a/sys/dev/ic/stireg.h b/sys/dev/ic/stireg.h
index 49c8c4f47e8..12167657925 100644
--- a/sys/dev/ic/stireg.h
+++ b/sys/dev/ic/stireg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: stireg.h,v 1.4 2002/03/14 01:26:55 millert Exp $ */
+/* $OpenBSD: stireg.h,v 1.5 2003/01/31 17:00:19 miod Exp $ */
/*
* Copyright (c) 2000 Michael Shalayeff
@@ -317,6 +317,7 @@ typedef struct sti_blkmvin {
u_int8_t bg_colour;
u_int16_t srcx, srcy, dstx, dsty;
u_int16_t width, height;
+ u_int16_t pad;
void *future;
} *sti_blkmvin_t;
diff --git a/sys/dev/ic/stivar.h b/sys/dev/ic/stivar.h
index b6f79387599..42b38d2b9df 100644
--- a/sys/dev/ic/stivar.h
+++ b/sys/dev/ic/stivar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: stivar.h,v 1.6 2003/01/31 03:44:26 mickey Exp $ */
+/* $OpenBSD: stivar.h,v 1.7 2003/01/31 17:00:19 miod Exp $ */
/*
* Copyright (c) 2000-2003 Michael Shalayeff
@@ -45,6 +45,7 @@ struct sti_softc {
#define STI_CLEARSCR 0x0002
#define STI_CONSOLE 0x0004
int sc_devtype;
+ int sc_nscreens;
bus_space_tag_t iot, memt;
bus_space_handle_t ioh, romh, fbh;