diff options
-rw-r--r-- | sys/arch/arm/xscale/pxa2x0_lcd.c | 94 | ||||
-rw-r--r-- | sys/arch/arm/xscale/pxa2x0_lcd.h | 11 | ||||
-rw-r--r-- | sys/arch/zaurus/zaurus/zaurus_lcd.c | 21 |
3 files changed, 100 insertions, 26 deletions
diff --git a/sys/arch/arm/xscale/pxa2x0_lcd.c b/sys/arch/arm/xscale/pxa2x0_lcd.c index 9e1efd6e3c9..5eab0ab878f 100644 --- a/sys/arch/arm/xscale/pxa2x0_lcd.c +++ b/sys/arch/arm/xscale/pxa2x0_lcd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pxa2x0_lcd.c,v 1.5 2005/01/05 18:11:54 miod Exp $ */ +/* $OpenBSD: pxa2x0_lcd.c,v 1.6 2005/01/05 19:12:47 miod Exp $ */ /* $NetBSD: pxa2x0_lcd.c,v 1.8 2003/10/03 07:24:05 bsh Exp $ */ /* @@ -472,8 +472,7 @@ pxa2x0_lcd_new_screen(struct pxa2x0_lcd_softc *sc, * raster operation subsystem. */ int -pxa2x0_lcd_setup_wsscreen(struct pxa2x0_lcd_softc *sc, - struct pxa2x0_wsscreen_descr *descr, +pxa2x0_lcd_setup_wsscreen(struct pxa2x0_wsscreen_descr *descr, const struct lcd_panel_geometry *geom, const char *fontname) { @@ -508,16 +507,9 @@ pxa2x0_lcd_setup_wsscreen(struct pxa2x0_lcd_softc *sc, rasops_init(&rinfo, 100, 100); - /* - * Since we will use a rasops structure per screen, we need to - * keep a copy of the emulops (which will always be the same) - * in the softc, so as not to require an extra indirection layer. - */ - sc->emulops = rinfo.ri_ops; descr->c.nrows = rinfo.ri_rows; descr->c.ncols = rinfo.ri_cols; descr->c.capabilities = rinfo.ri_caps; - descr->c.textops = &sc->emulops; return cookie; } @@ -571,7 +563,7 @@ pxa2x0_lcd_alloc_screen(void *v, const struct wsscreen_descr *_type, scr->rinfo.ri_ops.alloc_attr(&scr->rinfo, 0, 0, 0, attrp); - *cookiep = &scr->rinfo; + *cookiep = scr; *curxp = 0; *curyp = 0; @@ -660,3 +652,83 @@ pxa2x0_lcd_mmap(void *v, off_t offset, int prot) return (bus_dmamem_mmap(sc->dma_tag, screen->segs, screen->nsegs, offset, prot, BUS_DMA_WAITOK | BUS_DMA_COHERENT)); } + +static void +pxa2x0_lcd_cursor(void *cookie, int on, int row, int col) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + (* scr->rinfo.ri_ops.cursor)(&scr->rinfo, on, row, col); +} + +static int +pxa2x0_lcd_mapchar(void *cookie, int c, unsigned int *cp) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + return (* scr->rinfo.ri_ops.mapchar)(&scr->rinfo, c, cp); +} + +static void +pxa2x0_lcd_putchar(void *cookie, int row, int col, u_int uc, long attr) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + (* scr->rinfo.ri_ops.putchar)(&scr->rinfo, + row, col, uc, attr); +} + +static void +pxa2x0_lcd_copycols(void *cookie, int row, int src, int dst, int num) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + (* scr->rinfo.ri_ops.copycols)(&scr->rinfo, + row, src, dst, num); +} + +static void +pxa2x0_lcd_erasecols(void *cookie, int row, int col, int num, long attr) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + (* scr->rinfo.ri_ops.erasecols)(&scr->rinfo, + row, col, num, attr); +} + +static void +pxa2x0_lcd_copyrows(void *cookie, int src, int dst, int num) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + (* scr->rinfo.ri_ops.copyrows)(&scr->rinfo, + src, dst, num); +} + +static void +pxa2x0_lcd_eraserows(void *cookie, int row, int num, long attr) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + (* scr->rinfo.ri_ops.eraserows)(&scr->rinfo, + row, num, attr); +} + +static int +pxa2x0_lcd_alloc_attr(void *cookie, int fg, int bg, int flg, long *attr) +{ + struct pxa2x0_lcd_screen *scr = cookie; + + return scr->rinfo.ri_ops.alloc_attr(&scr->rinfo, fg, bg, flg, attr); +} + +const struct wsdisplay_emulops pxa2x0_lcd_emulops = { + pxa2x0_lcd_cursor, + pxa2x0_lcd_mapchar, + pxa2x0_lcd_putchar, + pxa2x0_lcd_copycols, + pxa2x0_lcd_erasecols, + pxa2x0_lcd_copyrows, + pxa2x0_lcd_eraserows, + pxa2x0_lcd_alloc_attr +}; diff --git a/sys/arch/arm/xscale/pxa2x0_lcd.h b/sys/arch/arm/xscale/pxa2x0_lcd.h index 22c18ac6506..12200d87af3 100644 --- a/sys/arch/arm/xscale/pxa2x0_lcd.h +++ b/sys/arch/arm/xscale/pxa2x0_lcd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pxa2x0_lcd.h,v 1.3 2005/01/05 18:11:54 miod Exp $ */ +/* $OpenBSD: pxa2x0_lcd.h,v 1.4 2005/01/05 19:12:47 miod Exp $ */ /* $NetBSD: pxa2x0_lcd.h,v 1.2 2003/06/17 09:43:14 bsh Exp $ */ /* * Copyright (c) 2002 Genetec Corporation. All rights reserved. @@ -85,8 +85,6 @@ struct pxa2x0_lcd_softc { int n_screens; LIST_HEAD(, pxa2x0_lcd_screen) screens; struct pxa2x0_lcd_screen *active; - struct wsdisplay_emulops emulops; /* master emulops copy */ - void *ih; /* interrupt handler */ }; @@ -136,9 +134,8 @@ struct pxa2x0_wsscreen_descr { int depth; /* bits per pixel */ }; -int pxa2x0_lcd_setup_wsscreen(struct pxa2x0_lcd_softc *, - struct pxa2x0_wsscreen_descr *, const struct lcd_panel_geometry *, - const char * ); +int pxa2x0_lcd_setup_wsscreen(struct pxa2x0_wsscreen_descr *, + const struct lcd_panel_geometry *, const char * ); int pxa2x0_lcd_show_screen(void *, void *, int, void (*)(void *, int, int), void *); @@ -148,4 +145,6 @@ int pxa2x0_lcd_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); void pxa2x0_lcd_free_screen(void *, void *); +extern const struct wsdisplay_emulops pxa2x0_lcd_emulops; + #endif /* _ARM_XSCALE_PXA2X0_LCD_H */ diff --git a/sys/arch/zaurus/zaurus/zaurus_lcd.c b/sys/arch/zaurus/zaurus/zaurus_lcd.c index 42fbada74ba..58b44576126 100644 --- a/sys/arch/zaurus/zaurus/zaurus_lcd.c +++ b/sys/arch/zaurus/zaurus/zaurus_lcd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: zaurus_lcd.c,v 1.4 2005/01/05 18:11:57 miod Exp $ */ +/* $OpenBSD: zaurus_lcd.c,v 1.5 2005/01/05 19:12:48 miod Exp $ */ /* $NetBSD: lubbock_lcd.c,v 1.1 2003/08/09 19:38:53 bsh Exp $ */ /* @@ -70,18 +70,21 @@ int lcdintr(void *); struct pxa2x0_wsscreen_descr lcd_bpp16_screen = { { - "std" /* "bpp16" */ + "std" /* "bpp16" */, 0, 0, + &pxa2x0_lcd_emulops, }, 16 /* bits per pixel */ #ifdef notyet }, lcd_bpp8_screen = { { - "bpp8" + "bpp8", 0, 0, + &pxa2x0_lcd_emulops, }, 8 /* bits per pixel */ }, lcd_bpp4_screen = { { - "bpp4" + "bpp4", 0, 0, + &pxa2x0_lcd_emulops, }, 4 /* bits per pixel */ #endif @@ -131,7 +134,7 @@ lcd_match(struct device *parent, void *cf, void *aux) return 1; } -#define CURRENT_DISPLAY &sharp_zaurus_C3000 +#define CURRENT_DISPLAY sharp_zaurus_C3000 static const struct lcd_panel_geometry sharp_zaurus_C3000 = { @@ -158,13 +161,13 @@ lcd_attach(struct device *parent, struct device *self, void *aux) struct pxa2x0_lcd_softc *sc = (struct pxa2x0_lcd_softc *)self; struct wsemuldisplaydev_attach_args aa; - pxa2x0_lcd_attach_sub(sc, aux, CURRENT_DISPLAY); + pxa2x0_lcd_attach_sub(sc, aux, &CURRENT_DISPLAY); /* make wsdisplay screen list */ - pxa2x0_lcd_setup_wsscreen(sc, &lcd_bpp16_screen, CURRENT_DISPLAY, NULL); + pxa2x0_lcd_setup_wsscreen(&lcd_bpp16_screen, &CURRENT_DISPLAY, NULL); #ifdef notyet - pxa2x0_lcd_setup_wsscreen(sc, &lcd_bpp8_screen, CURRENT_DISPLAY, NULL); - pxa2x0_lcd_setup_wsscreen(sc, &lcd_bpp4_screen, CURRENT_DISPLAY, NULL); + pxa2x0_lcd_setup_wsscreen(&lcd_bpp8_screen, &CURRENT_DISPLAY, NULL); + pxa2x0_lcd_setup_wsscreen(&lcd_bpp4_screen, &CURRENT_DISPLAY, NULL); #endif aa.console = 0; /* XXX */ |