Lines Matching +full:disable +full:- +full:mmu +full:- +full:reset
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
65 &ofwfb_reset_on_switch, 0, "reset the framebuffer driver on mode switch");
140 * bitmap depth-specific routines
160 * Define the iso6429-1983 colormap
167 /* - - - - ----- */
209 if (sc->sc_tag == &bs_le_tag) in ofwfb_pix32()
230 int disable; in ofwfb_configure() local
236 disable = 0; in ofwfb_configure()
237 TUNABLE_INT_FETCH("hw.syscons.disable", &disable); in ofwfb_configure()
238 if (disable != 0) in ofwfb_configure()
250 if (node == -1) { in ofwfb_configure()
261 /* Only support 8 and 32-bit framebuffers */ in ofwfb_configure()
264 sc->sc_blank = ofwfb_blank_display8; in ofwfb_configure()
265 sc->sc_putc = ofwfb_putc8; in ofwfb_configure()
266 sc->sc_putm = ofwfb_putm8; in ofwfb_configure()
267 sc->sc_set_border = ofwfb_set_border8; in ofwfb_configure()
269 sc->sc_blank = ofwfb_blank_display32; in ofwfb_configure()
270 sc->sc_putc = ofwfb_putc32; in ofwfb_configure()
271 sc->sc_putm = ofwfb_putm32; in ofwfb_configure()
272 sc->sc_set_border = ofwfb_set_border32; in ofwfb_configure()
276 if (OF_getproplen(node, "height") != sizeof(sc->sc_height) || in ofwfb_configure()
277 OF_getproplen(node, "width") != sizeof(sc->sc_width) || in ofwfb_configure()
278 OF_getproplen(node, "linebytes") != sizeof(sc->sc_stride)) in ofwfb_configure()
281 sc->sc_depth = depth; in ofwfb_configure()
282 sc->sc_node = node; in ofwfb_configure()
283 sc->sc_console = 1; in ofwfb_configure()
284 OF_getprop(node, "height", &sc->sc_height, sizeof(sc->sc_height)); in ofwfb_configure()
285 OF_getprop(node, "width", &sc->sc_width, sizeof(sc->sc_width)); in ofwfb_configure()
286 OF_getprop(node, "linebytes", &sc->sc_stride, sizeof(sc->sc_stride)); in ofwfb_configure()
291 * the assigned-addresses property. in ofwfb_configure()
293 len = OF_getprop(node, "assigned-addresses", sc->sc_pciaddrs, in ofwfb_configure()
294 sizeof(sc->sc_pciaddrs)); in ofwfb_configure()
295 if (len == -1) { in ofwfb_configure()
296 len = OF_getprop(OF_parent(node), "assigned-addresses", in ofwfb_configure()
297 sc->sc_pciaddrs, sizeof(sc->sc_pciaddrs)); in ofwfb_configure()
299 if (len == -1) in ofwfb_configure()
301 sc->sc_num_pciaddrs = len / sizeof(struct ofw_pci_register); in ofwfb_configure()
305 * into our memory space. If the MMU is not yet up, it will be in ofwfb_configure()
308 * XXX We assume #address-cells is 1 at this point. in ofwfb_configure()
312 sc->sc_tag = &bs_be_tag; in ofwfb_configure()
313 bus_space_map(sc->sc_tag, fb_phys, sc->sc_height * in ofwfb_configure()
314 sc->sc_stride, BUS_SPACE_MAP_PREFETCHABLE, &sc->sc_addr); in ofwfb_configure()
323 fb_phys = sc->sc_num_pciaddrs; in ofwfb_configure()
324 for (i = 0; i < sc->sc_num_pciaddrs; i++) { in ofwfb_configure()
326 if (sc->sc_pciaddrs[i].size_lo < in ofwfb_configure()
327 sc->sc_stride*sc->sc_height) in ofwfb_configure()
330 if (!(sc->sc_pciaddrs[i].phys_hi & in ofwfb_configure()
338 if (sc->sc_pciaddrs[i].phys_hi & in ofwfb_configure()
342 if (fb_phys == sc->sc_num_pciaddrs) in ofwfb_configure()
345 OF_decode_addr(node, fb_phys, &sc->sc_tag, &sc->sc_addr, NULL); in ofwfb_configure()
348 ofwfb_init(0, &sc->sc_va, 0); in ofwfb_configure()
369 vi = &adp->va_info; in ofwfb_init()
371 vid_init_struct(adp, "ofwfb", -1, unit); in ofwfb_init()
377 sc->sc_font = dflt_font_8; in ofwfb_init()
378 sc->sc_font_height = 8; in ofwfb_init()
380 sc->sc_font = dflt_font_14; in ofwfb_init()
381 sc->sc_font_height = 14; in ofwfb_init()
384 sc->sc_font = dflt_font_16; in ofwfb_init()
385 sc->sc_font_height = 16; in ofwfb_init()
388 /* The user can set a border in chars - default is 1 char width */ in ofwfb_init()
392 vi->vi_cheight = sc->sc_font_height; in ofwfb_init()
393 vi->vi_width = sc->sc_width/8 - 2*cborder; in ofwfb_init()
394 vi->vi_height = sc->sc_height/sc->sc_font_height - 2*cborder; in ofwfb_init()
395 vi->vi_cwidth = 8; in ofwfb_init()
400 if (vi->vi_width > COL) in ofwfb_init()
401 vi->vi_width = COL; in ofwfb_init()
402 if (vi->vi_height > ROW) in ofwfb_init()
403 vi->vi_height = ROW; in ofwfb_init()
405 sc->sc_xmargin = (sc->sc_width - (vi->vi_width * vi->vi_cwidth)) / 2; in ofwfb_init()
406 sc->sc_ymargin = (sc->sc_height - (vi->vi_height * vi->vi_cheight))/2; in ofwfb_init()
412 adp->va_window = (vm_offset_t) ofwfb_static_window; in ofwfb_init()
415 * Enable future font-loading and flag color support, as well as in ofwfb_init()
420 adp->va_flags |= V_ADP_FONT | V_ADP_COLOR | V_ADP_MODECHANGE; in ofwfb_init()
422 ofwfb_set_mode(&sc->sc_va, 0); in ofwfb_init()
424 vid_register(&sc->sc_va); in ofwfb_init()
432 bcopy(&adp->va_info, info, sizeof(*info)); in ofwfb_get_info()
459 OF_package_to_path(sc->sc_node, name, sizeof(name)); in ofwfb_set_mode()
462 if (sc->sc_depth == 8) { in ofwfb_set_mode()
464 * Install the ISO6429 colormap - older OFW systems in ofwfb_set_mode()
478 ofwfb_blank_display(&sc->sc_va, V_DISPLAY_ON); in ofwfb_set_mode()
503 sc->sc_font = data; in ofwfb_load_font()
541 addr = (uint8_t *) sc->sc_addr; in ofwfb_set_border8()
542 for (i = 0; i < sc->sc_ymargin; i++) { in ofwfb_set_border8()
543 for (j = 0; j < sc->sc_width; j++) { in ofwfb_set_border8()
546 addr += sc->sc_stride; in ofwfb_set_border8()
550 addr = (uint8_t *) sc->sc_addr + (sc->sc_height - sc->sc_ymargin)*sc->sc_stride; in ofwfb_set_border8()
551 for (i = 0; i < sc->sc_ymargin; i++) { in ofwfb_set_border8()
552 for (j = 0; j < sc->sc_width; j++) { in ofwfb_set_border8()
555 addr += sc->sc_stride; in ofwfb_set_border8()
559 addr = (uint8_t *) sc->sc_addr + sc->sc_ymargin*sc->sc_stride; in ofwfb_set_border8()
560 for (i = 0; i < sc->sc_height - 2*sc->sc_xmargin; i++) { in ofwfb_set_border8()
561 for (j = 0; j < sc->sc_xmargin; j++) { in ofwfb_set_border8()
563 *(addr + j + sc->sc_width - sc->sc_xmargin) = bground; in ofwfb_set_border8()
565 addr += sc->sc_stride; in ofwfb_set_border8()
585 return ((*sc->sc_set_border)(adp, border)); in ofwfb_set_border()
642 addr = (uint32_t *) sc->sc_addr; in ofwfb_blank_display8()
643 end = (sc->sc_stride/4) * sc->sc_height; in ofwfb_blank_display8()
665 addr = (uint32_t *) sc->sc_addr; in ofwfb_blank_display32()
668 for (i = 0; i < (sc->sc_stride/4)*sc->sc_height; i++) in ofwfb_blank_display32()
681 return ((*sc->sc_blank)(adp, mode)); in ofwfb_blank_display()
697 for (i = 0; i < sc->sc_num_pciaddrs; i++) in ofwfb_mmap()
698 if (offset >= sc->sc_pciaddrs[i].phys_lo && in ofwfb_mmap()
699 offset < (sc->sc_pciaddrs[i].phys_lo + sc->sc_pciaddrs[i].size_lo)) in ofwfb_mmap()
703 * enable write-combining. in ofwfb_mmap()
705 if (sc->sc_pciaddrs[i].phys_hi & in ofwfb_mmap()
725 if (offset < sc->sc_stride*sc->sc_height) { in ofwfb_mmap()
726 *paddr = sc->sc_addr + offset; in ofwfb_mmap()
733 if (sc->sc_num_pciaddrs == 0) in ofwfb_mmap()
818 row = (off / adp->va_info.vi_width) * adp->va_info.vi_cheight; in ofwfb_putc8()
819 col = (off % adp->va_info.vi_width) * adp->va_info.vi_cwidth; in ofwfb_putc8()
820 p = sc->sc_font + c*sc->sc_font_height; in ofwfb_putc8()
821 addr = (u_int32_t *)((uintptr_t)sc->sc_addr in ofwfb_putc8()
822 + (row + sc->sc_ymargin)*sc->sc_stride in ofwfb_putc8()
823 + col + sc->sc_xmargin); in ofwfb_putc8()
828 for (i = 0; i < sc->sc_font_height; i++) { in ofwfb_putc8()
838 * Calculate 2 x 4-chars at a time, and then in ofwfb_putc8()
853 addr += (sc->sc_stride / sizeof(u_int32_t)); in ofwfb_putc8()
870 row = (off / adp->va_info.vi_width) * adp->va_info.vi_cheight; in ofwfb_putc32()
871 col = (off % adp->va_info.vi_width) * adp->va_info.vi_cwidth; in ofwfb_putc32()
872 p = sc->sc_font + c*sc->sc_font_height; in ofwfb_putc32()
873 addr = (uint32_t *)sc->sc_addr in ofwfb_putc32()
874 + (row + sc->sc_ymargin)*(sc->sc_stride/4) in ofwfb_putc32()
875 + col + sc->sc_xmargin; in ofwfb_putc32()
880 for (i = 0; i < sc->sc_font_height; i++) { in ofwfb_putc32()
881 for (j = 0, k = 7; j < 8; j++, k--) { in ofwfb_putc32()
887 addr += (sc->sc_stride/4); in ofwfb_putc32()
900 return ((*sc->sc_putc)(adp, off, c, a)); in ofwfb_putc()
922 return ((*sc->sc_putm)(adp, x, y, pixel_image, pixel_mask, size, in ofwfb_putm()
936 addr = (u_int8_t *)((uintptr_t)sc->sc_addr in ofwfb_putm8()
937 + (y + sc->sc_ymargin)*sc->sc_stride in ofwfb_putm8()
938 + x + sc->sc_xmargin); in ofwfb_putm8()
943 for (i = 0; i < size && i+y < sc->sc_height - 2*sc->sc_ymargin; i++) { in ofwfb_putm8()
945 * Calculate 2 x 4-chars at a time, and then in ofwfb_putm8()
948 for (j = 0, k = width; j < 8; j++, k--) { in ofwfb_putm8()
949 if (x + j >= sc->sc_width - 2*sc->sc_xmargin) in ofwfb_putm8()
956 addr += (sc->sc_stride / sizeof(u_int8_t)); in ofwfb_putm8()
972 addr = (uint32_t *)sc->sc_addr in ofwfb_putm32()
973 + (y + sc->sc_ymargin)*(sc->sc_stride/4) in ofwfb_putm32()
974 + x + sc->sc_xmargin; in ofwfb_putm32()
979 for (i = 0; i < size && i+y < sc->sc_height - 2*sc->sc_ymargin; i++) { in ofwfb_putm32()
980 for (j = 0, k = width; j < 8; j++, k--) { in ofwfb_putm32()
981 if (x + j >= sc->sc_width - 2*sc->sc_xmargin) in ofwfb_putm32()
987 addr += (sc->sc_stride/4); in ofwfb_putm32()
1066 while (cnt--) in ofwfb_fillw()