summaryrefslogtreecommitdiff
path: root/com32/hdt/hdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'com32/hdt/hdt.c')
-rw-r--r--com32/hdt/hdt.c227
1 files changed, 13 insertions, 214 deletions
diff --git a/com32/hdt/hdt.c b/com32/hdt/hdt.c
index 15b71c67..611cddc1 100644
--- a/com32/hdt/hdt.c
+++ b/com32/hdt/hdt.c
@@ -32,234 +32,33 @@
* An Hardware Detection Tool
*/
-#include <string.h>
#include <stdio.h>
-#include <stdlib.h>
#include <console.h>
-#include "com32io.h"
-#include "menu.h"
-#include "help.h"
-#include "passwords.h"
-#include "dmi/dmi.h"
-#include "sys/pci.h"
#include "hdt.h"
#include "hdt-menu.h"
-#include "hdt-ata.h"
+#include "hdt-cli.h"
+#include "hdt-common.h"
-int nb_pci_devices=0;
-/* Detecting if a DMI table exist
- * if yes, let's parse it */
-int detect_dmi(s_dmi *dmi) {
- if (dmi_iterate(dmi) == -ENODMITABLE ) {
- printf("No DMI Structure found\n");
- return -ENODMITABLE;
- }
-
- parse_dmitable(dmi);
- return 0;
-}
-
-/* Try to detects disk from port 0x80 to 0xff*/
-void detect_disks(struct diskinfo *disk_info) {
- for (int drive = 0x80; drive < 0xff; drive++) {
- if (get_disk_params(drive,disk_info) != 0)
- continue;
- struct diskinfo d=disk_info[drive];
- printf(" DISK 0x%X: %s : %s %s: sectors=%d, s/t=%d head=%d : EDD=%s\n",drive,d.aid.model,d.host_bus_type,d.interface_type, d.sectors, d.sectors_per_track,d.heads,d.edd_version);
- }
-}
+int main(int argc, char *argv[])
+{
+ char version_string[256];
+ char *arg, **argp;
+ argp = argv+1;
-/* Setup our environement */
-void setup_env() {
- char version[255];
+ snprintf(version_string,sizeof version_string,"%s %s by %s",PRODUCT_NAME,VERSION,AUTHOR);
/* Opening the syslinux console */
openconsole(&dev_stdcon_r, &dev_stdcon_w);
- sprintf(version,"%s %s by %s",PRODUCT_NAME,VERSION,AUTHOR);
- printf("%s\n",version);
-
- /* Creating the menu */
- init_menusystem(version);
- set_window_size(0,0,24,80); // Leave some space around
-
- // Register the menusystem handler
- // reg_handler(HDLR_SCREEN,&msys_handler);
- reg_handler(HDLR_KEYS,&keys_handler);
-
- // Register the ontimeout handler, with a time out of 10 seconds
- reg_ontimeout(ontimeout,1000,0);
-}
-
-/* Detect the hardware stuff */
-void detect_hardware(s_dmi *dmi, s_cpu *cpu, struct pci_domain **pci_domain, struct diskinfo *disk_info) {
- printf("CPU: Detecting\n");
- detect_cpu(cpu);
-
- printf("DISKS: Detecting\n");
- detect_disks(disk_info);
-
- printf("DMI: Detecting Table\n");
- if (detect_dmi(dmi) == -ENODMITABLE ) {
- is_dmi_valid=false;
- printf("DMI: ERROR ! Table not found ! \n");
- printf("DMI: Many hardware components will not be detected ! \n");
- } else {
- is_dmi_valid=true;
- printf("DMI: Table found ! (version %d.%d)\n",dmi->dmitable.major_version,dmi->dmitable.minor_version);
- }
-
-#ifdef WITH_PCI
- printf("PCI: Detecting Devices\n");
- /* Scanning to detect pci buses and devices */
- *pci_domain = pci_scan();
-
- struct pci_device *pci_device;
- for_each_pci_func(pci_device, *pci_domain) {
- nb_pci_devices++;
- }
-
- printf("PCI: %d Devices Found\n",nb_pci_devices);
-
- printf("PCI: Resolving names\n");
- /* Assigning product & vendor name for each device*/
- get_name_from_pci_ids(*pci_domain);
-
- printf("PCI: Resolving class names\n");
- /* Assigning class name for each device*/
- pci_ids=get_class_name_from_pci_ids(*pci_domain);
-
-
- printf("PCI: Resolving module names\n");
- /* Detecting which kernel module should match each device */
- modules_pcimap=get_module_name_from_pci_ids(*pci_domain);
-#endif
-}
-
-/* Compute Main' Submenus*/
-void compute_submenus(struct s_hdt_menu *hdt_menu, s_dmi *dmi, s_cpu *cpu, struct pci_domain **pci_domain, struct diskinfo *disk_info) {
- /* Compute this menus if a DMI table exist */
- if (is_dmi_valid) {
- compute_motherboard(&(hdt_menu->mobo_menu),dmi);
- compute_chassis(&(hdt_menu->chassis_menu),dmi);
- compute_system(&(hdt_menu->system_menu),dmi);
- compute_memory(hdt_menu,dmi);
- compute_bios(&(hdt_menu->bios_menu),dmi);
- compute_battery(&(hdt_menu->battery_menu),dmi);
- }
-
- compute_processor(&(hdt_menu->cpu_menu),cpu,dmi);
- compute_disks(hdt_menu,disk_info);
-#ifdef WITH_PCI
- compute_PCI(hdt_menu,pci_domain);
- compute_kernel(&(hdt_menu->kernel_menu),pci_domain);
-#endif
- compute_syslinuxmenu(&(hdt_menu->syslinux_menu));
- compute_aboutmenu(&(hdt_menu->about_menu));
-}
-
-/* Compute Main Menu*/
-void compute_main_menu(struct s_hdt_menu *hdt_menu) {
-
- /* Let's count the number of menu we have */
- hdt_menu->total_menu_count=0;
- hdt_menu->main_menu.items_count=0;
-
- hdt_menu->main_menu.menu = add_menu(" Main Menu ",-1);
- set_item_options(-1,24);
-
-#ifdef WITH_PCI
- add_item("PCI <D>evices","PCI Devices Menu",OPT_SUBMENU,NULL,hdt_menu->pci_menu.menu);
- hdt_menu->main_menu.items_count++;
- hdt_menu->total_menu_count+=hdt_menu->pci_menu.items_count;
-#endif
- if (hdt_menu->disk_menu.items_count>0) {
- add_item("<D>isks","Disks Menu",OPT_SUBMENU,NULL,hdt_menu->disk_menu.menu);
- hdt_menu->main_menu.items_count++;
- hdt_menu->total_menu_count+=hdt_menu->disk_menu.items_count;
- }
-
- if (hdt_menu->memory_menu.items_count>0) {
- add_item("<M>emory Modules","Memory Modules Menu",OPT_SUBMENU,NULL,hdt_menu->memory_menu.menu);
- hdt_menu->main_menu.items_count++;
- hdt_menu->total_menu_count+=hdt_menu->memory_menu.items_count;
- }
- add_item("<P>rocessor","Main Processor Menu",OPT_SUBMENU,NULL,hdt_menu->cpu_menu.menu);
- hdt_menu->main_menu.items_count++;
-
-if (is_dmi_valid) {
- add_item("M<o>therboard","Motherboard Menu",OPT_SUBMENU,NULL,hdt_menu->mobo_menu.menu);
- hdt_menu->main_menu.items_count++;
- add_item("<B>ios","Bios Menu",OPT_SUBMENU,NULL,hdt_menu->bios_menu.menu);
- hdt_menu->main_menu.items_count++;
- add_item("<C>hassis","Chassis Menu",OPT_SUBMENU,NULL,hdt_menu->chassis_menu.menu);
- hdt_menu->main_menu.items_count++;
- add_item("<S>ystem","System Menu",OPT_SUBMENU,NULL,hdt_menu->system_menu.menu);
- hdt_menu->main_menu.items_count++;
- add_item("Ba<t>tery","Battery Menu",OPT_SUBMENU,NULL,hdt_menu->battery_menu.menu);
- hdt_menu->main_menu.items_count++;
-}
- add_item("","",OPT_SEP,"",0);
-#ifdef WITH_PCI
- add_item("<K>ernel Modules","Kernel Modules Menu",OPT_SUBMENU,NULL,hdt_menu->kernel_menu.menu);
- hdt_menu->main_menu.items_count++;
-#endif
- add_item("<S>yslinux","Syslinux Information Menu",OPT_SUBMENU,NULL,hdt_menu->syslinux_menu.menu);
- hdt_menu->main_menu.items_count++;
- add_item("<A>bout","About Menu",OPT_SUBMENU,NULL,hdt_menu->about_menu.menu);
- hdt_menu->main_menu.items_count++;
-
- hdt_menu->total_menu_count+=hdt_menu->main_menu.items_count;
-}
-
-int main(void)
-{
- struct s_hdt_menu hdt_menu;
- s_dmi dmi; /* DMI table */
- s_cpu cpu; /* CPU information */
- struct pci_domain *pci_domain=NULL; /* PCI Devices */
- struct diskinfo disk_info[256]; /* Disk Information*/
-
- /* Cleaning structures */
- memset(&disk_info,0,sizeof (disk_info));
- memset(&dmi,0,sizeof (dmi));
- memset(&cpu,0,sizeof (cpu));
- memset(&hdt_menu,0,sizeof (hdt_menu));
-
- /* Setup the environement */
- setup_env();
-
- /* Detect every kind of hardware */
- detect_hardware(&dmi,&cpu,&pci_domain,disk_info);
-
- /* Compute all sub menus */
- compute_submenus(&hdt_menu, &dmi,&cpu,&pci_domain,disk_info);
-
- /* Compute main menu */
- compute_main_menu(&hdt_menu);
-
-#ifdef WITH_MENU_DISPLAY
- t_menuitem * curr;
- char cmd[160];
+ printf("%s\n",version_string);
- printf("Starting Menu (%d menus)\n",hdt_menu.total_menu_count);
- curr=showmenus(hdt_menu.main_menu.menu);
- /* When we exit the menu, do we have something to do */
- if (curr) {
- /* When want to execute something */
- if (curr->action == OPT_RUN)
- {
- strcpy(cmd,curr->data);
- /* Use specific syslinux call if needed */
- if (issyslinux())
- runsyslinuxcmd(cmd);
- else csprint(cmd,0x07);
- return 1; // Should not happen when run from SYSLINUX
- }
+ if ((arg = find_argument(argp, "nomenu"))) {
+ start_cli_mode(argc, argv);
+ } else{
+ return start_menu_mode(version_string);
}
-#endif
return 0;
}