Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

hd_int.h

Go to the documentation of this file.
00001 #define PROC_CMDLINE            "/proc/cmdline"
00002 #define PROC_PCI_DEVICES        "/proc/bus/pci/devices"
00003 #define PROC_PCI_BUS            "/proc/bus/pci"
00004 #define PROC_CPUINFO            "/proc/cpuinfo"
00005 #define PROC_IOPORTS            "/proc/ioports"
00006 #define PROC_DMA                "/proc/dma"
00007 #define PROC_INTERRUPTS         "/proc/interrupts"
00008 #define PROC_NVRAM_22           "/proc/driver/nvram"
00009 #define PROC_NVRAM_24           "/proc/nvram"
00010 #define PROC_IDE                "/proc/ide"
00011 #define PROC_SCSI               "/proc/scsi"
00012 #define PROC_SCSI_SCSI          "/proc/scsi/scsi"
00013 #define PROC_CDROM_INFO         "/proc/sys/dev/cdrom/info"
00014 #define PROC_NET_IF_INFO        "/proc/net/dev"
00015 #define PROC_MODULES            "/proc/modules"
00016 #define PROC_DRIVER_SERIAL      "/proc/tty/driver/serial"
00017 #define PROC_DRIVER_MACSERIAL   "/proc/tty/driver/macserial"
00018 #define PROC_PARPORT_22         "/proc/parport/"                        /* Final '/' is essential! */
00019 #define PROC_PARPORT_24         "/proc/sys/dev/parport/parport"
00020 #define PROC_KCORE              "/proc/kcore"
00021 #define PROC_USB_DEVICES        "/proc/bus/usb/devices"
00022 #define PROC_DAC960             "/proc/rd"
00023 #define PROC_SMART_22           "/proc/array"
00024 #define PROC_SMART_24           "/proc/driver/array"
00025 #define PROC_SMART_24_NEW       "/proc/driver/cpqarray"
00026 #define PROC_PROM               "/proc/device-tree"
00027 #define PROC_MEMINFO            "/proc/meminfo"
00028 #define PROC_DASD               "/proc/dasd"
00029 #define PROC_VERSION            "/proc/version"
00030 #define PROC_ISAPNP             "/proc/isapnp"
00031 #define PROC_ISERIES            "/proc/iSeries"
00032 #define PROC_ISERIES_VETH       "/proc/iSeries/veth"
00033 #define PROC_PARTITIONS         "/proc/partitions"
00034 #define PROC_APM                "/proc/apm"
00035 
00036 #define DEV_NVRAM               "/dev/nvram"
00037 #define DEV_PSAUX               "/dev/psaux"
00038 #define DEV_ADBMOUSE            "/dev/adbmouse"
00039 #define DEV_MEM                 "/dev/mem"
00040 #define DEV_DAC960              "/dev/rd"
00041 #define DEV_SMART               "/dev/ida"
00042 #define DEV_KBD                 "/dev/kbd"
00043 #define DEV_CONSOLE             "/dev/console"
00044 #define DEV_OPENPROM            "/dev/openprom"
00045 #define DEV_SUNMOUSE            "/dev/sunmouse"
00046 #define DEV_MICE                "/dev/input/mice"
00047 #define DEV_I2O                 "/dev/i2o"
00048 #define DEV_CCISS               "/dev/cciss"
00049 #define DEV_FB                  "/dev/fb"
00050 
00051 #define PROG_INSMOD             "/sbin/insmod"
00052 #define PROG_MODPROBE           "/sbin/modprobe"
00053 #define PROG_RMMOD              "/sbin/rmmod"
00054 #define PROG_CARDCTL            "/sbin/cardctl"
00055 
00056 #define KLOG_BOOT               "/var/log/boot.msg"
00057 #define ISAPNP_CONF             "/etc/isapnp.conf"
00058 
00059 #define ID_LIST                 HARDWARE_DIR "/hd.ids"
00060 #define LIB_CMDLINE             HARDWARE_DIR "/cmdline"
00061 
00062 #define KERNEL_22               0x020200
00063 #define KERNEL_24               0x020400
00064 #define KERNEL_26               0x020600
00065 
00066 #if defined(__s390__) || defined(__s390x__) || defined(__alpha__) || defined(LIBHD_TINY)
00067 #define WITH_ISDN       0
00068 #else
00069 #define WITH_ISDN       1
00070 #endif
00071 
00072 #define PROGRESS(a, b, c) progress(hd_data, a, b, c)
00073 #define ADD2LOG(a...) str_printf(&hd_data->log, -2, a)
00074 
00075 #undef LIBHD_MEMCHECK
00076 
00077 #if defined(__i386__) || defined(__PPC__)
00078 /*
00079  * f: function we are in
00080  * a: first argument
00081  */
00082 
00083 #ifdef __i386__
00084 #define CALLED_FROM(f, a) ((void *) ((unsigned *) &a)[-1] - 5)
00085 #endif
00086 
00087 #ifdef __PPC__
00088 /* (1-arg funcs only) #define CALLED_FROM(f, a) ((void *) *((unsigned *) ((void *) &a - ((short *) f)[1] - 4)) - 4) */
00089 static inline void *getr1() { void *p; asm("mr %0,1" : "=r" (p) :); return p; }
00090 #define CALLED_FROM(f, a) ((void *) ((unsigned *) (getr1() - ((short *) f)[1]))[1] - 4)
00091 #endif
00092 #else
00093 #undef LIBHD_MEMCHECK
00094 #endif
00095 
00096 #ifdef LIBHD_MEMCHECK
00097 FILE *libhd_log;
00098 #endif
00099 
00100 
00101 /*
00102  * define to make (hd_t).unique_id a hex string, otherwise it is a
00103  * base64-like string
00104  */
00105 #undef NUMERIC_UNIQUE_ID
00106 
00107 /*
00108  * Internal probing module numbers. Use mod_name_by_idx() outside of libhd.
00109  */
00110 enum mod_idx {
00111   mod_none, mod_memory, mod_pci, mod_isapnp, mod_pnpdump, mod_cdrom,
00112   mod_net, mod_floppy, mod_misc, mod_bios, mod_cpu, mod_monitor, mod_mouse,
00113   mod_ide, mod_scsi, mod_serial, mod_usb, mod_adb, mod_modem, mod_parallel,
00114   mod_isa, mod_dac960, mod_smart, mod_isdn, mod_kbd, mod_prom, mod_sbus,
00115   mod_int, mod_braille, mod_xtra, mod_sys, mod_dasd, mod_i2o, mod_cciss,
00116   mod_manual, mod_fb, mod_veth, mod_partition, mod_disk, mod_ataraid, mod_pppoe,
00117   mod_pcmcia, mod_s390
00118 };
00119 
00120 void *new_mem(size_t size);
00121 void *resize_mem(void *, size_t);
00122 void *add_mem(void *, size_t, size_t);
00123 char *new_str(const char *);
00124 void *free_mem(void *);
00125 int have_common_res(hd_res_t *res1, hd_res_t *res2);
00126 void join_res_io(hd_res_t **res1, hd_res_t *res2);
00127 void join_res_irq(hd_res_t **res1, hd_res_t *res2);
00128 void join_res_dma(hd_res_t **res1, hd_res_t *res2);
00129 hd_res_t *free_res_list(hd_res_t *res);
00130 hd_res_t *add_res_entry(hd_res_t **res, hd_res_t *new_res);
00131 hd_smbios_t *free_smbios_list(hd_smbios_t *sm);
00132 hd_smbios_t *add_smbios_entry(hd_smbios_t **sm, hd_smbios_t *new_sm);
00133 hd_t *add_hd_entry(hd_data_t *hd_data, unsigned line, unsigned count);
00134 misc_t *free_misc(misc_t *m);
00135 scsi_t *free_scsi(scsi_t *scsi, int free_all);
00136 hd_detail_t *free_hd_detail(hd_detail_t *d);
00137 devtree_t *free_devtree(hd_data_t *hd_data);
00138 void hd_add_id(hd_data_t *hd_data, hd_t *hd);
00139 
00140 char *isa_id2str(unsigned);
00141 char *eisa_vendor_str(unsigned);
00142 unsigned name2eisa_id(char *);
00143 char *canon_str(char *, int);
00144 
00145 int hex(char *string, int digits);
00146 
00147 void str_printf(char **buf, int offset, char *format, ...) __attribute__ ((format (printf, 3, 4)));
00148 void hexdump(char **buf, int with_ascii, unsigned data_len, unsigned char *data);
00149 str_list_t *search_str_list(str_list_t *sl, char *str);
00150 str_list_t *add_str_list(str_list_t **sl, char *str);
00151 str_list_t *free_str_list(str_list_t *list);
00152 str_list_t *read_file(char *file_name, unsigned start_line, unsigned lines);
00153 str_list_t *read_dir(char *dir_name, int type);
00154 char *hd_read_symlink(char *link_name);
00155 void progress(hd_data_t *hd_data, unsigned pos, unsigned count, char *msg);
00156 
00157 void remove_hd_entries(hd_data_t *hd_data);
00158 void remove_tagged_hd_entries(hd_data_t *hd_data);
00159 
00160 driver_info_t *free_driver_info(driver_info_t *di);
00161 
00162 int str2float(char *s, int n);
00163 char *float2str(int i, int n);
00164 
00165 /* return the file name of a module */
00166 char *mod_name_by_idx(unsigned idx);
00167 
00168 int hd_timeout(void(*func)(void *), void *arg, int timeout);
00169 
00170 str_list_t *read_kmods(hd_data_t *hd_data);
00171 char *get_cmd_param(hd_data_t *hd_data, int field);
00172 
00173 #ifdef __i386__
00174 /* smp/smp.c */
00175 int detectSMP(void);
00176 #endif
00177 
00178 void update_irq_usage(hd_data_t *hd_data);
00179 int run_cmd(hd_data_t *hd_data, char *cmd);
00180 int load_module_with_params(hd_data_t *hd_data, char *module, char *params);
00181 int load_module(hd_data_t *hd_data, char *module);
00182 int unload_module(hd_data_t *hd_data, char *module);
00183 int probe_module(hd_data_t *hd_data, char *module);
00184 
00185 int cmp_hd(hd_t *hd1, hd_t *hd2);
00186 unsigned has_something_attached(hd_data_t *hd_data, hd_t *hd);
00187 
00188 str_list_t *get_cmdline(hd_data_t *hd_data, char *key);
00189 
00190 #if defined(__i386__) || defined(__x86_64__) || defined(__PPC__)
00191 int detect_smp(hd_data_t *hd_data);
00192 #endif
00193 
00194 unsigned char *read_block0(hd_data_t *hd_data, char *dev, int *timeout);
00195 
00196 void hd_copy(hd_t *dst, hd_t *src);
00197 
00198 /* parameter for gather_resources(,,, which) */
00199 #define W_IO    (1 << 0)
00200 #define W_DMA   (1 << 1)
00201 #define W_IRQ   (1 << 2)
00202 
00203 void gather_resources(misc_t *m, hd_res_t **r, char *name, unsigned which);
00204 
00205 char *vend_id2str(unsigned vend);
00206 
00207 void hd_getdisksize(hd_data_t *hd_data, char *dev, int fd, hd_res_t **geo, hd_res_t **size);
00208 
00209 str_list_t *hd_split(char del, char *str);
00210 char *hd_join(char *del, str_list_t *str);
00211 
00212 void hddb_add_info(hd_data_t *hd_data, hd_t *hd);
00213 
00214 int is_pnpinfo(ser_device_t *mi, int ofs);
00215 
00216 int is_pcmcia_ctrl(hd_data_t *hd_data, hd_t *hd);
00217 
00218 void hd_fork(hd_data_t *hd_data, int timeout, int total_timeout);
00219 void hd_fork_done(hd_data_t *hd_data);
00220 void hd_shm_init(hd_data_t *hd_data);
00221 void hd_shm_clean(hd_data_t *hd_data);
00222 void hd_shm_done(hd_data_t *hd_data);
00223 void *hd_shm_add(hd_data_t *hd_data, void *ptr, unsigned len);
00224 int hd_is_shm_ptr(hd_data_t *hd_data, void *ptr);
00225 void hd_move_to_shm(hd_data_t *hd_data);
00226 
00227 #ifdef __cplusplus
00228 }
00229 #endif
00230