00001 #ifndef _HD_H
00002 #define _HD_H
00003
00009 #ifdef __cplusplus
00010 extern "C" {
00011 #endif
00012
00013
00014
00015
00016
00017
00018
00019
00020
00022 #define HD_VERSION 15
00023
00031 #define HD_DEB_SHOW_LOG (1 << 0)
00032 #define HD_DEB_PROGRESS (1 << 1)
00033 #define HD_DEB_CREATION (1 << 2)
00034 #define HD_DEB_DRIVER_INFO (1 << 3)
00035 #define HD_DEB_PCI (1 << 4)
00036 #define HD_DEB_ISAPNP (1 << 5)
00037 #define HD_DEB_CDROM (1 << 6)
00038 #define HD_DEB_NET (1 << 7)
00039 #define HD_DEB_FLOPPY (1 << 8)
00040 #define HD_DEB_MISC (1 << 9)
00041 #define HD_DEB_SERIAL (1 << 10)
00042 #define HD_DEB_MONITOR (1 << 11)
00043 #define HD_DEB_CPU (1 << 12)
00044 #define HD_DEB_BIOS (1 << 13)
00045 #define HD_DEB_MOUSE (1 << 14)
00046 #define HD_DEB_IDE (1 << 15)
00047 #define HD_DEB_SCSI (1 << 16)
00048 #define HD_DEB_USB (1 << 17)
00049 #define HD_DEB_ADB (1 << 18)
00050 #define HD_DEB_MODEM (1 << 19)
00051 #define HD_DEB_PARALLEL (1 << 20)
00052 #define HD_DEB_ISA (1 << 21)
00053 #define HD_DEB_BOOT (1 << 22)
00054 #define HD_DEB_HDDB (1 << 23)
00055
00057 #include <stdio.h>
00058 #include <inttypes.h>
00059 #include <termios.h>
00060 #include <sys/types.h>
00061
00065 #define HARDWARE_DIR "/var/lib/hardware"
00066
00081 #define TAG_PCI 1
00082 #define TAG_EISA 2
00083 #define TAG_USB 3
00084 #define TAG_SPECIAL 4
00085 #define TAG_PCMCIA 5
00090 #define ID_VALUE(id) ((id) & 0xffff)
00091
00095 #define ID_TAG(id) (((id) >> 16) & 0xf)
00096
00100 #define MAKE_ID(tag, id_val) ((tag << 16) | (id_val))
00101
00107 typedef enum probe_feature {
00108 pr_memory = 1, pr_pci, pr_isapnp, pr_net, pr_floppy, pr_misc,
00109 pr_misc_serial, pr_misc_par, pr_misc_floppy, pr_serial, pr_cpu, pr_bios,
00110 pr_monitor, pr_mouse, pr_scsi, pr_usb, pr_usb_mods, pr_adb, pr_modem,
00111 pr_modem_usb, pr_parallel, pr_parallel_lp, pr_parallel_zip, pr_isa,
00112 pr_isa_isdn, pr_isdn, pr_kbd, pr_prom, pr_sbus, pr_int, pr_braille,
00113 pr_braille_alva, pr_braille_fhp, pr_braille_ht, pr_ignx11, pr_sys,
00114 pr_bios_vbe, pr_isapnp_old, pr_isapnp_new, pr_isapnp_mod, pr_braille_baum,
00115 pr_manual, pr_fb, pr_veth, pr_pppoe, pr_scan, pr_pcmcia, pr_fork,
00116 pr_parallel_imm, pr_s390, pr_cpuemu, pr_sysfs, pr_s390disks, pr_udev,
00117 pr_block, pr_block_cdrom, pr_block_part, pr_edd, pr_edd_mod, pr_bios_ddc,
00118 pr_bios_fb, pr_bios_mode, pr_input, pr_block_mods, pr_bios_vesa,
00119 pr_cpuemu_debug, pr_scsi_noserial, pr_wlan, pr_bios_crc, pr_hal,
00120 pr_bios_vram, pr_bios_acpi, pr_bios_ddc_ports_1, pr_bios_ddc_ports_2,
00121 pr_bios_ddc_ports_3, pr_bios_ddc_ports_4, pr_modules_pata, pr_net_eeprom,
00122 pr_max, pr_lxrc, pr_default,
00123 pr_all
00124 } hd_probe_feature_t;
00125
00134 typedef enum hw_item {
00135 hw_none = 0, hw_sys, hw_cpu, hw_keyboard, hw_braille, hw_mouse,
00136 hw_joystick, hw_printer, hw_scanner, hw_chipcard, hw_monitor, hw_tv,
00137 hw_display, hw_framebuffer, hw_camera, hw_sound, hw_storage_ctrl,
00138 hw_network_ctrl, hw_isdn, hw_modem, hw_network, hw_disk, hw_partition,
00139 hw_cdrom, hw_floppy, hw_manual, hw_usb_ctrl, hw_usb, hw_bios, hw_pci,
00140 hw_isapnp, hw_bridge, hw_hub, hw_scsi, hw_ide, hw_memory, hw_dvb,
00141 hw_pcmcia, hw_pcmcia_ctrl, hw_ieee1394, hw_ieee1394_ctrl, hw_hotplug,
00142 hw_hotplug_ctrl, hw_zip, hw_pppoe, hw_wlan, hw_redasd, hw_dsl, hw_block,
00143 hw_tape, hw_vbe, hw_bluetooth, hw_fingerprint,
00145 hw_unknown, hw_all
00146 } hd_hw_item_t;
00147
00155 typedef enum base_classes {
00156
00157 bc_none, bc_storage, bc_network, bc_display, bc_multimedia,
00158 bc_memory, bc_bridge, bc_comm, bc_system, bc_input, bc_docking,
00159 bc_processor, bc_serial, bc_wireless, bc_i2o, bc_other = 0xff,
00160
00161
00162 bc_monitor = 0x100, bc_internal, bc_modem, bc_isdn, bc_ps2, bc_mouse,
00163 bc_storage_device, bc_network_interface, bc_keyboard, bc_printer,
00164 bc_hub, bc_braille, bc_scanner, bc_joystick, bc_chipcard, bc_camera,
00165 bc_framebuffer, bc_dvb, bc_tv, bc_partition, bc_dsl, bc_bluetooth, bc_fingerprint
00166 } hd_base_classes_t;
00167
00169 typedef enum sc_monitor {
00170 sc_mon_other, sc_mon_crt, sc_mon_lcd
00171 } hd_sc_monitor_t;
00172
00174 typedef enum sc_storage {
00175 sc_sto_scsi, sc_sto_ide, sc_sto_floppy, sc_sto_ipi, sc_sto_raid,
00176 sc_sto_other = 0x80
00177 } hd_sc_storage_t;
00178
00180 typedef enum sc_display {
00181 sc_dis_vga, sc_dis_xga, sc_dis_other = 0x80
00182 } hd_sc_display_t;
00183
00185 typedef enum sc_framebuffer {
00186 sc_fb_vesa = 1
00187 } hd_sc_framebuffer_t;
00188
00190 typedef enum sc_bridge {
00191 sc_bridge_host, sc_bridge_isa, sc_bridge_eisa, sc_bridge_mc,
00192 sc_bridge_pci, sc_bridge_pcmcia, sc_bridge_nubus, sc_bridge_cardbus,
00193 sc_bridge_other = 0x80
00194 } hd_sc_bridge_t;
00195
00197 typedef enum sc_comm {
00198 sc_com_ser, sc_com_par, sc_com_multi, sc_com_modem, sc_com_other = 0x80
00199 } hd_sc_comm_t;
00200
00202 typedef enum sc_system {
00203 sc_sys_pic, sc_sys_dma, sc_sys_timer, sc_sys_rtc, sc_sys_other = 0x80
00204 } hd_sc_system_t;
00205
00207 typedef enum sc_input {
00208 sc_inp_keyb, sc_inp_digit, sc_inp_mouse, sc_inp_other = 0x80
00209 } hd_sc_input_t;
00210
00212 typedef enum sc_serial {
00213 sc_ser_fire, sc_ser_access, sc_ser_ssa, sc_ser_usb, sc_ser_fiber,
00214 sc_ser_smbus, sc_ser_other = 0x80
00215 } hd_sc_serial_t;
00216
00218 typedef enum sc_internal {
00219 sc_int_none, sc_int_isapnp_if, sc_int_main_mem, sc_int_cpu, sc_int_fpu,
00220 sc_int_bios, sc_int_prom, sc_int_sys
00221 } hd_sc_internal_t;
00222
00224 typedef enum sc_mouse {
00225 sc_mou_ps2, sc_mou_ser, sc_mou_bus, sc_mou_usb, sc_mou_sun,
00226 sc_mou_other = 0x80
00227 } hd_sc_mouse_t;
00228
00230 typedef enum sc_std {
00231 sc_sdev_disk, sc_sdev_tape, sc_sdev_cdrom, sc_sdev_floppy, sc_sdev_scanner,
00232 sc_sdev_other = 0x80
00233 } hd_sc_std_t;
00234
00236 typedef enum sc_net_if {
00237 sc_nif_loopback, sc_nif_ethernet, sc_nif_tokenring, sc_nif_fddi,
00238 sc_nif_ctc, sc_nif_iucv, sc_nif_hsi, sc_nif_qeth,
00239 sc_nif_escon, sc_nif_myrinet, sc_nif_wlan, sc_nif_xp,
00240 sc_nif_usb, sc_nif_other = 0x80, sc_nif_sit
00241 } hd_sc_net_if_t;
00242
00244 typedef enum sc_multimedia {
00245 sc_multi_video, sc_multi_audio, sc_multi_other
00246 } hd_sc_multimedia_t;
00247
00249 typedef enum sc_keyboard {
00250 sc_keyboard_kbd, sc_keyboard_console
00251 } hd_sc_keyboard_t;
00252
00254 typedef enum sc_hub {
00255 sc_hub_other, sc_hub_usb
00256 } hd_sc_hub_t;
00257
00259 typedef enum sc_camera {
00260 sc_camera_webcam, sc_camera_digital
00261 } hd_sc_camera_t;
00262
00264 typedef enum sc_modem {
00265 sc_mod_at, sc_mod_win1, sc_mod_win2, sc_mod_win3, sc_mod_win4
00266 } hd_sc_modem_t;
00267
00269 typedef enum sc_dsl {
00270 sc_dsl_unknown, sc_dsl_pppoe, sc_dsl_capi, sc_dsl_capiisdn
00271 } hd_sc_dsl_t;
00272
00274 typedef enum pif_usb_e {
00275 pif_usb_uhci = 0, pif_usb_ohci = 0x10, pif_usb_ehci = 0x20,
00276 pif_usb_other = 0x80, pif_usb_device = 0xfe
00277 } hd_pif_usb_t;
00278
00280 typedef enum pif_cdrom {
00281 pif_cdrom, pif_cdr, pif_cdrw, pif_dvd, pif_dvdr, pif_dvdram
00282 } hd_pif_cdrom_t ;
00283
00285 typedef enum pif_s390disk {
00286 pif_scsi, pif_dasd, pif_dasd_fba
00287 } hd_pif_s390disk_t;
00288
00290 typedef enum bus_types {
00291 bus_none, bus_isa, bus_eisa, bus_mc, bus_pci, bus_pcmcia, bus_nubus,
00292 bus_cardbus, bus_other,
00293
00295 bus_ps2 = 0x80, bus_serial, bus_parallel, bus_floppy, bus_scsi, bus_ide, bus_usb,
00296 bus_adb, bus_raid, bus_sbus, bus_i2o, bus_vio, bus_ccw, bus_iucv, bus_ps3_system_bus,
00297 bus_virtio, bus_ibmebus
00298 } hd_bus_types_t;
00299
00308 typedef struct {
00312 unsigned invalid:1;
00313
00323 unsigned reconfig:3;
00324
00330 unsigned configured:3;
00331
00342 unsigned available:3;
00343
00351 unsigned needed:3;
00352
00359 unsigned available_orig:3;
00360
00364 unsigned active:3;
00365 } hd_status_t;
00366
00368 typedef enum {
00369 status_no = 1, status_yes, status_unknown, status_new
00370 } hd_status_value_t;
00371
00375 typedef enum {
00376 hp_none,
00377 hp_pcmcia,
00378 hp_cardbus,
00379 hp_pci,
00380 hp_usb,
00381 hp_ieee1394
00382 } hd_hotplug_t;
00383
00394 typedef struct {
00395 unsigned id;
00396 char *name;
00397 } hd_id_t;
00398
00399
00404 typedef struct s_str_list_t {
00405 struct s_str_list_t *next;
00406 char *str;
00407 } str_list_t;
00408
00409
00413 typedef struct {
00414 unsigned char bitmap[16];
00415 unsigned bits;
00416 unsigned not_empty:1;
00417 str_list_t *str;
00418 } hd_bitmap_t;
00419
00436 typedef struct {
00437 unsigned start, size;
00438 unsigned char *data;
00439 } memory_range_t;
00440
00441
00445 typedef struct {
00446 unsigned ok:1;
00447 unsigned rev;
00448 unsigned mpfp;
00449 unsigned mpconfig_ok:1;
00450 unsigned mpconfig;
00451 unsigned mpconfig_size;
00452 unsigned char feature[5];
00453 char oem_id[9];
00454 char prod_id[13];
00455 unsigned cpus, cpus_en;
00456 } smp_info_t;
00457
00458
00462 typedef struct vbe_mode_info_s {
00463 unsigned number;
00464 unsigned attributes;
00465 unsigned width, height;
00466 unsigned bytes_p_line;
00467 unsigned pixel_size;
00468 unsigned fb_start;
00469 unsigned win_A_start;
00470 unsigned win_A_attr;
00471 unsigned win_B_start;
00472 unsigned win_B_attr;
00473 unsigned win_size;
00474 unsigned win_gran;
00475 unsigned pixel_clock;
00476 } vbe_mode_info_t;
00477
00483 typedef struct {
00484 unsigned ok:1;
00485 unsigned version;
00486 unsigned oem_version;
00487 unsigned memory;
00488 unsigned fb_start;
00489 char *oem_name;
00490 char *vendor_name;
00491 char *product_name;
00492 char *product_revision;
00493 unsigned modes;
00494 vbe_mode_info_t *mode;
00495 unsigned current_mode;
00496 unsigned ddc_ports;
00497 unsigned char ddc_port[4][0x80];
00498 } vbe_info_t;
00499
00500
00504 typedef struct {
00505 unsigned id;
00506 unsigned char slot;
00507 unsigned char bus;
00508 unsigned char devfn;
00509 unsigned char misc;
00510 } cpq_ctlorder_t;
00511
00512
00513 typedef struct {
00514 unsigned ok:1;
00515 unsigned entry;
00516 unsigned compaq:1;
00517 cpq_ctlorder_t cpq_ctrl[32];
00518 } bios32_info_t;
00519
00529 typedef enum {
00530 sm_biosinfo, sm_sysinfo, sm_boardinfo, sm_chassis,
00531 sm_processor, sm_memctrl, sm_memmodule, sm_cache,
00532 sm_connect, sm_slot, sm_onboard, sm_oem,
00533 sm_config, sm_lang, sm_group, sm_eventlog,
00534 sm_memarray, sm_memdevice, sm_memerror, sm_memarraymap,
00535 sm_memdevicemap, sm_mouse, sm_battery, sm_reset,
00536 sm_secure, sm_power, sm_voltage, sm_cool,
00537 sm_temperature, sm_current, sm_outofband, sm_bis,
00538 sm_boot, sm_mem64error, sm_mandev, sm_mandevcomp,
00539 sm_mdtd, sm_inactive = 126, sm_end = 127
00540 } hd_smbios_type_t;
00541
00542
00544 typedef struct {
00545 union u_hd_smbios_t *next;
00546 hd_smbios_type_t type;
00547 int data_len;
00548 unsigned char *data;
00549 str_list_t *strings;
00550 int handle;
00551 } smbios_any_t;
00552
00553
00555 typedef struct {
00556 union u_hd_smbios_t *next;
00557 hd_smbios_type_t type;
00558 int data_len;
00559 unsigned char *data;
00560 str_list_t *strings;
00561 int handle;
00562 char *vendor;
00563 char *version;
00564 char *date;
00565 hd_bitmap_t feature;
00566 unsigned start;
00567 unsigned rom_size;
00568 } smbios_biosinfo_t;
00569
00570
00572 typedef struct {
00573 union u_hd_smbios_t *next;
00574 hd_smbios_type_t type;
00575 int data_len;
00576 unsigned char *data;
00577 str_list_t *strings;
00578 int handle;
00579 char *manuf;
00580 char *product;
00581 char *version;
00582 char *serial;
00583 unsigned char uuid[16];
00584 hd_id_t wake_up;
00585 } smbios_sysinfo_t;
00586
00587
00589 typedef struct {
00590 union u_hd_smbios_t *next;
00591 hd_smbios_type_t type;
00592 int data_len;
00593 unsigned char *data;
00594 str_list_t *strings;
00595 int handle;
00596 char *manuf;
00597 char *product;
00598 char *version;
00599 char *serial;
00600 char *asset;
00601 hd_id_t board_type;
00602 hd_bitmap_t feature;
00603 char *location;
00604 int chassis;
00605 int objects_len;
00606 int *objects;
00607 } smbios_boardinfo_t;
00608
00609
00611 typedef struct {
00612 union u_hd_smbios_t *next;
00613 hd_smbios_type_t type;
00614 int data_len;
00615 unsigned char *data;
00616 str_list_t *strings;
00617 int handle;
00618 char *manuf;
00619 char *version;
00620 char *serial;
00621 char *asset;
00622 hd_id_t ch_type;
00623 unsigned lock;
00624 hd_id_t bootup;
00625 hd_id_t power;
00626 hd_id_t thermal;
00627 hd_id_t security;
00628 unsigned oem;
00629 } smbios_chassis_t;
00630
00631
00633 typedef struct {
00634 union u_hd_smbios_t *next;
00635 hd_smbios_type_t type;
00636 int data_len;
00637 unsigned char *data;
00638 str_list_t *strings;
00639 int handle;
00640 char *socket;
00641 hd_id_t upgrade;
00642 char *manuf;
00643 char *version;
00644 char *serial;
00645 char *asset;
00646 char *part;
00647 hd_id_t pr_type;
00648 hd_id_t family;
00649 uint64_t cpu_id;
00650 unsigned voltage;
00651 unsigned ext_clock;
00652 unsigned max_speed;
00653 unsigned current_speed;
00654 unsigned sock_status;
00655 hd_id_t cpu_status;
00656 int l1_cache;
00657 int l2_cache;
00658 int l3_cache;
00659 } smbios_processor_t;
00660
00661
00663 typedef struct {
00664 union u_hd_smbios_t *next;
00665 hd_smbios_type_t type;
00666 int data_len;
00667 unsigned char *data;
00668 str_list_t *strings;
00669 int handle;
00670 char *socket;
00671 unsigned max_size;
00672 unsigned current_size;
00673 unsigned speed;
00674 hd_id_t mode;
00675 unsigned state;
00676 hd_id_t location;
00677 unsigned socketed;
00678 unsigned level;
00679 hd_id_t ecc;
00680 hd_id_t cache_type;
00681 hd_id_t assoc;
00682 hd_bitmap_t supp_sram;
00683 hd_bitmap_t sram;
00684 } smbios_cache_t;
00685
00686
00688 typedef struct {
00689 union u_hd_smbios_t *next;
00690 hd_smbios_type_t type;
00691 int data_len;
00692 unsigned char *data;
00693 str_list_t *strings;
00694 int handle;
00695 hd_id_t port_type;
00696 char *i_des;
00697 hd_id_t i_type;
00698 char *x_des;
00699 hd_id_t x_type;
00700 } smbios_connect_t;
00701
00702
00704 typedef struct {
00705 union u_hd_smbios_t *next;
00706 hd_smbios_type_t type;
00707 int data_len;
00708 unsigned char *data;
00709 str_list_t *strings;
00710 int handle;
00711 char *desig;
00712 hd_id_t slot_type;
00713 hd_id_t bus_width;
00714 hd_id_t usage;
00715 hd_id_t length;
00716 unsigned id;
00717 hd_bitmap_t feature;
00718 } smbios_slot_t;
00719
00720
00722 typedef struct {
00723 union u_hd_smbios_t *next;
00724 hd_smbios_type_t type;
00725 int data_len;
00726 unsigned char *data;
00727 str_list_t *strings;
00728 int handle;
00729 unsigned dev_len;
00730 struct {
00731 char *name;
00732 hd_id_t type;
00733 unsigned status;
00734 } *dev;
00735 } smbios_onboard_t;
00736
00737
00739 typedef struct {
00740 union u_hd_smbios_t *next;
00741 hd_smbios_type_t type;
00742 int data_len;
00743 unsigned char *data;
00744 str_list_t *strings;
00745 int handle;
00746 str_list_t *oem_strings;
00747 } smbios_oem_t;
00748
00749
00751 typedef struct {
00752 union u_hd_smbios_t *next;
00753 hd_smbios_type_t type;
00754 int data_len;
00755 unsigned char *data;
00756 str_list_t *strings;
00757 int handle;
00758 str_list_t *options;
00759 } smbios_config_t;
00760
00761
00763 typedef struct {
00764 union u_hd_smbios_t *next;
00765 hd_smbios_type_t type;
00766 int data_len;
00767 unsigned char *data;
00768 str_list_t *strings;
00769 int handle;
00770 char *current;
00771 } smbios_lang_t;
00772
00773
00775 typedef struct {
00776 union u_hd_smbios_t *next;
00777 hd_smbios_type_t type;
00778 int data_len;
00779 unsigned char *data;
00780 str_list_t *strings;
00781 int handle;
00782 char *name;
00783 int items_len;
00784 int *item_handles;
00785 } smbios_group_t;
00786
00787
00789 typedef struct {
00790 union u_hd_smbios_t *next;
00791 hd_smbios_type_t type;
00792 int data_len;
00793 unsigned char *data;
00794 str_list_t *strings;
00795 int handle;
00796 hd_id_t location;
00797 hd_id_t use;
00798 hd_id_t ecc;
00799 unsigned max_size;
00800 int error_handle;
00801 unsigned slots;
00802 } smbios_memarray_t;
00803
00804
00806 typedef struct {
00807 union u_hd_smbios_t *next;
00808 hd_smbios_type_t type;
00809 int data_len;
00810 unsigned char *data;
00811 str_list_t *strings;
00812 int handle;
00813 char *location;
00814 char *bank;
00815 char *manuf;
00816 char *serial;
00817 char *asset;
00818 char *part;
00819 int array_handle;
00820 int error_handle;
00821 unsigned width;
00822 unsigned eccbits;
00823 unsigned size;
00824 hd_id_t form;
00825 unsigned set;
00826 hd_id_t mem_type;
00827 hd_bitmap_t type_detail;
00828 unsigned speed;
00829 } smbios_memdevice_t;
00830
00831
00833 typedef struct {
00834 union u_hd_smbios_t *next;
00835 hd_smbios_type_t type;
00836 int data_len;
00837 unsigned char *data;
00838 str_list_t *strings;
00839 int handle;
00840 hd_id_t err_type;
00841 hd_id_t granularity;
00842 hd_id_t operation;
00843 unsigned syndrome;
00844 unsigned array_addr;
00845 unsigned device_addr;
00846 unsigned range;
00847 } smbios_memerror_t;
00848
00849
00851 typedef struct {
00852 union u_hd_smbios_t *next;
00853 hd_smbios_type_t type;
00854 int data_len;
00855 unsigned char *data;
00856 str_list_t *strings;
00857 int handle;
00858 int array_handle;
00859 uint64_t start_addr;
00860 uint64_t end_addr;
00861 unsigned part_width;
00862 } smbios_memarraymap_t;
00863
00864
00866 typedef struct {
00867 union u_hd_smbios_t *next;
00868 hd_smbios_type_t type;
00869 int data_len;
00870 unsigned char *data;
00871 str_list_t *strings;
00872 int handle;
00873 int memdevice_handle;
00874 int arraymap_handle;
00875 uint64_t start_addr;
00876 uint64_t end_addr;
00877 unsigned row_pos;
00878 unsigned interleave_pos;
00879 unsigned interleave_depth;
00880 } smbios_memdevicemap_t;
00881
00882
00884 typedef struct {
00885 union u_hd_smbios_t *next;
00886 hd_smbios_type_t type;
00887 int data_len;
00888 unsigned char *data;
00889 str_list_t *strings;
00890 int handle;
00891 hd_id_t mtype;
00892 hd_id_t interface;
00893 unsigned buttons;
00894 } smbios_mouse_t;
00895
00896
00898 typedef struct {
00899 union u_hd_smbios_t *next;
00900 hd_smbios_type_t type;
00901 int data_len;
00902 unsigned char *data;
00903 str_list_t *strings;
00904 int handle;
00905 hd_id_t power;
00906 hd_id_t keyboard;
00907 hd_id_t admin;
00908 hd_id_t reset;
00909 } smbios_secure_t;
00910
00911
00913 typedef struct {
00914 union u_hd_smbios_t *next;
00915 hd_smbios_type_t type;
00916 int data_len;
00917 unsigned char *data;
00918 str_list_t *strings;
00919 int handle;
00920 unsigned month;
00921 unsigned day;
00922 unsigned hour;
00923 unsigned minute;
00924 unsigned second;
00925 } smbios_power_t;
00926
00927
00929 typedef struct {
00930 union u_hd_smbios_t *next;
00931 hd_smbios_type_t type;
00932 int data_len;
00933 unsigned char *data;
00934 str_list_t *strings;
00935 int handle;
00936 hd_id_t err_type;
00937 hd_id_t granularity;
00938 hd_id_t operation;
00939 unsigned syndrome;
00940 uint64_t array_addr;
00941 uint64_t device_addr;
00942 unsigned range;
00943 } smbios_mem64error_t;
00944
00945
00947 typedef union u_hd_smbios_t {
00948 union u_hd_smbios_t *next;
00949 smbios_any_t any;
00950 smbios_biosinfo_t biosinfo;
00951 smbios_sysinfo_t sysinfo;
00952 smbios_boardinfo_t boardinfo;
00953 smbios_chassis_t chassis;
00954 smbios_processor_t processor;
00955 smbios_cache_t cache;
00956 smbios_connect_t connect;
00957 smbios_slot_t slot;
00958 smbios_onboard_t onboard;
00959 smbios_oem_t oem;
00960 smbios_config_t config;
00961 smbios_lang_t lang;
00962 smbios_group_t group;
00963 smbios_memarray_t memarray;
00964 smbios_memdevice_t memdevice;
00965 smbios_memerror_t memerror;
00966 smbios_memarraymap_t memarraymap;
00967 smbios_memdevicemap_t memdevicemap;
00968 smbios_mouse_t mouse;
00969 smbios_secure_t secure;
00970 smbios_power_t power;
00971 smbios_mem64error_t mem64error;
00972 } hd_smbios_t;
00973
00981 typedef struct s_udevinfo_t {
00982 struct s_udevinfo_t *next;
00983 char *sysfs;
00984 char *name;
00985 str_list_t *links;
00986 } hd_udevinfo_t;
00987
00988
00992 typedef struct s_sysfsdrv_t {
00993 struct s_sysfsdrv_t *next;
00994 char *driver;
00995 char *device;
00996 char *module;
00997 } hd_sysfsdrv_t;
00998
00999
01005 typedef struct {
01006 int type;
01007 unsigned major, minor, range;
01008 } hd_dev_num_t;
01009
01010
01025 typedef struct s_pci_t {
01026 struct s_pci_t *next;
01027 unsigned data_len;
01028 unsigned data_ext_len;
01029 unsigned char data[256];
01030 char *log;
01031 unsigned flags,
01032 cmd,
01033 hdr_type,
01034 secondary_bus;
01035 unsigned bus,
01036 slot, func;
01037 unsigned base_class, sub_class, prog_if;
01038 unsigned dev, vend, sub_dev, sub_vend, rev;
01039 unsigned irq;
01040 uint64_t base_addr[7];
01041 uint64_t base_len[7];
01042 unsigned addr_flags[7];
01043 uint64_t rom_base_addr;
01044 uint64_t rom_base_len;
01045 char *sysfs_id;
01046 char *sysfs_bus_id;
01047 char *modalias;
01048 unsigned edid_len[4];
01049 unsigned char edid_data[4][0x80];
01050 } pci_t;
01051
01056 typedef enum pci_flags {
01057 pci_flag_ok, pci_flag_pm, pci_flag_agp
01058 } hd_pci_flags_t;
01059
01060
01065 typedef struct usb_s {
01066 struct usb_s *next;
01067 unsigned hd_idx;
01068 unsigned hd_base_idx;
01069 str_list_t *c, *d, *e, *i, *p, *s, *t;
01070 struct usb_s *cloned;
01071 int bus, dev_nr, lev, parent, port, count, conns, used_conns, ifdescr;
01072 unsigned speed;
01073 unsigned vendor, device, rev;
01074 char *manufact, *product, *serial;
01075 char *driver;
01076 memory_range_t raw_descr;
01077 int d_cls, d_sub, d_prot;
01078 int i_alt, i_cls, i_sub, i_prot;
01079 unsigned country;
01080 } usb_t;
01081
01082
01086 typedef struct {
01087 int len;
01088 int type;
01089 unsigned char *data;
01090 } isapnp_res_t;
01091
01095 typedef struct {
01096 int csn;
01097 int log_devs;
01098 unsigned char *serial;
01099 unsigned char *card_regs;
01100 unsigned char (*ldev_regs)[0xd0];
01101 int res_len;
01102 unsigned broken:1;
01103 isapnp_res_t *res;
01104 } isapnp_card_t;
01105
01109 typedef struct {
01110 int read_port;
01111 int cards;
01112 isapnp_card_t *card;
01113 } isapnp_t;
01114
01118 typedef struct {
01119 isapnp_card_t *card;
01120 int dev;
01121 unsigned flags;
01122 unsigned ref:1;
01123 } isapnp_dev_t;
01124
01129 typedef enum isapnp_flags {
01130 isapnp_flag_act
01131 } hd_isapnp_flags_t;
01132
01133
01137 typedef struct scsi_s {
01138 struct scsi_s *next;
01139 unsigned deleted:1;
01140 unsigned generic:1;
01141 unsigned fake:1;
01142 unsigned wwpn_ok:1;
01143 unsigned fcp_lun_ok:1;
01144 char *dev_name;
01145 char *guessed_dev_name;
01146 int generic_dev;
01147 unsigned host, channel, id, lun;
01148 char *vendor, *model, *rev, *type_str, *serial;
01149 int type;
01150 unsigned inode_low;
01151 char *proc_dir, *driver;
01152 unsigned unique;
01153 char *info;
01154 unsigned lgeo_c, lgeo_h, lgeo_s;
01155 unsigned pgeo_c, pgeo_h, pgeo_s;
01156 uint64_t size;
01157 unsigned sec_size;
01158 unsigned cache;
01159 str_list_t *host_info;
01160 char *usb_guid;
01161 unsigned pci_info;
01162 unsigned pci_bus;
01163 unsigned pci_slot;
01164 unsigned pci_func;
01165 uint64_t wwpn;
01166 uint64_t fcp_lun;
01167 char *controller_id;
01168 } scsi_t;
01169
01170
01174 typedef struct devtree_s {
01175 struct devtree_s *next;
01176 struct devtree_s *parent;
01177 unsigned idx;
01178 char *path, *filename;
01179 unsigned pci:1;
01180 char *name, *model, *device_type, *compatible;
01181 int class_code;
01182 int vendor_id, device_id, subvendor_id, subdevice_id;
01183 int revision_id, interrupt;
01184 unsigned char *edid;
01185 } devtree_t;
01186
01187 enum pmac_model {
01188 AAPL_3400,
01189 AAPL_3500,
01190 AAPL_7200,
01191 AAPL_7300,
01192 AAPL_7500,
01193 AAPL_8500,
01194 AAPL_9500,
01195 AAPL_Gossamer,
01196 AAPL_PowerBook1998,
01197 AAPL_PowerMac_G3,
01198 AAPL_ShinerESB,
01199 AAPL_e407,
01200 AAPL_e411,
01201 PowerBook1_1,
01202 PowerBook2_1,
01203 PowerBook2_2,
01204 PowerBook3_1,
01205 PowerBook3_2,
01206 PowerBook3_3,
01207 PowerBook3_4,
01208 PowerBook3_5,
01209 PowerBook4_1,
01210 PowerBook4_2,
01211 PowerBook4_3,
01212 PowerBook5_1,
01213 PowerBook5_2,
01214 PowerBook5_3,
01215 PowerBook5_4,
01216 PowerBook5_5,
01217 PowerBook5_6,
01218 PowerBook5_7,
01219 PowerBook5_8,
01220 PowerBook5_9,
01221 PowerBook6_1,
01222 PowerBook6_2,
01223 PowerBook6_3,
01224 PowerBook6_4,
01225 PowerBook6_5,
01226 PowerBook6_7,
01227 PowerBook6_8,
01228 PowerMac1_1,
01229 PowerMac1_2,
01230 PowerMac10_1,
01231 PowerMac11_2,
01232 PowerMac12_1,
01233 PowerMac2_1,
01234 PowerMac2_2,
01235 PowerMac3_1,
01236 PowerMac3_2,
01237 PowerMac3_3,
01238 PowerMac3_4,
01239 PowerMac3_5,
01240 PowerMac3_6,
01241 PowerMac4_1,
01242 PowerMac4_2,
01243 PowerMac4_4,
01244 PowerMac5_1,
01245 PowerMac6_1,
01246 PowerMac6_3,
01247 PowerMac6_4,
01248 PowerMac7_2,
01249 PowerMac7_3,
01250 PowerMac8_1,
01251 PowerMac9_1,
01252 RackMac1_1,
01253 RackMac1_2,
01254 RackMac3_1,
01255 iMac_1,
01256 };
01260 struct pmac_mb_def {
01261 enum pmac_model model;
01262 const char *string;
01263 };
01264
01268 typedef struct ccw_s {
01269 unsigned char lcss;
01270 unsigned char cu_model;
01271 unsigned char dev_model;
01272 } ccw_t;
01273
01274
01278 typedef struct cdrom_info_s {
01279 struct cdrom_info_s *next;
01280 char *name;
01281 unsigned speed;
01282 unsigned cdr:1, cdrw:1, dvd:1, dvdr:1, dvdram:1;
01283 unsigned cdrom:1;
01284 struct {
01285 unsigned ok:1;
01286 char *volume, *publisher, *preparer, *application, *creation_date;
01287 } iso9660;
01288 struct {
01289 unsigned ok:1;
01290 unsigned platform;
01291 char *id_string;
01292 unsigned bootable:1;
01293 unsigned media_type;
01294 unsigned load_address;
01295 unsigned load_count;
01296 unsigned start;
01297 unsigned catalog;
01298 struct {
01299 unsigned c, h, s;
01300 unsigned size;
01301 } geo;
01302 char *label;
01303 } el_torito;
01304
01305 } cdrom_info_t;
01306
01307
01313 typedef struct {
01314 unsigned char block0[512];
01315 } floppy_info_t;
01316
01317
01321 typedef struct {
01322 unsigned apm_supported:1;
01323 unsigned apm_enabled:1;
01324 unsigned apm_ver, apm_subver;
01325 unsigned apm_bios_flags;
01326
01327 unsigned vbe_ver;
01328 unsigned vbe_video_mem;
01329
01330 unsigned ser_port0, ser_port1, ser_port2, ser_port3;
01331 unsigned par_port0, par_port1, par_port2;
01332
01334 unsigned is_pnp_bios:1;
01335 unsigned pnp_id;
01336 unsigned lba_support:1;
01337
01338 unsigned low_mem_size;
01339 smp_info_t smp;
01340 vbe_info_t vbe;
01341
01342 unsigned smbios_ver;
01343
01344 struct {
01345 unsigned width;
01346 unsigned height;
01347 unsigned xsize;
01348 unsigned ysize;
01349 char *vendor;
01350 char *name;
01351 } lcd;
01352
01353 struct {
01354 char *vendor;
01355 char *type;
01356 unsigned bus;
01357 unsigned compat_vend;
01358 unsigned compat_dev;
01359 } mouse;
01360
01361 struct {
01362 unsigned ok:1;
01363 unsigned scroll_lock:1;
01364 unsigned num_lock:1;
01365 unsigned caps_lock:1;
01366 } led;
01367
01368 bios32_info_t bios32;
01369
01370 } bios_info_t;
01371
01372
01376 typedef struct {
01377 unsigned has_color:1;
01378 unsigned color;
01379 } prom_info_t;
01380
01381
01385 typedef struct {
01386 char *system_type;
01387 char *generation;
01388 char *vendor;
01389 char *model;
01390 char *serial;
01391 char *lang;
01392 char *formfactor;
01393 } sys_info_t;
01394
01395
01399 typedef struct {
01400 unsigned manu_year;
01401 unsigned min_vsync, max_vsync;
01402 unsigned min_hsync, max_hsync;
01403 unsigned clock;
01404 unsigned width, height;
01405 unsigned width_mm, height_mm;
01406 unsigned hdisp, hsyncstart, hsyncend, htotal;
01407 unsigned vdisp, vsyncstart, vsyncend, vtotal;
01408 char hflag,vflag;
01409 char *vendor;
01410 char *name;
01411 char *serial;
01412 } monitor_info_t;
01413
01420 typedef enum cpu_arch {
01421 arch_unknown = 0,
01422 arch_intel,
01423 arch_alpha,
01424 arch_sparc, arch_sparc64,
01425 arch_ppc, arch_ppc64,
01426 arch_68k,
01427 arch_ia64,
01428 arch_s390, arch_s390x,
01429 arch_arm,
01430 arch_mips,
01431 arch_x86_64
01432 } hd_cpu_arch_t;
01433
01437 typedef enum boot_arch {
01438 boot_unknown = 0,
01439 boot_lilo, boot_milo, boot_aboot, boot_silo, boot_ppc, boot_elilo, boot_s390,
01440 boot_mips, boot_grub
01441 } hd_boot_arch_t;
01442
01443
01452 typedef struct {
01453 enum cpu_arch architecture;
01454 unsigned family;
01455 unsigned model;
01456 unsigned stepping;
01457 unsigned cache;
01458 unsigned clock;
01459 unsigned units;
01460 char *vend_name;
01461 char *model_name;
01462 char *platform;
01463 str_list_t *features;
01464 double bogo;
01465 } cpu_info_t;
01466
01467
01472 typedef struct {
01473 uint64_t sectors;
01474 struct {
01475 unsigned cyls, heads, sectors;
01476 } edd;
01477 struct {
01478 unsigned cyls, heads, sectors;
01479 } legacy;
01480 unsigned ext_fixed_disk:1;
01481 unsigned ext_lock_eject:1;
01482 unsigned ext_edd:1;
01483 unsigned ext_64bit:1;
01484 unsigned assigned:1;
01485 unsigned valid:1;
01486 char *sysfs_id;
01487 unsigned hd_idx;
01488 unsigned signature;
01489 } edd_info_t;
01490
01496 typedef struct {
01497 unsigned data_len, data_max;
01498 unsigned *data;
01499 unsigned names_len, names_max;
01500 char *names;
01501 } hddb_data_t;
01502
01506 typedef uint32_t hddb_entry_mask_t;
01507
01511 typedef struct hddb_list_s {
01512 hddb_entry_mask_t key_mask;
01513 hddb_entry_mask_t value_mask;
01514 unsigned key;
01515 unsigned value;
01516 } hddb_list_t;
01517
01521 typedef struct {
01522 unsigned list_len, list_max;
01523 hddb_list_t *list;
01524 unsigned ids_len, ids_max;
01525 unsigned *ids;
01526 unsigned strings_len, strings_max;
01527 char *strings;
01528 } hddb2_data_t;
01529
01530
01534 typedef enum modinfo_type_e { mi_none = 0, mi_pci, mi_other } modinfo_type_t;
01535
01539 typedef struct {
01540 char *module;
01541 char *alias;
01542 modinfo_type_t type;
01543 union {
01544 struct {
01545 struct {
01546 unsigned vendor:1;
01547 unsigned device:1;
01548 unsigned sub_vendor:1;
01549 unsigned sub_device:1;
01550 unsigned base_class:1;
01551 unsigned sub_class:1;
01552 unsigned prog_if:1;
01553 } has;
01554 unsigned vendor;
01555 unsigned device;
01556 unsigned sub_vendor;
01557 unsigned sub_device;
01558 unsigned base_class;
01559 unsigned sub_class;
01560 unsigned prog_if;
01561 } pci;
01562
01563 struct {
01564 struct {
01565 unsigned vendor:1;
01566 unsigned product:1;
01567 unsigned device_class:1;
01568 unsigned device_subclass:1;
01569 } has;
01570 unsigned vendor;
01571 unsigned product;
01572 unsigned device_class;
01573 unsigned device_subclass;
01574 } usb;
01575 };
01576 } modinfo_t;
01577
01578
01582 typedef enum {
01583 p_invalid, p_string, p_int32, p_uint64, p_double, p_bool, p_list
01584 } hal_prop_type_t;
01585
01586
01590 typedef struct hal_prop_s {
01591 struct hal_prop_s *next;
01592 hal_prop_type_t type;
01593 char *key;
01594 union {
01595 char *str;
01596 int32_t int32;
01597 uint64_t uint64;
01598 double d;
01599 int b;
01600 str_list_t *list;
01601 } val;
01602 } hal_prop_t;
01603
01604
01608 typedef struct hal_device_s {
01609 struct hal_device_s *next, *parent;
01610 char *udi;
01611 unsigned used:1;
01612 hal_prop_t *prop;
01613 } hal_device_t;
01614
01615
01619 typedef enum resource_types {
01620 res_any, res_phys_mem, res_mem, res_io, res_irq, res_dma, res_monitor,
01621 res_size, res_disk_geo, res_cache, res_baud, res_init_strings, res_pppd_option,
01622 res_framebuffer, res_hwaddr, res_link, res_wlan, res_fc
01623 } hd_resource_types_t;
01624
01625
01629 typedef enum size_units {
01630 size_unit_cm, size_unit_cinch, size_unit_byte, size_unit_sectors,
01631 size_unit_kbyte, size_unit_mbyte, size_unit_gbyte, size_unit_mm
01632 } hd_size_units_t;
01633
01637 typedef enum access_flags {
01638 acc_unknown,
01639 acc_ro,
01640 acc_wo,
01641 acc_rw
01642 } hd_access_flags_t;
01643
01644
01645 typedef enum yes_no_flag {
01646 flag_unknown,
01647 flag_no,
01648 flag_yes
01649 } hd_yes_no_flag_t;
01650
01651
01652 typedef enum geo_types {
01653 geo_physical = 0,
01654 geo_logical,
01655 geo_bios_edd,
01656 geo_bios_legacy
01657 } hd_geo_types_t;
01658
01659
01666 typedef struct {
01667 union u_hd_res_t *next;
01668 enum resource_types type;
01669 } res_any_t;
01670
01671 typedef struct {
01672 union u_hd_res_t *next;
01673 enum resource_types type;
01674 uint64_t base, range;
01675 unsigned
01676 enabled:1,
01677 access:2,
01678 prefetch:2;
01679 } res_mem_t;
01680
01681 typedef struct {
01682 union u_hd_res_t *next;
01683 enum resource_types type;
01684 uint64_t range;
01685 } res_phys_mem_t;
01686
01687 typedef struct {
01688 union u_hd_res_t *next;
01689 enum resource_types type;
01690 uint64_t base, range;
01691 unsigned
01692 enabled:1,
01693 access:2;
01694 } res_io_t;
01695
01696 typedef struct {
01697 union u_hd_res_t *next;
01698 enum resource_types type;
01699 unsigned base;
01700 unsigned triggered;
01701 unsigned enabled:1;
01702 } res_irq_t;
01703
01704 typedef struct {
01705 union u_hd_res_t *next;
01706 enum resource_types type;
01707 unsigned base;
01708 unsigned enabled:1;
01709 } res_dma_t;
01710
01711 typedef struct {
01712 union u_hd_res_t *next;
01713 enum resource_types type;
01714 enum size_units unit;
01715 uint64_t val1, val2;
01716 } res_size_t;
01717
01718 typedef struct {
01719 union u_hd_res_t *next;
01720 enum resource_types type;
01721 unsigned speed;
01722 unsigned bits, stopbits;
01723 char parity;
01724 char handshake;
01725 } res_baud_t;
01726
01727 typedef struct {
01728 union u_hd_res_t *next;
01729 enum resource_types type;
01730 unsigned size;
01731 } res_cache_t;
01732
01733 typedef struct {
01734 union u_hd_res_t *next;
01735 enum resource_types type;
01736 unsigned cyls, heads, sectors;
01737 uint64_t size;
01738 enum geo_types geotype;
01739 } res_disk_geo_t;
01740
01741 typedef struct {
01742 union u_hd_res_t *next;
01743 enum resource_types type;
01744 unsigned width, height;
01745 unsigned vfreq;
01746 unsigned interlaced:1;
01747 } res_monitor_t;
01748
01749 typedef struct {
01750 union u_hd_res_t *next;
01751 enum resource_types type;
01752 char *init1;
01753 char *init2;
01754 } res_init_strings_t;
01755
01756 typedef struct {
01757 union u_hd_res_t *next;
01758 enum resource_types type;
01759 char *option;
01760 } res_pppd_option_t;
01761
01762 typedef struct {
01763 union u_hd_res_t *next;
01764 enum resource_types type;
01765 unsigned width, height;
01766 unsigned bytes_p_line;
01767 unsigned colorbits;
01768 unsigned mode;
01769 } res_framebuffer_t;
01770
01771 typedef struct {
01772 union u_hd_res_t *next;
01773 enum resource_types type;
01774 char *addr;
01775 } res_hwaddr_t;
01776
01777 typedef struct {
01778 union u_hd_res_t *next;
01779 enum resource_types type;
01780 unsigned state:1;
01781 } res_link_t;
01782
01784 typedef struct {
01785 union u_hd_res_t *next;
01786 enum resource_types type;
01787 str_list_t *channels;
01788 str_list_t *frequencies;
01789 str_list_t *bitrates;
01790 str_list_t *auth_modes;
01791 str_list_t *enc_modes;
01792 } res_wlan_t;
01793
01794 typedef struct {
01795 union u_hd_res_t *next;
01796 enum resource_types type;
01797 unsigned wwpn_ok:1;
01798 unsigned fcp_lun_ok:1;
01799 unsigned port_id_ok:1;
01800 uint64_t wwpn;
01801 uint64_t fcp_lun;
01802 unsigned port_id;
01803 char *controller_id;
01804 } res_fc_t;
01805
01807 typedef union u_hd_res_t {
01808 union u_hd_res_t *next;
01809 res_any_t any;
01810 res_io_t io;
01811 res_mem_t mem;
01812 res_phys_mem_t phys_mem;
01813 res_irq_t irq;
01814 res_dma_t dma;
01815 res_size_t size;
01816 res_cache_t cache;
01817 res_baud_t baud;
01818 res_disk_geo_t disk_geo;
01819 res_monitor_t monitor;
01820 res_init_strings_t init_strings;
01821 res_pppd_option_t pppd_option;
01822 res_framebuffer_t framebuffer;
01823 res_hwaddr_t hwaddr;
01824 res_link_t link;
01825 res_wlan_t wlan;
01826 res_fc_t fc;
01827 } hd_res_t;
01828
01837 typedef struct {
01838 uint64_t addr, size;
01839 char *dev;
01840 unsigned tag;
01841 } misc_io_t;
01842
01843 typedef struct {
01844 unsigned channel;
01845 char *dev;
01846 unsigned tag;
01847 } misc_dma_t;
01848
01849 typedef struct {
01850 unsigned irq, events;
01851 int devs;
01852 char **dev;
01853 unsigned tag;
01854 } misc_irq_t;
01855
01856 typedef struct {
01857 unsigned io_len, dma_len, irq_len;
01858 misc_io_t *io;
01859 misc_dma_t *dma;
01860 misc_irq_t *irq;
01861 str_list_t *proc_io, *proc_dma, *proc_irq;
01862 } misc_t;
01863
01869 typedef struct s_serial_t {
01870 struct s_serial_t *next;
01871 char *name;
01872 char *device;
01873 unsigned line, port, irq, baud;
01874 } serial_t;
01875
01879 typedef struct s_ser_device_t {
01880 struct s_ser_device_t *next;
01881 unsigned hd_idx;
01882 char *dev_name;
01883 str_list_t *at_resp;
01884 int fd;
01885 struct termios tio;
01886 unsigned max_baud, cur_baud;
01887 unsigned is_mouse:1;
01888 unsigned is_modem:1;
01889 unsigned do_io:1;
01890 unsigned char buf[0x1000];
01891 int buf_len;
01892 int garbage, non_pnp, pnp;
01893 unsigned char pnp_id[8];
01894 char *serial, *class_name, *dev_id, *user_name, *vend, *init_string1, *init_string2, *pppd_option;
01895 unsigned pnp_rev;
01896 unsigned bits;
01897 } ser_device_t;
01898
01912 typedef struct isdn_parm_s {
01913 struct isdn_parm_s *next;
01914 char *name;
01915 unsigned valid:1;
01916 unsigned conflict:1;
01917 uint64_t value;
01918 unsigned type;
01919 unsigned flags;
01920 unsigned def_value;
01921 int alt_values;
01922 unsigned *alt_value;
01923 } isdn_parm_t;
01924
01926 typedef enum driver_info_type {
01927 di_any, di_display, di_module, di_mouse, di_x11, di_isdn, di_kbd, di_dsl
01928 } hd_driver_info_t;
01929
01931 typedef struct {
01932 union driver_info_u *next;
01933 enum driver_info_type type;
01934 str_list_t *hddb0, *hddb1;
01935 } driver_info_any_t;
01936
01938 typedef struct {
01939 union driver_info_u *next;
01940 enum driver_info_type type;
01941 str_list_t *hddb0, *hddb1;
01942 unsigned width, height;
01943 unsigned min_vsync, max_vsync;
01944 unsigned min_hsync, max_hsync;
01945 unsigned bandwidth;
01946 unsigned hdisp, hsyncstart, hsyncend, htotal;
01947 unsigned vdisp, vsyncstart, vsyncend, vtotal;
01948 char hflag,vflag;
01949 } driver_info_display_t;
01950
01952 typedef struct {
01953 union driver_info_u *next;
01954 enum driver_info_type type;
01955 str_list_t *hddb0, *hddb1;
01956 unsigned active:1;
01957 unsigned modprobe:1;
01958 str_list_t *names;
01959 str_list_t *mod_args;
01960 char *conf;
01961 } driver_info_module_t;
01962
01964 typedef struct {
01965 union driver_info_u *next;
01966 enum driver_info_type type;
01967 str_list_t *hddb0, *hddb1;
01968 char *xf86;
01969 char *gpm;
01970 int buttons;
01971 int wheels;
01972 } driver_info_mouse_t;
01973
01975 typedef struct {
01976 union driver_info_u *next;
01977 enum driver_info_type type;
01978 str_list_t *hddb0, *hddb1;
01979 char *server;
01980 char *xf86_ver;
01981 unsigned x3d:1;
01982 struct {
01983 unsigned all:5;
01984 unsigned c8:1, c15:1, c16:1, c24:1, c32:1;
01985 } colors;
01986 unsigned dacspeed;
01987 str_list_t *extensions;
01988 str_list_t *options;
01989 str_list_t *raw;
01990 char *script;
01991 } driver_info_x11_t;
01992
01994 typedef struct {
01995 union driver_info_u *next;
01996 enum driver_info_type type;
01997 str_list_t *hddb0, *hddb1;
01998 int i4l_type, i4l_subtype;
01999 char *i4l_name;
02000 isdn_parm_t *params;
02001 } driver_info_isdn_t;
02002
02004 typedef struct {
02005 union driver_info_u *next;
02006 enum driver_info_type type;
02007 str_list_t *hddb0, *hddb1;
02008 char *mode;
02009 char *name;
02010 } driver_info_dsl_t;
02011
02013 typedef struct {
02014 union driver_info_u *next;
02015 enum driver_info_type type;
02016 str_list_t *hddb0, *hddb1;
02017 char *XkbRules;
02018 char *XkbModel;
02019 char *XkbLayout;
02020 char *keymap;
02021 } driver_info_kbd_t;
02022
02023
02024
02025
02026 typedef union driver_info_u {
02027 union driver_info_u *next;
02028 driver_info_any_t any;
02029 driver_info_module_t module;
02030 driver_info_mouse_t mouse;
02031 driver_info_x11_t x11;
02032 driver_info_display_t display;
02033 driver_info_isdn_t isdn;
02034 driver_info_dsl_t dsl;
02035 driver_info_kbd_t kbd;
02036 } driver_info_t;
02037
02048 typedef enum hd_detail_type {
02049 hd_detail_pci, hd_detail_usb, hd_detail_isapnp, hd_detail_cdrom,
02050 hd_detail_floppy, hd_detail_bios, hd_detail_cpu, hd_detail_prom,
02051 hd_detail_monitor, hd_detail_sys, hd_detail_scsi, hd_detail_devtree,
02052 hd_detail_ccw
02053 } hd_detail_type_t;
02054
02055 typedef struct {
02056 enum hd_detail_type type;
02057 pci_t *data;
02058 } hd_detail_pci_t;
02059
02060 typedef struct {
02061 enum hd_detail_type type;
02062 usb_t *data;
02063 } hd_detail_usb_t;
02064
02065 typedef struct {
02066 enum hd_detail_type type;
02067 isapnp_dev_t *data;
02068 } hd_detail_isapnp_t;
02069
02070 typedef struct {
02071 enum hd_detail_type type;
02072 cdrom_info_t *data;
02073 } hd_detail_cdrom_t;
02074
02075 typedef struct {
02076 enum hd_detail_type type;
02077 floppy_info_t *data;
02078 } hd_detail_floppy_t;
02079
02080 typedef struct {
02081 enum hd_detail_type type;
02082 bios_info_t *data;
02083 } hd_detail_bios_t;
02084
02085 typedef struct {
02086 enum hd_detail_type type;
02087 cpu_info_t *data;
02088 } hd_detail_cpu_t;
02089
02090 typedef struct {
02091 enum hd_detail_type type;
02092 prom_info_t *data;
02093 } hd_detail_prom_t;
02094
02095 typedef struct hd_detail_monitor_s {
02096 enum hd_detail_type type;
02097 monitor_info_t *data;
02098 struct hd_detail_monitor_s *next;
02099 } hd_detail_monitor_t;
02100
02101 typedef struct {
02102 enum hd_detail_type type;
02103 sys_info_t *data;
02104 } hd_detail_sys_t;
02105
02106 typedef struct {
02107 enum hd_detail_type type;
02108 scsi_t *data;
02109 } hd_detail_scsi_t;
02110
02111 typedef struct {
02112 enum hd_detail_type type;
02113 devtree_t *data;
02114 } hd_detail_devtree_t;
02115
02116 typedef struct {
02117 enum hd_detail_type type;
02118 ccw_t *data;
02119 } hd_detail_ccw_t;
02120
02121 typedef union {
02122 enum hd_detail_type type;
02123 hd_detail_pci_t pci;
02124 hd_detail_usb_t usb;
02125 hd_detail_isapnp_t isapnp;
02126 hd_detail_cdrom_t cdrom;
02127 hd_detail_floppy_t floppy;
02128 hd_detail_bios_t bios;
02129 hd_detail_cpu_t cpu;
02130 hd_detail_prom_t prom;
02131 hd_detail_monitor_t monitor;
02132 hd_detail_sys_t sys;
02133 hd_detail_scsi_t scsi;
02134 hd_detail_devtree_t devtree;
02135 hd_detail_ccw_t ccw;
02136 } hd_detail_t;
02137
02150 typedef struct hd_manual_s {
02151 struct hd_manual_s *next;
02152
02153 char *unique_id;
02154 char *parent_id;
02155 char *child_ids;
02156 unsigned hw_class;
02157 char *model;
02158
02159 hd_status_t status;
02160 char *config_string;
02161
02162
02163
02164
02165 str_list_t *key;
02166 str_list_t *value;
02167 } hd_manual_t;
02168
02169
02175 typedef struct s_hd_t {
02176 struct s_hd_t *next;
02182 unsigned idx;
02183
02189 unsigned broken:1;
02190
02194 hd_id_t bus;
02195
02200 unsigned slot;
02201
02205 unsigned func;
02206
02210 hd_id_t base_class;
02211
02215 hd_id_t sub_class;
02216
02220 hd_id_t prog_if;
02221
02228 hd_id_t vendor;
02229
02238 hd_id_t device;
02239
02246 hd_id_t sub_vendor;
02247
02254 hd_id_t sub_device;
02255
02261 hd_id_t revision;
02262
02266 char *serial;
02267
02272 hd_id_t compat_vendor;
02273
02278 hd_id_t compat_device;
02279
02284 hd_hw_item_t hw_class;
02285
02290 unsigned char hw_class_list[(hw_all + 7) / 8];
02298 char *model;
02299
02305 unsigned attached_to;
02306
02310 char *sysfs_id;
02311
02315 char *sysfs_bus_id;
02316
02320 char *sysfs_device_link;
02321
02327 char *unix_dev_name;
02328
02332 hd_dev_num_t unix_dev_num;
02333
02340 str_list_t *unix_dev_names;
02341
02348 char *unix_dev_name2;
02349
02353 hd_dev_num_t unix_dev_num2;
02354
02361 char *rom_id;
02362
02366 char *udi;
02367
02371 char *parent_udi;
02372
02383 char *unique_id;
02384
02386 str_list_t *unique_ids;
02387
02391 unsigned module;
02392
02396 unsigned line;
02397
02401 unsigned count;
02402
02406 hd_res_t *res;
02407
02412 hd_detail_t *detail;
02413
02419 str_list_t *extra_info;
02420
02426 hd_status_t status;
02427
02434 char *config_string;
02435
02440 hd_hotplug_t hotplug;
02441
02446 unsigned hotplug_slot;
02447
02448 struct is_s {
02449 unsigned agp:1;
02450 unsigned isapnp:1;
02451 unsigned notready:1;
02452 unsigned manual:1;
02453 unsigned softraiddisk:1;
02454 unsigned zip:1;
02455 unsigned cdr:1;
02456 unsigned cdrw:1;
02457 unsigned dvd:1;
02458 unsigned dvdr:1;
02459 unsigned dvdrw:1;
02460 unsigned dvdpr:1;
02461 unsigned dvdprw:1;
02462 unsigned dvdprdl:1;
02463 unsigned dvdram:1;
02464 unsigned pppoe:1;
02465 unsigned wlan:1;
02466 unsigned with_acpi:1;
02467 unsigned hotpluggable:1;
02468 unsigned dualport:1;
02469 } is;
02470
02471 struct tag_s {
02472 unsigned remove:1;
02473 unsigned freeit:1;
02474 unsigned fixed:1;
02475 unsigned skip_mouse:1;
02476 unsigned skip_modem:1;
02477 unsigned skip_braille:1;
02478 unsigned ser_device:2;
02479 } tag;
02480
02486 unsigned char *block0;
02487
02491 char *driver;
02492
02496 char *driver_module;
02497
02501 str_list_t *drivers;
02502
02506 str_list_t *driver_modules;
02507
02515 char *old_unique_id;
02516
02522 char *parent_id;
02523
02529 str_list_t *child_ids;
02530
02535 char *unique_id1;
02536
02543 char *usb_guid;
02544
02545 driver_info_t *driver_info;
02547 str_list_t *requires;
02549 hal_prop_t *hal_prop;
02551 hal_prop_t *persistent_prop;
02553 char *modalias;
02555
02556
02557
02558
02559 unsigned ref_cnt;
02560 struct s_hd_t *ref;
02561 } hd_t;
02562
02563
02567 typedef struct {
02573 hd_t *hd;
02574
02583 void (*progress)(char *pos, char *msg);
02584
02589 char *log;
02590
02598 unsigned debug;
02599
02605 struct flag_struct {
02606 unsigned internal:1;
02607 unsigned dformat:2;
02608 unsigned no_parport:1;
02609 unsigned iseries:1;
02610 unsigned list_all:1;
02611 unsigned fast:1;
02612 unsigned list_md:1;
02613 unsigned nofork:1;
02614 unsigned nosysfs:1;
02615 unsigned forked:1;
02616 unsigned cpuemu:1;
02617 unsigned udev:1;
02618 unsigned edd_used:1;
02619 unsigned keep_kmods:2;
02620 unsigned nobioscrc:1;
02621 unsigned biosvram:1;
02622 unsigned nowpa:1;
02623 unsigned pata:1;
02624 unsigned vbox:1;
02625 unsigned vmware:1;
02626 unsigned vmware_mouse:1;
02627 } flags;
02628
02629
02634 str_list_t *only;
02635
02636
02637
02638
02639 unsigned char probe[(pr_all + 7) / 8];
02640 unsigned char probe_set[(pr_all + 7) / 8];
02641 unsigned char probe_clr[(pr_all + 7) / 8];
02642 unsigned last_idx;
02643 unsigned module;
02644 enum boot_arch boot;
02645 hd_t *old_hd;
02646 pci_t *pci;
02647 isapnp_t *isapnp;
02648 cdrom_info_t *cdrom;
02649 str_list_t *net;
02650 str_list_t *floppy;
02651 misc_t *misc;
02652 serial_t *serial;
02653 scsi_t *scsi;
02654 ser_device_t *ser_mouse;
02655 ser_device_t *ser_modem;
02656 str_list_t *cpu;
02657 str_list_t *klog;
02658 str_list_t *proc_usb;
02659 usb_t *usb;
02660 modinfo_t *modinfo_ext;
02661 modinfo_t *modinfo;
02662 hddb2_data_t *hddb2[2];
02663 str_list_t *kmods;
02664 uint64_t used_irqs;
02665 uint64_t assigned_irqs;
02666 memory_range_t bios_rom;
02667 memory_range_t bios_ram;
02668 memory_range_t bios_ebda;
02669 unsigned display;
02670 unsigned color_code;
02671 char *cmd_line;
02672 str_list_t *xtra_hd;
02673 devtree_t *devtree;
02674 unsigned kernel_version;
02675 hd_t *manual;
02676 str_list_t *disks;
02677 str_list_t *partitions;
02678 str_list_t *cdroms;
02679 hd_smbios_t *smbios;
02680 struct {
02681 unsigned ok:1;
02682 unsigned size;
02683 unsigned used;
02684 void *data;
02685 int id;
02686 int updated;
02687 } shm;
02688 unsigned pci_config_type;
02689 hd_udevinfo_t *udevinfo;
02690 hd_sysfsdrv_t *sysfsdrv;
02691 uint64_t sysfsdrv_id;
02692 str_list_t *scanner_db;
02693 edd_info_t edd[0x80];
02694 hal_device_t *hal;
02695 str_list_t *lsscsi;
02696 } hd_data_t;
02697
02698
02699
02700
02701
02702
02703
02704
02705
02706
02707
02709 void hd_scan(hd_data_t *hd_data);
02710
02712 hd_data_t *hd_free_hd_data(hd_data_t *hd_data);
02713
02715 hd_t *hd_free_hd_list(hd_t *hd);
02716
02717 void hd_set_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
02718 void hd_clear_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
02719 int hd_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
02720 void hd_set_probe_feature_hw(hd_data_t *hd_data, hd_hw_item_t item);
02721
02722 enum probe_feature hd_probe_feature_by_name(char *name);
02723 char *hd_probe_feature_by_value(enum probe_feature feature);
02724
02725 int hd_module_is_active(hd_data_t *hd_data, char *mod);
02726
02727 hd_t *hd_base_class_list(hd_data_t *hd_data, unsigned base_class);
02728 hd_t *hd_sub_class_list(hd_data_t *hd_data, unsigned base_class, unsigned sub_class);
02729 hd_t *hd_bus_list(hd_data_t *hd_data, unsigned bus);
02730 const char* hd_busid_to_hwcfg(int busid);
02731 hd_t *hd_list(hd_data_t *hd_data, hd_hw_item_t item, int rescan, hd_t *hd_old);
02732 hd_t *hd_list_with_status(hd_data_t *hd_data, hd_hw_item_t item, hd_status_t status);
02733 hd_t *hd_list2(hd_data_t *hd_data, hd_hw_item_t *items, int rescan);
02734 hd_t *hd_list_with_status2(hd_data_t *hd_data, hd_hw_item_t *items, hd_status_t status);
02735
02736 void hd_add_driver_data(hd_data_t *hd_data, hd_t *hd);
02737
02738 int hd_has_pcmcia(hd_data_t *hd_data);
02739 #if 0
02740
02744 int hd_apm_enabled(hd_data_t *hd_data);
02745 #endif
02746 int hd_usb_support(hd_data_t *hd_data);
02747 int hd_smp_support(hd_data_t *hd_data);
02748 int hd_mac_color(hd_data_t *hd_data);
02749 int hd_color(hd_data_t *hd_data);
02750 int hd_is_uml(hd_data_t *hd_data);
02751 int hd_is_xen(hd_data_t *hd_data);
02752 unsigned hd_display_adapter(hd_data_t *hd_data);
02753 unsigned hd_boot_disk(hd_data_t *hd_data, int *matches);
02754 enum cpu_arch hd_cpu_arch(hd_data_t *hd_data);
02755 enum boot_arch hd_boot_arch(hd_data_t *hd_data);
02756
02757 hd_t *hd_get_device_by_idx(hd_data_t *hd_data, unsigned idx);
02758
02759 void hd_set_hw_class(hd_t *hd, hd_hw_item_t hw_class);
02760 int hd_is_hw_class(hd_t *hd, hd_hw_item_t hw_class);
02761
02762 int hd_is_sgi_altix(hd_data_t *hd_data);
02763
02764 char *hd_version(void);
02765
02766 hal_prop_t *hd_free_hal_properties(hal_prop_t *prop);
02767 hal_prop_t *hd_read_properties(const char *udi);
02768 int hd_write_properties(const char *udi, hal_prop_t *prop);
02769
02770 int hd_change_status(const char *id, hd_status_t status, const char *config_string);
02771 int hd_change_config_status(hd_data_t *hd_data, const char *id, hd_status_t status, const char *config_string);
02772 int hd_read_mmap(hd_data_t *hd_data, char *name, unsigned char *buf, off_t start, unsigned size);
02773
02774
02775
02779 str_list_t *hddb_get_packages(hd_data_t *hd_data);
02780 void hddb_add_info(hd_data_t *hd_data, hd_t *hd);
02781
02782 void hddb_dump_raw(hddb2_data_t *hddb, FILE *f);
02783 void hddb_dump(hddb2_data_t *hddb, FILE *f);
02784
02785
02786
02787 void hd_dump_entry(hd_data_t *hd_data, hd_t *hd, FILE *f);
02788
02789
02790 cdrom_info_t *hd_read_cdrom_info(hd_data_t *hd_data, hd_t *hd);
02791
02799 hd_manual_t *hd_manual_read_entry(hd_data_t *hd_data, const char *id);
02800 int hd_manual_write_entry(hd_data_t *hd_data, hd_manual_t *entry);
02801 hd_manual_t *hd_free_manual(hd_manual_t *manual);
02802 hd_t *hd_read_config(hd_data_t *hd_data, const char *id);
02803 int hd_write_config(hd_data_t *hd_data, hd_t *hd);
02804 char *hd_hw_item_name(hd_hw_item_t item);
02805 hd_hw_item_t hd_hw_item_type(char *name);
02806 char *hd_status_value_name(hd_status_value_t status);
02807
02818 #define CDBISDN_VERSION 0x0101
02819
02820 #ifndef PCI_ANY_ID
02821 #define PCI_ANY_ID 0xffff
02822 #endif
02823
02824 #define CDBISDN_P_NONE 0x0
02825 #define CDBISDN_P_IRQ 0x1
02826 #define CDBISDN_P_MEM 0x2
02827 #define CDBISDN_P_IO 0x3
02828
02830 typedef struct {
02831 char *name;
02832 char *shortname;
02833 int vnr;
02834 int refcnt;
02835 } cdb_isdn_vendor;
02836
02837 typedef struct {
02838 int handle;
02839 int vhandle;
02840 char *name;
02841 char *lname;
02842 char *Class;
02843 char *bus;
02844 int revision;
02845 int vendor;
02846 int device;
02847 int subvendor;
02849 int subdevice;
02851 unsigned int features;
02852 int line_cnt;
02853 int vario_cnt;
02854 int vario;
02855 } cdb_isdn_card;
02856
02857 typedef struct {
02858 int handle;
02859 int next_vario;
02860 int drvid;
02861 int typ;
02862 int subtyp;
02863 int smp;
02864 char *mod_name;
02865 char *para_str;
02866 char *mod_preload;
02867 char *cfg_prog;
02868 char *firmware;
02869 char *description;
02870 char *need_pkg;
02871 char *info;
02872 char *protocol;
02873 char *interface;
02874 char *io;
02875 char *irq;
02876 char *membase;
02877 char *features;
02878 int card_ref;
02879 char *name;
02880 } cdb_isdn_vario;
02881
02882
02883 extern cdb_isdn_vendor *hd_cdbisdn_get_vendor(int);
02884 extern cdb_isdn_card *hd_cdbisdn_get_card(int);
02885 extern cdb_isdn_vario *hd_cdbisdn_get_vario_from_type(int, int);
02886 extern cdb_isdn_card *hd_cdbisdn_get_card_from_type(int, int);
02887 extern cdb_isdn_card *hd_cdbisdn_get_card_from_id(int, int, int, int);
02888 extern cdb_isdn_vario *hd_cdbisdn_get_vario(int);
02889 extern int hd_cdbisdn_get_version(void);
02890 extern int hd_cdbisdn_get_db_version(void);
02891 extern char *hd_cdbisdn_get_db_date(void);
02892
02898 #ifdef __cplusplus
02899 }
02900 #endif
02901
02904 #endif