00001 #include <sysfs/dlist.h>
00002 #include <sysfs/libsysfs.h>
00003
00004 #define PROC_CMDLINE "/proc/cmdline"
00005 #define PROC_PCI_DEVICES "/proc/bus/pci/devices"
00006 #define PROC_PCI_BUS "/proc/bus/pci"
00007 #define PROC_CPUINFO "/proc/cpuinfo"
00008 #define PROC_IOPORTS "/proc/ioports"
00009 #define PROC_DMA "/proc/dma"
00010 #define PROC_INTERRUPTS "/proc/interrupts"
00011 #define PROC_NVRAM_22 "/proc/driver/nvram"
00012 #define PROC_NVRAM_24 "/proc/nvram"
00013 #define PROC_IDE "/proc/ide"
00014 #define PROC_SCSI "/proc/scsi"
00015 #define PROC_CDROM_INFO "/proc/sys/dev/cdrom/info"
00016 #define PROC_NET_IF_INFO "/proc/net/dev"
00017 #define PROC_MODULES "/proc/modules"
00018 #define PROC_DRIVER_SERIAL "/proc/tty/driver/serial"
00019 #define PROC_DRIVER_MACSERIAL "/proc/tty/driver/macserial"
00020 #define PROC_PARPORT_22 "/proc/parport/"
00021 #define PROC_PARPORT_24 "/proc/sys/dev/parport/parport"
00022 #define PROC_KCORE "/proc/kcore"
00023
00024 #define PROC_USB_DEVICES "/proc/bus/usb/devices_please-use-sysfs-instead"
00025 #define PROC_PROM "/proc/device-tree"
00026 #define PROC_MEMINFO "/proc/meminfo"
00027 #define PROC_VERSION "/proc/version"
00028 #define PROC_ISAPNP "/proc/isapnp"
00029 #define PROC_ISERIES "/proc/iSeries"
00030 #define PROC_ISERIES_VETH "/proc/iSeries/veth"
00031 #define PROC_PARTITIONS "/proc/partitions"
00032 #define PROC_APM "/proc/apm"
00033
00034 #define DEV_NVRAM "/dev/nvram"
00035 #define DEV_PSAUX "/dev/psaux"
00036 #define DEV_ADBMOUSE "/dev/adbmouse"
00037 #define DEV_MEM "/dev/mem"
00038 #define DEV_KBD "/dev/kbd"
00039 #define DEV_CONSOLE "/dev/console"
00040 #define DEV_OPENPROM "/dev/openprom"
00041 #define DEV_SUNMOUSE "/dev/sunmouse"
00042 #define DEV_MICE "/dev/input/mice"
00043 #define DEV_FB "/dev/fb"
00044 #define DEV_FB0 "/dev/fb0"
00045
00046 #define PROG_MODPROBE "/sbin/modprobe"
00047 #define PROG_RMMOD "/sbin/rmmod"
00048 #define PROG_CARDCTL "/sbin/cardctl"
00049 #define PROG_UDEVINFO "/usr/bin/udevinfo"
00050
00051 #define KLOG_BOOT "/var/log/boot.msg"
00052 #define ISAPNP_CONF "/etc/isapnp.conf"
00053
00054 #define KERNEL_22 0x020200
00055 #define KERNEL_24 0x020400
00056 #define KERNEL_26 0x020600
00057
00058 #if defined(__s390__) || defined(__s390x__) || defined(__alpha__) || defined(LIBHD_TINY)
00059 #define WITH_ISDN 0
00060 #else
00061 #define WITH_ISDN 1
00062 #endif
00063
00064 #define PROGRESS(a, b, c) progress(hd_data, a, b, c)
00065 #define ADD2LOG(a...) str_printf(&hd_data->log, -2, a)
00066
00067 #undef LIBHD_MEMCHECK
00068
00069 #if defined(__i386__) || defined(__PPC__)
00070
00071
00072
00073
00074
00075 #ifdef __i386__
00076 #define CALLED_FROM(f, a) ((void *) ((unsigned *) &a)[-1] - 5)
00077 #endif
00078
00079 #ifdef __PPC__
00080
00081 static inline void *getr1() { void *p; asm("mr %0,1" : "=r" (p) :); return p; }
00082 #define CALLED_FROM(f, a) ((void *) ((unsigned *) (getr1() - ((short *) f)[1]))[1] - 4)
00083 #endif
00084 #else
00085 #undef LIBHD_MEMCHECK
00086 #endif
00087
00088 #ifdef LIBHD_MEMCHECK
00089 FILE *libhd_log;
00090 #endif
00091
00092
00093
00094
00095
00096
00097 #undef NUMERIC_UNIQUE_ID
00098
00099
00100
00101
00102 enum mod_idx {
00103 mod_none, mod_memory, mod_pci, mod_isapnp, mod_pnpdump, mod_net,
00104 mod_floppy, mod_misc, mod_bios, mod_cpu, mod_monitor, mod_mouse, mod_scsi,
00105 mod_serial, mod_usb, mod_adb, mod_modem, mod_parallel, mod_isa, mod_isdn,
00106 mod_kbd, mod_prom, mod_sbus, mod_int, mod_braille, mod_xtra, mod_sys,
00107 mod_manual, mod_fb, mod_veth, mod_pppoe, mod_pcmcia, mod_s390,
00108 mod_sysfs, mod_dsl, mod_block, mod_edd, mod_input, mod_wlan, mod_hal
00109 };
00110
00111 void *new_mem(size_t size);
00112 void *resize_mem(void *, size_t);
00113 void *add_mem(void *, size_t, size_t);
00114 char *new_str(const char *);
00115 void *free_mem(void *);
00116 int have_common_res(hd_res_t *res1, hd_res_t *res2);
00117 void join_res_io(hd_res_t **res1, hd_res_t *res2);
00118 void join_res_irq(hd_res_t **res1, hd_res_t *res2);
00119 void join_res_dma(hd_res_t **res1, hd_res_t *res2);
00120 hd_res_t *free_res_list(hd_res_t *res);
00121 hd_res_t *add_res_entry(hd_res_t **res, hd_res_t *new_res);
00122 hd_t *add_hd_entry(hd_data_t *hd_data, unsigned line, unsigned count);
00123 misc_t *free_misc(misc_t *m);
00124 scsi_t *free_scsi(scsi_t *scsi, int free_all);
00125 hd_detail_t *free_hd_detail(hd_detail_t *d);
00126 devtree_t *free_devtree(hd_data_t *hd_data);
00127 void hd_add_id(hd_data_t *hd_data, hd_t *hd);
00128
00129 char *isa_id2str(unsigned);
00130 char *eisa_vendor_str(unsigned);
00131 unsigned name2eisa_id(char *);
00132 char *canon_str(char *, int);
00133
00134 int hex(char *string, int digits);
00135
00136 void str_printf(char **buf, int offset, char *format, ...) __attribute__ ((format (printf, 3, 4)));
00137 void hexdump(char **buf, int with_ascii, unsigned data_len, unsigned char *data);
00138 str_list_t *search_str_list(str_list_t *sl, char *str);
00139 str_list_t *add_str_list(str_list_t **sl, char *str);
00140 str_list_t *free_str_list(str_list_t *list);
00141 str_list_t *read_file(char *file_name, unsigned start_line, unsigned lines);
00142 str_list_t *read_dir(char *dir_name, int type);
00143 char *hd_read_symlink(char *link_name);
00144 void progress(hd_data_t *hd_data, unsigned pos, unsigned count, char *msg);
00145
00146 void remove_hd_entries(hd_data_t *hd_data);
00147 void remove_tagged_hd_entries(hd_data_t *hd_data);
00148
00149 driver_info_t *free_driver_info(driver_info_t *di);
00150
00151 int str2float(char *s, int n);
00152 char *float2str(int i, int n);
00153
00154
00155 char *mod_name_by_idx(unsigned idx);
00156
00157 int hd_timeout(void(*func)(void *), void *arg, int timeout);
00158
00159 str_list_t *read_kmods(hd_data_t *hd_data);
00160 char *get_cmd_param(hd_data_t *hd_data, int field);
00161
00162 #ifdef __i386__
00163
00164 int detectSMP(void);
00165 #endif
00166
00167 void update_irq_usage(hd_data_t *hd_data);
00168 int run_cmd(hd_data_t *hd_data, char *cmd);
00169 int load_module_with_params(hd_data_t *hd_data, char *module, char *params);
00170 int load_module(hd_data_t *hd_data, char *module);
00171 int unload_module(hd_data_t *hd_data, char *module);
00172 int probe_module(hd_data_t *hd_data, char *module);
00173
00174 int cmp_hd(hd_t *hd1, hd_t *hd2);
00175 unsigned has_something_attached(hd_data_t *hd_data, hd_t *hd);
00176
00177 str_list_t *get_cmdline(hd_data_t *hd_data, char *key);
00178
00179 int detect_smp_bios(hd_data_t *hd_data);
00180 int detect_smp_prom(hd_data_t *hd_data);
00181
00182 unsigned char *read_block0(hd_data_t *hd_data, char *dev, int *timeout);
00183
00184 void hd_copy(hd_t *dst, hd_t *src);
00185
00186
00187 #define W_IO (1 << 0)
00188 #define W_DMA (1 << 1)
00189 #define W_IRQ (1 << 2)
00190
00191 void gather_resources(misc_t *m, hd_res_t **r, char *name, unsigned which);
00192
00193 char *vend_id2str(unsigned vend);
00194
00195 int hd_getdisksize(hd_data_t *hd_data, char *dev, int fd, hd_res_t **geo, hd_res_t **size);
00196
00197 str_list_t *hd_split(char del, const char *str);
00198 char *hd_join(char *del, str_list_t *str);
00199
00200 int is_pnpinfo(ser_device_t *mi, int ofs);
00201
00202 int is_pcmcia_ctrl(hd_data_t *hd_data, hd_t *hd);
00203
00204 void hd_fork(hd_data_t *hd_data, int timeout, int total_timeout);
00205 void hd_fork_done(hd_data_t *hd_data);
00206 void hd_shm_init(hd_data_t *hd_data);
00207 void hd_shm_clean(hd_data_t *hd_data);
00208 void hd_shm_done(hd_data_t *hd_data);
00209 void *hd_shm_add(hd_data_t *hd_data, void *ptr, unsigned len);
00210 int hd_is_shm_ptr(hd_data_t *hd_data, void *ptr);
00211 void hd_move_to_shm(hd_data_t *hd_data);
00212
00213 void read_udevinfo(hd_data_t *hd_data);
00214
00215 hd_t *hd_find_sysfs_id(hd_data_t *hd_data, char *id);
00216 int hd_attr_uint(struct sysfs_attribute *attr, uint64_t *u, int base);
00217 char *hd_attr_str(struct sysfs_attribute *attr);
00218 str_list_t *hd_attr_list(struct sysfs_attribute *attr);
00219 char *hd_sysfs_id(char *path);
00220 char *hd_sysfs_name2_dev(char *str);
00221 char *hd_sysfs_dev2_name(char *str);
00222 void hd_sysfs_driver_list(hd_data_t *hd_data);
00223 char *hd_sysfs_find_driver(hd_data_t *hd_data, char *sysfs_id, int exact);
00224 int hd_report_this(hd_data_t *hd_data, hd_t *hd);
00225 str_list_t *hd_module_list(hd_data_t *hd_data, unsigned id);
00226
00227 int hd_is_iseries(hd_data_t *hd_data);
00228 hal_device_t *hd_free_hal_devices(hal_device_t *dev);
00229 void hd_pci_complete_data(hd_t *hd);
00230 void hd_pci_read_data(hd_data_t *hd_data);
00231
00232 char *hd_hal_print_prop(hal_prop_t *prop);
00233
00234 void hal_invalidate(hal_prop_t *prop);
00235 void hal_invalidate_all(hal_prop_t *prop, const char *key);
00236 hal_prop_t *hal_get_any(hal_prop_t *prop, const char *key);
00237 hal_prop_t *hal_get_bool(hal_prop_t *prop, const char *key);
00238 hal_prop_t *hal_get_int32(hal_prop_t *prop, const char *key);
00239 hal_prop_t *hal_get_str(hal_prop_t *prop, const char *key);
00240 hal_prop_t *hal_get_list(hal_prop_t *prop, const char *key);
00241 char *hal_get_useful_str(hal_prop_t *prop, const char *key);
00242
00243 hal_device_t *hal_find_device(hd_data_t *hd_data, char *udi);
00244
00245 char *hd_get_hddb_dir(void);
00246 char *hd_get_hddb_path(char *sub);
00247
00248
00249 #ifdef __cplusplus
00250 }
00251 #endif
00252