Lines Matching refs:fb
97 diofb_fbinquire(struct diofb *fb, int scode, struct diofbreg *fbr) in diofb_fbinquire() argument
102 fb->regaddr = (uint8_t *)IIOP(fbr); in diofb_fbinquire()
104 fb->regaddr = dio_scodetopa(scode); in diofb_fbinquire()
106 if (fb->fbwidth == 0 || fb->fbheight == 0) { in diofb_fbinquire()
107 fb->fbwidth = (fbr->fbwmsb << 8) | fbr->fbwlsb; in diofb_fbinquire()
108 fb->fbheight = (fbr->fbhmsb << 8) | fbr->fbhlsb; in diofb_fbinquire()
110 fb->fbsize = fb->fbwidth * fb->fbheight; in diofb_fbinquire()
112 fb->regkva = (uint8_t *)fbr; in diofb_fbinquire()
114 fb->fbaddr = (uint8_t *) (*((uint8_t *)fbr + fboff) << 16); in diofb_fbinquire()
116 if (fb->regaddr >= (uint8_t *)DIOII_BASE) { in diofb_fbinquire()
123 regsize = (uintptr_t)fb->fbaddr; in diofb_fbinquire()
124 fb->fbaddr = fb->regaddr + (uintptr_t)fb->fbaddr; in diofb_fbinquire()
125 fb->fbkva = (uint8_t *)fbr + regsize; in diofb_fbinquire()
131 fb->fbkva = iomap(fb->fbaddr, fb->fbsize); in diofb_fbinquire()
132 if (fb->fbkva == NULL) in diofb_fbinquire()
135 if (fb->dwidth == 0 || fb->dheight == 0) { in diofb_fbinquire()
136 fb->dwidth = (fbr->dwmsb << 8) | fbr->dwlsb; in diofb_fbinquire()
137 fb->dheight = (fbr->dhmsb << 8) | fbr->dhlsb; in diofb_fbinquire()
144 if (fb->dwidth > fb->fbwidth) in diofb_fbinquire()
145 fb->dwidth = fb->fbwidth; in diofb_fbinquire()
146 if (fb->dheight > fb->fbheight) in diofb_fbinquire()
147 fb->dheight = fb->fbheight; in diofb_fbinquire()
149 fb->planes = fbr->num_planes; in diofb_fbinquire()
150 if (fb->planes > 8) in diofb_fbinquire()
151 fb->planes = 8; in diofb_fbinquire()
152 fb->planemask = (1 << fb->planes) - 1; in diofb_fbinquire()
154 fb->mapmode = WSDISPLAYIO_MODE_DUMBFB; in diofb_fbinquire()
164 diofb_fbsetup(struct diofb *fb) in diofb_fbsetup() argument
166 struct rasops_info *ri = &fb->ri; in diofb_fbsetup()
175 ri->ri_stride = (fb->fbwidth * ri->ri_depth) / 8; in diofb_fbsetup()
179 if (fb->planes < 4) in diofb_fbsetup()
181 if (fb == &diofb_cn) in diofb_fbsetup()
183 ri->ri_bits = fb->fbkva; in diofb_fbsetup()
184 ri->ri_width = fb->dwidth; in diofb_fbsetup()
185 ri->ri_height = fb->dheight; in diofb_fbsetup()
186 ri->ri_hw = fb; in diofb_fbsetup()
194 diofb_resetcmap(fb); in diofb_fbsetup()
200 if (fb->planes == 4) { in diofb_fbsetup()
214 (*fb->bmv)(fb, 0, 0, 0, 0, fb->fbwidth, fb->fbheight, RR_CLEAR, 0xff); in diofb_fbsetup()
216 fb->wsd.name = fb->wsdname; in diofb_fbsetup()
217 fb->wsd.ncols = ri->ri_cols; in diofb_fbsetup()
218 fb->wsd.nrows = ri->ri_rows; in diofb_fbsetup()
219 fb->wsd.textops = &ri->ri_ops; in diofb_fbsetup()
220 fb->wsd.fontwidth = ri->ri_font->fontwidth; in diofb_fbsetup()
221 fb->wsd.fontheight = ri->ri_font->fontheight; in diofb_fbsetup()
222 fb->wsd.capabilities = ri->ri_caps; in diofb_fbsetup()
223 strlcpy(fb->wsdname, "std", sizeof(fb->wsdname)); in diofb_fbsetup()
230 diofb_resetcmap(struct diofb *fb) in diofb_resetcmap() argument
238 fb->cmap.r[i] = *color++; in diofb_resetcmap()
239 fb->cmap.g[i] = *color++; in diofb_resetcmap()
240 fb->cmap.b[i] = *color++; in diofb_resetcmap()
259 switch (fb->planes) { in diofb_resetcmap()
267 memcpy(fb->cmap.r + 0xc0, fb->cmap.r + 0x00, 0x10); in diofb_resetcmap()
268 memcpy(fb->cmap.g + 0xc0, fb->cmap.g + 0x00, 0x10); in diofb_resetcmap()
269 memcpy(fb->cmap.b + 0xc0, fb->cmap.b + 0x00, 0x10); in diofb_resetcmap()
270 memcpy(fb->cmap.r + 0x30, fb->cmap.r + 0xf0, 0x10); in diofb_resetcmap()
271 memcpy(fb->cmap.g + 0x30, fb->cmap.g + 0xf0, 0x10); in diofb_resetcmap()
272 memcpy(fb->cmap.b + 0x30, fb->cmap.b + 0xf0, 0x10); in diofb_resetcmap()
280 memcpy(fb->cmap.r + 0x08, fb->cmap.r + 0xf8, 0x08); in diofb_resetcmap()
281 memcpy(fb->cmap.g + 0x08, fb->cmap.g + 0xf8, 0x08); in diofb_resetcmap()
282 memcpy(fb->cmap.b + 0x08, fb->cmap.b + 0xf8, 0x08); in diofb_resetcmap()
292 diofb_cnattach(struct diofb *fb) in diofb_cnattach() argument
297 ri = &fb->ri; in diofb_cnattach()
299 wsdisplay_cnattach(&fb->wsd, ri, 0, 0, defattr); in diofb_cnattach()
304 struct diofb *fb, int console, const char *descr) in diofb_end_attach() argument
308 aprint_normal(": %dx%d", fb->dwidth, fb->dheight); in diofb_end_attach()
310 if (fb->planes == 1) in diofb_end_attach()
313 aprint_normal("x%d", fb->planes); in diofb_end_attach()
319 fb->scrlist[0] = &fb->wsd; in diofb_end_attach()
320 fb->wsl.nscreens = 1; in diofb_end_attach()
321 fb->wsl.screens = (void *)fb->scrlist; in diofb_end_attach()
324 waa.scrdata = &fb->wsl; in diofb_end_attach()
326 waa.accesscookie = fb; in diofb_end_attach()
363 struct diofb *fb = ri->ri_hw; in diofb_copycols() local
364 int fontwidth = fb->wsd.fontwidth; in diofb_copycols()
371 (*fb->bmv)(fb, ri->ri_xorigin + src, ri->ri_yorigin + row, in diofb_copycols()
380 struct diofb *fb = ri->ri_hw; in diofb_copyrows() local
386 (*fb->bmv)(fb, ri->ri_xorigin, ri->ri_yorigin + src, in diofb_copyrows()
395 struct diofb *fb = ri->ri_hw; in diofb_erasecols() local
398 int fontwidth = fb->wsd.fontwidth; in diofb_erasecols()
410 if ((*fb->bmv)(fb, scol, srow, scol, srow, snum, in diofb_erasecols()
419 struct diofb *fb = ri->ri_hw; in diofb_eraserows() local
428 rc = (*fb->bmv)(fb, 0, 0, 0, 0, fb->fbwidth, ri->ri_height, in diofb_eraserows()
433 rc = (*fb->bmv)(fb, ri->ri_xorigin, srow, ri->ri_xorigin, in diofb_eraserows()
443 struct diofb *fb = ri->ri_hw; in diofb_do_cursor() local
445 int fontwidth = fb->wsd.fontwidth; in diofb_do_cursor()
449 (*fb->bmv)(fb, x, y, x, y, fontwidth, in diofb_do_cursor()
461 struct diofb *fb = v; in diofb_alloc_screen() local
462 struct rasops_info *ri = &fb->ri; in diofb_alloc_screen()
464 if (fb->nscreens > 0) in diofb_alloc_screen()
470 fb->nscreens++; in diofb_alloc_screen()
478 struct diofb *fb = v; in diofb_free_screen() local
480 fb->nscreens--; in diofb_free_screen()
494 struct diofb *fb = v; in diofb_mmap() local
499 switch (fb->mapmode) { in diofb_mmap()
502 return m68k_btop(fb->regaddr + offset); in diofb_mmap()
506 if (offset >= 0 && offset < fb->fbsize) in diofb_mmap()
507 return m68k_btop(fb->fbaddr + offset); in diofb_mmap()
515 diofb_getcmap(struct diofb *fb, struct wsdisplay_cmap *cm) in diofb_getcmap() argument
518 u_int colcount = 1 << fb->planes; in diofb_getcmap()
524 if ((error = copyout(fb->cmap.r + index, cm->red, count)) != 0) in diofb_getcmap()
526 if ((error = copyout(fb->cmap.g + index, cm->green, count)) != 0) in diofb_getcmap()
528 if ((error = copyout(fb->cmap.b + index, cm->blue, count)) != 0) in diofb_getcmap()