Lines Matching +full:linear +full:- +full:mapping +full:- +full:mode
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2000 Alcove - Nicolas Souchu <nsouch@freebsd.org>
7 * Code based on Peter Horton <pdh@colonel-panic.com> patch.
78 #define outb_p(value, offset) bus_space_write_1(sc->st, sc->sh, offset, value)
79 #define inb_p(offset) (bus_space_read_1(sc->st, sc->sh, offset))
80 #define outb_enh(value, offset) bus_space_write_1(sc->enh_st, sc->enh_sh, \
82 #define inb_enh(offset) (bus_space_read_1(sc->enh_st, sc->enh_sh, offset))
157 return (*prevvidsw->probe)(unit, adpp, arg, flags); in s3lfb_probe()
163 return (*prevvidsw->init)(unit, adp, flags); in s3lfb_init()
167 s3lfb_get_info(video_adapter_t *adp, int mode, video_info_t *info) in s3lfb_get_info() argument
175 if ((error = (*prevvidsw->get_info)(adp, mode, info))) in s3lfb_get_info()
179 /* Don't use linear addressing with text modes in s3lfb_get_info()
181 if ((mode > M_VESA_BASE) && in s3lfb_get_info()
182 (info->vi_flags & V_INFO_GRAPHICS) && in s3lfb_get_info()
183 !(info->vi_flags & V_INFO_LINEAR)) { in s3lfb_get_info()
185 info->vi_flags |= V_INFO_LINEAR; in s3lfb_get_info()
186 info->vi_buffer = sc->mem_base; in s3lfb_get_info()
189 info->vi_buffer = 0; in s3lfb_get_info()
199 return (*prevvidsw->query_mode)(adp, info); in s3lfb_query_mode()
208 off = paddr - trunc_page(paddr); in s3lfb_map_buffer()
209 vaddr = (vm_offset_t)pmap_mapdev(paddr - off, size + off); in s3lfb_map_buffer()
215 s3lfb_set_mode(video_adapter_t *adp, int mode) in s3lfb_set_mode() argument
224 /* First, set the mode as if it was a classic VESA card in s3lfb_set_mode()
226 if ((error = (*prevvidsw->set_mode)(adp, mode))) in s3lfb_set_mode()
229 /* If not in a linear mode (according to s3lfb_get_info() called in s3lfb_set_mode()
230 * by vesa_set_mode in the (*vidsw[adp->va_index]->get_info)... in s3lfb_set_mode()
234 if (!(adp->va_info.vi_flags & V_INFO_LINEAR)) in s3lfb_set_mode()
238 if ((mode <= M_VESA_BASE) || in s3lfb_set_mode()
239 !(adp->va_info.vi_flags & V_INFO_GRAPHICS) || in s3lfb_set_mode()
240 (adp->va_info.vi_flags & V_INFO_LINEAR)) in s3lfb_set_mode()
274 /* enable enhanced mode memory mapping */ in s3lfb_set_mode()
279 /* enable linear frame buffer and set address window to max */ in s3lfb_set_mode()
294 adp->va_info.vi_flags |= V_INFO_LINEAR; in s3lfb_set_mode()
295 adp->va_info.vi_buffer = sc->mem_base; in s3lfb_set_mode()
296 adp->va_buffer = s3lfb_map_buffer(adp->va_info.vi_buffer, in s3lfb_set_mode()
297 adp->va_info.vi_buffer_size); in s3lfb_set_mode()
298 adp->va_buffer_size = adp->va_info.vi_buffer_size; in s3lfb_set_mode()
299 adp->va_window = adp->va_buffer; in s3lfb_set_mode()
300 adp->va_window_size = adp->va_info.vi_buffer_size/adp->va_info.vi_planes; in s3lfb_set_mode()
301 adp->va_window_gran = adp->va_info.vi_buffer_size/adp->va_info.vi_planes; in s3lfb_set_mode()
310 return (*prevvidsw->save_font)(adp, page, fontsize, fontwidth, data, in s3lfb_save_font()
318 return (*prevvidsw->load_font)(adp, page, fontsize, fontwidth, data, in s3lfb_load_font()
325 return (*prevvidsw->show_font)(adp, page); in s3lfb_show_font()
331 return (*prevvidsw->save_palette)(adp, palette); in s3lfb_save_palette()
337 return (*prevvidsw->load_palette)(adp, palette); in s3lfb_load_palette()
343 return (*prevvidsw->set_border)(adp, color); in s3lfb_set_border()
349 return (*prevvidsw->save_state)(adp, p, size); in s3lfb_save_state()
355 return (*prevvidsw->load_state)(adp, p); in s3lfb_load_state()
361 return (*prevvidsw->set_win_org)(adp, offset); in s3lfb_set_origin()
367 return (*prevvidsw->read_hw_cursor)(adp, col, row); in s3lfb_read_hw_cursor()
373 return (*prevvidsw->set_hw_cursor)(adp, col, row); in s3lfb_set_hw_cursor()
380 return (*prevvidsw->set_hw_cursor_shape)(adp, base, height, in s3lfb_set_hw_cursor_shape()
385 s3lfb_blank_display(video_adapter_t *adp, int mode) in s3lfb_blank_display() argument
387 return (*prevvidsw->blank_display)(adp, mode); in s3lfb_blank_display()
394 return (*prevvidsw->mmap)(adp, offset, paddr, prot, memattr); in s3lfb_mmap()
400 return (*prevvidsw->clear)(adp); in s3lfb_clear()
406 return (*prevvidsw->fill_rect)(adp, val, x, y, cx, cy); in s3lfb_fill_rect()
412 return (*prevvidsw->bitblt)(adp); /* XXX */ in s3lfb_bitblt()
418 return (*prevvidsw->ioctl)(adp, cmd, arg); in s3lfb_ioctl()
424 return (*prevvidsw->diag)(adp, level); in s3lfb_diag()
481 if (!(sc->port_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, in s3pci_attach()
486 sc->st = rman_get_bustag(sc->port_res); in s3pci_attach()
487 sc->sh = rman_get_bushandle(sc->port_res); in s3pci_attach()
490 if (!(sc->enh_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, in s3pci_attach()
496 sc->enh_st = rman_get_bustag(sc->enh_res); in s3pci_attach()
497 sc->enh_sh = rman_get_bushandle(sc->enh_res); in s3pci_attach()
500 if (!(sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, in s3pci_attach()
509 /* sc->mem_base = (u_long)rman_get_virtual(sc->mem_res); */ in s3pci_attach()
510 sc->mem_base = bus_get_resource_start(dev, SYS_RES_MEMORY, rid); in s3pci_attach()
511 sc->mem_size = bus_get_resource_count(dev, SYS_RES_MEMORY, rid); in s3pci_attach()
516 if (adp->va_type == KD_VGA) in s3pci_attach()
523 if ((adp == NULL) || !(adp->va_flags & V_ADP_VESA)) { in s3pci_attach()
531 prevvidsw = vidsw[adp->va_index]; in s3pci_attach()
532 vidsw[adp->va_index] = &s3lfbvidsw; in s3pci_attach()
540 if (sc->mem_res) in s3pci_attach()
541 bus_release_resource(dev, SYS_RES_MEMORY, PCI_BASE_MEMORY, sc->mem_res); in s3pci_attach()
543 if (sc->enh_res) in s3pci_attach()
544 bus_release_resource(dev, SYS_RES_IOPORT, 1, sc->enh_res); in s3pci_attach()
546 if (sc->port_res) in s3pci_attach()
547 bus_release_resource(dev, SYS_RES_IOPORT, 0, sc->port_res); in s3pci_attach()