2 * omap35 display subsystem (dss) device interface to screen.c.
6 #include "../port/lib.h"
12 #include "../port/error.h"
26 extern OScreen oscreen;
27 extern Settings settings[];
28 extern Omap3fb *framebuf;
31 static Dirtab dsstab[] = {
32 ".", {Qdir, 0, QTDIR}, 0, 0555|DMDIR,
33 "vgactl", {Qdss, 0}, 0, 0666,
37 screenattach(char *spec)
39 return devattach('v', spec);
43 screenwalk(Chan *c, Chan *nc, char **name, int nname)
45 return devwalk(c, nc, name, nname, dsstab, nelem(dsstab), devgen);
49 screenstat(Chan *c, uchar *dp, int n)
51 return devstat(c, dp, n, dsstab, nelem(dsstab), devgen);
55 screenopen(Chan *c, int omode)
57 if ((ulong)c->qid.path == Qdss) {
60 c->mode = openmode(omode);
70 if ((c->qid.type & QTDIR) == 0 && c->flag & COPEN)
71 if (c->qid.path == Qdss) {
80 if (strncmp("x24" , p, 3) == 0)
81 return RGB24; /* can't work yet, pixels are shorts */
82 else if (strncmp("x16", p, 3) == 0)
89 settingswrite(OScreen *scr, char *p)
91 if (strncmp("800x600", p, 7) == 0) {
93 scr->settings = &settings[Res800x600];
94 } else if (strncmp("1024x768", p, 8) == 0) {
96 scr->settings = &settings[Res1024x768];
97 } else if (strncmp("1280x1024", p, 9) == 0) {
99 scr->settings = &settings[Res1280x1024];
102 scr->settings->chan = getchans(p);
107 screenread(Chan *c, void *a, long n, vlong off)
113 switch ((ulong)c->qid.path) {
115 return devdirread(c, a, n, dsstab, nelem(dsstab), devgen);
117 set = oscreen.settings;
123 if (set->chan == RGB16)
125 else if (set->chan == RGB24)
129 len = snprint(p, READSTR, "size %dx%dx%d @ %d Hz\n"
130 "addr %#p size %ud\n", set->wid, set->ht, depth,
131 set->freq, framebuf, sizeof *framebuf);
133 n = readstr(off, a, n, p);
144 screenwrite(Chan *c, void *a, long n, vlong off)
146 switch ((ulong)c->qid.path) {
150 n = settingswrite(&oscreen, a);
167 devshutdown, // TODO add a shutdown to stop dma to monitor