Lines Matching +full:frame +full:- +full:buffer

1 /*-
103 mask = efifb->fb_mask_red | efifb->fb_mask_green | in efifb_color_depth()
104 efifb->fb_mask_blue | efifb->fb_mask_reserved; in efifb_color_depth()
122 efifb->fb_mask_red = 0x000000ff; in efifb_mask_from_pixfmt()
123 efifb->fb_mask_green = 0x0000ff00; in efifb_mask_from_pixfmt()
124 efifb->fb_mask_blue = 0x00ff0000; in efifb_mask_from_pixfmt()
125 efifb->fb_mask_reserved = 0xff000000; in efifb_mask_from_pixfmt()
128 efifb->fb_mask_red = 0x00ff0000; in efifb_mask_from_pixfmt()
129 efifb->fb_mask_green = 0x0000ff00; in efifb_mask_from_pixfmt()
130 efifb->fb_mask_blue = 0x000000ff; in efifb_mask_from_pixfmt()
131 efifb->fb_mask_reserved = 0xff000000; in efifb_mask_from_pixfmt()
134 efifb->fb_mask_red = pixinfo->RedMask; in efifb_mask_from_pixfmt()
135 efifb->fb_mask_green = pixinfo->GreenMask; in efifb_mask_from_pixfmt()
136 efifb->fb_mask_blue = pixinfo->BlueMask; in efifb_mask_from_pixfmt()
137 efifb->fb_mask_reserved = pixinfo->ReservedMask; in efifb_mask_from_pixfmt()
156 efifb->fb_addr = in efifb_from_gop()
158 mode->FrameBufferBase & 0xffffffff; in efifb_from_gop()
160 mode->FrameBufferBase; in efifb_from_gop()
162 efifb->fb_size = mode->FrameBufferSize; in efifb_from_gop()
163 efifb->fb_height = info->VerticalResolution; in efifb_from_gop()
164 efifb->fb_width = info->HorizontalResolution; in efifb_from_gop()
165 efifb->fb_stride = info->PixelsPerScanLine; in efifb_from_gop()
166 result = efifb_mask_from_pixfmt(efifb, info->PixelFormat, in efifb_from_gop()
167 &info->PixelInformation); in efifb_from_gop()
182 status = uga->Blt(uga, &pix0, EfiUgaVideoToBltBuffer, in efifb_uga_find_pixel()
185 printf("UGA BLT operation failed (video->buffer)"); in efifb_uga_find_pixel()
186 return (-1); in efifb_uga_find_pixel()
196 return (-1); in efifb_uga_find_pixel()
204 status = pciio->Mem.Read(pciio, EfiPciIoWidthUint32, in efifb_uga_find_pixel()
208 printf("Error reading frame buffer (before)"); in efifb_uga_find_pixel()
211 status = uga->Blt(uga, &pix1, EfiUgaBltBufferToVideo, in efifb_uga_find_pixel()
217 status = pciio->Mem.Read(pciio, EfiPciIoWidthUint32, in efifb_uga_find_pixel()
221 printf("Error reading frame buffer (after)"); in efifb_uga_find_pixel()
224 status = uga->Blt(uga, &pix0, EfiUgaBltBufferToVideo, in efifb_uga_find_pixel()
237 size -= count; in efifb_uga_find_pixel()
239 printf("No change detected in frame buffer"); in efifb_uga_find_pixel()
242 printf(" -- error %lu\n", EFI_ERROR_CODE(status)); in efifb_uga_find_pixel()
244 return (-1); in efifb_uga_find_pixel()
257 status = BS->LocateHandle(ByProtocol, &uga_guid, NULL, &bufsz, NULL); in efifb_uga_get_pciio()
261 status = BS->LocateHandle(ByProtocol, &uga_guid, NULL, &bufsz, buf); in efifb_uga_get_pciio()
294 /* Attempt to get the frame buffer address (imprecise). */ in efifb_uga_locate_framebuffer()
298 status = pciio->GetBarAttributes(pciio, bar, NULL, in efifb_uga_locate_framebuffer()
304 /* 32-bit address space descriptor (MEMIO) */ in efifb_uga_locate_framebuffer()
308 /* 64-bit address space descriptor (MEMIO) */ in efifb_uga_locate_framebuffer()
315 BS->FreePool(resattr); in efifb_uga_locate_framebuffer()
319 /* We assume the largest BAR is the frame buffer. */ in efifb_uga_locate_framebuffer()
339 status = uga->GetMode(uga, &horiz, &vert, &depth, &refresh); in efifb_from_uga()
342 efifb->fb_height = vert; in efifb_from_uga()
343 efifb->fb_width = horiz; in efifb_from_uga()
345 if (efifb->fb_height == 0 || efifb->fb_width == 0) in efifb_from_uga()
355 /* Try to find the frame buffer. */ in efifb_from_uga()
356 status = efifb_uga_locate_framebuffer(pciio, &efifb->fb_addr, in efifb_from_uga()
357 &efifb->fb_size); in efifb_from_uga()
359 efifb->fb_addr = 0; in efifb_from_uga()
360 efifb->fb_size = 0; in efifb_from_uga()
364 * There's no reliable way to detect the frame buffer or the in efifb_from_uga()
365 * offset within the frame buffer of the visible region, nor in efifb_from_uga()
370 offset = -1; in efifb_from_uga()
397 if (offset >= 0 && efifb->fb_width == horiz && in efifb_from_uga()
398 efifb->fb_height == vert && efifb->fb_addr == fbaddr) { in efifb_from_uga()
399 efifb->fb_addr += offset; in efifb_from_uga()
400 efifb->fb_size -= offset; in efifb_from_uga()
401 efifb->fb_stride = stride; in efifb_from_uga()
413 efifb->fb_stride = efifb->fb_width; in efifb_from_uga()
415 np = efifb->fb_stride & (efifb->fb_stride - 1); in efifb_from_uga()
417 efifb->fb_stride |= (np - 1); in efifb_from_uga()
418 efifb->fb_stride++; in efifb_from_uga()
424 if (efifb->fb_addr == 0) { in efifb_from_uga()
431 * The visible part of the frame buffer may not start at in efifb_from_uga()
433 * always be able to read from the frame buffer, which in efifb_from_uga()
436 * pixel change in the frame buffer, which would have it in efifb_from_uga()
438 * 1/256th of the frame buffer. This number is mostly in efifb_from_uga()
440 * where we can't read from the frame buffer the offset in efifb_from_uga()
445 * frame buffer. in efifb_from_uga()
447 offset = efifb_uga_find_pixel(uga, 0, pciio, efifb->fb_addr, in efifb_from_uga()
448 efifb->fb_size >> 8); in efifb_from_uga()
449 if (offset == -1) { in efifb_from_uga()
450 printf("Unable to reliably detect frame buffer.\n"); in efifb_from_uga()
452 efifb->fb_addr += offset; in efifb_from_uga()
453 efifb->fb_size -= offset; in efifb_from_uga()
457 efifb->fb_size = efifb->fb_height * efifb->fb_stride * 4; in efifb_from_uga()
458 efifb->fb_addr = strtoul(ev, &p, 0); in efifb_from_uga()
465 if (pciio != NULL && offset != -1) { in efifb_from_uga()
468 efifb->fb_addr, horiz * 8); in efifb_from_uga()
469 if (offset != -1) in efifb_from_uga()
470 efifb->fb_stride = offset >> 2; in efifb_from_uga()
475 efifb->fb_stride = strtoul(ev, &p, 0); in efifb_from_uga()
482 * frame buffer. in efifb_from_uga()
484 efifb->fb_size = efifb->fb_height * efifb->fb_stride * 4; in efifb_from_uga()
489 * Fetch EDID info. Caller must free the buffer.
502 status = BS->OpenProtocol(h, guid, (void **)&edid, IH, NULL, in efifb_gop_get_edid()
505 edid->SizeOfEdid == 0) { in efifb_gop_get_edid()
507 status = BS->OpenProtocol(h, guid, (void **)&edid, IH, NULL, in efifb_gop_get_edid()
510 edid->SizeOfEdid == 0) in efifb_gop_get_edid()
514 size = MAX(sizeof(*edid_infop), edid->SizeOfEdid); in efifb_gop_get_edid()
520 memcpy(edid_infop, edid->Edid, edid->SizeOfEdid); in efifb_gop_get_edid()
526 if (edid_infop->header.version != 1) in efifb_gop_get_edid()
558 status = BS->LocateHandle(ByProtocol, &gop_guid, NULL, &hsize, hlist); in efi_has_gop()
574 gfx_state->tg_fb_type = FB_TEXT; in efi_find_framebuffer()
578 status = BS->LocateHandle(ByProtocol, &gop_guid, NULL, &hsize, hlist); in efi_find_framebuffer()
583 status = BS->LocateHandle(ByProtocol, &gop_guid, NULL, &hsize, in efi_find_framebuffer()
605 if (tgop->Mode->Info->PixelFormat == PixelBltOnly || in efi_find_framebuffer()
606 tgop->Mode->Info->PixelFormat >= PixelFormatMax) in efi_find_framebuffer()
623 gfx_state->tg_fb_type = FB_GOP; in efi_find_framebuffer()
624 gfx_state->tg_private = gop; in efi_find_framebuffer()
628 status = BS->LocateProtocol(&uga_guid, NULL, (VOID **)&uga); in efi_find_framebuffer()
630 gfx_state->tg_fb_type = FB_UGA; in efi_find_framebuffer()
631 gfx_state->tg_private = uga; in efi_find_framebuffer()
637 switch (gfx_state->tg_fb_type) { in efi_find_framebuffer()
639 rv = efifb_from_gop(&efifb, gop->Mode, gop->Mode->Info); in efi_find_framebuffer()
650 gfx_state->tg_fb.fb_addr = efifb.fb_addr; in efi_find_framebuffer()
651 gfx_state->tg_fb.fb_size = efifb.fb_size; in efi_find_framebuffer()
652 gfx_state->tg_fb.fb_height = efifb.fb_height; in efi_find_framebuffer()
653 gfx_state->tg_fb.fb_width = efifb.fb_width; in efi_find_framebuffer()
654 gfx_state->tg_fb.fb_stride = efifb.fb_stride; in efi_find_framebuffer()
655 gfx_state->tg_fb.fb_mask_red = efifb.fb_mask_red; in efi_find_framebuffer()
656 gfx_state->tg_fb.fb_mask_green = efifb.fb_mask_green; in efi_find_framebuffer()
657 gfx_state->tg_fb.fb_mask_blue = efifb.fb_mask_blue; in efi_find_framebuffer()
658 gfx_state->tg_fb.fb_mask_reserved = efifb.fb_mask_reserved; in efi_find_framebuffer()
660 gfx_state->tg_fb.fb_bpp = fls(efifb.fb_mask_red | efifb.fb_mask_green | in efi_find_framebuffer()
663 if (gfx_state->tg_shadow_fb != NULL) in efi_find_framebuffer()
664 BS->FreePages((uintptr_t)gfx_state->tg_shadow_fb, in efi_find_framebuffer()
665 gfx_state->tg_shadow_sz); in efi_find_framebuffer()
666 gfx_state->tg_shadow_sz = in efi_find_framebuffer()
669 status = BS->AllocatePages(AllocateAnyPages, EfiLoaderData, in efi_find_framebuffer()
670 gfx_state->tg_shadow_sz, &ptr); in efi_find_framebuffer()
671 gfx_state->tg_shadow_fb = status == EFI_SUCCESS ? in efi_find_framebuffer()
685 printf("%ux%ux%u, stride=%u", efifb->fb_width, efifb->fb_height, in print_efifb()
686 depth, efifb->fb_stride); in print_efifb()
688 printf("\n frame buffer: address=%jx, size=%jx", in print_efifb()
689 (uintmax_t)efifb->fb_addr, (uintmax_t)efifb->fb_size); in print_efifb()
691 efifb->fb_mask_red, efifb->fb_mask_green, in print_efifb()
692 efifb->fb_mask_blue); in print_efifb()
700 if (strcasecmp(res->name, cmp) == 0) in efi_resolution_compare()
702 if (res->alias != NULL && strcasecmp(res->alias, cmp) == 0) in efi_resolution_compare()
725 *width = res->width; in efi_get_max_resolution()
726 *height = res->height; in efi_get_max_resolution()
759 for (mode = 0; mode < gop->Mode->MaxMode; mode++) { in gop_autoresize()
760 status = gop->QueryMode(gop, mode, &infosz, &info); in gop_autoresize()
763 efifb_from_gop(&efifb, gop->Mode, info); in gop_autoresize()
764 width = info->HorizontalResolution; in gop_autoresize()
765 height = info->VerticalResolution; in gop_autoresize()
777 status = gop->SetMode(gop, best_mode); in gop_autoresize()
796 conout = ST->ConOut; in text_autoresize()
798 for (i = 0; i < conout->Mode->MaxMode; i++) { in text_autoresize()
799 status = conout->QueryMode(conout, i, &cols, &rows); in text_autoresize()
808 conout->SetMode(conout, best_mode); in text_autoresize()
820 COMMAND_SET(efi_autoresize, "efi-autoresizecons", "EFI Auto-resize Console", command_autoresize);
828 /* If it's set and non-zero, we'll select a console mode instead */ in command_autoresize()
880 status = gop->SetMode(gop, mode); in command_gop()
890 * "blt on" does allow gop->Blt() to be used (default). in command_gop()
891 * "blt off" does block gop->Blt() to be used and use in command_gop()
915 efifb_from_gop(&efifb, gop->Mode, gop->Mode->Info); in command_gop()
921 printf(" %dx%d", rp->width, rp->height); in command_gop()
929 print_efifb(gop->Mode->Mode, &efifb, 1); in command_gop()
939 for (mode = 0; mode < gop->Mode->MaxMode; mode++) { in command_gop()
940 status = gop->QueryMode(gop, mode, &infosz, &info); in command_gop()
943 efifb_from_gop(&efifb, gop->Mode, info); in command_gop()
980 print_efifb(-1, &efifb, 1); in command_uga()