1/**************************************************************************** 2 **************************************************************************** 3 *** 4 *** This header was automatically generated from a Linux kernel header 5 *** of the same name, to make information necessary for userspace to 6 *** call into the kernel available to libc. It contains only constants, 7 *** structures, and macros generated from the original header, and thus, 8 *** contains no copyrightable information. 9 *** 10 **************************************************************************** 11 ****************************************************************************/ 12#ifndef _LINUX_ELEVATOR_H 13#define _LINUX_ELEVATOR_H 14 15typedef int (elevator_merge_fn) (request_queue_t *, struct request **, 16 struct bio *); 17 18typedef void (elevator_merge_req_fn) (request_queue_t *, struct request *, struct request *); 19 20typedef void (elevator_merged_fn) (request_queue_t *, struct request *); 21 22typedef int (elevator_dispatch_fn) (request_queue_t *, int); 23 24typedef void (elevator_add_req_fn) (request_queue_t *, struct request *); 25typedef int (elevator_queue_empty_fn) (request_queue_t *); 26typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *); 27typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *); 28typedef int (elevator_may_queue_fn) (request_queue_t *, int, struct bio *); 29 30typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, struct bio *, gfp_t); 31typedef void (elevator_put_req_fn) (request_queue_t *, struct request *); 32typedef void (elevator_activate_req_fn) (request_queue_t *, struct request *); 33typedef void (elevator_deactivate_req_fn) (request_queue_t *, struct request *); 34 35typedef void *(elevator_init_fn) (request_queue_t *, elevator_t *); 36typedef void (elevator_exit_fn) (elevator_t *); 37 38struct elevator_ops 39{ 40 elevator_merge_fn *elevator_merge_fn; 41 elevator_merged_fn *elevator_merged_fn; 42 elevator_merge_req_fn *elevator_merge_req_fn; 43 44 elevator_dispatch_fn *elevator_dispatch_fn; 45 elevator_add_req_fn *elevator_add_req_fn; 46 elevator_activate_req_fn *elevator_activate_req_fn; 47 elevator_deactivate_req_fn *elevator_deactivate_req_fn; 48 49 elevator_queue_empty_fn *elevator_queue_empty_fn; 50 elevator_completed_req_fn *elevator_completed_req_fn; 51 52 elevator_request_list_fn *elevator_former_req_fn; 53 elevator_request_list_fn *elevator_latter_req_fn; 54 55 elevator_set_req_fn *elevator_set_req_fn; 56 elevator_put_req_fn *elevator_put_req_fn; 57 58 elevator_may_queue_fn *elevator_may_queue_fn; 59 60 elevator_init_fn *elevator_init_fn; 61 elevator_exit_fn *elevator_exit_fn; 62 void (*trim)(struct io_context *); 63}; 64 65#define ELV_NAME_MAX (16) 66 67struct elv_fs_entry { 68 struct attribute attr; 69 ssize_t (*show)(elevator_t *, char *); 70 ssize_t (*store)(elevator_t *, const char *, size_t); 71}; 72 73struct elevator_type 74{ 75 struct list_head list; 76 struct elevator_ops ops; 77 struct elevator_type *elevator_type; 78 struct elv_fs_entry *elevator_attrs; 79 char elevator_name[ELV_NAME_MAX]; 80 struct module *elevator_owner; 81}; 82 83struct elevator_queue 84{ 85 struct elevator_ops *ops; 86 void *elevator_data; 87 struct kobject kobj; 88 struct elevator_type *elevator_type; 89 struct mutex sysfs_lock; 90}; 91 92#define ELEVATOR_NO_MERGE 0 93#define ELEVATOR_FRONT_MERGE 1 94#define ELEVATOR_BACK_MERGE 2 95 96#define ELEVATOR_INSERT_FRONT 1 97#define ELEVATOR_INSERT_BACK 2 98#define ELEVATOR_INSERT_SORT 3 99#define ELEVATOR_INSERT_REQUEUE 4 100 101enum { 102 ELV_MQUEUE_MAY, 103 ELV_MQUEUE_NO, 104 ELV_MQUEUE_MUST, 105}; 106 107#define rq_end_sector(rq) ((rq)->sector + (rq)->nr_sectors) 108 109#endif 110