dasd_int.h

来自「linux-2.4.29操作系统的源码」· C头文件 代码 · 共 502 行 · 第 1/2 页

H
502
字号
do { \        if (dasd_debug_area != NULL) \                debug_sprintf_exception(dasd_debug_area, \                                        d_level,\                                        d_str "\n", \                                        d_data); \} while(0)/* definition of dbf debug levels */#define	DBF_EMERG	0	/* system is unusable		*/#define	DBF_ALERT	1	/* action must be taken immediately	*/#define	DBF_CRIT	2	/* critical conditions		*/#define	DBF_ERR  	3	/* error conditions			*/#define	DBF_WARNING	4	/* warning conditions		*/#define	DBF_NOTICE	5	/* normal but significant condition	*/#define	DBF_INFO	6	/* informational			*/#define	DBF_DEBUG	6	/* debug-level messages		*//* messages to be written via klogd and dbf */#define DEV_MESSAGE(d_loglevel,d_device,d_string,d_args...)\do { \        int d_devno = d_device->devinfo.devno; \        int d_irq = d_device->devinfo.irq; \        char *d_name = d_device->name; \        int d_major = MAJOR(d_device->kdev); \        int d_minor = MINOR(d_device->kdev); \\        printk(d_loglevel PRINTK_HEADER \               " /dev/%-7s(%3d:%3d),%04x@%02x: " \               d_string "\n", \               d_name, \               d_major, \               d_minor, \               d_devno, \               d_irq, \               d_args); \\        DBF_DEV_EVENT(DBF_ALERT, \                      d_device, \                      d_string, \                      d_args); \} while(0)/* general messages to be written via klogd and dbf */#define MESSAGE(d_loglevel,d_string,d_args...)\do { \        printk(d_loglevel PRINTK_HEADER \               " " d_string "\n", \               d_args); \\        DBF_EVENT(DBF_ALERT, \                  d_string, \                  d_args); \} while(0)/* general messages to be written via klogd only */#define MESSAGE_LOG(d_loglevel,d_string,d_args...)\do { \        printk(d_loglevel PRINTK_HEADER \               " " d_string "\n", \               d_args); \} while(0)struct dasd_device_t;struct request;/******************************************************************************** * SECTION: signatures for the functions of dasd_discipline_t  * make typecasts much easier ********************************************************************************/typedef int    (*dasd_ck_id_fn_t)              (s390_dev_info_t *);typedef int    (*dasd_ck_characteristics_fn_t) (struct dasd_device_t *);typedef int    (*dasd_fill_geometry_fn_t)      (struct dasd_device_t *,                                                 struct hd_geometry *);typedef int    (*dasd_do_analysis_fn_t)        (struct dasd_device_t *);typedef int    (*dasd_io_starter_fn_t)         (ccw_req_t *);typedef int    (*dasd_io_stopper_fn_t)         (ccw_req_t *);typedef int    (*dasd_info_fn_t)               (struct dasd_device_t *,                                                 dasd_information2_t *);typedef int    (*dasd_use_count_fn_t)          (int);typedef int    (*dasd_get_attrib_fn_t)         (struct dasd_device_t *,                                                 struct attrib_data_t *);typedef int    (*dasd_set_attrib_fn_t)         (struct dasd_device_t *,                                                 struct attrib_data_t *);typedef void   (*dasd_int_handler_fn_t)        (int irq, void *,                                                 struct pt_regs *);typedef void   (*dasd_dump_sense_fn_t)         (struct dasd_device_t *,                                                ccw_req_t *);typedef ccw_req_t *(*dasd_format_fn_t)         (struct dasd_device_t *,                                                 struct format_data_t *);typedef ccw_req_t *(*dasd_init_analysis_fn_t ) (struct dasd_device_t *);typedef ccw_req_t *(*dasd_cp_builder_fn_t)     (struct dasd_device_t *,                                                struct request *);typedef ccw_req_t *(*dasd_reserve_fn_t)        (struct dasd_device_t *);typedef ccw_req_t *(*dasd_release_fn_t)        (struct dasd_device_t *);typedef ccw_req_t *(*dasd_steal_lock_fn_t)     (struct dasd_device_t *);typedef ccw_req_t *(*dasd_merge_cp_fn_t)       (struct dasd_device_t *);typedef ccw_req_t *(*dasd_erp_action_fn_t)     (ccw_req_t * cqr);typedef ccw_req_t *(*dasd_erp_postaction_fn_t) (ccw_req_t * cqr);typedef ccw_req_t *(*dasd_read_stats_fn_t)     (struct dasd_device_t *);typedef dasd_rssd_perf_stats_t * (*dasd_ret_stats_fn_t)     (ccw_req_t *);typedef dasd_era_t               (*dasd_error_examine_fn_t) (ccw_req_t *,                                                              devstat_t * stat);typedef dasd_erp_action_fn_t     (*dasd_error_analyse_fn_t) (ccw_req_t *);typedef dasd_erp_postaction_fn_t (*dasd_erp_analyse_fn_t)   (ccw_req_t *);/* * the dasd_discipline_t is * sth like a table of virtual functions, if you think of dasd_eckd * inheriting dasd... * no, currently we are not planning to reimplement the driver in C++ */typedef struct dasd_discipline_t {        struct module *owner;	char ebcname[8]; /* a name used for tagging and printks */        char name[8];		/* a name used for tagging and printks */	int max_blocks;	/* maximum number of blocks to be chained */	dasd_ck_id_fn_t              id_check;	            /* check sense data */	dasd_ck_characteristics_fn_t check_characteristics; /* check the characteristics */	dasd_init_analysis_fn_t      init_analysis;	    /* start the analysis of the volume */	dasd_do_analysis_fn_t        do_analysis;	    /* complete the analysis of the volume */	dasd_fill_geometry_fn_t      fill_geometry;	    /* set up hd_geometry */	dasd_io_starter_fn_t         start_IO;                 	dasd_io_stopper_fn_t         term_IO;                          dasd_format_fn_t             format_device;	    /* format the device */	dasd_error_examine_fn_t      examine_error;	dasd_error_analyse_fn_t      erp_action;	dasd_erp_analyse_fn_t        erp_postaction;        dasd_cp_builder_fn_t         build_cp_from_req;        dasd_dump_sense_fn_t         dump_sense;        dasd_int_handler_fn_t        int_handler;        dasd_reserve_fn_t            reserve;        dasd_release_fn_t            release;        dasd_steal_lock_fn_t         steal_lock;        dasd_merge_cp_fn_t           merge_cp;        dasd_info_fn_t               fill_info;        dasd_read_stats_fn_t         read_stats;        dasd_ret_stats_fn_t          ret_stats;             /* return performance statistics */        dasd_get_attrib_fn_t         get_attrib;            /* get attributes (cache operations */         dasd_set_attrib_fn_t         set_attrib;            /* set attributes (cache operations */ 	struct list_head list;	/* used for list of disciplines */} dasd_discipline_t;/* dasd_range_t are used for ordering the DASD devices */typedef struct dasd_range_t {	unsigned int from;	/* first DASD in range */	unsigned int to;	/* last DASD in range */	char discipline[4];	/* placeholder to force discipline */        int features;	struct list_head list;	/* next one in linked list */} dasd_range_t;#define DASD_MAJOR_INFO_REGISTERED 1#define DASD_MAJOR_INFO_IS_STATIC 2typedef struct major_info_t {	struct list_head list;	struct dasd_device_t **dasd_device;	int flags;	struct gendisk gendisk; /* actually contains the major number */} __attribute__ ((packed)) major_info_t;typedef struct dasd_device_t {	s390_dev_info_t devinfo;	dasd_discipline_t *discipline;	int level;        atomic_t open_count;        kdev_t kdev;        major_info_t *major_info;	struct dasd_chanq_t queue;        wait_queue_head_t wait_q;        request_queue_t *request_queue;        struct timer_list timer;             /* used for start_IO */        struct timer_list late_timer;        /* to get late devices online */          struct timer_list blocking_timer;    /* used for ERP */	devstat_t dev_status; /* needed ONLY!! for request_irq */        dasd_sizes_t sizes;        char name[16]; /* The name of the device in /dev */	char *private;	/* to be used by the discipline internally */#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,3,98))        devfs_handle_t devfs_entry;#endif /* LINUX_IS_24 */	struct tq_struct bh_tq;        atomic_t bh_scheduled;        debug_info_t *debug_area;        dasd_profile_info_t profile;        ccw_req_t *init_cqr;        atomic_t plugged;        int stopped;                         /* device (do_IO) was stopped */        struct list_head lowmem_pool;}  dasd_device_t;/* reasons why device (do_IO) was stopped */#define DASD_STOPPED_NOT_ACC 1         /* not accessible */#define DASD_STOPPED_PENDING 2         /* long busy */int  dasd_init               (void);void dasd_discipline_add     (dasd_discipline_t *);void dasd_discipline_del     (dasd_discipline_t *);int  dasd_start_IO           (ccw_req_t *);int  dasd_term_IO            (ccw_req_t *);void dasd_int_handler        (int , void *, struct pt_regs *);void dasd_free_request       (ccw_req_t *, dasd_device_t *);int  dasd_oper_handler       (int irq, devreg_t * devreg);void dasd_schedule_bh        (dasd_device_t *);void dasd_schedule_bh_timed  (unsigned long);int  dasd_sleep_on_req       (ccw_req_t*);int  dasd_set_normalized_cda (ccw1_t * cp, unsigned long address,                               ccw_req_t* request,                               dasd_device_t* device );ccw_req_t *     dasd_default_erp_action     (ccw_req_t *);ccw_req_t *     dasd_default_erp_postaction (ccw_req_t *);inline void     dasd_chanq_deq              (dasd_chanq_t *, ccw_req_t *);inline void     dasd_chanq_enq              (dasd_chanq_t *, ccw_req_t *);inline void     dasd_chanq_enq_head         (dasd_chanq_t *, ccw_req_t *);ccw_req_t *     dasd_alloc_request          (char *, int, int, dasd_device_t *);dasd_device_t * dasd_device_from_kdev       (kdev_t kdev);extern debug_info_t *dasd_debug_area;extern int (*genhd_dasd_name) (char *, int, int, struct gendisk *);extern int (*genhd_dasd_ioctl) (struct inode *inp, struct file *filp,                                unsigned int no, unsigned long data);#endif /* __KERNEL__ */#endif				/* DASD_H *//* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically * adjust the settings for this buffer only.  This must remain at the end * of the file. * --------------------------------------------------------------------------- * Local variables: * c-indent-level: 4  * c-brace-imaginary-offset: 0 * c-brace-offset: -4 * c-argdecl-indent: 4 * c-label-offset: -4 * c-continued-statement-offset: 4 * c-continued-brace-offset: 0 * indent-tabs-mode: nil * tab-width: 8 * End: */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?