diff options
31 files changed, 189 insertions, 752 deletions
diff --git a/sys/arch/sparc/dev/agten.c b/sys/arch/sparc/dev/agten.c index ac7afb65780..675a3578da3 100644 --- a/sys/arch/sparc/dev/agten.c +++ b/sys/arch/sparc/dev/agten.c @@ -1,4 +1,4 @@ -/* $OpenBSD: agten.c,v 1.5 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: agten.c,v 1.6 2004/11/29 22:07:36 miod Exp $ */ /* * Copyright (c) 2002, 2003, Miodrag Vallat. * All rights reserved. @@ -105,18 +105,6 @@ struct agten_softc { int sc_nscreens; }; -struct wsscreen_descr agten_stdscreen = { - "std", -}; - -const struct wsscreen_descr *agten_scrlist[] = { - &agten_stdscreen, -}; - -struct wsscreen_list agten_screenlist = { - sizeof(agten_scrlist) / sizeof(struct wsscreen_descr *), agten_scrlist -}; - int agten_ioctl(void *, u_long, caddr_t, int, struct proc *); int agten_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -172,7 +160,6 @@ agtenattach(struct device *parent, struct device *self, void *args) { struct agten_softc *sc = (struct agten_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, isconsole; char *nam; @@ -227,23 +214,13 @@ agtenattach(struct device *parent, struct device *self, void *args) fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, agten_setcolor); - agten_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - agten_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - agten_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - agten_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &agten_stdscreen, -1, - NULL); + fbwscons_console_init(&sc->sc_sunfb, -1, NULL); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &agten_screenlist; - waa.accessops = &agten_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &agten_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/bwtwo.c b/sys/arch/sparc/dev/bwtwo.c index 893142220a2..98cc95679bc 100644 --- a/sys/arch/sparc/dev/bwtwo.c +++ b/sys/arch/sparc/dev/bwtwo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bwtwo.c,v 1.27 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: bwtwo.c,v 1.28 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: bwtwo.c,v 1.33 1997/05/24 20:16:02 pk Exp $ */ /* @@ -93,19 +93,6 @@ struct bwtwo_softc { int sc_nscreens; }; -struct wsscreen_descr bwtwo_stdscreen = { - "std", -}; - -const struct wsscreen_descr *bwtwo_scrlist[] = { - &bwtwo_stdscreen, -}; - -struct wsscreen_list bwtwo_screenlist = { - sizeof(bwtwo_scrlist) / sizeof(struct wsscreen_descr *), - bwtwo_scrlist -}; - int bwtwo_ioctl(void *, u_long, caddr_t, int, struct proc *); int bwtwo_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -208,7 +195,6 @@ bwtwoattach(parent, self, args) { struct bwtwo_softc *sc = (struct bwtwo_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = ca->ca_ra.ra_node; int isconsole = 0; int sbus = 1; @@ -308,14 +294,8 @@ obp_name: sc->sc_sunfb.sf_ro.ri_hw = sc; fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); - bwtwo_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - bwtwo_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - bwtwo_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - bwtwo_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &bwtwo_stdscreen, -1, - bwtwo_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, bwtwo_burner); } #if defined(SUN4C) || defined(SUN4M) @@ -323,11 +303,7 @@ obp_name: sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); #endif - waa.console = isconsole; - waa.scrdata = &bwtwo_screenlist; - waa.accessops = &bwtwo_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &bwtwo_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgeight.c b/sys/arch/sparc/dev/cgeight.c index 13eba516700..b46207911da 100644 --- a/sys/arch/sparc/dev/cgeight.c +++ b/sys/arch/sparc/dev/cgeight.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgeight.c,v 1.21 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: cgeight.c,v 1.22 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: cgeight.c,v 1.13 1997/05/24 20:16:04 pk Exp $ */ /* @@ -88,19 +88,6 @@ struct cgeight_softc { int sc_nscreens; }; -struct wsscreen_descr cgeight_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgeight_scrlist[] = { - &cgeight_stdscreen, -}; - -struct wsscreen_list cgeight_screenlist = { - sizeof(cgeight_scrlist) /sizeof(struct wsscreen_descr *), - cgeight_scrlist -}; - int cgeight_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgeight_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -184,7 +171,6 @@ cgeightattach(parent, self, args) { struct cgeight_softc *sc = (struct cgeight_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = 0, i; volatile struct bt_regs *bt; int isconsole = 0; @@ -229,24 +215,14 @@ cgeightattach(parent, self, args) PFOUR_COLOR_OFF_OVERLAY, round_page(sc->sc_sunfb.sf_fbsize)); fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); - cgeight_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgeight_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgeight_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgeight_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf(": cgeight/p4, %dx%d", sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &cgeight_stdscreen, -1, - cgeight_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, cgeight_burner); } - waa.console = isconsole; - waa.scrdata = &cgeight_screenlist; - waa.accessops = &cgeight_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgeight_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgfour.c b/sys/arch/sparc/dev/cgfour.c index fcad25130ac..e1e13cf87f9 100644 --- a/sys/arch/sparc/dev/cgfour.c +++ b/sys/arch/sparc/dev/cgfour.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgfour.c,v 1.21 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: cgfour.c,v 1.22 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: cgfour.c,v 1.13 1997/05/24 20:16:06 pk Exp $ */ /* @@ -88,19 +88,6 @@ struct cgfour_softc { int sc_nscreens; }; -struct wsscreen_descr cgfour_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgfour_scrlist[] = { - &cgfour_stdscreen, -}; - -struct wsscreen_list cgfour_screenlist = { - sizeof(cgfour_scrlist) / sizeof(struct wsscreen_descr *), - cgfour_scrlist -}; - int cgfour_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgfour_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -181,7 +168,6 @@ cgfourattach(parent, self, args) { struct cgfour_softc *sc = (struct cgfour_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = 0, i; volatile struct bt_regs *bt; int isconsole = 0; @@ -240,23 +226,13 @@ cgfourattach(parent, self, args) fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, cgfour_setcolor); - cgfour_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgfour_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgfour_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgfour_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf(", %dx%d\n", sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &cgfour_stdscreen, -1, - cgfour_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, cgfour_burner); } - waa.console = isconsole; - waa.scrdata = &cgfour_screenlist; - waa.accessops = &cgfour_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgfour_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgfourteen.c b/sys/arch/sparc/dev/cgfourteen.c index 56073f72045..705d905a92d 100644 --- a/sys/arch/sparc/dev/cgfourteen.c +++ b/sys/arch/sparc/dev/cgfourteen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgfourteen.c,v 1.26 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: cgfourteen.c,v 1.27 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: cgfourteen.c,v 1.7 1997/05/24 20:16:08 pk Exp $ */ /* @@ -137,19 +137,6 @@ struct cgfourteen_softc { int sc_nscreens; }; -struct wsscreen_descr cgfourteen_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgfourteen_scrlist[] = { - &cgfourteen_stdscreen, -}; - -struct wsscreen_list cgfourteen_screenlist = { - sizeof(cgfourteen_scrlist) / sizeof(struct wsscreen_descr *), - cgfourteen_scrlist -}; - int cgfourteen_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgfourteen_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -234,7 +221,6 @@ cgfourteenattach(parent, self, args) { struct cgfourteen_softc *sc = (struct cgfourteen_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, i; u_int32_t *lut; int isconsole = 0; @@ -330,22 +316,12 @@ cgfourteenattach(parent, self, args) fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, cgfourteen_setcolor); - cgfourteen_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgfourteen_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgfourteen_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgfourteen_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &cgfourteen_stdscreen, - -1, cgfourteen_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, cgfourteen_burner); shutdownhook_establish(cgfourteen_prom, sc); } - waa.console = isconsole; - waa.scrdata = &cgfourteen_screenlist; - waa.accessops = &cgfourteen_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgfourteen_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgsix.c b/sys/arch/sparc/dev/cgsix.c index 1f32129a0c8..962799e3cb0 100644 --- a/sys/arch/sparc/dev/cgsix.c +++ b/sys/arch/sparc/dev/cgsix.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgsix.c,v 1.29 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: cgsix.c,v 1.30 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: cgsix.c,v 1.33 1997/08/07 19:12:30 pk Exp $ */ /* @@ -124,18 +124,6 @@ struct cgsix_softc { int sc_nscreens; }; -struct wsscreen_descr cgsix_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgsix_scrlist[] = { - &cgsix_stdscreen, -}; - -struct wsscreen_list cgsix_screenlist = { - sizeof(cgsix_scrlist) / sizeof(struct wsscreen_descr *), cgsix_scrlist -}; - int cgsix_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgsix_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -238,7 +226,6 @@ cgsixattach(parent, self, args) { struct cgsix_softc *sc = (struct cgsix_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = 0, i; volatile struct bt_regs *bt; int isconsole = 0, sbus = 1; @@ -368,16 +355,11 @@ cgsixattach(parent, self, args) cgsix_ras_init(sc); } - cgsix_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgsix_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgsix_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgsix_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf(", %dx%d, rev %d\n", sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height, fhcrev); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &cgsix_stdscreen, + fbwscons_console_init(&sc->sc_sunfb, sc->sc_sunfb.sf_width >= 1024 ? -1 : 0, cgsix_burner); } @@ -386,11 +368,7 @@ cgsixattach(parent, self, args) sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); #endif - waa.console = isconsole; - waa.scrdata = &cgsix_screenlist; - waa.accessops = &cgsix_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgsix_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgthree.c b/sys/arch/sparc/dev/cgthree.c index 6f077420d4c..b49e79cf254 100644 --- a/sys/arch/sparc/dev/cgthree.c +++ b/sys/arch/sparc/dev/cgthree.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgthree.c,v 1.25 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: cgthree.c,v 1.26 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: cgthree.c,v 1.33 1997/05/24 20:16:11 pk Exp $ */ /* @@ -116,19 +116,6 @@ struct cgthree_softc { int sc_nscreens; }; -struct wsscreen_descr cgthree_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgthree_scrlist[] = { - &cgthree_stdscreen, -}; - -struct wsscreen_list cgthree_screenlist = { - sizeof(cgthree_scrlist) / sizeof(struct wsscreen_descr *), - cgthree_scrlist -}; - int cgthree_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgthree_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -220,7 +207,6 @@ cgthreeattach(parent, self, args) { struct cgthree_softc *sc = (struct cgthree_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = 0, isrdi = 0, i; volatile struct bt_regs *bt; int isconsole = 0, sbus = 1; @@ -323,13 +309,8 @@ cgthreeattach(parent, self, args) (sc->sc_sunfb.sf_width >= 1024) ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, cgthree_setcolor); - cgthree_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgthree_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgthree_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgthree_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &cgthree_stdscreen, + fbwscons_console_init(&sc->sc_sunfb, sc->sc_sunfb.sf_width >= 1024 ? -1 : 0, cgthree_burner); } @@ -338,11 +319,7 @@ cgthreeattach(parent, self, args) sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); #endif - waa.console = isconsole; - waa.scrdata = &cgthree_screenlist; - waa.accessops = &cgthree_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgthree_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgtwelve.c b/sys/arch/sparc/dev/cgtwelve.c index c5af1e984ed..fdb70c13124 100644 --- a/sys/arch/sparc/dev/cgtwelve.c +++ b/sys/arch/sparc/dev/cgtwelve.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgtwelve.c,v 1.9 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: cgtwelve.c,v 1.10 2004/11/29 22:07:36 miod Exp $ */ /* * Copyright (c) 2002, 2003 Miodrag Vallat. All rights reserved. @@ -90,19 +90,6 @@ struct cgtwelve_softc { int sc_nscreens; }; -struct wsscreen_descr cgtwelve_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgtwelve_scrlist[] = { - &cgtwelve_stdscreen, -}; - -struct wsscreen_list cgtwelve_screenlist = { - sizeof(cgtwelve_scrlist) / sizeof(struct wsscreen_descr *), - cgtwelve_scrlist -}; - int cgtwelve_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgtwelve_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -168,7 +155,6 @@ cgtwelveattach(parent, self, args) { struct cgtwelve_softc *sc = (struct cgtwelve_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node; int isconsole = 0; char *ps; @@ -228,14 +214,8 @@ cgtwelveattach(parent, self, args) sc->sc_sunfb.sf_ro.ri_hw = sc; fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); - cgtwelve_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgtwelve_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgtwelve_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgtwelve_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, - &cgtwelve_stdscreen, -1, NULL); + fbwscons_console_init(&sc->sc_sunfb, -1, NULL); shutdownhook_establish(cgtwelve_prom, sc); } @@ -248,11 +228,7 @@ cgtwelveattach(parent, self, args) printf(", microcode rev. %s", ps); printf("\n"); - waa.console = isconsole; - waa.scrdata = &cgtwelve_screenlist; - waa.accessops = &cgtwelve_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgtwelve_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/cgtwo.c b/sys/arch/sparc/dev/cgtwo.c index 2ea3dc1943c..5ad1e7c383e 100644 --- a/sys/arch/sparc/dev/cgtwo.c +++ b/sys/arch/sparc/dev/cgtwo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgtwo.c,v 1.29 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: cgtwo.c,v 1.30 2004/11/29 22:07:36 miod Exp $ */ /* $NetBSD: cgtwo.c,v 1.22 1997/05/24 20:16:12 pk Exp $ */ /* @@ -113,19 +113,6 @@ struct cgtwo_softc { int sc_nscreens; }; -struct wsscreen_descr cgtwo_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgtwo_scrlist[] = { - &cgtwo_stdscreen, -}; - -struct wsscreen_list cgtwo_screenlist = { - sizeof(cgtwo_scrlist) / sizeof(struct wsscreen_descr *), - cgtwo_scrlist -}; - int cgtwo_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgtwo_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -198,7 +185,6 @@ cgtwoattach(parent, self, args) { struct cgtwo_softc *sc = (struct cgtwo_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = 0; int isconsole = 0; char *nam = NULL; @@ -255,23 +241,13 @@ cgtwoattach(parent, self, args) fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, cgtwo_setcolor); - cgtwo_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgtwo_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgtwo_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgtwo_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf(", %dx%d\n", sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &cgtwo_stdscreen, -1, - cgtwo_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, cgtwo_burner); } - waa.console = isconsole; - waa.scrdata = &cgtwo_screenlist; - waa.accessops = &cgtwo_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgtwo_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/fb.c b/sys/arch/sparc/dev/fb.c index 243b1930f8f..bf110c2af7f 100644 --- a/sys/arch/sparc/dev/fb.c +++ b/sys/arch/sparc/dev/fb.c @@ -1,8 +1,8 @@ -/* $OpenBSD: fb.c,v 1.28 2004/02/29 21:24:36 miod Exp $ */ +/* $OpenBSD: fb.c,v 1.29 2004/11/29 22:07:37 miod Exp $ */ /* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */ /* - * Copyright (c) 2002 Miodrag Vallat + * Copyright (c) 2002, 2004 Miodrag Vallat. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -90,6 +90,9 @@ #include "wsdisplay.h" +static int a2int(char *, int); +static void fb_initwsd(struct sunfb *); + /* * emergency unblank code * XXX should be somewhat moved to wscons MI code @@ -281,9 +284,7 @@ obpsize: sf->sf_fbsize = sf->sf_height * sf->sf_linebytes; } -int a2int(char *, int); - -int +static int a2int(char *cp, int deflt) { int i = 0; @@ -295,6 +296,17 @@ a2int(char *cp, int deflt) return (i); } +/* setup the embedded wsscreen_descr structure from rasops settings */ +static void +fb_initwsd(struct sunfb *sf) +{ + strlcpy(sf->sf_wsd.name, "std", sizeof(sf->sf_wsd.name)); + sf->sf_wsd.capabilities = sf->sf_ro.ri_caps; + sf->sf_wsd.nrows = sf->sf_ro.ri_rows; + sf->sf_wsd.ncols = sf->sf_ro.ri_cols; + sf->sf_wsd.textops = &sf->sf_ro.ri_ops; +} + void fbwscons_init(struct sunfb *sf, int flags) { @@ -336,7 +348,7 @@ fbwscons_init(struct sunfb *sf, int flags) } void -fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, +fbwscons_console_init(struct sunfb *sf, int row, void (*burner)(void *, u_int, u_int)) { long defattr; @@ -368,10 +380,10 @@ fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, * Scale back rows and columns if the font would not otherwise * fit on this display. Without this we would panic later. */ - if (sf->sf_ro.ri_crow >= wsc->nrows) - sf->sf_ro.ri_crow = wsc->nrows - 1; - if (sf->sf_ro.ri_ccol >= wsc->ncols) - sf->sf_ro.ri_ccol = wsc->ncols - 1; + if (sf->sf_ro.ri_crow >= sf->sf_ro.ri_rows) + sf->sf_ro.ri_crow = sf->sf_ro.ri_rows - 1; + if (sf->sf_ro.ri_ccol >= sf->sf_ro.ri_cols) + sf->sf_ro.ri_ccol = sf->sf_ro.ri_cols - 1; /* * Select appropriate color settings to mimic a @@ -384,7 +396,7 @@ fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, wskernel_fg = 255; } - if (ISSET(wsc->capabilities, WSSCREEN_WSCOLORS) && + if (ISSET(sf->sf_ro.ri_caps, WSSCREEN_WSCOLORS) && sf->sf_depth == 8) { sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro, WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, &defattr); @@ -392,7 +404,8 @@ fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro, 0, 0, 0, &defattr); } - wsdisplay_cnattach(wsc, &sf->sf_ro, + fb_initwsd(sf); + wsdisplay_cnattach(&sf->sf_wsd, &sf->sf_ro, sf->sf_ro.ri_ccol, sf->sf_ro.ri_crow, defattr); /* remember screen burner routine */ @@ -424,6 +437,29 @@ fbwscons_setcolormap(struct sunfb *sf, } } +void +fbwscons_attach(struct sunfb *sf, struct wsdisplay_accessops *op, int isconsole) +{ + struct wsemuldisplaydev_attach_args waa; + struct wsscreen_descr *scrlist[1]; + struct wsscreen_list screenlist; + + if (isconsole == 0) { + /* done in wsdisplay_cnattach() earlier if console */ + fb_initwsd(sf); + } + + scrlist[0] = &sf->sf_wsd; + screenlist.nscreens = 1; + screenlist.screens = (const struct wsscreen_descr **)scrlist; + + waa.console = isconsole; + waa.scrdata = &screenlist; + waa.accessops = op; + waa.accesscookie = sf; + config_found(&sf->sf_dev, &waa, wsemuldisplaydevprint); +} + #if defined(SUN4) /* * Support routines for pfour framebuffers. diff --git a/sys/arch/sparc/dev/mgx.c b/sys/arch/sparc/dev/mgx.c index c76ac76d465..04b78bd303f 100644 --- a/sys/arch/sparc/dev/mgx.c +++ b/sys/arch/sparc/dev/mgx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mgx.c,v 1.5 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: mgx.c,v 1.6 2004/11/29 22:07:37 miod Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. * All rights reserved. @@ -89,19 +89,6 @@ struct mgx_softc { int sc_nscreens; }; -struct wsscreen_descr mgx_stdscreen = { - "std", -}; - -const struct wsscreen_descr *mgx_scrlist[] = { - &mgx_stdscreen, -}; - -struct wsscreen_list mgx_screenlist = { - sizeof(mgx_scrlist) / sizeof(struct wsscreen_descr *), - mgx_scrlist -}; - int mgx_ioctl(void *, u_long, caddr_t, int, struct proc *); int mgx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -164,7 +151,6 @@ mgxattach(struct device *parent, struct device *self, void *args) { struct mgx_softc *sc = (struct mgx_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, fbsize; int isconsole; @@ -209,26 +195,16 @@ mgxattach(struct device *parent, struct device *self, void *args) bzero(sc->sc_cmap, sizeof(sc->sc_cmap)); fbwscons_setcolormap(&sc->sc_sunfb, mgx_setcolor); - mgx_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - mgx_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - mgx_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - mgx_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf(", %dx%d\n", sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, - &mgx_stdscreen, -1, mgx_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, mgx_burner); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &mgx_screenlist; - waa.accessops = &mgx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &mgx_accessops, isconsole); } /* diff --git a/sys/arch/sparc/dev/p9000.c b/sys/arch/sparc/dev/p9000.c index 9aecf26c0db..a61fe87e483 100644 --- a/sys/arch/sparc/dev/p9000.c +++ b/sys/arch/sparc/dev/p9000.c @@ -1,4 +1,4 @@ -/* $OpenBSD: p9000.c,v 1.9 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: p9000.c,v 1.10 2004/11/29 22:07:37 miod Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. @@ -80,19 +80,6 @@ struct p9000_softc { u_int32_t sc_junk; /* throwaway value */ }; -struct wsscreen_descr p9000_stdscreen = { - "std", -}; - -const struct wsscreen_descr *p9000_scrlist[] = { - &p9000_stdscreen, -}; - -struct wsscreen_list p9000_screenlist = { - sizeof(p9000_scrlist) / sizeof(struct wsscreen_descr *), - p9000_scrlist -}; - int p9000_ioctl(void *, u_long, caddr_t, int, struct proc *); int p9000_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -204,7 +191,6 @@ p9000attach(struct device *parent, struct device *self, void *args) { struct p9000_softc *sc = (struct p9000_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, row, isconsole, scr; struct device *btdev; extern struct cfdriver btcham_cd; @@ -284,11 +270,6 @@ p9000attach(struct device *parent, struct device *self, void *args) */ p9000_ras_init(sc); - p9000_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - p9000_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - p9000_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - p9000_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); /* enable video */ @@ -300,15 +281,10 @@ p9000attach(struct device *parent, struct device *self, void *args) else row = -1; - fbwscons_console_init(&sc->sc_sunfb, &p9000_stdscreen, row, - p9000_burner); + fbwscons_console_init(&sc->sc_sunfb, row, p9000_burner); } - waa.console = isconsole; - waa.scrdata = &p9000_screenlist; - waa.accessops = &p9000_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &p9000_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/p9100.c b/sys/arch/sparc/dev/p9100.c index 43119858420..1f58ccf3baf 100644 --- a/sys/arch/sparc/dev/p9100.c +++ b/sys/arch/sparc/dev/p9100.c @@ -1,4 +1,4 @@ -/* $OpenBSD: p9100.c,v 1.30 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: p9100.c,v 1.31 2004/11/29 22:07:37 miod Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. @@ -80,19 +80,6 @@ struct p9100_softc { u_int32_t sc_junk; /* throwaway value */ }; -struct wsscreen_descr p9100_stdscreen = { - "std", -}; - -const struct wsscreen_descr *p9100_scrlist[] = { - &p9100_stdscreen, -}; - -struct wsscreen_list p9100_screenlist = { - sizeof(p9100_scrlist) / sizeof(struct wsscreen_descr *), - p9100_scrlist -}; - int p9100_ioctl(void *, u_long, caddr_t, int, struct proc *); int p9100_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -245,7 +232,6 @@ p9100attach(struct device *parent, struct device *self, void *args) { struct p9100_softc *sc = (struct p9100_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, row, scr; int isconsole, fb_depth; @@ -327,11 +313,6 @@ p9100attach(struct device *parent, struct device *self, void *args) if (sc->sc_sunfb.sf_depth == 8) p9100_ras_init(sc); - p9100_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - p9100_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - p9100_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - p9100_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); /* enable video */ @@ -343,15 +324,10 @@ p9100attach(struct device *parent, struct device *self, void *args) else row = -1; - fbwscons_console_init(&sc->sc_sunfb, &p9100_stdscreen, row, - p9100_burner); + fbwscons_console_init(&sc->sc_sunfb, row, p9100_burner); } - waa.console = isconsole; - waa.scrdata = &p9100_screenlist; - waa.accessops = &p9100_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &p9100_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/rfx.c b/sys/arch/sparc/dev/rfx.c index f8baca6bf71..36cc92ea6e1 100644 --- a/sys/arch/sparc/dev/rfx.c +++ b/sys/arch/sparc/dev/rfx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rfx.c,v 1.5 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: rfx.c,v 1.6 2004/11/29 22:07:37 miod Exp $ */ /* * Copyright (c) 2004, Miodrag Vallat. @@ -118,19 +118,6 @@ struct rfx_softc { int sc_nscreens; }; -struct wsscreen_descr rfx_stdscreen = { - "std", -}; - -const struct wsscreen_descr *rfx_scrlist[] = { - &rfx_stdscreen, -}; - -struct wsscreen_list rfx_screenlist = { - sizeof(rfx_scrlist) / sizeof(struct wsscreen_descr *), - rfx_scrlist -}; - int rfx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); void rfx_burner(void *, u_int, u_int); @@ -216,7 +203,6 @@ rfxattach(struct device *parent, struct device *self, void *args) struct confargs *ca = args; const char *device = ca->ca_ra.ra_name; struct rfx_config cf; - struct wsemuldisplaydev_attach_args waa; int node, cflen, isconsole = 0; /* skip vendor name (could be CWARE, VITec, ...) */ @@ -302,14 +288,8 @@ rfxattach(struct device *parent, struct device *self, void *args) bzero(&sc->sc_cmap, sizeof(sc->sc_cmap)); fbwscons_setcolormap(&sc->sc_sunfb, rfx_setcolor); - rfx_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - rfx_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - rfx_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - rfx_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &rfx_stdscreen, -1, - rfx_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, rfx_burner); } /* enable video */ @@ -317,11 +297,7 @@ rfxattach(struct device *parent, struct device *self, void *args) sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &rfx_screenlist; - waa.accessops = &rfx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &rfx_accessops, isconsole); } /* diff --git a/sys/arch/sparc/dev/tcx.c b/sys/arch/sparc/dev/tcx.c index d4ab0ccc8e7..e7c004e3524 100644 --- a/sys/arch/sparc/dev/tcx.c +++ b/sys/arch/sparc/dev/tcx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcx.c,v 1.20 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: tcx.c,v 1.21 2004/11/29 22:07:37 miod Exp $ */ /* $NetBSD: tcx.c,v 1.8 1997/07/29 09:58:14 fair Exp $ */ /* @@ -110,18 +110,6 @@ struct tcx_softc { int sc_nscreens; }; -struct wsscreen_descr tcx_stdscreen = { - "std", -}; - -const struct wsscreen_descr *tcx_scrlist[] = { - &tcx_stdscreen, -}; - -struct wsscreen_list tcx_screenlist = { - sizeof(tcx_scrlist) / sizeof(struct wsscreen_descr *), tcx_scrlist -}; - int tcx_ioctl(void *, u_long, caddr_t, int, struct proc *); int tcx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -204,7 +192,6 @@ tcxattach(parent, self, args) { struct tcx_softc *sc = (struct tcx_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node = 0, i; volatile struct bt_regs *bt; int isconsole = 0; @@ -266,19 +253,13 @@ tcxattach(parent, self, args) fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, tcx_setcolor); - tcx_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - tcx_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - tcx_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - tcx_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - sc->sc_ih.ih_fun = tcx_intr; sc->sc_ih.ih_arg = sc; intr_establish(ca->ca_ra.ra_intr[0].int_pri, &sc->sc_ih, IPL_FB, self->dv_xname); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &tcx_stdscreen, -1, - tcx_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, tcx_burner); shutdownhook_establish(tcx_prom, sc); } @@ -291,11 +272,7 @@ tcxattach(parent, self, args) (sc->sc_thc->thc_config & THC_CFG_SENSE) >> THC_CFG_SENSE_SHIFT ); - waa.console = isconsole; - waa.scrdata = &tcx_screenlist; - waa.accessops = &tcx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &tcx_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/tvtwo.c b/sys/arch/sparc/dev/tvtwo.c index ef140851476..dd285920315 100644 --- a/sys/arch/sparc/dev/tvtwo.c +++ b/sys/arch/sparc/dev/tvtwo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tvtwo.c,v 1.3 2003/06/28 17:05:33 miod Exp $ */ +/* $OpenBSD: tvtwo.c,v 1.4 2004/11/29 22:07:37 miod Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. * All rights reserved. @@ -122,19 +122,6 @@ struct tvtwo_softc { int sc_nscreens; }; -struct wsscreen_descr tvtwo_stdscreen = { - "std", -}; - -const struct wsscreen_descr *tvtwo_scrlist[] = { - &tvtwo_stdscreen, -}; - -struct wsscreen_list tvtwo_screenlist = { - sizeof(tvtwo_scrlist) / sizeof(struct wsscreen_descr *), - tvtwo_scrlist -}; - int tvtwo_ioctl(void *, u_long, caddr_t, int, struct proc *); int tvtwo_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -200,7 +187,6 @@ tvtwoattach(struct device *parent, struct device *self, void *args) { struct tvtwo_softc *sc = (struct tvtwo_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, width, height, freqcode; int isconsole; char *freqstring; @@ -248,26 +234,16 @@ tvtwoattach(struct device *parent, struct device *self, void *args) sc->sc_sunfb.sf_ro.ri_hw = sc; fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); - tvtwo_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - tvtwo_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - tvtwo_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - tvtwo_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf("%s: %dx%d\n", self->dv_xname, sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, - &tvtwo_stdscreen, -1, NULL); + fbwscons_console_init(&sc->sc_sunfb, -1, NULL); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &tvtwo_screenlist; - waa.accessops = &tvtwo_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &tvtwo_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/vigra.c b/sys/arch/sparc/dev/vigra.c index c346c6aac98..45cf21aad94 100644 --- a/sys/arch/sparc/dev/vigra.c +++ b/sys/arch/sparc/dev/vigra.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vigra.c,v 1.10 2004/09/29 07:35:11 miod Exp $ */ +/* $OpenBSD: vigra.c,v 1.11 2004/11/29 22:07:37 miod Exp $ */ /* * Copyright (c) 2002, 2003, Miodrag Vallat. @@ -184,19 +184,6 @@ struct vigra_softc { int sc_nscreens; }; -struct wsscreen_descr vigra_stdscreen = { - "std", -}; - -const struct wsscreen_descr *vigra_scrlist[] = { - &vigra_stdscreen, -}; - -struct wsscreen_list vigra_screenlist = { - sizeof(vigra_scrlist) / sizeof(struct wsscreen_descr *), - vigra_scrlist -}; - int vigra_ioctl(void *, u_long, caddr_t, int, struct proc *); int vigra_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -261,7 +248,6 @@ vigraattach(struct device *parent, struct device *self, void *args) { struct vigra_softc *sc = (struct vigra_softc *)self; struct confargs *ca = args; - struct wsemuldisplaydev_attach_args waa; int node, row, isconsole = 0; char *nam; @@ -325,15 +311,10 @@ vigraattach(struct device *parent, struct device *self, void *args) && sc->sc_sunfb.sf_width != 1280) ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, vigra_setcolor); - vigra_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - vigra_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - vigra_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - vigra_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { switch (sc->sc_sunfb.sf_width) { case 640: - row = vigra_stdscreen.nrows - 1; + row = sc->sc_sunfb.sf_ro.ri_rows - 1; break; case 800: case 1280: @@ -344,17 +325,12 @@ vigraattach(struct device *parent, struct device *self, void *args) break; } - fbwscons_console_init(&sc->sc_sunfb, &vigra_stdscreen, row, - vigra_burner); + fbwscons_console_init(&sc->sc_sunfb, row, vigra_burner); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &vigra_screenlist; - waa.accessops = &vigra_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &vigra_accessops, isconsole); } int diff --git a/sys/arch/sparc/dev/zx.c b/sys/arch/sparc/dev/zx.c index 362f34a502d..8f5a3e3c5ab 100644 --- a/sys/arch/sparc/dev/zx.c +++ b/sys/arch/sparc/dev/zx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: zx.c,v 1.7 2004/07/26 13:26:38 miod Exp $ */ +/* $OpenBSD: zx.c,v 1.8 2004/11/29 22:07:37 miod Exp $ */ /* $NetBSD: zx.c,v 1.5 2002/10/02 16:52:46 thorpej Exp $ */ /* @@ -126,19 +126,6 @@ struct zx_softc { int sc_nscreens; }; -struct wsscreen_descr zx_stdscreen = { - "std" -}; - -const struct wsscreen_descr *zx_scrlist[] = { - &zx_stdscreen -}; - -struct wsscreen_list zx_screenlist = { - sizeof(zx_scrlist) / sizeof(struct wsscreen_descr *), - zx_scrlist -}; - int zx_ioctl(void *, u_long, caddr_t, int, struct proc *); int zx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -216,7 +203,6 @@ zx_attach(struct device *parent, struct device *self, void *args) struct zx_softc *sc = (struct zx_softc *)self; struct confargs *ca = args; struct rasops_info *ri; - struct wsemuldisplaydev_attach_args waa; int node, isconsole = 0; const char *nam; @@ -290,15 +276,9 @@ zx_attach(struct device *parent, struct device *self, void *args) ri->ri_ops.putchar = zx_putchar; ri->ri_do_cursor = zx_do_cursor; - zx_stdscreen.capabilities = ri->ri_caps; - zx_stdscreen.nrows = ri->ri_rows; - zx_stdscreen.ncols = ri->ri_cols; - zx_stdscreen.textops = &ri->ri_ops; - if (isconsole) { /* zx_reset() below will clear screen, so restart at 1st row */ - fbwscons_console_init(&sc->sc_sunfb, &zx_stdscreen, 0, - zx_burner); + fbwscons_console_init(&sc->sc_sunfb, 0, zx_burner); } /* reset cursor & frame buffer controls */ @@ -309,11 +289,7 @@ zx_attach(struct device *parent, struct device *self, void *args) sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &zx_screenlist; - waa.accessops = &zx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &zx_accessops, isconsole); } int diff --git a/sys/arch/sparc/include/fbvar.h b/sys/arch/sparc/include/fbvar.h index f1b6564556e..74733c58278 100644 --- a/sys/arch/sparc/include/fbvar.h +++ b/sys/arch/sparc/include/fbvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: fbvar.h,v 1.11 2003/06/28 17:05:35 miod Exp $ */ +/* $OpenBSD: fbvar.h,v 1.12 2004/11/29 22:07:39 miod Exp $ */ /* $NetBSD: fbvar.h,v 1.9 1997/07/07 23:31:30 pk Exp $ */ /* @@ -68,6 +68,8 @@ struct sunfb { volatile u_int32_t* sf_pfour; /* P4 register when applicable */ struct rasops_info sf_ro; + + struct wsscreen_descr sf_wsd; }; /* @@ -77,10 +79,11 @@ extern int fbnode; void fb_setsize(struct sunfb*, int, int, int, int, int); void fbwscons_init(struct sunfb *, int); -void fbwscons_console_init(struct sunfb *, struct wsscreen_descr *, int, +void fbwscons_console_init(struct sunfb *, int, void (*)(void *, u_int, u_int)); void fbwscons_setcolormap(struct sunfb *, void (*)(void *, u_int, u_int8_t, u_int8_t, u_int8_t)); +void fbwscons_attach(struct sunfb *, struct wsdisplay_accessops *, int); #if defined(SUN4) int fb_pfour_id(void *); diff --git a/sys/arch/sparc64/dev/creator.c b/sys/arch/sparc64/dev/creator.c index be9a0203042..923aebccffe 100644 --- a/sys/arch/sparc64/dev/creator.c +++ b/sys/arch/sparc64/dev/creator.c @@ -1,4 +1,4 @@ -/* $OpenBSD: creator.c,v 1.29 2003/06/24 19:41:33 miod Exp $ */ +/* $OpenBSD: creator.c,v 1.30 2004/11/29 22:07:40 miod Exp $ */ /* * Copyright (c) 2002 Jason L. Wright (jason@thought.net) @@ -47,20 +47,6 @@ #include <sparc64/dev/creatorreg.h> #include <sparc64/dev/creatorvar.h> -struct wsscreen_descr creator_stdscreen = { - "std", -}; - -const struct wsscreen_descr *creator_scrlist[] = { - &creator_stdscreen, - /* XXX other formats? */ -}; - -struct wsscreen_list creator_screenlist = { - sizeof(creator_scrlist) / sizeof(struct wsscreen_descr *), - creator_scrlist -}; - int creator_ioctl(void *, u_long, caddr_t, int, struct proc *); int creator_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -100,7 +86,6 @@ struct cfdriver creator_cd = { void creator_attach(struct creator_softc *sc) { - struct wsemuldisplaydev_attach_args waa; char *model; int btype; @@ -151,22 +136,13 @@ creator_attach(struct creator_softc *sc) creator_ras_init(sc); } - creator_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - creator_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - creator_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - creator_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (sc->sc_console) { sc->sc_sunfb.sf_ro.ri_updatecursor = creator_ras_updatecursor; - fbwscons_console_init(&sc->sc_sunfb, &creator_stdscreen, -1, + fbwscons_console_init(&sc->sc_sunfb, -1, NULL); } - waa.console = sc->sc_console; - waa.scrdata = &creator_screenlist; - waa.accessops = &creator_accessops; - waa.accesscookie = sc; - config_found(&sc->sc_sunfb.sf_dev, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &creator_accessops, sc->sc_console); } int diff --git a/sys/arch/sparc64/dev/fb.c b/sys/arch/sparc64/dev/fb.c index 22a1f5ea8c4..fd257bf332c 100644 --- a/sys/arch/sparc64/dev/fb.c +++ b/sys/arch/sparc64/dev/fb.c @@ -1,8 +1,8 @@ -/* $OpenBSD: fb.c,v 1.5 2004/02/29 21:24:37 miod Exp $ */ +/* $OpenBSD: fb.c,v 1.6 2004/11/29 22:07:40 miod Exp $ */ /* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */ /* - * Copyright (c) 2002 Miodrag Vallat + * Copyright (c) 2002, 2004 Miodrag Vallat. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -86,6 +86,9 @@ #include "wsdisplay.h" +static int a2int(char *, int); +static void fb_initwsd(struct sunfb *); + /* * emergency unblank code * XXX should be somewhat moved to wscons MI code @@ -129,9 +132,7 @@ fb_setsize(struct sunfb *sf, int def_depth, int def_width, int def_height, sf->sf_fbsize = sf->sf_height * sf->sf_linebytes; } -int a2int(char *, int); - -int +static int a2int(char *cp, int deflt) { int i = 0; @@ -143,6 +144,17 @@ a2int(char *cp, int deflt) return (i); } +/* setup the embedded wsscreen_descr structure from rasops settings */ +static void +fb_initwsd(struct sunfb *sf) +{ + strlcpy(sf->sf_wsd.name, "std", sizeof(sf->sf_wsd.name)); + sf->sf_wsd.capabilities = sf->sf_ro.ri_caps; + sf->sf_wsd.nrows = sf->sf_ro.ri_rows; + sf->sf_wsd.ncols = sf->sf_ro.ri_cols; + sf->sf_wsd.textops = &sf->sf_ro.ri_ops; +} + void fbwscons_init(struct sunfb *sf, int flags) { @@ -162,7 +174,7 @@ fbwscons_init(struct sunfb *sf, int flags) } void -fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, +fbwscons_console_init(struct sunfb *sf, int row, void (*burner)(void *, u_int, u_int)) { long defattr; @@ -194,10 +206,10 @@ fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, * Scale back rows and columns if the font would not otherwise * fit on this display. Without this we would panic later. */ - if (sf->sf_ro.ri_crow >= wsc->nrows) - sf->sf_ro.ri_crow = wsc->nrows - 1; - if (sf->sf_ro.ri_ccol >= wsc->ncols) - sf->sf_ro.ri_ccol = wsc->ncols - 1; + if (sf->sf_ro.ri_crow >= sf->sf_ro.ri_rows) + sf->sf_ro.ri_crow = sf->sf_ro.ri_rows - 1; + if (sf->sf_ro.ri_ccol >= sf->sf_ro.ri_cols) + sf->sf_ro.ri_ccol = sf->sf_ro.ri_cols - 1; /* * Select appropriate color settings to mimic a @@ -210,7 +222,7 @@ fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, wskernel_fg = 255; } - if (ISSET(wsc->capabilities, WSSCREEN_WSCOLORS) && + if (ISSET(sf->sf_ro.ri_caps, WSSCREEN_WSCOLORS) && sf->sf_depth == 8) { sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro, WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, &defattr); @@ -218,7 +230,8 @@ fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row, sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro, 0, 0, 0, &defattr); } - wsdisplay_cnattach(wsc, &sf->sf_ro, + fb_initwsd(sf); + wsdisplay_cnattach(&sf->sf_wsd, &sf->sf_ro, sf->sf_ro.ri_ccol, sf->sf_ro.ri_crow, defattr); /* remember screen burner routine */ @@ -250,4 +263,27 @@ fbwscons_setcolormap(struct sunfb *sf, } } +void +fbwscons_attach(struct sunfb *sf, struct wsdisplay_accessops *op, int isconsole) +{ + struct wsemuldisplaydev_attach_args waa; + struct wsscreen_descr *scrlist[1]; + struct wsscreen_list screenlist; + + if (isconsole == 0) { + /* done in wsdisplay_cnattach() earlier if console */ + fb_initwsd(sf); + } + + scrlist[0] = &sf->sf_wsd; + screenlist.nscreens = 1; + screenlist.screens = (const struct wsscreen_descr **)scrlist; + + waa.console = isconsole; + waa.scrdata = &screenlist; + waa.accessops = op; + waa.accesscookie = sf; + config_found(&sf->sf_dev, &waa, wsemuldisplaydevprint); +} + #endif /* NWSDISPLAY */ diff --git a/sys/arch/sparc64/include/fbvar.h b/sys/arch/sparc64/include/fbvar.h index fcb8466f594..d154cd185ea 100644 --- a/sys/arch/sparc64/include/fbvar.h +++ b/sys/arch/sparc64/include/fbvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: fbvar.h,v 1.2 2003/06/17 17:35:43 miod Exp $ */ +/* $OpenBSD: fbvar.h,v 1.3 2004/11/29 22:07:40 miod Exp $ */ /* $NetBSD: fbvar.h,v 1.9 1997/07/07 23:31:30 pk Exp $ */ /* @@ -58,6 +58,8 @@ struct sunfb { int *sf_crowp, *sf_ccolp; /* PROM cursor position */ struct rasops_info sf_ro; + + struct wsscreen_descr sf_wsd; }; /* @@ -67,7 +69,8 @@ extern int fbnode; void fb_setsize(struct sunfb*, int, int, int, int, int); void fbwscons_init(struct sunfb *, int); -void fbwscons_console_init(struct sunfb *, struct wsscreen_descr *, int, +void fbwscons_console_init(struct sunfb *, int, void (*)(void *, u_int, u_int)); void fbwscons_setcolormap(struct sunfb *, void (*)(void *, u_int, u_int8_t, u_int8_t, u_int8_t)); +void fbwscons_attach(struct sunfb *, struct wsdisplay_accessops *, int); diff --git a/sys/dev/sbus/agten.c b/sys/dev/sbus/agten.c index 36f7ff1d92d..e51564daaf6 100644 --- a/sys/dev/sbus/agten.c +++ b/sys/dev/sbus/agten.c @@ -1,4 +1,4 @@ -/* $OpenBSD: agten.c,v 1.1 2004/06/21 04:41:10 miod Exp $ */ +/* $OpenBSD: agten.c,v 1.2 2004/11/29 22:07:40 miod Exp $ */ /* * Copyright (c) 2002, 2003, Miodrag Vallat. * All rights reserved. @@ -106,18 +106,6 @@ struct agten_softc { int sc_nscreens; }; -struct wsscreen_descr agten_stdscreen = { - "std", -}; - -const struct wsscreen_descr *agten_scrlist[] = { - &agten_stdscreen, -}; - -struct wsscreen_list agten_screenlist = { - sizeof(agten_scrlist) / sizeof(struct wsscreen_descr *), agten_scrlist -}; - int agten_ioctl(void *, u_long, caddr_t, int, struct proc *); int agten_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -172,7 +160,6 @@ agtenattach(struct device *parent, struct device *self, void *args) { struct agten_softc *sc = (struct agten_softc *)self; struct sbus_attach_args *sa = args; - struct wsemuldisplaydev_attach_args waa; bus_space_tag_t bt; bus_space_handle_t bh; int node, isconsole; @@ -241,23 +228,13 @@ agtenattach(struct device *parent, struct device *self, void *args) fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, agten_setcolor); - agten_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - agten_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - agten_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - agten_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &agten_stdscreen, -1, - NULL); + fbwscons_console_init(&sc->sc_sunfb, -1, NULL); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &agten_screenlist; - waa.accessops = &agten_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &agten_accessops, isconsole); } int diff --git a/sys/dev/sbus/bwtwo.c b/sys/dev/sbus/bwtwo.c index 0c7e30d35c7..760b835ab8d 100644 --- a/sys/dev/sbus/bwtwo.c +++ b/sys/dev/sbus/bwtwo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bwtwo.c,v 1.10 2003/06/27 01:36:53 jason Exp $ */ +/* $OpenBSD: bwtwo.c,v 1.11 2004/11/29 22:07:40 miod Exp $ */ /* * Copyright (c) 2002 Jason L. Wright (jason@thought.net) @@ -105,19 +105,6 @@ struct bwtwo_softc { int sc_nscreens; }; -struct wsscreen_descr bwtwo_stdscreen = { - "std", -}; - -const struct wsscreen_descr *bwtwo_scrlist[] = { - &bwtwo_stdscreen, - /* XXX other formats? */ -}; - -struct wsscreen_list bwtwo_screenlist = { - sizeof(bwtwo_scrlist) / sizeof(struct wsscreen_descr *), bwtwo_scrlist -}; - int bwtwo_ioctl(void *, u_long, caddr_t, int, struct proc *); int bwtwo_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -170,7 +157,6 @@ bwtwoattach(parent, self, aux) { struct bwtwo_softc *sc = (struct bwtwo_softc *)self; struct sbus_attach_args *sa = aux; - struct wsemuldisplaydev_attach_args waa; int console; sc->sc_bustag = sa->sa_bustag; @@ -214,22 +200,12 @@ bwtwoattach(parent, self, aux) sc->sc_sunfb.sf_ro.ri_hw = sc; fbwscons_init(&sc->sc_sunfb, console ? 0 : RI_CLEAR); - bwtwo_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - bwtwo_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - bwtwo_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - bwtwo_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (console) { sc->sc_sunfb.sf_ro.ri_updatecursor = bwtwo_updatecursor; - fbwscons_console_init(&sc->sc_sunfb, &bwtwo_stdscreen, -1, - bwtwo_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, bwtwo_burner); } - waa.console = console; - waa.scrdata = &bwtwo_screenlist; - waa.accessops = &bwtwo_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &bwtwo_accessops, console); return; diff --git a/sys/dev/sbus/cgsix.c b/sys/dev/sbus/cgsix.c index 97aca416c78..71d25831129 100644 --- a/sys/dev/sbus/cgsix.c +++ b/sys/dev/sbus/cgsix.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgsix.c,v 1.44 2003/07/03 21:02:13 jason Exp $ */ +/* $OpenBSD: cgsix.c,v 1.45 2004/11/29 22:07:40 miod Exp $ */ /* * Copyright (c) 2001 Jason L. Wright (jason@thought.net) @@ -53,19 +53,6 @@ #include <dev/sbus/cgsixreg.h> #include <dev/ic/bt458reg.h> -struct wsscreen_descr cgsix_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgsix_scrlist[] = { - &cgsix_stdscreen, - /* XXX other formats? */ -}; - -struct wsscreen_list cgsix_screenlist = { - sizeof(cgsix_scrlist) / sizeof(struct wsscreen_descr *), cgsix_scrlist -}; - int cgsix_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgsix_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -130,7 +117,6 @@ cgsixattach(struct device *parent, struct device *self, void *aux) { struct cgsix_softc *sc = (struct cgsix_softc *)self; struct sbus_attach_args *sa = aux; - struct wsemuldisplaydev_attach_args waa; int console, i; u_int32_t fhc, rev; @@ -242,26 +228,16 @@ cgsixattach(struct device *parent, struct device *self, void *aux) cgsix_ras_init(sc); } - cgsix_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgsix_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgsix_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgsix_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf("\n"); fbwscons_setcolormap(&sc->sc_sunfb, cgsix_setcolor); if (console) { sc->sc_sunfb.sf_ro.ri_updatecursor = cgsix_ras_updatecursor; - fbwscons_console_init(&sc->sc_sunfb, &cgsix_stdscreen, -1, - cgsix_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, cgsix_burner); } - waa.console = console; - waa.scrdata = &cgsix_screenlist; - waa.accessops = &cgsix_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgsix_accessops, console); return; diff --git a/sys/dev/sbus/cgthree.c b/sys/dev/sbus/cgthree.c index 2cc7eac5b9e..5b5b448d54f 100644 --- a/sys/dev/sbus/cgthree.c +++ b/sys/dev/sbus/cgthree.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cgthree.c,v 1.35 2003/08/01 19:24:47 miod Exp $ */ +/* $OpenBSD: cgthree.c,v 1.36 2004/11/29 22:07:40 miod Exp $ */ /* * Copyright (c) 2001 Jason L. Wright (jason@thought.net) @@ -129,19 +129,6 @@ struct cgthree_softc { u_int sc_mode; }; -struct wsscreen_descr cgthree_stdscreen = { - "std", -}; - -const struct wsscreen_descr *cgthree_scrlist[] = { - &cgthree_stdscreen, - /* XXX other formats? */ -}; - -struct wsscreen_list cgthree_screenlist = { - sizeof(cgthree_scrlist) / sizeof(struct wsscreen_descr *), cgthree_scrlist -}; - int cgthree_ioctl(void *, u_long, caddr_t, int, struct proc *); int cgthree_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -224,7 +211,6 @@ cgthreeattach(struct device *parent, struct device *self, void *aux) { struct cgthree_softc *sc = (struct cgthree_softc *)self; struct sbus_attach_args *sa = aux; - struct wsemuldisplaydev_attach_args waa; int console, i; sc->sc_bustag = sa->sa_bustag; @@ -288,24 +274,15 @@ cgthreeattach(struct device *parent, struct device *self, void *aux) fbwscons_init(&sc->sc_sunfb, console && (sc->sc_sunfb.sf_width >= 1024) ? 0 : RI_CLEAR); - cgthree_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - cgthree_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - cgthree_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - cgthree_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - fbwscons_setcolormap(&sc->sc_sunfb, cgthree_setcolor); if (console) { sc->sc_sunfb.sf_ro.ri_updatecursor = cgthree_updatecursor; - fbwscons_console_init(&sc->sc_sunfb, &cgthree_stdscreen, + fbwscons_console_init(&sc->sc_sunfb, sc->sc_sunfb.sf_width >= 1024 ? -1 : 0, cgthree_burner); } - waa.console = console; - waa.scrdata = &cgthree_screenlist; - waa.accessops = &cgthree_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &cgthree_accessops, console); return; diff --git a/sys/dev/sbus/mgx.c b/sys/dev/sbus/mgx.c index fcedbd26f67..824ed989456 100644 --- a/sys/dev/sbus/mgx.c +++ b/sys/dev/sbus/mgx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mgx.c,v 1.1 2004/06/20 21:28:06 miod Exp $ */ +/* $OpenBSD: mgx.c,v 1.2 2004/11/29 22:07:40 miod Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. * All rights reserved. @@ -92,19 +92,6 @@ struct mgx_softc { int sc_nscreens; }; -struct wsscreen_descr mgx_stdscreen = { - "std", -}; - -const struct wsscreen_descr *mgx_scrlist[] = { - &mgx_stdscreen, -}; - -struct wsscreen_list mgx_screenlist = { - sizeof(mgx_scrlist) / sizeof(struct wsscreen_descr *), - mgx_scrlist -}; - int mgx_ioctl(void *, u_long, caddr_t, int, struct proc *); int mgx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -166,7 +153,6 @@ mgxattach(struct device *parent, struct device *self, void *args) { struct mgx_softc *sc = (struct mgx_softc *)self; struct sbus_attach_args *sa = args; - struct wsemuldisplaydev_attach_args waa; bus_space_tag_t bt; bus_space_handle_t bh; int node, fbsize; @@ -227,26 +213,16 @@ mgxattach(struct device *parent, struct device *self, void *args) bzero(sc->sc_cmap, sizeof(sc->sc_cmap)); fbwscons_setcolormap(&sc->sc_sunfb, mgx_setcolor); - mgx_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - mgx_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - mgx_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - mgx_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf(", %dx%d\n", sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, - &mgx_stdscreen, -1, mgx_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, mgx_burner); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &mgx_screenlist; - waa.accessops = &mgx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &mgx_accessops, isconsole); } /* diff --git a/sys/dev/sbus/rfx.c b/sys/dev/sbus/rfx.c index db5cbc5de64..a1529ccea24 100644 --- a/sys/dev/sbus/rfx.c +++ b/sys/dev/sbus/rfx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rfx.c,v 1.1 2004/06/20 20:49:57 miod Exp $ */ +/* $OpenBSD: rfx.c,v 1.2 2004/11/29 22:07:41 miod Exp $ */ /* * Copyright (c) 2004, Miodrag Vallat. @@ -122,19 +122,6 @@ struct rfx_softc { int sc_nscreens; }; -struct wsscreen_descr rfx_stdscreen = { - "std", -}; - -const struct wsscreen_descr *rfx_scrlist[] = { - &rfx_stdscreen, -}; - -struct wsscreen_list rfx_screenlist = { - sizeof(rfx_scrlist) / sizeof(struct wsscreen_descr *), - rfx_scrlist -}; - int rfx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); void rfx_burner(void *, u_int, u_int); @@ -216,7 +203,6 @@ rfxattach(struct device *parent, struct device *self, void *args) struct sbus_attach_args *sa = args; const char *device = sa->sa_name; struct rfx_config cf; - struct wsemuldisplaydev_attach_args waa; bus_space_tag_t bt; bus_space_handle_t bh; int node, cflen, isconsole = 0; @@ -322,14 +308,8 @@ rfxattach(struct device *parent, struct device *self, void *args) bzero(&sc->sc_cmap, sizeof(sc->sc_cmap)); fbwscons_setcolormap(&sc->sc_sunfb, rfx_setcolor); - rfx_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - rfx_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - rfx_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - rfx_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, &rfx_stdscreen, -1, - rfx_burner); + fbwscons_console_init(&sc->sc_sunfb, -1, rfx_burner); } /* enable video */ @@ -337,11 +317,7 @@ rfxattach(struct device *parent, struct device *self, void *args) sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &rfx_screenlist; - waa.accessops = &rfx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &rfx_accessops, isconsole); } /* diff --git a/sys/dev/sbus/tvtwo.c b/sys/dev/sbus/tvtwo.c index 09953b6445c..8058114d57d 100644 --- a/sys/dev/sbus/tvtwo.c +++ b/sys/dev/sbus/tvtwo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tvtwo.c,v 1.1 2004/11/29 18:12:51 miod Exp $ */ +/* $OpenBSD: tvtwo.c,v 1.2 2004/11/29 22:07:41 miod Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. * All rights reserved. @@ -125,19 +125,6 @@ struct tvtwo_softc { int sc_nscreens; }; -struct wsscreen_descr tvtwo_stdscreen = { - "std", -}; - -const struct wsscreen_descr *tvtwo_scrlist[] = { - &tvtwo_stdscreen, -}; - -struct wsscreen_list tvtwo_screenlist = { - sizeof(tvtwo_scrlist) / sizeof(struct wsscreen_descr *), - tvtwo_scrlist -}; - int tvtwo_ioctl(void *, u_long, caddr_t, int, struct proc *); int tvtwo_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -202,7 +189,6 @@ tvtwoattach(struct device *parent, struct device *self, void *args) { struct tvtwo_softc *sc = (struct tvtwo_softc *)self; struct sbus_attach_args *sa = args; - struct wsemuldisplaydev_attach_args waa; bus_space_tag_t bt; bus_space_handle_t bh; int node, width, height, freqcode; @@ -264,26 +250,16 @@ tvtwoattach(struct device *parent, struct device *self, void *args) sc->sc_sunfb.sf_ro.ri_hw = sc; fbwscons_init(&sc->sc_sunfb, isconsole ? 0 : RI_CLEAR); - tvtwo_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - tvtwo_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - tvtwo_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - tvtwo_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - printf("%s: %dx%d\n", self->dv_xname, sc->sc_sunfb.sf_width, sc->sc_sunfb.sf_height); if (isconsole) { - fbwscons_console_init(&sc->sc_sunfb, - &tvtwo_stdscreen, -1, NULL); + fbwscons_console_init(&sc->sc_sunfb, -1, NULL); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &tvtwo_screenlist; - waa.accessops = &tvtwo_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &tvtwo_accessops, isconsole); } int diff --git a/sys/dev/sbus/vigra.c b/sys/dev/sbus/vigra.c index e95adc697c5..9e74a5cc541 100644 --- a/sys/dev/sbus/vigra.c +++ b/sys/dev/sbus/vigra.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vigra.c,v 1.1 2004/11/29 18:12:51 miod Exp $ */ +/* $OpenBSD: vigra.c,v 1.2 2004/11/29 22:07:41 miod Exp $ */ /* * Copyright (c) 2002, 2003, Miodrag Vallat. @@ -186,19 +186,6 @@ struct vigra_softc { int sc_nscreens; }; -struct wsscreen_descr vigra_stdscreen = { - "std", -}; - -const struct wsscreen_descr *vigra_scrlist[] = { - &vigra_stdscreen, -}; - -struct wsscreen_list vigra_screenlist = { - sizeof(vigra_scrlist) / sizeof(struct wsscreen_descr *), - vigra_scrlist -}; - int vigra_ioctl(void *, u_long, caddr_t, int, struct proc *); int vigra_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -262,7 +249,6 @@ vigraattach(struct device *parent, struct device *self, void *args) { struct vigra_softc *sc = (struct vigra_softc *)self; struct sbus_attach_args *sa = args; - struct wsemuldisplaydev_attach_args waa; bus_space_tag_t bt; bus_space_handle_t bh; int node, row, isconsole = 0; @@ -351,15 +337,10 @@ vigraattach(struct device *parent, struct device *self, void *args) && sc->sc_sunfb.sf_width != 1280) ? 0 : RI_CLEAR); fbwscons_setcolormap(&sc->sc_sunfb, vigra_setcolor); - vigra_stdscreen.capabilities = sc->sc_sunfb.sf_ro.ri_caps; - vigra_stdscreen.nrows = sc->sc_sunfb.sf_ro.ri_rows; - vigra_stdscreen.ncols = sc->sc_sunfb.sf_ro.ri_cols; - vigra_stdscreen.textops = &sc->sc_sunfb.sf_ro.ri_ops; - if (isconsole) { switch (sc->sc_sunfb.sf_width) { case 640: - row = vigra_stdscreen.nrows - 1; + row = sc->sc_sunfb.sf_ro.ri_rows - 1; break; case 800: case 1280: @@ -370,17 +351,12 @@ vigraattach(struct device *parent, struct device *self, void *args) break; } - fbwscons_console_init(&sc->sc_sunfb, &vigra_stdscreen, row, - vigra_burner); + fbwscons_console_init(&sc->sc_sunfb, row, vigra_burner); } sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &vigra_screenlist; - waa.accessops = &vigra_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &vigra_accessops, isconsole); } int diff --git a/sys/dev/sbus/zx.c b/sys/dev/sbus/zx.c index 2ee230fcfa1..c3f6a2f886f 100644 --- a/sys/dev/sbus/zx.c +++ b/sys/dev/sbus/zx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: zx.c,v 1.2 2004/07/26 13:26:39 miod Exp $ */ +/* $OpenBSD: zx.c,v 1.3 2004/11/29 22:07:41 miod Exp $ */ /* $NetBSD: zx.c,v 1.5 2002/10/02 16:52:46 thorpej Exp $ */ /* @@ -129,19 +129,6 @@ struct zx_softc { int sc_nscreens; }; -struct wsscreen_descr zx_stdscreen = { - "std" -}; - -const struct wsscreen_descr *zx_scrlist[] = { - &zx_stdscreen -}; - -struct wsscreen_list zx_screenlist = { - sizeof(zx_scrlist) / sizeof(struct wsscreen_descr *), - zx_scrlist -}; - int zx_ioctl(void *, u_long, caddr_t, int, struct proc *); int zx_alloc_screen(void *, const struct wsscreen_descr *, void **, int *, int *, long *); @@ -218,7 +205,6 @@ zx_attach(struct device *parent, struct device *self, void *args) struct zx_softc *sc = (struct zx_softc *)self; struct sbus_attach_args *sa = args; struct rasops_info *ri; - struct wsemuldisplaydev_attach_args waa; bus_space_tag_t bt; bus_space_handle_t bh; int node, isconsole = 0; @@ -320,15 +306,9 @@ zx_attach(struct device *parent, struct device *self, void *args) ri->ri_ops.putchar = zx_putchar; ri->ri_do_cursor = zx_do_cursor; - zx_stdscreen.capabilities = ri->ri_caps; - zx_stdscreen.nrows = ri->ri_rows; - zx_stdscreen.ncols = ri->ri_cols; - zx_stdscreen.textops = &ri->ri_ops; - if (isconsole) { /* zx_reset() below will clear screen, so restart at 1st row */ - fbwscons_console_init(&sc->sc_sunfb, &zx_stdscreen, 0, - zx_burner); + fbwscons_console_init(&sc->sc_sunfb, 0, zx_burner); } /* reset cursor & frame buffer controls */ @@ -339,11 +319,7 @@ zx_attach(struct device *parent, struct device *self, void *args) sbus_establish(&sc->sc_sd, &sc->sc_sunfb.sf_dev); - waa.console = isconsole; - waa.scrdata = &zx_screenlist; - waa.accessops = &zx_accessops; - waa.accesscookie = sc; - config_found(self, &waa, wsemuldisplaydevprint); + fbwscons_attach(&sc->sc_sunfb, &zx_accessops, isconsole); } int |