dt.h
来自「Linux磁盘测试的源代码,测试磁盘的读写性能」· C头文件 代码 · 共 1,265 行 · 第 1/3 页
H
1,265 行
#elif defined(SCO)# define CDROM_NAME "cdrom" /* Start of CD-ROM device name. */# define RCDROM_NAME "rcdrom" /* Start of raw CD-ROM names. */#elif defined(_NT_SOURCE)# define CDROM_NAME "Cdrom" /* Start of CD-ROM device name. */# define RCDROM_NAME "cdrom" /* Allow both upper/lowercase. */#else# define CDROM_NAME "rz" /* Start of CD-ROM device name. */# define RCDROM_NAME "rrz" /* Start of raw CD-ROM names. */#endif /* !defined(_QNX_SOURCE) */#if defined(AIX)# define DISK_NAME "hd" /* Start of disk device names. */# define RDISK_NAME "rhd" /* Start of raw disk names. */#elif defined(_QNX_SOURCE)# define DISK_NAME "hd" /* Start of disk device names. */# define RDISK_NAME "hd" /* Start of raw disk names. */#elif defined(sun) || defined(__linux__)# define DISK_NAME "sd" /* Start of disk device names. */# define RDISK_NAME "rsd" /* Start of raw disk names. *//* NOTE: Linux (RedHat V6.0) currently has no raw disk names! */#elif defined(SCO) || defined(HP_UX)# define DISK_NAME "dsk" /* Start of disk device names. */# define RDISK_NAME "rdsk" /* Start of raw disk names. */#elif defined(_NT_SOURCE)# define DISK_NAME "PhysicalDrive" /* Start of disk device names. */# define RDISK_NAME "physicaldrive" /* Allow both upper/lowercase. */#else# define DISK_NAME "rz" /* Start of disk device names. */# define RDISK_NAME "rrz" /* Start of raw disk names. */#endif /* !defined(_QNX_SOURCE) */#if defined(_QNX_SOURCE)# define TTY_NAME "ser" /* Start of terminal names. */#elif defined(__NUTC__)# define TTY_NAME "com" /* Start of terminal names. */#else /* !defined(_QNX_SOURCE) */# define TTY_NAME "tty" /* Start of terminal names. */#endif /* defined(_QNX_SOURCE) */#define TTY_LEN 3 /* Length of terminal name. */#if defined(_QNX_SOURCE)# define TAPE_NAME "tpr" /* Start of tape device names. */# define NTAPE_NAME "tp" /* No-rewind tape device name. */#elif defined(sun)# define TAPE_NAME "rst" /* Start of tape device names. */# define NTAPE_NAME "nrst" /* No-rewind tape device name. */#elif defined(__linux__)# define TAPE_NAME "st" /* Start of tape device names. */# define NTAPE_NAME "nst" /* No-rewind tape device name. */#elif defined(SCO)# define TAPE_NAME "ctape" /* Start of tape device names. */# define NTAPE_NAME "ntape" /* No-rewind tape device name. */#elif defined(_NT_SOURCE)# define TAPE_NAME "rmt" /* Start of tape device names. */# define NTAPE_NAME "nrmt" /* No-rewind tape device name. */#else# define TAPE_NAME "rmt" /* Start of tape device names. */# define NTAPE_NAME "nrmt" /* No-rewind tape device name. */#endif /* !defined(_QNX_SOURCE) */#define DEF_LOG_BUFSIZE 2048 /* Large enough for all stats. */#if defined(BUFSIZ) && (BUFSIZ > DEF_LOG_BUFSIZE)# define LOG_BUFSIZE BUFSIZ /* The log file buffer size. */#else /* !defined(BUFSIZ) */# define LOG_BUFSIZE DEF_LOG_BUFSIZE /* The log file buffer size. */#endif /* defined(BUFSIZ) */#define ANY_RADIX 0 /* Any radix string conversion. */#define DEC_RADIX 10 /* Base for decimal conversion. */#define HEX_RADIX 16 /* Base for hex str conversion. *//* * Define some Architecture dependent types: */#if defined(__alpha) || defined(__LP64__)typedef unsigned long ptr_t;typedef int int32;typedef unsigned int u_int32;typedef unsigned int bool;typedef volatile unsigned int v_bool;#else /* !defined(__alpha) */typedef unsigned int ptr_t;#if !defined(AIX)#if !defined(OSFMK)typedef int int32;#endif /* !defined(OSFMK) */typedef unsigned int u_int32;#endif /* !defined(AIX) */typedef unsigned char bool;typedef volatile unsigned char v_bool;#endif /* defined(__alpha) *//* * Some systems don't have these definitions: */#if defined(__MSDOS__)typedef unsigned char u_char;typedef unsigned short u_short;typedef unsigned int u_int;typedef unsigned long u_long;typedef char * caddr_t;typedef unsigned long daddr_t;#endif /* defined(_QNX_SOURCE) */#if defined(ultrix) || defined(sun)#if !defined(SOLARIS) && !defined(AIX)typedef int ssize_t;#endif /* !defined(SOLARIS) && !defined(AIX) */#endif /* defined(ultrix) *//* * The buffer pad bytes are allocated at the end of all data buffers, * initialized with the inverted data pattern, and then checked after * each read operation to ensure extra bytes did not get transferred * at the end of buffer. This test is necessary, since quite often * we've seen data corruption (extra bytes) due to improper flushing * of DMA FIFO's, or other coding errors in our SCSI/CAM sub-system. */#define PADBUFR_SIZE sizeof(u_int32) /* The data buffer pad size. */ /* MUST match pattern length!!! *//* * The buffer rotate size are used to force unaligned buffer access * by rotating the starting buffer address through the sizeof(ptr). * This feature has been very useful in forcing drivers through special * code to handle unaligned addresses & buffers crossing page boundaries. */#define ROTATE_SIZE sizeof(char *) /* Forces through all ptr bytes *//* * 'dt' specific exit status codes: */#define END_OF_FILE 254 /* End of file code. */#define FATAL_ERROR 255 /* Fatal error code. */#define get_lbn(bp) ( ((u_int32)bp[3] << 24) | ((u_int32)bp[2] << 16) | \ ((u_int32)bp[1] << 8) | (u_int32)bp[0])/* * Structure for Baud Rate Lookup. */struct tty_baud_rate { u_int32 usr_speed; /* User entered speed value. */ speed_t tty_speed; /* Parameter for tty driver. */};enum opt {OFF, ON, OPT_NONE};enum flow {FLOW_NONE, CTS_RTS, XON_XOFF};enum stats {COPY_STATS, READ_STATS, RAW_STATS, WRITE_STATS, TOTAL_STATS, VERIFY_STATS};enum dispose {DELETE_FILE, KEEP_FILE};enum file_type {INPUT_FILE, OUTPUT_FILE};enum test_mode {READ_MODE, WRITE_MODE};enum onerrors {ABORT, CONTINUE};enum iodir {FORWARD, REVERSE};enum iomode {COPY_MODE, TEST_MODE, VERIFY_MODE};enum iotype {SEQUENTIAL_IO, RANDOM_IO};enum logLevel { logLevelCrit = -1, logLevelError, logLevelInfo, logLevelWarn, logLevelDiag, logLevelQdiag, logLevelLog, logLevelSpecial, logLevelTrace};/* * Flags to control print behaviour: */#define PRT_NOFLUSH 0x01#define PRT_NOIDENT 0x02#define PRT_NOLEVEL 0x04/* * Declare the external test functions: * * TODO: Tape test functions... */#define NOFUNC (int (*)()) 0 /* No test function exists yet. */#define NoFd -1 /* No file descriptor open. */extern int nofunc(); /* Stub return (no test func). */extern struct dtfuncs generic_funcs; /* Generic test functions. */#if defined(AIO)extern struct dtfuncs aio_funcs; /* POSIX AIO test functions. */#endif /* defined(AIO) */#if defined(MMAP)extern struct dtfuncs mmap_funcs; /* Memory map test functions. */#endif /* defined(MMAP) */extern struct dtfuncs tty_funcs; /* Terminal test functions. */#if defined(FIFO)extern struct dtfuncs fifo_funcs; /* Named pipes test functions. */#endif /* defined(FIFO) *//* * Define various device types: */enum devtype {DT_AUDIO, DT_BLOCK, DT_CHARACTER, DT_COMM, DT_DISK, DT_GRAPHICS, DT_MEMORY, DT_MMAP, DT_MOUSE, DT_NETWORK, DT_FIFO, DT_PIPE, DT_PRINTER, DT_PROCESSOR, DT_REGULAR, DT_SOCKET, DT_SPECIAL, DT_STREAMS, DT_TAPE, DT_TERMINAL, DT_UNKNOWN };struct dtype { char *dt_type; enum devtype dt_dtype;};extern struct dtype *input_dtype;extern struct dtype *output_dtype;/* * Define file control flags: */#define DCF_ACTIVE 1 /* File test is active. *//************************************************************************ * NOTE: Eventually, all device specific data must be moved to this * * data structure, but that will be done in stages since there's * * a fair amount of work involved. Can you say re-write? :-) * ************************************************************************//* * Define device type information: */typedef struct dinfo { int di_fd; /* The file descriptor. */ int di_flags; /* The file control flags. */ int di_oflags; /* The last file open flags. */ char *di_dname; /* The /dev device name. */ char *di_device; /* The real device name. */ enum test_mode di_mode; /* The current test mode. */ enum file_type di_ftype; /* The file access type. */ struct dtype *di_dtype; /* The device type information. */ struct dtfuncs *di_funcs; /* The test functions to use. */ /* * Statistics and State Information: */ bool di_closing; /* The device is being closed. */ u_int32 di_dsize; /* The device block size. */ large_t di_capacity; /* The device capacity (blocks) */volatile off_t di_offset; /* The device/file offset. */ v_int di_errno; /* The last errno encountered. */ v_bool di_end_of_file; /* End of file was detected. */ v_bool di_end_of_logical; /* End of logical tape detected */ v_bool di_end_of_media; /* End of media was detected. */ bool di_eof_processing; /* End of file proessing. */ bool di_eom_processing; /* End of media processing. */ bool di_random_io; /* Random I/O selected flag. */ bool di_random_access; /* Random access device flag. */ v_large di_dbytes_read; /* Number of data bytes read. */ v_large di_dbytes_written; /* Number of data bytes written.*/ v_large di_fbytes_read; /* Number of file bytes read. */ v_large di_fbytes_written; /* Number of file bytes written.*/ v_large di_vbytes_read; /* Number of volume bytes read. */ v_large di_vbytes_written; /* Number of volume bytes wrote.*/ vu_long di_files_read; /* Number of tape files read. */ vu_long di_files_written; /* Number of tape files written.*/ vu_long di_records_read; /* Number of records read. */ vu_long di_records_written; /* Number of records written. */ vu_long di_volume_records; /* Number of volume records. */ vu_long di_read_errors; /* Number of read errors. */ vu_long di_write_errors; /* Number of write errors. */ large_t di_data_limit; /* The data limit (in bytes). */ large_t di_volume_bytes; /* Accumulated volume bytes. */ /* * Extended Error Information (EEI) State: */ bool di_proc_eei; /* Processing EEI data flag. */#if defined(EEI)#define EEI_RESET 1 /* Delay after resets. */#define EEI_SLEEP 3 /* Time between retries. */#define EEI_RETRIES 100 /* Number of EEI retries. */#define EEI_OPEN_RETRIES 3 /* Number of open retries. */ bool di_devpath_failure; /* Path failure condition. */ bool di_reset_condition; /* Reset condition detected. */ struct mtget *di_mt; /* The tape error information. */ int di_eei_retries; /* The number of EEI retries. */ int di_eei_sleep; /* Time to sleep between retry. */#endif /* defined(EEI) */} dinfo_t;/* * Define test function dispatch structure: * * [ NOTE: These functions are not all used at this time. The intent * is to cleanup the code later by grouping functions appropriately. ] */struct dtfuncs { /* Open device or file. */ int (*tf_open)(struct dinfo *dip, int oflags); /* Close device or file. */ int (*tf_close)(struct dinfo *dip); /* Special initilization. */ int (*tf_initialize)(struct dinfo *dip); /* Start test processing. */ int (*tf_start_test)(struct dinfo *dip); /* End of test processing. */ int (*tf_end_test)(struct dinfo *dip); /* Read file data. */ int (*tf_read_file)(struct dinfo *dip); /* Processes read data. */ int (*tf_read_data)(struct dinfo *dip); /* Cancel read requests. */ int (*tf_cancel_reads)(struct dinfo *dip); /* Write file data. */ int (*tf_write_file)(struct dinfo *dip); /* Processes write data. */ int (*tf_write_data)(struct dinfo *dip); /* Cancel write requests. */ int (*tf_cancel_writes)(struct dinfo *dip); /* Flush data to media. */ int (*tf_flush_data)(struct dinfo *dip); /* Verify data read. */ int (*tf_verify_data)( struct dinfo *dip, u_char *buffer, size_t count, u_int32 pattern, u_int32 *lba ); /* Reopen device or file. */ int (*tf_reopen_file)(struct dinfo *dip, int oflags); /* Test startup handling. */ int (*tf_startup)(struct dinfo *dip); /* Test cleanup handling. */ int (*tf_cleanup)(struct dinfo *dip); /* Validate test options. */ int (*tf_validate_opts)(struct dinfo *dip);};/* * Macros to Improve Performance: * * Note: Others can be added after debug is conditionalized. */#define INLINE_FUNCS 1#if defined(INLINE_FUNCS)#define make_lba(dip, pos) \ ((pos == (off_t) 0) ? (u_int32) 0 : (pos / lbdata_size))#define make_offset(dip, lba) ((off_t)(lba * lbdata_size))#define make_lbdata(dip, pos) \ ((pos == (off_t) 0) ? (u_int32) 0 : (pos / lbdata_size))#define make_position(dip, lba) ((off_t)(lba * lbdata_size))#if defined(_BSD)# define get_position(dip) (seek_position (dip, (off_t) 0, L_INCR))#else /* !defined(_BSD) */# define get_position(dip) (seek_position (dip, (off_t) 0, SEEK_CUR))#endif /* defined(_BSD) */#endif /* defined(INLINE_FUNCS) */#if defined(MUNSA)extern bool munsa_flag; /* Enable MUNSA features flag. */extern dlm_lock_mode_t munsa_lock_type; /* Default munsa lock type. */extern dlm_lock_mode_t input_munsa_lock_type; /* Lock for input file. */extern dlm_lock_mode_t output_munsa_lock_type; /* Lock for output file. */extern char *resnam;extern int resnlen, i;extern dlm_lkid_t lkid;extern dlm_nsp_t nsp;extern dlm_valb_t vb;#endif /* defined(MUNSA) */extern FILE *efp, *ofp;extern struct dinfo *active_dinfo, *input_dinfo, *output_dinfo;#if defined(AIX)# undef hz#endifextern clock_t hz;extern bool tty_saved;extern int errno, exit_status;extern unsigned parity_code, data_bits_code;extern speed_t baud_rate;extern u_int32 pattern;extern u_int32 data_patterns[];extern int npatterns;extern enum opt softcar_opt;extern enum flow flow_type;extern enum iodir io_dir;extern enum iomode io_mode;extern enum iotype io_type;extern enum dispose dispose_mode;extern enum devtype device_type;extern enum onerrors oncerr_action;extern char *parity_str, *flow_str, *speed_str;extern bool user_pattern, unique_pattern;extern char *pattern_string, *prefix_string;extern int align_offset, rotate_offset;extern bool ade_flag, aio_flag, bypass_flag;extern bool compare_flag, core_dump, cerrors_flag;extern bool debug_flag, Debug_flag, eDebugFlag, rDebugFlag;#if defined(EEI)extern bool eei_flag, eei_resets;#endif /* defined(EEI) */extern bool dump_flag, flush_flag, forked_flag, fsync_flag, header_flag;extern bool keep_existing, hazard_flag, user_incr, user_min, user_max;extern bool lbdata_flag, user_lbdata, user_lbsize;extern bool user_position, incr_pattern, iot_pattern, logdiag_flag;extern bool loopback, micro_flag, mmap_flag, modem_flag, stdin_flag, stdout_flag;extern bool max_capacity, media_changed, multi_flag, variable_flag, volumes_flag;extern bool terminating_flag, ttyport_flag, verbose_flag, verify_flag, verify_only;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?