hooks to use the fbscreen stuff provided by bls Reference: /n/atom/patch/applied/fbscreen Date: Sun Jan 10 20:03:12 CET 2016 Signed-off-by: quanstro@quanstro.net --- /sys/src/9/bcm/screen.c Sun Jan 10 20:03:01 2016 +++ /sys/src/9/bcm/screen.c Sun Jan 10 20:03:03 2016 @@ -1,3 +1,7 @@ +/* + * bcm2385 framebuffer + */ + #include "u.h" #include "../port/lib.h" #include "mem.h" @@ -9,10 +13,7 @@ #include #include #include "screen.h" - -/* - * bcm2385 framebuffer - */ +#include "fbscreen.h" enum { Tabstop = 4, @@ -39,6 +40,7 @@ Memimage *gscreen; static Memdata xgdata; +static Fbscreen *fbscreen; static Memimage xgscreen = { @@ -55,6 +57,10 @@ 0, /* flags */ }; +static Fbscreen xfbscreen = { + &xgscreen, +}; + static Memimage *conscol; static Memimage *back; static Memsubfont *memdefont; @@ -116,6 +122,9 @@ if(mask->data->bdata == xgdata.bdata) swcursoravoid(par->mr); + if(fbscreen != nil && fbscreen->draw != nil) + fbscreen->draw(fbscreen, par->r); + return 0; } @@ -141,6 +150,7 @@ void screeninit(void) { + char *s; uchar *fb; int set; ulong chan; @@ -180,6 +190,12 @@ screenwin(); screenputs = myscreenputs; swcursorinit(); + + s = getconf("*scrhx8357d"); + if(s != nil && atoi(s) > 0 && pitftinit(&xfbscreen) == 0){ + fbscreen = &xfbscreen; + fbscreen->enable(fbscreen); + } } void @@ -216,6 +232,8 @@ blankscreen(int blank) { fbblank(blank); + if(fbscreen != nil && fbscreen->blank != nil) + fbscreen->blank(fbscreen, blank); } static void @@ -302,9 +320,13 @@ p = Pt(window.min.x, window.min.y+o); memimagedraw(gscreen, r, gscreen, p, nil, p, S); flushmemscreen(r); + if(fbscreen != nil && fbscreen->draw != nil) + fbscreen->draw(fbscreen, r); r = Rpt(Pt(window.min.x, window.max.y-o), window.max); memimagedraw(gscreen, r, back, ZP, nil, ZP, S); flushmemscreen(r); + if(fbscreen != nil && fbscreen->draw != nil) + fbscreen->draw(fbscreen, r); curpos.y -= o; } --- /sys/src/9/bcm/fbscreen.h Thu Jan 1 00:00:00 1970 +++ /sys/src/9/bcm/fbscreen.h Sun Jan 10 20:03:03 2016 @@ -0,0 +1,20 @@ +typedef struct Fbscreen Fbscreen; +typedef struct Hwscreen Hwscreen; + +struct Hwscreen { + char* name; + Rectangle vis; + + void (*enable)(Fbscreen*); + void (*disable)(Fbscreen*); + void (*draw)(Fbscreen*, Rectangle); + void (*flush)(Fbscreen*, Rectangle); + void (*blank)(Fbscreen*, int); +}; + +struct Fbscreen { + Memimage *fb; + Hwscreen; +}; + +int pitftinit(Fbscreen*);