⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dasd_int.h

📁 linux-2.6.15.6
💻 H
📖 第 1 页 / 共 2 页
字号:
	/* Device discipline stuff. */	struct dasd_discipline *discipline;	char *private;	/* Device state and target state. */	int state, target;	int stopped;		/* device (ccw_device_start) was stopped */	/* Open and reference count. */        atomic_t ref_count;	atomic_t open_count;	/* ccw queue and memory for static ccw/erp buffers. */	struct list_head ccw_queue;	spinlock_t mem_lock;	void *ccw_mem;	void *erp_mem;	struct list_head ccw_chunks;	struct list_head erp_chunks;	atomic_t tasklet_scheduled;        struct tasklet_struct tasklet;	struct work_struct kick_work;	struct timer_list timer;	debug_info_t *debug_area;	struct ccw_device *cdev;#ifdef CONFIG_DASD_PROFILE	struct dasd_profile_info_t profile;#endif};/* reasons why device (ccw_device_start) was stopped */#define DASD_STOPPED_NOT_ACC 1         /* not accessible */#define DASD_STOPPED_QUIESCE 2         /* Quiesced */#define DASD_STOPPED_PENDING 4         /* long busy */#define DASD_STOPPED_DC_WAIT 8         /* disconnected, wait */#define DASD_STOPPED_DC_EIO  16        /* disconnected, return -EIO *//* per device flags */#define DASD_FLAG_DSC_ERROR	2	/* return -EIO when disconnected */#define DASD_FLAG_OFFLINE	3	/* device is in offline processing */void dasd_put_device_wake(struct dasd_device *);/* * Reference count inliners */static inline voiddasd_get_device(struct dasd_device *device){	atomic_inc(&device->ref_count);}static inline voiddasd_put_device(struct dasd_device *device){	if (atomic_dec_return(&device->ref_count) == 0)		dasd_put_device_wake(device);}/* * The static memory in ccw_mem and erp_mem is managed by a sorted * list of free memory chunks. */struct dasd_mchunk{	struct list_head list;	unsigned long size;} __attribute__ ((aligned(8)));static inline voiddasd_init_chunklist(struct list_head *chunk_list, void *mem,		    unsigned long size){	struct dasd_mchunk *chunk;	INIT_LIST_HEAD(chunk_list);	chunk = (struct dasd_mchunk *) mem;	chunk->size = size - sizeof(struct dasd_mchunk);	list_add(&chunk->list, chunk_list);}static inline void *dasd_alloc_chunk(struct list_head *chunk_list, unsigned long size){	struct dasd_mchunk *chunk, *tmp;	size = (size + 7L) & -8L;	list_for_each_entry(chunk, chunk_list, list) {		if (chunk->size < size)			continue;		if (chunk->size > size + sizeof(struct dasd_mchunk)) {			char *endaddr = (char *) (chunk + 1) + chunk->size;			tmp = (struct dasd_mchunk *) (endaddr - size) - 1;			tmp->size = size;			chunk->size -= size + sizeof(struct dasd_mchunk);			chunk = tmp;		} else			list_del(&chunk->list);		return (void *) (chunk + 1);	}	return NULL;}static inline voiddasd_free_chunk(struct list_head *chunk_list, void *mem){	struct dasd_mchunk *chunk, *tmp;	struct list_head *p, *left;	chunk = (struct dasd_mchunk *)		((char *) mem - sizeof(struct dasd_mchunk));	/* Find out the left neighbour in chunk_list. */	left = chunk_list;	list_for_each(p, chunk_list) {		if (list_entry(p, struct dasd_mchunk, list) > chunk)			break;		left = p;	}	/* Try to merge with right neighbour = next element from left. */	if (left->next != chunk_list) {		tmp = list_entry(left->next, struct dasd_mchunk, list);		if ((char *) (chunk + 1) + chunk->size == (char *) tmp) {			list_del(&tmp->list);			chunk->size += tmp->size + sizeof(struct dasd_mchunk);		}	}	/* Try to merge with left neighbour. */	if (left != chunk_list) {		tmp = list_entry(left, struct dasd_mchunk, list);		if ((char *) (tmp + 1) + tmp->size == (char *) chunk) {			tmp->size += chunk->size + sizeof(struct dasd_mchunk);			return;		}	}	__list_add(&chunk->list, left, left->next);}/* * Check if bsize is in { 512, 1024, 2048, 4096 } */static inline intdasd_check_blocksize(int bsize){	if (bsize < 512 || bsize > 4096 || (bsize & (bsize - 1)) != 0)		return -EMEDIUMTYPE;	return 0;}/* externals in dasd.c */#define DASD_PROFILE_ON	 1#define DASD_PROFILE_OFF 0extern debug_info_t *dasd_debug_area;extern struct dasd_profile_info_t dasd_global_profile;extern unsigned int dasd_profile_level;extern struct block_device_operations dasd_device_operations;extern kmem_cache_t *dasd_page_cache;struct dasd_ccw_req *dasd_kmalloc_request(char *, int, int, struct dasd_device *);struct dasd_ccw_req *dasd_smalloc_request(char *, int, int, struct dasd_device *);void dasd_kfree_request(struct dasd_ccw_req *, struct dasd_device *);void dasd_sfree_request(struct dasd_ccw_req *, struct dasd_device *);static inline intdasd_kmalloc_set_cda(struct ccw1 *ccw, void *cda, struct dasd_device *device){	return set_normalized_cda(ccw, cda);}struct dasd_device *dasd_alloc_device(void);void dasd_free_device(struct dasd_device *);void dasd_enable_device(struct dasd_device *);void dasd_set_target_state(struct dasd_device *, int);void dasd_kick_device(struct dasd_device *);void dasd_add_request_head(struct dasd_ccw_req *);void dasd_add_request_tail(struct dasd_ccw_req *);int  dasd_start_IO(struct dasd_ccw_req *);int  dasd_term_IO(struct dasd_ccw_req *);void dasd_schedule_bh(struct dasd_device *);int  dasd_sleep_on(struct dasd_ccw_req *);int  dasd_sleep_on_immediatly(struct dasd_ccw_req *);int  dasd_sleep_on_interruptible(struct dasd_ccw_req *);void dasd_set_timer(struct dasd_device *, int);void dasd_clear_timer(struct dasd_device *);int  dasd_cancel_req(struct dasd_ccw_req *);int dasd_generic_probe (struct ccw_device *, struct dasd_discipline *);void dasd_generic_remove (struct ccw_device *cdev);int dasd_generic_set_online(struct ccw_device *, struct dasd_discipline *);int dasd_generic_set_offline (struct ccw_device *cdev);int dasd_generic_notify(struct ccw_device *, int);void dasd_generic_auto_online (struct ccw_driver *);/* externals in dasd_devmap.c */extern int dasd_max_devindex;extern int dasd_probeonly;extern int dasd_autodetect;int dasd_devmap_init(void);void dasd_devmap_exit(void);struct dasd_device *dasd_create_device(struct ccw_device *);void dasd_delete_device(struct dasd_device *);int dasd_get_feature(struct ccw_device *, int);int dasd_set_feature(struct ccw_device *, int, int);int dasd_add_sysfs_files(struct ccw_device *);void dasd_remove_sysfs_files(struct ccw_device *);struct dasd_device *dasd_device_from_cdev(struct ccw_device *);struct dasd_device *dasd_device_from_devindex(int);int dasd_parse(void);int dasd_busid_known(char *);/* externals in dasd_gendisk.c */int  dasd_gendisk_init(void);void dasd_gendisk_exit(void);int dasd_gendisk_alloc(struct dasd_device *);void dasd_gendisk_free(struct dasd_device *);int dasd_scan_partitions(struct dasd_device *);void dasd_destroy_partitions(struct dasd_device *);/* externals in dasd_ioctl.c */int  dasd_ioctl_init(void);void dasd_ioctl_exit(void);int  dasd_ioctl_no_register(struct module *, int, dasd_ioctl_fn_t);int  dasd_ioctl_no_unregister(struct module *, int, dasd_ioctl_fn_t);int  dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);/* externals in dasd_proc.c */int dasd_proc_init(void);void dasd_proc_exit(void);/* externals in dasd_erp.c */struct dasd_ccw_req *dasd_default_erp_action(struct dasd_ccw_req *);struct dasd_ccw_req *dasd_default_erp_postaction(struct dasd_ccw_req *);struct dasd_ccw_req *dasd_alloc_erp_request(char *, int, int,					    struct dasd_device *);void dasd_free_erp_request(struct dasd_ccw_req *, struct dasd_device *);void dasd_log_sense(struct dasd_ccw_req *, struct irb *);void dasd_log_ccw(struct dasd_ccw_req *, int, __u32);/* externals in dasd_3370_erp.c */dasd_era_t dasd_3370_erp_examine(struct dasd_ccw_req *, struct irb *);/* externals in dasd_3990_erp.c */dasd_era_t dasd_3990_erp_examine(struct dasd_ccw_req *, struct irb *);struct dasd_ccw_req *dasd_3990_erp_action(struct dasd_ccw_req *);/* externals in dasd_9336_erp.c */dasd_era_t dasd_9336_erp_examine(struct dasd_ccw_req *, struct irb *);/* externals in dasd_9336_erp.c */dasd_era_t dasd_9343_erp_examine(struct dasd_ccw_req *, struct irb *);struct dasd_ccw_req *dasd_9343_erp_action(struct dasd_ccw_req *);#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: 1 * tab-width: 8 * End: */

⌨️ 快捷键说明

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