hd.c File Reference
`#include <stdio.h>`
`#include <stdlib.h>`
`#include <string.h>`
`#include <unistd.h>`
`#include <stdarg.h>`
`#include <fcntl.h>`
`#include <signal.h>`
`#include <ctype.h>`
`#include <errno.h>`
`#include <dirent.h>`
`#include <time.h>`
`#include <sys/stat.h>`
`#include <sys/types.h>`
`#include <sys/wait.h>`
`#include <sys/time.h>`
`#include <sys/ioctl.h>`
`#include <sys/mount.h>`
`#include <sys/ipc.h>`
`#include <sys/shm.h>`
`#include <sys/mman.h>`
`#include <linux/pci.h>`
`#include <linux/hdreg.h>`
`#include <linux/fs.h>`
`#include "hd.h"`
`#include "hddb.h"`
`#include "hd_int.h"`
`#include "smbios.h"`
`#include "memory.h"`
`#include "isapnp.h"`
`#include "monitor.h"`
`#include "cpu.h"`
`#include "misc.h"`
`#include "mouse.h"`
`#include "floppy.h"`
`#include "bios.h"`
`#include "serial.h"`
`#include "net.h"`
`#include "version.h"`
`#include "usb.h"`
`#include "modem.h"`
`#include "parallel.h"`
`#include "isa.h"`
`#include "isdn.h"`
`#include "kbd.h"`
`#include "prom.h"`
`#include "sbus.h"`
`#include "int.h"`
`#include "braille.h"`
`#include "sys.h"`
`#include "manual.h"`
`#include "fb.h"`
`#include "pppoe.h"`
`#include "pcmcia.h"`
`#include "s390.h"`
`#include "pci.h"`
`#include "block.h"`
`#include "edd.h"`
`#include "input.h"`
`#include "wlan.h"`
`#include "hal.h"`
`#include "klog.h"`
`#include "drm.h"`

## Data Structures

struct | disk_s
struct | pr_flags_t
struct | s_mod_names

## Macros

#define | _GNU_SOURCE /* strcasestr() */
#define | _LINUX_AUDIT_H_
#define | _LINUX_PRIO_TREE_H
#define | u64 uint64_t
#define | BLKSSZGET _IO(0x12,104) /* get block device sector size */
#define | INT_CRC(a, b)
#define | STR_CRC(a, b)

## Typedefs

typedef struct disk_s | disk_t

## Functions

