176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- *
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright 2009 Erwan Velu - All Rights Reserved
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Permission is hereby granted, free of charge, to any person
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   obtaining a copy of this software and associated documentation
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   files (the "Software"), to deal in the Software without
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   restriction, including without limitation the rights to use,
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   copy, modify, merge, publish, distribute, sublicense, and/or
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   sell copies of the Software, and to permit persons to whom
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   the Software is furnished to do so, subject to the following
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   conditions:
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   The above copyright notice and this permission notice shall
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   be included in all copies or substantial portions of the Software.
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   OTHER DEALINGS IN THE SOFTWARE.
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * -----------------------------------------------------------------------
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman*/
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "hdt-menu.h"
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Submenu for the vesa card */
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic void compute_vesa_card(struct s_my_menu *menu,
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman			      struct s_hardware *hardware)
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char buffer[SUBMENULEN + 1];
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char statbuffer[STATLEN + 1];
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->menu = add_menu(" VESA Bios ", -1);
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count = 0;
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    set_menu_pos(SUBMENU_Y, SUBMENU_X);
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "VESA Version: %d.%d",
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.major_version, hardware->vesa.minor_version);
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(statbuffer, sizeof statbuffer, "Version: %d.%d",
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.major_version, hardware->vesa.minor_version);
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count++;
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "Vendor      : %s", hardware->vesa.vendor);
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(statbuffer, sizeof statbuffer, "Vendor Name: %s",
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.vendor);
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count++;
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "Product     : %s", hardware->vesa.product);
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(statbuffer, sizeof statbuffer, "Product Name: %s",
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.product);
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count++;
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "Product Rev.: %s",
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.product_revision);
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(statbuffer, sizeof statbuffer, "Produt Revision: %s",
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.product_revision);
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count++;
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "Software Rev: %d",
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.software_rev);
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(statbuffer, sizeof statbuffer, "Software Revision: %d",
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.software_rev);
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count++;
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "Memory (KB) : %d",
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.total_memory * 64);
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(statbuffer, sizeof statbuffer, "Memory (KB): %d",
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.total_memory * 64);
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count++;
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Submenu for the vesa card */
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid compute_vesa_modes(struct s_my_menu *menu, struct s_hardware *hardware)
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char buffer[56];
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char statbuffer[STATLEN];
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->menu = add_menu(" VESA Modes ", -1);
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    menu->items_count = 0;
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    set_menu_pos(SUBMENU_Y, SUBMENU_X);
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    for (int i = 0; i < hardware->vesa.vmi_count; i++) {
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct vesa_mode_info *mi = &hardware->vesa.vmi[i].mi;
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/* Sometimes, vesa bios reports 0x0 modes
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	 * We don't need to display that ones */
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	if ((mi->h_res == 0) || (mi->v_res == 0))
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    continue;
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	snprintf(buffer, sizeof buffer, "%4u x %4u x %2ubits vga=%3d",
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		 mi->h_res, mi->v_res, mi->bpp,
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		 hardware->vesa.vmi[i].mode + 0x200);
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	snprintf(statbuffer, sizeof statbuffer, "%4ux%4ux%2ubits vga=%3d",
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		 mi->h_res, mi->v_res, mi->bpp,
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		 hardware->vesa.vmi[i].mode + 0x200);
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	add_item(buffer, statbuffer, OPT_INACTIVE, NULL, 0);
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	menu->items_count++;
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Main VESA Menu*/
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint compute_VESA(struct s_hdt_menu *hdt_menu, struct s_hardware *hardware)
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char buffer[15];
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    compute_vesa_card(&hdt_menu->vesa_card_menu, hardware);
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    compute_vesa_modes(&hdt_menu->vesa_modes_menu, hardware);
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    hdt_menu->vesa_menu.menu = add_menu(" VESA ", -1);
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    hdt_menu->vesa_menu.items_count = 0;
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item("VESA Bios", "VESA Bios", OPT_SUBMENU, NULL,
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hdt_menu->vesa_card_menu.menu);
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    hdt_menu->vesa_menu.items_count++;
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    snprintf(buffer, sizeof buffer, "%s (%d)", "Modes",
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hardware->vesa.vmi_count);
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    add_item(buffer, "VESA Modes", OPT_SUBMENU, NULL,
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	     hdt_menu->vesa_modes_menu.menu);
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    hdt_menu->vesa_menu.items_count++;
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    printf("MENU: VESA menu done (%d items)\n",
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	   hdt_menu->vesa_menu.items_count);
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return 0;
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
130