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