static pr_flags_t * | pr_flags_by_name (char *name)
static pr_flags_t * | pr_flags_by_id (enum probe_feature feature)
static int | set_probe_val (hd_data_t *hd_data, enum probe_feature feature, char *val)
static void | fix_probe_features (hd_data_t *hd_data)
static void | set_probe_feature (hd_data_t *hd_data, enum probe_feature feature, unsigned val)
static void | free_old_hd_entries (hd_data_t *hd_data)
static hd_t * | free_hd_entry (hd_t *hd)
static hd_t * | add_hd_entry2 (hd_t **hd, hd_t *new_hd)
static void | timeout_alarm_handler (int signal)
static void | get_probe_env (hd_data_t *hd_data)
static void | hd_scan_xtra (hd_data_t *hd_data)
static hd_t * | hd_get_device_by_id (hd_data_t *hd_data, char *id)
static int | has_item (hd_hw_item_t *items, hd_hw_item_t item)
static int | has_hw_class (hd_t *hd, hd_hw_item_t *items)
static void | hd_scan_with_hal (hd_data_t *hd_data)
static void | hd_scan_no_hal (hd_data_t *hd_data)
static void | test_read_block0_open (void *arg)
static void | get_kernel_version (hd_data_t *hd_data)
static int | is_modem (hd_data_t *hd_data, hd_t *hd)
static int | is_audio (hd_data_t *hd_data, hd_t *hd)
static int | is_pppoe (hd_data_t *hd_data, hd_t *hd)
static void | assign_hw_class (hd_data_t *hd_data, hd_t *hd)
static void | short_vendor (char *vendor)
static void | create_model_name (hd_data_t *hd_data, hd_t *hd)
static void | copy_log2shm (hd_data_t *hd_data)
static void | sigchld_handler (int)
static void | sigusr1_handler (int)
static char * | hd_shm_add_str (hd_data_t *hd_data, char *str)
static str_list_t * | hd_shm_add_str_list (hd_data_t *hd_data, str_list_t *sl)
static hd_udevinfo_t * | hd_free_udevinfo (hd_udevinfo_t *ui)
static hd_sysfsdrv_t * | hd_free_sysfsdrv (hd_sysfsdrv_t *sf)
int | get_probe_val_int (hd_data_t *hd_data, enum probe_feature feature)
char * | get_probe_val_str (hd_data_t *hd_data, enum probe_feature feature)
str_list_t * | get_probe_val_list (hd_data_t *hd_data, enum probe_feature feature)
void | hd_set_probe_feature (hd_data_t *hd_data, enum probe_feature feature)
void | hd_clear_probe_feature (hd_data_t *hd_data, enum probe_feature feature)
int | hd_probe_feature (hd_data_t *hd_data, enum probe_feature feature)
void | hd_set_probe_feature_hw (hd_data_t *hd_data, hd_hw_item_t item)
hd_data_t * | hd_free_hd_data (hd_data_t *hd_data)
| Free all data.
hal_prop_t * | hd_free_hal_properties (hal_prop_t *prop)
hal_device_t * | hd_free_hal_devices (hal_device_t *dev)
driver_info_t * | free_driver_info (driver_info_t *di)
int | exists_hd_entry (hd_data_t *hd_data, hd_t *old_hd, hd_t *hd_ex)
hd_t * | hd_free_hd_list (hd_t *hd)
| Free hardware items returned by e.g. hd_list().
hd_detail_t * | free_hd_detail (hd_detail_t *d)
misc_t * | free_misc (misc_t *m)
scsi_t * | free_scsi (scsi_t *scsi, int free_all)
hd_manual_t * | hd_free_manual (hd_manual_t *manual)
void * | new_mem (size_t size)
void * | resize_mem (void *p, size_t n)
void * | add_mem (void *p, size_t elem_size, size_t n)
char * | new_str (const char *s)
void * | free_mem (void *p)
void | join_res_io (hd_res_t **res1, hd_res_t *res2)
void | join_res_irq (hd_res_t **res1, hd_res_t *res2)
void | join_res_dma (hd_res_t **res1, hd_res_t *res2)
int | have_common_res (hd_res_t *res1, hd_res_t *res2)
hd_res_t * | free_res_list (hd_res_t *res)
hd_res_t * | add_res_entry (hd_res_t **res, hd_res_t *new_res)
hd_t * | add_hd_entry (hd_data_t *hd_data, unsigned line, unsigned count)
void | hd_scan (hd_data_t *hd_data)
| the actual hardware scan
char * | isa_id2str (unsigned id)
char * | eisa_vendor_str (unsigned v)
unsigned | name2eisa_id (char *s)
char * | canon_str (char *s, int len)
int | hex (char *s, int n)
int | str2float (char *s, int n)
char * | float2str (int f, int n)
hd_t * | hd_get_device_by_idx (hd_data_t *hd_data, unsigned idx)
char * | mod_name_by_idx (unsigned idx)
void | hd_log (hd_data_t *hd_data, char *buf, ssize_t len)
void | hd_log_printf (hd_data_t *hd_data, char *format,...)
void | hd_log_hex (hd_data_t *hd_data, int with_ascii, unsigned data_len, unsigned char *data)
void | str_printf (char **buf, int offset, char *format,...)
void | hexdump (char **buf, int with_ascii, unsigned data_len, unsigned char *data)
str_list_t * | read_file (char *file_name, unsigned start_line, unsigned lines)
str_list_t * | read_dir (char *dir_name, int type)
str_list_t * | read_dir_canonical (char *dir_name, int type)
char * | hd_read_sysfs_link (char *base_dir, char *link_name)
str_list_t * | subcomponent_list (str_list_t *list, char *comp, int max)
int | has_subcomponent (str_list_t *list, char *comp)
void | progress (hd_data_t *hd_data, unsigned pos, unsigned count, char *msg)
enum probe_feature | hd_probe_feature_by_name (char *name)
char * | hd_probe_feature_by_value (enum probe_feature feature)
void | remove_hd_entries (hd_data_t *hd_data)
void | remove_tagged_hd_entries (hd_data_t *hd_data)
int | hd_module_is_active (hd_data_t *hd_data, char *mod)
int | hd_has_pcmcia (hd_data_t *hd_data)
int | hd_apm_enabled (hd_data_t *hd_data)
int | hd_usb_support (hd_data_t *hd_data)
int | hd_smp_support (hd_data_t *hd_data)
int | hd_color (hd_data_t *hd_data)
int | hd_mac_color (hd_data_t *hd_data)
unsigned | hd_display_adapter (hd_data_t *hd_data)
enum cpu_arch | hd_cpu_arch (hd_data_t *hd_data)
enum boot_arch | hd_boot_arch (hd_data_t *hd_data)
int | hd_is_uml (hd_data_t *hd_data)
int | hd_is_sgi_altix (hd_data_t *hd_data)
int | hd_is_xen (hd_data_t *hd_data)
void | hd_copy (hd_t *dst, hd_t *src)
hd_t * | hd_list (hd_data_t *hd_data, hd_hw_item_t item, int rescan, hd_t *hd_old)
hd_t * | hd_list_with_status (hd_data_t *hd_data, hd_hw_item_t item, hd_status_t status)
hd_t * | hd_list2 (hd_data_t *hd_data, hd_hw_item_t *items, int rescan)
hd_t * | hd_list_with_status2 (hd_data_t *hd_data, hd_hw_item_t *items, hd_status_t status)
hd_t * | hd_base_class_list (hd_data_t *hd_data, unsigned base_class)
hd_t * | hd_sub_class_list (hd_data_t *hd_data, unsigned base_class, unsigned sub_class)
hd_t * | hd_bus_list (hd_data_t *hd_data, unsigned bus)
const char * | hd_busid_to_hwcfg (int busid)
int | hd_timeout (void(*func)(void *), void *arg, int timeout)
str_list_t * | read_kmods (hd_data_t *hd_data)
str_list_t * | get_cmdline (hd_data_t *hd_data, char *key)
char * | get_cmd_param (hd_data_t *hd_data, int field)
unsigned | get_disk_crc (unsigned char *data, unsigned len)
disk_t * | add_disk_entry (disk_t **dl, disk_t *new_dl)
disk_t * | free_disk_list (disk_t *dl)
int | dev_name_duplicate (disk_t *dl, char *dev_name)
unsigned | hd_boot_disk (hd_data_t *hd_data, int *matches)
void | update_irq_usage (hd_data_t *hd_data)
int | run_cmd (hd_data_t *hd_data, char *cmd)
int | probe_module (hd_data_t *hd_data, char *module)
int | load_module_with_params (hd_data_t *hd_data, char *module, char *params)
int | load_module (hd_data_t *hd_data, char *module)
int | unload_module (hd_data_t *hd_data, char *module)
int | cmp_hd (hd_t *hd1, hd_t *hd2)
unsigned | has_something_attached (hd_data_t *hd_data, hd_t *hd)
void | crc64 (uint64_t *id, void *p, int len)
char * | numid2str (uint64_t id, int len)
void | hd_add_old_id (hd_t *hd)
void | hd_add_id (hd_data_t *hd_data, hd_t *hd)
devtree_t * | free_devtree (hd_data_t *hd_data)
unsigned char * | read_block0 (hd_data_t *hd_data, char *dev, int *timeout)
char * | vend_id2str (unsigned vend)
int | hd_change_config_status (hd_data_t *hd_data, const char *id, hd_status_t status, const char *config_string)
int | hd_change_status (const char *id, hd_status_t status, const char *config_string)
int | hd_getdisksize (hd_data_t *hd_data, char *dev, int fd, hd_res_t **geo, hd_res_t **size)
str_list_t * | hd_split (char del, const char *str)
char * | hd_join (char *del, str_list_t *str)
int | is_pcmcia_ctrl (hd_data_t *hd_data, hd_t *hd)
void | hd_set_hw_class (hd_t *hd, hd_hw_item_t hw_class)
int | hd_is_hw_class (hd_t *hd, hd_hw_item_t hw_class)
void | hd_fork (hd_data_t *hd_data, int timeout, int total_timeout)
void | hd_fork_done (hd_data_t *hd_data)
void | hd_shm_init (hd_data_t *hd_data)
void | hd_shm_clean (hd_data_t *hd_data)
void | hd_shm_done (hd_data_t *hd_data)
void * | hd_shm_add (hd_data_t *hd_data, void *ptr, unsigned len)
int | hd_is_shm_ptr (hd_data_t *hd_data, void *ptr)
void | hd_move_to_shm (hd_data_t *hd_data)
void | read_udevinfo (hd_data_t *hd_data)
char * | hd_version ()
hd_t * | hd_find_sysfs_id (hd_data_t *hd_data, char *id)
hd_t * | hd_find_sysfs_id_devname (hd_data_t *hd_data, char *id, char *devname)
void | hd_sysfs_driver_list (hd_data_t *hd_data)
int | hd_report_this (hd_data_t *hd_data, hd_t *hd)
str_list_t * | hd_module_list (hd_data_t *hd_data, unsigned id)
int | hd_read_mmap (hd_data_t *hd_data, char *name, unsigned char *buf, off_t start, unsigned size)
char * | hd_get_hddb_dir ()
char * | hd_get_hddb_path (char *sub)
int | hd_attr_uint (char *attr, uint64_t *u, int base)
str_list_t * | hd_attr_list (char *str)
char * | hd_sysfs_id (char *path)
char * | hd_sysfs_name2_dev (char *str)
char * | hd_sysfs_dev2_name (char *str)
char * | get_sysfs_attr (const char *bus, const char *device, const char *attr)
char * | get_sysfs_attr_by_path (const char *path, const char *attr)
char * | get_sysfs_attr_by_path2 (const char *path, const char *attr, unsigned *len)
int | hd_mod_cmp (char *str1, char *str2)
str_list_t * | sort_str_list (str_list_t *sl0, int(*cmp_func)(const void *, const void *))

## Variables

static pid_t | child_id
static volatile pid_t | child
static hd_data_t * | hd_data_sig
static struct s_mod_names | pr_modules []
static pr_flags_t | pr_flags []

## Macro Definition Documentation

## _GNU_SOURCE

#define _GNU_SOURCE /* strcasestr() */

## _LINUX_AUDIT_H_

#define _LINUX_AUDIT_H_

## _LINUX_PRIO_TREE_H

#define _LINUX_PRIO_TREE_H