Re: svn commit: r287299 - head/sys/boot/efi/loader/arch/amd64

2015-08-30 Thread Rui Paulo
On Sun, 2015-08-30 at 01:40 +, Marcel Moolenaar wrote:
 Author: marcel
 Date: Sun Aug 30 01:39:59 2015
 New Revision: 287299
 URL: https://svnweb.freebsd.org/changeset/base/287299
 
 Log:
   Add a gop command to help diagnose VT efifb problems. The gop
   command has the following sub-commands:
 list  - list all possible modes (paged)
 get   - return the current mode
 set mode- set the current mode to mode
 

This is duplicating the functionality of the `mode' command.  Please
remove the mode command.

Also, 'gop' is pretty weird for a command name.  Maybe we can change
that to something more user friendly?

-- 
Rui Paulo
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to svn-src-head-unsubscr...@freebsd.org


Re: svn commit: r287299 - head/sys/boot/efi/loader/arch/amd64

2015-08-30 Thread Marcel Moolenaar

 On Aug 30, 2015, at 11:27 AM, Rui Paulo rpa...@me.com wrote:
 
 On Sun, 2015-08-30 at 01:40 +, Marcel Moolenaar wrote:
 Author: marcel
 Date: Sun Aug 30 01:39:59 2015
 New Revision: 287299
 URL: https://svnweb.freebsd.org/changeset/base/287299
 
 Log:
  Add a gop command to help diagnose VT efifb problems. The gop
  command has the following sub-commands:
list  - list all possible modes (paged)
get   - return the current mode
set mode- set the current mode to mode
 
 
 This is duplicating the functionality of the `mode' command.  Please
 remove the mode command.

It doesn’t. The mode command works on text modes only. This
command works on the Graphics Output Protocol (GOP) modes.

 
 Also, 'gop' is pretty weird for a command name.  Maybe we can change
 that to something more user friendly?

Maybe.

--
Marcel Moolenaar
mar...@xcllnt.net





signature.asc
Description: Message signed with OpenPGP using GPGMail


svn commit: r287299 - head/sys/boot/efi/loader/arch/amd64

2015-08-29 Thread Marcel Moolenaar
Author: marcel
Date: Sun Aug 30 01:39:59 2015
New Revision: 287299
URL: https://svnweb.freebsd.org/changeset/base/287299

Log:
  Add a gop command to help diagnose VT efifb problems. The gop
  command has the following sub-commands:
list- list all possible modes (paged)
get - return the current mode
set mode  - set the current mode to mode

Modified:
  head/sys/boot/efi/loader/arch/amd64/framebuffer.c

Modified: head/sys/boot/efi/loader/arch/amd64/framebuffer.c
==
--- head/sys/boot/efi/loader/arch/amd64/framebuffer.c   Sat Aug 29 20:41:09 
2015(r287298)
+++ head/sys/boot/efi/loader/arch/amd64/framebuffer.c   Sun Aug 30 01:39:59 
2015(r287299)
@@ -29,6 +29,7 @@
 #include sys/cdefs.h
 __FBSDID($FreeBSD$);
 
+#include bootstrap.h
 #include stand.h
 
 #include efi.h
@@ -83,3 +84,97 @@ efi_find_framebuffer(struct efi_fb *efif
}
return (0);
 }
+
+COMMAND_SET(gop, gop, graphics output protocol, command_gop);
+
+static void
+command_gop_display(u_int mode, EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info)
+{
+
+   printf(mode %u: %ux%u, stride=%u, color=, mode,
+   info-HorizontalResolution, info-VerticalResolution,
+   info-PixelsPerScanLine);
+   switch (info-PixelFormat) {
+   case PixelRedGreenBlueReserved8BitPerColor:
+   printf(32-bit (RGB));
+   break;
+   case PixelBlueGreenRedReserved8BitPerColor:
+   printf(32-bit (BGR));
+   break;
+   case PixelBitMask:
+   printf(mask (R=%x, G=%x, B=%x, X=%x),
+   info-PixelInformation.RedMask,
+   info-PixelInformation.GreenMask,
+   info-PixelInformation.BlueMask,
+   info-PixelInformation.ReservedMask);
+   break;
+   case PixelBltOnly:
+   printf(unsupported (blt only));
+   break;
+   default:
+   printf(unsupported (unknown));
+   break;
+   }
+}
+
+static int
+command_gop(int argc, char *argv[])
+{
+   EFI_GRAPHICS_OUTPUT *gop;
+   EFI_STATUS status;
+   u_int mode;
+
+   status = BS-LocateProtocol(gop_guid, NULL, (VOID **)gop);
+   if (EFI_ERROR(status)) {
+   sprintf(command_errbuf, %s: Graphics Output Protocol not 
+   present (error=%lu), argv[0], status  ~EFI_ERROR_MASK);
+   return (CMD_ERROR);
+   }
+
+   if (argc == 1)
+   goto usage;
+
+   if (!strcmp(argv[1], set)) {
+   char *cp;
+
+   if (argc != 3)
+   goto usage;
+   mode = strtol(argv[2], cp, 0);
+   if (cp[0] != '\0') {
+   sprintf(command_errbuf, mode is an integer);
+   return (CMD_ERROR);
+   }
+   status = gop-SetMode(gop, mode);
+   if (EFI_ERROR(status)) {
+   sprintf(command_errbuf, %s: Unable to set mode to 
+   %u (error=%lu), argv[0], mode,
+   status  ~EFI_ERROR_MASK);
+   return (CMD_ERROR);
+   }
+   } else if (!strcmp(argv[1], get)) {
+   command_gop_display(gop-Mode-Mode, gop-Mode-Info);
+   printf(\nframe buffer: address=%jx, size=%lx\n,
+   (uintmax_t)gop-Mode-FrameBufferBase,
+   gop-Mode-FrameBufferSize);
+   } else if (!strcmp(argv[1], list)) {
+   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
+   UINTN infosz;
+
+   pager_open();
+   for (mode = 0; mode  gop-Mode-MaxMode; mode++) {
+   status = gop-QueryMode(gop, mode, infosz, info);
+   if (EFI_ERROR(status))
+   continue;
+   command_gop_display(mode, info);
+   if (pager_output(\n))
+   break;
+   }
+   pager_close();
+   }
+   return (CMD_OK);
+
+ usage:
+   sprintf(command_errbuf, usage: %s [list | get | set mode],
+   argv[0]);
+   return (CMD_ERROR);
+}
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to svn-src-head-unsubscr...@freebsd.org