00001 #ifndef _HD_H
00002 #define _HD_H
00003
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #define HD_VERSION 7
00017
00018
00019
00020
00021 #define HD_DEB_SHOW_LOG (1 << 0)
00022 #define HD_DEB_PROGRESS (1 << 1)
00023 #define HD_DEB_CREATION (1 << 2)
00024 #define HD_DEB_DRIVER_INFO (1 << 3)
00025 #define HD_DEB_PCI (1 << 4)
00026 #define HD_DEB_ISAPNP (1 << 5)
00027 #define HD_DEB_CDROM (1 << 6)
00028 #define HD_DEB_NET (1 << 7)
00029 #define HD_DEB_FLOPPY (1 << 8)
00030 #define HD_DEB_MISC (1 << 9)
00031 #define HD_DEB_SERIAL (1 << 10)
00032 #define HD_DEB_MONITOR (1 << 11)
00033 #define HD_DEB_CPU (1 << 12)
00034 #define HD_DEB_BIOS (1 << 13)
00035 #define HD_DEB_MOUSE (1 << 14)
00036 #define HD_DEB_IDE (1 << 15)
00037 #define HD_DEB_SCSI (1 << 16)
00038 #define HD_DEB_USB (1 << 17)
00039 #define HD_DEB_ADB (1 << 18)
00040 #define HD_DEB_MODEM (1 << 19)
00041 #define HD_DEB_PARALLEL (1 << 20)
00042 #define HD_DEB_ISA (1 << 21)
00043 #define HD_DEB_BOOT (1 << 22)
00044 #define HD_DEB_HDDB (1 << 23)
00045
00046 #include <stdio.h>
00047 #include <inttypes.h>
00048 #include <termios.h>
00049
00050
00051
00052
00053 #define HARDWARE_DIR "/var/lib/hardware"
00054 #define HARDWARE_UNIQUE_KEYS HARDWARE_DIR "/unique-keys"
00055
00070 #define TAG_PCI 1
00071 #define TAG_EISA 2
00072 #define TAG_USB 3
00073 #define TAG_SPECIAL 4
00074 #define TAG_PCMCIA 5
00079 #define ID_VALUE(id) ((id) & 0xffff)
00080
00084 #define ID_TAG(id) (((id) >> 16) & 0xf)
00085
00089 #define MAKE_ID(tag, id_val) ((tag << 16) | (id_val))
00090
00093
00094
00095
00096 typedef enum probe_feature {
00097 pr_memory = 1, pr_pci, pr_pci_range, pr_pci_ext, pr_isapnp, pr_cdrom,
00098 pr_cdrom_info, pr_net, pr_floppy, pr_misc, pr_misc_serial, pr_misc_par,
00099 pr_misc_floppy, pr_serial, pr_cpu, pr_bios, pr_monitor, pr_mouse, pr_ide,
00100 pr_scsi, pr_scsi_geo, pr_scsi_cache, pr_usb, pr_usb_mods, pr_adb,
00101 pr_modem, pr_modem_usb, pr_parallel, pr_parallel_lp, pr_parallel_zip,
00102 pr_isa, pr_isa_isdn, pr_dac960, pr_smart, pr_isdn, pr_kbd, pr_prom,
00103 pr_sbus, pr_int, pr_braille, pr_braille_alva, pr_braille_fhp,
00104 pr_braille_ht, pr_ignx11, pr_sys, pr_dasd, pr_i2o, pr_cciss, pr_bios_vbe,
00105 pr_isapnp_old, pr_isapnp_new, pr_isapnp_mod, pr_braille_baum, pr_manual,
00106 pr_fb, pr_bios_vbe2, pr_veth, pr_partition, pr_disk, pr_ataraid, pr_pppoe,
00107 pr_scan, pr_partition_add, pr_pcmcia, pr_fork, pr_parallel_imm, pr_s390,
00108
00109 pr_max, pr_lxrc, pr_default, pr_all
00110 } hd_probe_feature_t;
00111
00112
00113
00114
00115
00116
00117
00118
00119 typedef enum hw_item {
00120 hw_sys = 1, hw_cpu, hw_keyboard, hw_braille, hw_mouse, hw_joystick,
00121 hw_printer, hw_scanner, hw_chipcard, hw_monitor, hw_tv, hw_display,
00122 hw_framebuffer, hw_camera, hw_sound, hw_storage_ctrl, hw_network_ctrl,
00123 hw_isdn, hw_modem, hw_network, hw_disk, hw_partition, hw_cdrom, hw_floppy,
00124 hw_manual, hw_usb_ctrl, hw_usb, hw_bios, hw_pci, hw_isapnp, hw_bridge,
00125 hw_hub, hw_scsi, hw_ide, hw_memory, hw_dvb, hw_pcmcia, hw_pcmcia_ctrl,
00126 hw_ieee1394, hw_ieee1394_ctrl, hw_hotplug, hw_hotplug_ctrl, hw_zip, hw_pppoe,
00127 hw_wlan,
00128 hw_unknown, hw_all
00129 } hd_hw_item_t;
00130
00131
00132
00133
00134
00135
00136
00137 typedef enum base_classes {
00138
00139 bc_none, bc_storage, bc_network, bc_display, bc_multimedia,
00140 bc_memory, bc_bridge, bc_comm, bc_system, bc_input, bc_docking,
00141 bc_processor, bc_serial, bc_wireless, bc_i2o, bc_other = 0xff,
00142
00143
00144 bc_monitor = 0x100, bc_internal, bc_modem, bc_isdn, bc_ps2, bc_mouse,
00145 bc_storage_device, bc_network_interface, bc_keyboard, bc_printer,
00146 bc_hub, bc_braille, bc_scanner, bc_joystick, bc_chipcard, bc_camera,
00147 bc_framebuffer, bc_dvb, bc_tv, bc_partition
00148 } hd_base_classes_t;
00149
00150
00151 typedef enum sc_monitor {
00152 sc_mon_other, sc_mon_crt, sc_mon_lcd
00153 } hd_sc_monitor_t;
00154
00155
00156 typedef enum sc_storage {
00157 sc_sto_scsi, sc_sto_ide, sc_sto_floppy, sc_sto_ipi, sc_sto_raid,
00158 sc_sto_other = 0x80
00159 } hd_sc_storage_t;
00160
00161
00162 typedef enum sc_display {
00163 sc_dis_vga, sc_dis_xga, sc_dis_other = 0x80
00164 } hd_sc_display_t;
00165
00166
00167 typedef enum sc_framebuffer {
00168 sc_fb_vesa = 1
00169 } hd_sc_framebuffer_t;
00170
00171
00172 typedef enum sc_bridge {
00173 sc_bridge_host, sc_bridge_isa, sc_bridge_eisa, sc_bridge_mc,
00174 sc_bridge_pci, sc_bridge_pcmcia, sc_bridge_nubus, sc_bridge_cardbus,
00175 sc_bridge_other = 0x80
00176 } hd_sc_bridge_t;
00177
00178
00179 typedef enum sc_comm {
00180 sc_com_ser, sc_com_par, sc_com_multi, sc_com_modem, sc_com_other = 0x80
00181 } hd_sc_comm_t;
00182
00183
00184 typedef enum sc_system {
00185 sc_sys_pic, sc_sys_dma, sc_sys_timer, sc_sys_rtc, sc_sys_other = 0x80
00186 } hd_sc_system_t;
00187
00188
00189 typedef enum sc_input {
00190 sc_inp_keyb, sc_inp_digit, sc_inp_mouse, sc_inp_other = 0x80
00191 } hd_sc_input_t;
00192
00193
00194 typedef enum sc_serial {
00195 sc_ser_fire, sc_ser_access, sc_ser_ssa, sc_ser_usb, sc_ser_fiber,
00196 sc_ser_smbus, sc_ser_other = 0x80
00197 } hd_sc_serial_t;
00198
00199
00200 typedef enum sc_internal {
00201 sc_int_none, sc_int_isapnp_if, sc_int_main_mem, sc_int_cpu, sc_int_fpu,
00202 sc_int_bios, sc_int_prom, sc_int_sys
00203 } hd_sc_internal_t;
00204
00205
00206 typedef enum sc_mouse {
00207 sc_mou_ps2, sc_mou_ser, sc_mou_bus, sc_mou_usb, sc_mou_sun,
00208 sc_mou_other = 0x80
00209 } hd_sc_mouse_t;
00210
00211
00212 typedef enum sc_std {
00213 sc_sdev_disk, sc_sdev_tape, sc_sdev_cdrom, sc_sdev_floppy, sc_sdev_scanner,
00214 sc_sdev_other = 0x80
00215 } hd_sc_std_t;
00216
00217
00218 typedef enum sc_net_if {
00219 sc_nif_loopback, sc_nif_ethernet, sc_nif_tokenring, sc_nif_fddi,
00220 sc_nif_ctc, sc_nif_iucv, sc_nif_hsi, sc_nif_qeth,
00221 sc_nif_escon, sc_nif_myrinet, sc_nif_wlan, sc_nif_other = 0x80, sc_nif_sit
00222 } hd_sc_net_if_t;
00223
00224
00225 typedef enum sc_multimedia {
00226 sc_multi_video, sc_multi_audio, sc_multi_other
00227 } hd_sc_multimedia_t;
00228
00229
00230 typedef enum sc_keyboard {
00231 sc_keyboard_kbd, sc_keyboard_console
00232 } hd_sc_keyboard_t;
00233
00234
00235 typedef enum sc_hub {
00236 sc_hub_other, sc_hub_usb
00237 } hd_sc_hub_t;
00238
00239
00240 typedef enum sc_camera {
00241 sc_camera_webcam, sc_camera_digital
00242 } hd_sc_camera_t;
00243
00244
00245 typedef enum sc_modem {
00246 sc_mod_at, sc_mod_win1, sc_mod_win2, sc_mod_win3
00247 } hd_sc_modem_t;
00248
00249
00250 typedef enum pif_usb_e {
00251 pif_usb_uhci = 0, pif_usb_ohci = 0x10, pif_usb_ehci = 0x20,
00252 pif_usb_other = 0x80, pif_usb_device = 0xfe
00253 } hd_pif_usb_t;
00254
00255
00256 typedef enum pif_cdrom {
00257 pif_cdrom, pif_cdr, pif_cdrw, pif_dvd, pif_dvdr, pif_dvdram
00258 } hd_pif_cdrom_t ;
00259
00260
00261 typedef enum bus_types {
00262 bus_none, bus_isa, bus_eisa, bus_mc, bus_pci, bus_pcmcia, bus_nubus,
00263 bus_cardbus, bus_other,
00264
00265
00266 bus_ps2 = 0x80, bus_serial, bus_parallel, bus_floppy, bus_scsi, bus_ide, bus_usb,
00267 bus_adb, bus_raid, bus_sbus, bus_i2o, bus_vio
00268 } hd_bus_types_t;
00269
00276 typedef struct {
00280 unsigned invalid:1;
00290 unsigned reconfig:3;
00291
00297 unsigned configured:3;
00298
00309 unsigned available:3;
00310
00318 unsigned needed:3;
00319
00326 unsigned available_orig:3;
00327
00331 unsigned active:3;
00332 } hd_status_t;
00333
00334
00335 typedef enum {
00336 status_no = 1, status_yes, status_unknown, status_new
00337 } hd_status_value_t;
00338
00342 typedef enum {
00343 hp_none,
00344 hp_pcmcia,
00345 hp_cardbus,
00346 hp_pci,
00347 hp_usb,
00348 hp_ieee1394
00349 } hd_hotplug_t;
00350
00351
00356 typedef struct {
00357 unsigned id;
00358 char *name;
00359 } hd_id_t;
00360
00365 typedef struct s_str_list_t {
00366 struct s_str_list_t *next;
00367 char *str;
00368 } str_list_t;
00369
00370
00371
00372
00373
00374 typedef struct {
00375 unsigned start, size;
00376 unsigned char *data;
00377 } memory_range_t;
00378
00379
00380
00381
00382
00383 typedef struct {
00384 unsigned ok:1;
00385 unsigned rev;
00386 unsigned mpfp;
00387 unsigned mpconfig_ok:1;
00388 unsigned mpconfig;
00389 unsigned mpconfig_size;
00390 unsigned char feature[5];
00391 char oem_id[9];
00392 char prod_id[13];
00393 unsigned cpus, cpus_en;
00394 } smp_info_t;
00395
00396
00397
00398
00399
00400 typedef struct vbe_mode_info_s {
00401 unsigned number;
00402 unsigned attributes;
00403 unsigned width, height;
00404 unsigned bytes_p_line;
00405 unsigned pixel_size;
00406 unsigned fb_start;
00407 unsigned win_A_start;
00408 unsigned win_A_attr;
00409 unsigned win_B_start;
00410 unsigned win_B_attr;
00411 unsigned win_size;
00412 unsigned win_gran;
00413 unsigned pixel_clock;
00414 } vbe_mode_info_t;
00415
00416
00417 typedef struct {
00418 unsigned ok:1;
00419 unsigned version;
00420 unsigned oem_version;
00421 unsigned memory;
00422 unsigned fb_start;
00423 char *oem_name;
00424 char *vendor_name;
00425 char *product_name;
00426 char *product_revision;
00427 unsigned modes;
00428 vbe_mode_info_t *mode;
00429 unsigned current_mode;
00430 unsigned char ddc[0x80];
00431 } vbe_info_t;
00432
00433
00434
00435
00436
00437 typedef struct {
00438 unsigned id;
00439 unsigned char slot;
00440 unsigned char bus;
00441 unsigned char devfn;
00442 unsigned char misc;
00443 } cpq_ctlorder_t;
00444
00445
00446 typedef struct {
00447 unsigned ok:1;
00448 unsigned entry;
00449 unsigned compaq:1;
00450 cpq_ctlorder_t cpq_ctrl[32];
00451 } bios32_info_t;
00452
00453
00454
00455
00456
00457 typedef enum {
00458 sm_biosinfo, sm_sysinfo, sm_boardinfo, sm_chassis,
00459 sm_processor, sm_memctrl, sm_memmodule, sm_cache,
00460 sm_connect, sm_slot, sm_onboard, sm_oem,
00461 sm_config, sm_lang, sm_group, sm_eventlog,
00462 sm_memarray, sm_memdevice, sm_memerror, sm_memarraymap,
00463 sm_memdevicemap, sm_mouse, sm_battery, sm_reset,
00464 sm_secure, sm_power, sm_voltage, sm_cool,
00465 sm_temperature, sm_current, sm_outofband, sm_bis,
00466 sm_boot, sm_memerror64, sm_mandev, sm_mandevcomp,
00467 sm_mdtd, sm_inactive = 126, sm_end = 127
00468 } hd_smbios_type_t;
00469
00470 typedef struct {
00471 union u_hd_smbios_t *next;
00472 hd_smbios_type_t type;
00473 int data_len;
00474 unsigned char *data;
00475 str_list_t *strings;
00476 int handle;
00477 } smbios_any_t;
00478
00479 typedef struct {
00480 union u_hd_smbios_t *next;
00481 hd_smbios_type_t type;
00482 int data_len;
00483 unsigned char *data;
00484 str_list_t *strings;
00485 int handle;
00486 char *vendor;
00487 char *version;
00488 char *date;
00489 uint64_t features;
00490 unsigned xfeatures;
00491 } smbios_biosinfo_t;
00492
00493 typedef struct {
00494 union u_hd_smbios_t *next;
00495 hd_smbios_type_t type;
00496 int data_len;
00497 unsigned char *data;
00498 str_list_t *strings;
00499 int handle;
00500 char *manuf;
00501 char *product;
00502 char *version;
00503 char *serial;
00504 unsigned wake_up;
00505 } smbios_sysinfo_t;
00506
00507 typedef struct {
00508 union u_hd_smbios_t *next;
00509 hd_smbios_type_t type;
00510 int data_len;
00511 unsigned char *data;
00512 str_list_t *strings;
00513 int handle;
00514 char *manuf;
00515 char *product;
00516 char *version;
00517 char *serial;
00518 } smbios_boardinfo_t;
00519
00520 typedef struct {
00521 union u_hd_smbios_t *next;
00522 hd_smbios_type_t type;
00523 int data_len;
00524 unsigned char *data;
00525 str_list_t *strings;
00526 int handle;
00527 char *manuf;
00528 unsigned ch_type;
00529 } smbios_chassis_t;
00530
00531 typedef struct {
00532 union u_hd_smbios_t *next;
00533 hd_smbios_type_t type;
00534 int data_len;
00535 unsigned char *data;
00536 str_list_t *strings;
00537 int handle;
00538 char *socket;
00539 char *manuf;
00540 char *version;
00541 unsigned voltage;
00542 unsigned ext_clock;
00543 unsigned max_speed;
00544 unsigned current_speed;
00545 unsigned status;
00546 unsigned upgrade;
00547 } smbios_processor_t;
00548
00549 typedef struct {
00550 union u_hd_smbios_t *next;
00551 hd_smbios_type_t type;
00552 int data_len;
00553 unsigned char *data;
00554 str_list_t *strings;
00555 int handle;
00556 char *descr[8];
00557 unsigned dtype[8];
00558 } smbios_onboard_t;
00559
00560 typedef struct {
00561 union u_hd_smbios_t *next;
00562 hd_smbios_type_t type;
00563 int data_len;
00564 unsigned char *data;
00565 str_list_t *strings;
00566 int handle;
00567 char *current;
00568 } smbios_lang_t;
00569
00570 typedef struct {
00571 union u_hd_smbios_t *next;
00572 hd_smbios_type_t type;
00573 int data_len;
00574 unsigned char *data;
00575 str_list_t *strings;
00576 int handle;
00577 unsigned ecc;
00578 unsigned max_size;
00579 } smbios_memarray_t;
00580
00581 typedef struct {
00582 union u_hd_smbios_t *next;
00583 hd_smbios_type_t type;
00584 int data_len;
00585 unsigned char *data;
00586 str_list_t *strings;
00587 int handle;
00588 char *location;
00589 char *bank;
00590 unsigned width;
00591 unsigned eccbits;
00592 unsigned size;
00593 unsigned form;
00594 unsigned type1;
00595 unsigned type2;
00596 unsigned speed;
00597 } smbios_memdevice_t;
00598
00599 typedef struct {
00600 union u_hd_smbios_t *next;
00601 hd_smbios_type_t type;
00602 int data_len;
00603 unsigned char *data;
00604 str_list_t *strings;
00605 int handle;
00606 unsigned mtype;
00607 unsigned interface;
00608 unsigned buttons;
00609 } smbios_mouse_t;
00610
00611 typedef union u_hd_smbios_t {
00612 union u_hd_smbios_t *next;
00613 smbios_any_t any;
00614 smbios_biosinfo_t biosinfo;
00615 smbios_sysinfo_t sysinfo;
00616 smbios_boardinfo_t boardinfo;
00617 smbios_chassis_t chassis;
00618 smbios_processor_t processor;
00619 smbios_lang_t lang;
00620 smbios_memarray_t memarray;
00621 smbios_memdevice_t memdevice;
00622 smbios_mouse_t mouse;
00623 smbios_onboard_t onboard;
00624 } hd_smbios_t;
00625
00626
00627
00628
00629
00630 typedef struct s_pci_t {
00631 struct s_pci_t *next;
00632 unsigned data_len;
00633 unsigned data_ext_len;
00634 unsigned char data[256];
00635 char *log;
00636 unsigned flags,
00637 cmd,
00638 hdr_type,
00639 secondary_bus;
00640 unsigned bus,
00641 slot, func;
00642 unsigned base_class, sub_class, prog_if;
00643 unsigned dev, vend, sub_dev, sub_vend, rev;
00644 unsigned irq;
00645 uint64_t base_addr[6];
00646 uint64_t base_len[6];
00647 uint64_t rom_base_addr;
00648 uint64_t rom_base_len;
00649 } pci_t;
00650
00651
00652
00653
00654 typedef enum pci_flags {
00655 pci_flag_ok, pci_flag_pm, pci_flag_agp
00656 } hd_pci_flags_t;
00657
00658
00659
00660
00661
00662 typedef struct usb_s {
00663 struct usb_s *next;
00664 unsigned hd_idx;
00665 unsigned hd_base_idx;
00666
00667 str_list_t *c, *d, *e, *i, *p, *s, *t;
00668 struct usb_s *cloned;
00669 int bus, dev_nr, lev, parent, port, count, conns, used_conns, ifdescr;
00670 unsigned speed;
00671 unsigned vendor, device, rev;
00672 char *manufact, *product, *serial;
00673 char *driver;
00674 memory_range_t raw_descr;
00675 int d_cls, d_sub, d_prot;
00676 int i_alt, i_cls, i_sub, i_prot;
00677 unsigned country;
00678 } usb_t;
00679
00680
00681
00682
00683 typedef struct {
00684 int len;
00685 int type;
00686 unsigned char *data;
00687 } isapnp_res_t;
00688
00689 typedef struct {
00690 int csn;
00691 int log_devs;
00692 unsigned char *serial;
00693 unsigned char *card_regs;
00694 unsigned char (*ldev_regs)[0xd0];
00695 int res_len;
00696 unsigned broken:1;
00697 isapnp_res_t *res;
00698 } isapnp_card_t;
00699
00700 typedef struct {
00701 int read_port;
00702 int cards;
00703 isapnp_card_t *card;
00704 } isapnp_t;
00705
00706 typedef struct {
00707 isapnp_card_t *card;
00708 int dev;
00709 unsigned flags;
00710 unsigned ref:1;
00711 } isapnp_dev_t;
00712
00713
00714
00715
00716 typedef enum isapnp_flags {
00717 isapnp_flag_act
00718 } hd_isapnp_flags_t;
00719
00720
00721
00722
00723
00724 typedef struct scsi_s {
00725 struct scsi_s *next;
00726 unsigned deleted:1;
00727 unsigned generic:1;
00728 unsigned fake:1;
00729 char *dev_name;
00730 char *guessed_dev_name;
00731 int generic_dev;
00732 unsigned host, channel, id, lun;
00733 char *vendor, *model, *rev, *type_str, *serial;
00734 int type;
00735 unsigned inode_low;
00736 char *proc_dir, *driver;
00737 unsigned unique;
00738 char *info;
00739 unsigned lgeo_c, lgeo_h, lgeo_s;
00740 unsigned pgeo_c, pgeo_h, pgeo_s;
00741 uint64_t size;
00742 unsigned sec_size;
00743 unsigned cache;
00744 str_list_t *host_info;
00745 char *usb_guid;
00746 unsigned pci_info;
00747 unsigned pci_bus;
00748 unsigned pci_slot;
00749 unsigned pci_func;
00750 } scsi_t;
00751
00752
00753
00754
00755
00756 typedef struct devtree_s {
00757 struct devtree_s *next;
00758 struct devtree_s *parent;
00759 unsigned idx;
00760 char *path, *filename;
00761 unsigned pci:1;
00762 char *name, *model, *device_type, *compatible;
00763 int class_code;
00764 int vendor_id, device_id, subvendor_id, subdevice_id;
00765 int revision_id, interrupt;
00766 unsigned char *edid;
00767 } devtree_t;
00768
00769
00770
00771
00772
00773 typedef struct cdrom_info_s {
00774 struct cdrom_info_s *next;
00775 char *name;
00776 unsigned speed;
00777 unsigned cdr:1, cdrw:1, dvd:1, dvdr:1, dvdram:1;
00778 unsigned cdrom:1;
00779 struct {
00780 unsigned ok:1;
00781 char *volume, *publisher, *preparer, *application, *creation_date;
00782 } iso9660;
00783 struct {
00784 unsigned ok:1;
00785 unsigned platform;
00786 char *id_string;
00787 unsigned bootable:1;
00788 unsigned media_type;
00789 unsigned load_address;
00790 unsigned load_count;
00791 unsigned start;
00792 unsigned catalog;
00793 struct {
00794 unsigned c, h, s;
00795 unsigned size;
00796 } geo;
00797 char *label;
00798 } el_torito;
00799
00800 } cdrom_info_t;
00801
00802
00803 typedef struct {
00804 unsigned char block0[512];
00805 } floppy_info_t;
00806
00807
00808
00809
00810 typedef struct {
00811 unsigned apm_supported:1;
00812 unsigned apm_enabled:1;
00813 unsigned apm_ver, apm_subver;
00814 unsigned apm_bios_flags;
00815
00816 unsigned vbe_ver;
00817 unsigned vbe_video_mem;
00818
00819 unsigned ser_port0, ser_port1, ser_port2, ser_port3;
00820 unsigned par_port0, par_port1, par_port2;
00821
00822
00823 unsigned is_pnp_bios:1;
00824 unsigned pnp_id;
00825 unsigned lba_support:1;
00826
00827 unsigned low_mem_size;
00828 smp_info_t smp;
00829 vbe_info_t vbe;
00830
00831 unsigned smbios_ver;
00832
00833 struct {
00834 unsigned width;
00835 unsigned height;
00836 char *vendor;
00837 char *name;
00838 } lcd;
00839
00840 struct {
00841 char *vendor;
00842 char *type;
00843 unsigned bus;
00844 unsigned compat_vend;
00845 unsigned compat_dev;
00846 } mouse;
00847
00848 struct {
00849 unsigned ok:1;
00850 unsigned scroll_lock:1;
00851 unsigned num_lock:1;
00852 unsigned caps_lock:1;
00853 } led;
00854
00855 bios32_info_t bios32;
00856
00857 } bios_info_t;
00858
00859
00860
00861
00862
00863 typedef struct {
00864 unsigned has_color:1;
00865 unsigned color;
00866 } prom_info_t;
00867
00868
00869
00870
00871
00872 typedef struct {
00873 char *system_type;
00874 char *generation;
00875 char *vendor;
00876 char *model;
00877 char *serial;
00878 char *lang;
00879 } sys_info_t;
00880
00881
00882
00883
00884
00885 typedef struct {
00886 unsigned manu_year;
00887 unsigned min_vsync, max_vsync;
00888 unsigned min_hsync, max_hsync;
00889 char *vendor;
00890 char *name;
00891 char *serial;
00892 } monitor_info_t;
00893
00894
00895 typedef enum cpu_arch {
00896 arch_unknown = 0,
00897 arch_intel,
00898 arch_alpha,
00899 arch_sparc, arch_sparc64,
00900 arch_ppc, arch_ppc64,
00901 arch_68k,
00902 arch_ia64,
00903 arch_s390, arch_s390x,
00904 arch_arm,
00905 arch_mips,
00906 arch_x86_64
00907 } hd_cpu_arch_t;
00908
00909
00910 typedef enum boot_arch {
00911 boot_unknown = 0,
00912 boot_lilo, boot_milo, boot_aboot, boot_silo, boot_ppc, boot_elilo, boot_s390,
00913 boot_mips, boot_grub
00914 } hd_boot_arch_t;
00915
00916
00917 typedef struct {
00918 enum cpu_arch architecture;
00919 unsigned family;
00920 unsigned model;
00921 unsigned stepping;
00922 unsigned cache;
00923 unsigned clock;
00924 unsigned units;
00925 char *vend_name;
00926 char *model_name;
00927 char *platform;
00928 str_list_t *features;
00929 } cpu_info_t;
00930
00931
00932
00933
00934
00935 typedef struct {
00936 unsigned data_len, data_max;
00937 unsigned *data;
00938 unsigned names_len, names_max;
00939 char *names;
00940 } hddb_data_t;
00941
00942 typedef uint32_t hddb_entry_mask_t;
00943
00944 typedef struct hddb_list_s {
00945 hddb_entry_mask_t key_mask;
00946 hddb_entry_mask_t value_mask;
00947 unsigned key;
00948 unsigned value;
00949 } hddb_list_t;
00950
00951 typedef struct {
00952 unsigned list_len, list_max;
00953 hddb_list_t *list;
00954 unsigned ids_len, ids_max;
00955 unsigned *ids;
00956 unsigned strings_len, strings_max;
00957 char *strings;
00958 } hddb2_data_t;
00959
00960
00961
00962
00963 typedef struct {
00964 char *module;
00965 unsigned vendor;
00966 unsigned device;
00967 unsigned subvendor;
00968 unsigned subdevice;
00969 unsigned pciclass;
00970 unsigned classmask;
00971 } hddb_pci_t;
00972
00973
00974
00975
00976
00977 typedef enum resource_types {
00978 res_any, res_phys_mem, res_mem, res_io, res_irq, res_dma, res_monitor,
00979 res_size, res_disk_geo, res_cache, res_baud, res_init_strings, res_pppd_option,
00980 res_framebuffer
00981 } hd_resource_types_t;
00982
00983
00984
00985
00986
00987 typedef enum size_units {
00988 size_unit_cm, size_unit_cinch, size_unit_byte, size_unit_sectors,
00989 size_unit_kbyte, size_unit_mbyte, size_unit_gbyte
00990 } hd_size_units_t;
00991
00992
00993
00994
00995 typedef enum access_flags {
00996 acc_unknown, acc_ro, acc_wo, acc_rw
00997 } hd_access_flags_t;
00998
00999 typedef enum yes_no_flag {
01000 flag_unknown, flag_no, flag_yes
01001 } hd_yes_no_flag_t;
01002
01003
01004
01005
01006
01007 typedef struct {
01008 union u_hd_res_t *next;
01009 enum resource_types type;
01010 } res_any_t;
01011
01012 typedef struct {
01013 union u_hd_res_t *next;
01014 enum resource_types type;
01015 uint64_t base, range;
01016 unsigned
01017 enabled:1,
01018 access:2,
01019 prefetch:2;
01020 } res_mem_t;
01021
01022 typedef struct {
01023 union u_hd_res_t *next;
01024 enum resource_types type;
01025 uint64_t range;
01026 } res_phys_mem_t;
01027
01028 typedef struct {
01029 union u_hd_res_t *next;
01030 enum resource_types type;
01031 uint64_t base, range;
01032 unsigned
01033 enabled:1,
01034 access:2;
01035 } res_io_t;
01036
01037 typedef struct {
01038 union u_hd_res_t *next;
01039 enum resource_types type;
01040 unsigned base;
01041 unsigned triggered;
01042 unsigned enabled:1;
01043 } res_irq_t;
01044
01045 typedef struct {
01046 union u_hd_res_t *next;
01047 enum resource_types type;
01048 unsigned base;
01049 unsigned enabled:1;
01050 } res_dma_t;
01051
01052 typedef struct {
01053 union u_hd_res_t *next;
01054 enum resource_types type;
01055 enum size_units unit;
01056 uint64_t val1, val2;
01057 } res_size_t;
01058
01059 typedef struct {
01060 union u_hd_res_t *next;
01061 enum resource_types type;
01062 unsigned speed;
01063 unsigned bits, stopbits;
01064 char parity;
01065 char handshake;
01066 } res_baud_t;
01067
01068 typedef struct {
01069 union u_hd_res_t *next;
01070 enum resource_types type;
01071 unsigned size;
01072 } res_cache_t;
01073
01074 typedef struct {
01075 union u_hd_res_t *next;
01076 enum resource_types type;
01077 unsigned cyls, heads, sectors;
01078 unsigned logical:1;
01079 } res_disk_geo_t;
01080
01081 typedef struct {
01082 union u_hd_res_t *next;
01083 enum resource_types type;
01084 unsigned width, height;
01085 unsigned vfreq;
01086 unsigned interlaced:1;
01087 } res_monitor_t;
01088
01089 typedef struct {
01090 union u_hd_res_t *next;
01091 enum resource_types type;
01092 char *init1;
01093 char *init2;
01094 } res_init_strings_t;
01095
01096 typedef struct {
01097 union u_hd_res_t *next;
01098 enum resource_types type;
01099 char *option;
01100 } res_pppd_option_t;
01101
01102 typedef struct {
01103 union u_hd_res_t *next;
01104 enum resource_types type;
01105 unsigned width, height;
01106 unsigned bytes_p_line;
01107 unsigned colorbits;
01108 unsigned mode;
01109 } res_framebuffer_t;
01110
01111 typedef union u_hd_res_t {
01112 union u_hd_res_t *next;
01113 res_any_t any;
01114 res_io_t io;
01115 res_mem_t mem;
01116 res_phys_mem_t phys_mem;
01117 res_irq_t irq;
01118 res_dma_t dma;
01119 res_size_t size;
01120 res_cache_t cache;
01121 res_baud_t baud;
01122 res_disk_geo_t disk_geo;
01123 res_monitor_t monitor;
01124 res_init_strings_t init_strings;
01125 res_pppd_option_t pppd_option;
01126 res_framebuffer_t framebuffer;
01127 } hd_res_t;
01128
01129
01130
01131
01132
01133 typedef struct {
01134 uint64_t addr, size;
01135 char *dev;
01136 unsigned tag;
01137 } misc_io_t;
01138
01139 typedef struct {
01140 unsigned channel;
01141 char *dev;
01142 unsigned tag;
01143 } misc_dma_t;
01144
01145 typedef struct {
01146 unsigned irq, events;
01147 int devs;
01148 char **dev;
01149 unsigned tag;
01150 } misc_irq_t;
01151
01152 typedef struct {
01153 unsigned io_len, dma_len, irq_len;
01154 misc_io_t *io;
01155 misc_dma_t *dma;
01156 misc_irq_t *irq;
01157 str_list_t *proc_io, *proc_dma, *proc_irq;
01158 } misc_t;
01159
01160 typedef struct s_serial_t {
01161 struct s_serial_t *next;
01162 char *name;
01163 char *device;
01164 unsigned line, port, irq, baud;
01165 } serial_t;
01166
01167 typedef struct s_ser_device_t {
01168 struct s_ser_device_t *next;
01169 unsigned hd_idx;
01170 char *dev_name;
01171 str_list_t *at_resp;
01172 int fd;
01173 struct termios tio;
01174 unsigned max_baud, cur_baud;
01175 unsigned is_mouse:1;
01176 unsigned is_modem:1;
01177 unsigned do_io:1;
01178 unsigned char buf[0x1000];
01179 int buf_len;
01180 int garbage, non_pnp, pnp;
01181 unsigned char pnp_id[8];
01182 char *serial, *class_name, *dev_id, *user_name, *vend, *init_string1, *init_string2, *pppd_option;
01183 unsigned pnp_rev;
01184 unsigned bits;
01185 } ser_device_t;
01186
01187
01188
01189
01190
01191
01192
01193 typedef struct isdn_parm_s {
01194 struct isdn_parm_s *next;
01195 char *name;
01196 unsigned valid:1;
01197 unsigned conflict:1;
01198 uint64_t value;
01199 unsigned type;
01200 unsigned flags;
01201 unsigned def_value;
01202 int alt_values;
01203 unsigned *alt_value;
01204 } isdn_parm_t;
01205
01206
01207 typedef enum driver_info_type {
01208 di_any, di_display, di_module, di_mouse, di_x11, di_isdn, di_kbd
01209 } hd_driver_info_t;
01210
01211
01212 typedef struct {
01213 union driver_info_u *next;
01214 enum driver_info_type type;
01215 str_list_t *hddb0, *hddb1;
01216 } driver_info_any_t;
01217
01218
01219 typedef struct {
01220 union driver_info_u *next;
01221 enum driver_info_type type;
01222 str_list_t *hddb0, *hddb1;
01223 unsigned width, height;
01224 unsigned min_vsync, max_vsync;
01225 unsigned min_hsync, max_hsync;
01226 unsigned bandwidth;
01227 } driver_info_display_t;
01228
01229
01230 typedef struct {
01231 union driver_info_u *next;
01232 enum driver_info_type type;
01233 str_list_t *hddb0, *hddb1;
01234 unsigned active:1;
01235 unsigned modprobe:1;
01236 str_list_t *names;
01237 str_list_t *mod_args;
01238 char *conf;
01239 } driver_info_module_t;
01240
01241
01242 typedef struct {
01243 union driver_info_u *next;
01244 enum driver_info_type type;
01245 str_list_t *hddb0, *hddb1;
01246 char *xf86;
01247 char *gpm;
01248 int buttons;
01249 int wheels;
01250 } driver_info_mouse_t;
01251
01252
01253 typedef struct {
01254 union driver_info_u *next;
01255 enum driver_info_type type;
01256 str_list_t *hddb0, *hddb1;
01257 char *server;
01258 char *xf86_ver;
01259 unsigned x3d:1;
01260 struct {
01261 unsigned all:5;
01262 unsigned c8:1, c15:1, c16:1, c24:1, c32:1;
01263 } colors;
01264 unsigned dacspeed;
01265 str_list_t *extensions;
01266 str_list_t *options;
01267 str_list_t *raw;
01268 char *script;
01269 } driver_info_x11_t;
01270
01271
01272 typedef struct {
01273 union driver_info_u *next;
01274 enum driver_info_type type;
01275 str_list_t *hddb0, *hddb1;
01276 int i4l_type, i4l_subtype;
01277 char *i4l_name;
01278 isdn_parm_t *params;
01279 } driver_info_isdn_t;
01280
01281
01282 typedef struct {
01283 union driver_info_u *next;
01284 enum driver_info_type type;
01285 str_list_t *hddb0, *hddb1;
01286 char *XkbRules;
01287 char *XkbModel;
01288 char *XkbLayout;
01289 char *keymap;
01290 } driver_info_kbd_t;
01291
01292
01293
01294
01295 typedef union driver_info_u {
01296 union driver_info_u *next;
01297 driver_info_any_t any;
01298 driver_info_module_t module;
01299 driver_info_mouse_t mouse;
01300 driver_info_x11_t x11;
01301 driver_info_display_t display;
01302 driver_info_isdn_t isdn;
01303 driver_info_kbd_t kbd;
01304 } driver_info_t;
01305
01306
01307
01308
01309
01310
01311
01312 typedef enum hd_detail_type {
01313 hd_detail_pci, hd_detail_usb, hd_detail_isapnp, hd_detail_cdrom,
01314 hd_detail_floppy, hd_detail_bios, hd_detail_cpu, hd_detail_prom,
01315 hd_detail_monitor, hd_detail_sys, hd_detail_scsi, hd_detail_devtree
01316 } hd_detail_type_t;
01317
01318 typedef struct {
01319 enum hd_detail_type type;
01320 pci_t *data;
01321 } hd_detail_pci_t;
01322
01323 typedef struct {
01324 enum hd_detail_type type;
01325 usb_t *data;
01326 } hd_detail_usb_t;
01327
01328 typedef struct {
01329 enum hd_detail_type type;
01330 isapnp_dev_t *data;
01331 } hd_detail_isapnp_t;
01332
01333 typedef struct {
01334 enum hd_detail_type type;
01335 cdrom_info_t *data;
01336 } hd_detail_cdrom_t;
01337
01338 typedef struct {
01339 enum hd_detail_type type;
01340 floppy_info_t *data;
01341 } hd_detail_floppy_t;
01342
01343 typedef struct {
01344 enum hd_detail_type type;
01345 bios_info_t *data;
01346 } hd_detail_bios_t;
01347
01348 typedef struct {
01349 enum hd_detail_type type;
01350 cpu_info_t *data;
01351 } hd_detail_cpu_t;
01352
01353 typedef struct {
01354 enum hd_detail_type type;
01355 prom_info_t *data;
01356 } hd_detail_prom_t;
01357
01358 typedef struct {
01359 enum hd_detail_type type;
01360 monitor_info_t *data;
01361 } hd_detail_monitor_t;
01362
01363 typedef struct {
01364 enum hd_detail_type type;
01365 sys_info_t *data;
01366 } hd_detail_sys_t;
01367
01368 typedef struct {
01369 enum hd_detail_type type;
01370 scsi_t *data;
01371 } hd_detail_scsi_t;
01372
01373 typedef struct {
01374 enum hd_detail_type type;
01375 devtree_t *data;
01376 } hd_detail_devtree_t;
01377
01378 typedef union {
01379 enum hd_detail_type type;
01380 hd_detail_pci_t pci;
01381 hd_detail_usb_t usb;
01382 hd_detail_isapnp_t isapnp;
01383 hd_detail_cdrom_t cdrom;
01384 hd_detail_floppy_t floppy;
01385 hd_detail_bios_t bios;
01386 hd_detail_cpu_t cpu;
01387 hd_detail_prom_t prom;
01388 hd_detail_monitor_t monitor;
01389 hd_detail_sys_t sys;
01390 hd_detail_scsi_t scsi;
01391 hd_detail_devtree_t devtree;
01392 } hd_detail_t;
01393
01394
01395
01396 typedef struct hd_manual_s {
01397 struct hd_manual_s *next;
01398
01399 char *unique_id;
01400 char *parent_id;
01401 char *child_ids;
01402 unsigned hw_class;
01403 char *model;
01404
01405 hd_status_t status;
01406 char *config_string;
01407
01408
01409
01410
01411 str_list_t *key;
01412 str_list_t *value;
01413 } hd_manual_t;
01414
01415
01421 typedef struct s_hd_t {
01422 struct s_hd_t *next;
01428 unsigned idx;
01429
01435 unsigned broken:1;
01436
01440 hd_id_t bus;
01441
01446 unsigned slot;
01447
01451 unsigned func;
01452
01456 hd_id_t base_class;
01457
01461 hd_id_t sub_class;
01462
01466 hd_id_t prog_if;
01467
01474 hd_id_t vendor;
01475
01484 hd_id_t device;
01485
01492 hd_id_t sub_vendor;
01493
01500 hd_id_t sub_device;
01501
01507 hd_id_t revision;
01508
01512 char *serial;
01513
01518 hd_id_t compat_vendor;
01519
01524 hd_id_t compat_device;
01525
01530 hd_hw_item_t hw_class;
01531
01536 unsigned char hw_class_list[(hw_all + 7) / 8];
01544 char *model;
01545
01551 unsigned attached_to;
01552
01558 char *unix_dev_name;
01559
01566 char *unix_dev_name2;
01567
01574 char *rom_id;
01575
01586 char *unique_id;
01587
01591 unsigned module;
01592
01596 unsigned line;
01597
01601 unsigned count;
01602
01606 hd_res_t *res;
01607
01612 hd_detail_t *detail;
01613
01619 str_list_t *extra_info;
01620
01626 hd_status_t status;
01627
01634 char *config_string;
01635
01640 hd_hotplug_t hotplug;
01641
01646 unsigned hotplug_slot;
01647
01648 struct is_s {
01649 unsigned agp:1;
01650 unsigned isapnp:1;
01651 unsigned notready:1;
01652 unsigned manual:1;
01653 unsigned softraiddisk:1;
01654 unsigned zip:1;
01655 unsigned cdr:1;
01656 unsigned cdrw:1;
01657 unsigned dvd:1;
01658 unsigned dvdr:1;
01659 unsigned dvdram:1;
01660 unsigned pppoe:1;
01661 unsigned wlan:1;
01662 } is;
01663
01664 struct tag_s {
01665 unsigned remove:1;
01666 unsigned freeit:1;
01667 unsigned fixed:1;
01668 unsigned ser_skip:1;
01669 unsigned ser_device:2;
01670 } tag;
01671
01677 unsigned char *block0;
01678
01682 char *driver;
01683
01691 char *old_unique_id;
01692
01698 char *parent_id;
01699
01705 str_list_t *child_ids;
01706
01711 char *unique_id1;
01712
01719 char *usb_guid;
01720
01721 driver_info_t *driver_info;
01722
01723 str_list_t *requires;
01724
01725
01726
01727
01728
01729 unsigned ref_cnt;
01730 struct s_hd_t *ref;
01731 } hd_t;
01732
01733
01737 typedef struct {
01743 hd_t *hd;
01744
01753 void (*progress)(char *pos, char *msg);
01754
01758 char *log;
01759
01765 unsigned debug;
01766
01772 struct flag_struct {
01773 unsigned internal:1;
01774 unsigned dformat:2;
01775 unsigned no_parport:1;
01776 unsigned iseries:1;
01777 unsigned list_all:1;
01778 unsigned fast:1;
01779 unsigned list_md:1;
01780 unsigned nofork:1;
01781 unsigned forked:1;
01782 } flags;
01783
01784
01785
01786
01787
01788
01789 unsigned char probe[(pr_all + 7) / 8];
01790 unsigned char probe_set[(pr_all + 7) / 8];
01791 unsigned char probe_clr[(pr_all + 7) / 8];
01792 unsigned last_idx;
01793 unsigned module;
01794 enum boot_arch boot;
01795 hd_t *old_hd;
01796 pci_t *pci;
01797 isapnp_t *isapnp;
01798 cdrom_info_t *cdrom;
01799 str_list_t *net;
01800 str_list_t *floppy;
01801 misc_t *misc;
01802 serial_t *serial;
01803 scsi_t *scsi;
01804 ser_device_t *ser_mouse;
01805 ser_device_t *ser_modem;
01806 str_list_t *cpu;
01807 str_list_t *klog;
01808 str_list_t *proc_usb;
01809 usb_t *usb;
01810 hddb_pci_t *hddb_pci;
01811 hddb2_data_t *hddb2[2];
01812 str_list_t *kmods;
01813 uint64_t used_irqs;
01814 uint64_t assigned_irqs;
01815 memory_range_t bios_rom;
01816 memory_range_t bios_ram;
01817 memory_range_t bios_ebda;
01818 unsigned display;
01819 unsigned color_code;
01820 char *cmd_line;
01821 str_list_t *xtra_hd;
01822 devtree_t *devtree;
01823 unsigned kernel_version;
01824 int in_vmware;
01825 hd_manual_t *manual;
01826 str_list_t *disks;
01827 str_list_t *partitions;
01828 hd_smbios_t *smbios;
01829 struct {
01830 unsigned ok:1;
01831 unsigned size;
01832 unsigned used;
01833 void *data;
01834 int id;
01835 int updated;
01836 } shm;
01837 } hd_data_t;
01838
01839
01840
01841
01842
01843
01844
01845
01846
01847
01848
01849
01850 void hd_scan(hd_data_t *hd_data);
01851
01853 hd_data_t *hd_free_hd_data(hd_data_t *hd_data);
01854
01856 hd_t *hd_free_hd_list(hd_t *hd);
01857
01858 void hd_set_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
01859 void hd_clear_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
01860 int hd_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
01861 void hd_set_probe_feature_hw(hd_data_t *hd_data, hd_hw_item_t item);
01862
01863 enum probe_feature hd_probe_feature_by_name(char *name);
01864 char *hd_probe_feature_by_value(enum probe_feature feature);
01865
01866 int hd_module_is_active(hd_data_t *hd_data, char *mod);
01867
01868 hd_t *hd_base_class_list(hd_data_t *hd_data, unsigned base_class);
01869 hd_t *hd_sub_class_list(hd_data_t *hd_data, unsigned base_class, unsigned sub_class);
01870 hd_t *hd_bus_list(hd_data_t *hd_data, unsigned bus);
01871 hd_t *hd_list(hd_data_t *hd_data, hd_hw_item_t item, int rescan, hd_t *hd_old);
01872 hd_t *hd_list_with_status(hd_data_t *hd_data, hd_hw_item_t item, hd_status_t status);
01873 hd_t *hd_list2(hd_data_t *hd_data, hd_hw_item_t *items, int rescan);
01874 hd_t *hd_list_with_status2(hd_data_t *hd_data, hd_hw_item_t *items, hd_status_t status);
01875
01876 int hd_has_special_eide(hd_data_t *hd_data);
01877 int hd_has_pcmcia(hd_data_t *hd_data);
01878 int hd_apm_enabled(hd_data_t *hd_data);
01879 int hd_usb_support(hd_data_t *hd_data);
01880 int hd_smp_support(hd_data_t *hd_data);
01881 int hd_mac_color(hd_data_t *hd_data);
01882 int hd_color(hd_data_t *hd_data);
01883 unsigned hd_display_adapter(hd_data_t *hd_data);
01884 unsigned hd_boot_disk(hd_data_t *hd_data, int *matches);
01885 enum cpu_arch hd_cpu_arch(hd_data_t *hd_data);
01886 enum boot_arch hd_boot_arch(hd_data_t *hd_data);
01887
01888 hd_t *hd_get_device_by_idx(hd_data_t *hd_data, unsigned idx);
01889
01890 void hd_set_hw_class(hd_t *hd, hd_hw_item_t hw_class);
01891 int hd_is_hw_class(hd_t *hd, hd_hw_item_t hw_class);
01892
01893
01894
01895 str_list_t *get_hddb_packages(hd_data_t *hd_data);
01896
01897 void hddb_dump_raw(hddb2_data_t *hddb, FILE *f);
01898 void hddb_dump(hddb2_data_t *hddb, FILE *f);
01899
01900
01901
01902 void hd_dump_entry(hd_data_t *hd_data, hd_t *hd, FILE *f);
01903
01904
01905
01906
01907 cdrom_info_t *hd_read_cdrom_info(hd_data_t *hd_data, hd_t *hd);
01908
01909
01910 hd_manual_t *hd_manual_read_entry(hd_data_t *hd_data, const char *id);
01911 int hd_manual_write_entry(hd_data_t *hd_data, hd_manual_t *entry);
01912 hd_manual_t *hd_free_manual(hd_manual_t *manual);
01913 hd_t *hd_read_config(hd_data_t *hd_data, const char *id);
01914 int hd_write_config(hd_data_t *hd_data, hd_t *hd);
01915 char *hd_hw_item_name(hd_hw_item_t item);
01916 char *hd_status_value_name(hd_status_value_t status);
01917 int hd_change_status(const char *id, hd_status_t status, const char *config_string);
01918
01919
01920
01921
01922
01923
01924
01925
01926
01927 #define CDBISDN_VERSION 0x0100
01928
01929 #ifndef PCI_ANY_ID
01930 #define PCI_ANY_ID 0xffff
01931 #endif
01932
01933 #define CDBISDN_P_NONE 0x0
01934 #define CDBISDN_P_IRQ 0x1
01935 #define CDBISDN_P_MEM 0x2
01936 #define CDBISDN_P_IO 0x3
01937
01938
01939 typedef struct {
01940 char *name;
01941 char *shortname;
01942 int vnr;
01943 int refcnt;
01944 } cdb_isdn_vendor;
01945
01946 typedef struct {
01947 int handle;
01948 int vhandle;
01949 const char *name;
01950 const char *lname;
01951 const char *Class;
01952 const char *bus;
01953 int revision;
01954 int vendor;
01955 int device;
01956 int subvendor;
01957
01958 int subdevice;
01959
01960 unsigned int features;
01961 int line_cnt;
01962 int vario_cnt;
01963 int vario;
01964 } cdb_isdn_card;
01965
01966 typedef struct {
01967 int handle;
01968 int next_vario;
01969 int drvid;
01970 int typ;
01971 int subtyp;
01972 int smp;
01973 const char *mod_name;
01974 const char *para_str;
01975 const char *mod_preload;
01976 const char *cfg_prog;
01977 const char *firmware;
01978 const char *description;
01979 const char *need_pkg;
01980 const char *info;
01981 const char *protocol;
01982 const char *interface;
01983 const char *io;
01984 const char *irq;
01985 const char *membase;
01986 const char *features;
01987 int card_ref;
01988 const char *name;
01989 } cdb_isdn_vario;
01990
01991
01992 extern cdb_isdn_vendor *hd_cdbisdn_get_vendor(int);
01993 extern cdb_isdn_card *hd_cdbisdn_get_card(int);
01994 extern cdb_isdn_vario *hd_cdbisdn_get_vario_from_type(int, int);
01995 extern cdb_isdn_card *hd_cdbisdn_get_card_from_type(int, int);
01996 extern cdb_isdn_card *hd_cdbisdn_get_card_from_id(int, int, int, int);
01997 extern cdb_isdn_vario *hd_cdbisdn_get_vario(int);
01998 extern int hd_cdbisdn_get_version(void);
01999 extern int hd_cdbisdn_get_db_version(void);
02000 extern char *hd_cdbisdn_get_db_date(void);
02001
02002
02003
02004 #ifdef __cplusplus
02005 }
02006 #endif
02007
02008 #endif