1
/* videoinfo.c - command to list video modes. */
3
* GRUB -- GRand Unified Bootloader
4
* Copyright (C) 2005,2007,2008,2009,2010 Free Software Foundation, Inc.
6
* GRUB is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
11
* GRUB is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
20
#include <grub/video.h>
23
#include <grub/misc.h>
25
#include <grub/command.h>
26
#include <grub/i18n.h>
28
static unsigned height, width, depth;
31
hook (const struct grub_video_mode_info *info)
33
if (height && width && (info->width != width || info->height != height))
36
if (depth && info->bpp != depth)
39
if (info->mode_number == GRUB_VIDEO_MODE_NUMBER_INVALID)
42
grub_printf (" 0x%03x ", info->mode_number);
43
grub_printf ("%4d x %4d x %2d ", info->width, info->height, info->bpp);
45
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_PURE_TEXT)
46
grub_printf ("Text-only ");
47
/* Show mask and position details for direct color modes. */
48
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_RGB)
49
grub_printf ("Direct, mask: %d/%d/%d/%d pos: %d/%d/%d/%d",
51
info->green_mask_size,
53
info->reserved_mask_size,
55
info->green_field_pos,
57
info->reserved_field_pos);
58
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_INDEX_COLOR)
59
grub_printf ("Packed ");
60
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_YUV)
62
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_PLANAR)
63
grub_printf ("Planar ");
64
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_HERCULES)
65
grub_printf ("Hercules ");
66
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_CGA)
68
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_NONCHAIN4)
69
grub_printf ("Non-chain 4 ");
70
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP)
71
grub_printf ("Monochrome ");
72
if (info->mode_type & GRUB_VIDEO_MODE_TYPE_UNKNOWN)
73
grub_printf ("Unknown ");
81
grub_cmd_videoinfo (grub_command_t cmd __attribute__ ((unused)),
82
int argc, char **args)
84
grub_video_adapter_t adapter;
85
grub_video_driver_id_t id;
87
height = width = depth = 0;
92
width = grub_strtoul (ptr, &ptr, 0);
96
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid mode specification");
98
height = grub_strtoul (ptr, &ptr, 0);
104
depth = grub_strtoul (ptr, &ptr, 0);
110
#ifdef GRUB_MACHINE_PCBIOS
111
if (grub_strcmp (cmd->name, "vbeinfo") == 0)
112
grub_dl_load ("vbe");
115
id = grub_video_get_driver_id ();
117
grub_printf ("List of supported video modes:\n");
118
grub_printf ("Legend: P=Packed pixel, D=Direct color, "
119
"mask/pos=R/G/B/reserved\n");
121
FOR_VIDEO_ADAPTERS (adapter)
123
grub_printf ("Adapter '%s':\n", adapter->name);
125
if (!adapter->iterate)
127
grub_printf (" No info available\n");
131
if (adapter->id != id)
133
if (adapter->init ())
135
grub_printf (" Failed\n");
136
grub_errno = GRUB_ERR_NONE;
141
if (adapter->print_adapter_specific_info)
142
adapter->print_adapter_specific_info ();
144
adapter->iterate (hook);
146
if (adapter->id != id)
148
if (adapter->fini ())
150
grub_errno = GRUB_ERR_NONE;
155
return GRUB_ERR_NONE;
158
static grub_command_t cmd;
159
#ifdef GRUB_MACHINE_PCBIOS
160
static grub_command_t cmd_vbe;
163
GRUB_MOD_INIT(videoinfo)
165
cmd = grub_register_command ("videoinfo", grub_cmd_videoinfo, "[WxH[xD]]",
166
N_("List available video modes. If "
167
"resolution is given show only modes"
169
#ifdef GRUB_MACHINE_PCBIOS
170
cmd_vbe = grub_register_command ("vbeinfo", grub_cmd_videoinfo, "[WxH[xD]]",
171
N_("List available video modes. If "
172
"resolution is given show only modes"
177
GRUB_MOD_FINI(videoinfo)
179
grub_unregister_command (cmd);
180
#ifdef GRUB_MACHINE_PCBIOS
181
grub_unregister_command (cmd_vbe);