Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _LINUX_ELEVATOR_H
  2 #define _LINUX_ELEVATOR_H
  3 
  4 typedef int (elevator_merge_fn) (request_queue_t *, struct request **,
  5                                  struct bio *);
  6 
  7 typedef void (elevator_merge_req_fn) (request_queue_t *, struct request *, struct request *);
  8 
  9 typedef void (elevator_merged_fn) (request_queue_t *, struct request *);
 10 
 11 typedef struct request *(elevator_next_req_fn) (request_queue_t *);
 12 
 13 typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, int);
 14 typedef int (elevator_queue_empty_fn) (request_queue_t *);
 15 typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *);
 16 typedef void (elevator_requeue_req_fn) (request_queue_t *, struct request *);
 17 typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *);
 18 typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *);
 19 typedef int (elevator_may_queue_fn) (request_queue_t *, int);
 20 
 21 typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, int);
 22 typedef void (elevator_put_req_fn) (request_queue_t *, struct request *);
 23 
 24 typedef int (elevator_init_fn) (request_queue_t *, elevator_t *);
 25 typedef void (elevator_exit_fn) (elevator_t *);
 26 
 27 struct elevator_ops
 28 {
 29         elevator_merge_fn *elevator_merge_fn;
 30         elevator_merged_fn *elevator_merged_fn;
 31         elevator_merge_req_fn *elevator_merge_req_fn;
 32 
 33         elevator_next_req_fn *elevator_next_req_fn;
 34         elevator_add_req_fn *elevator_add_req_fn;
 35         elevator_remove_req_fn *elevator_remove_req_fn;
 36         elevator_requeue_req_fn *elevator_requeue_req_fn;
 37 
 38         elevator_queue_empty_fn *elevator_queue_empty_fn;
 39         elevator_completed_req_fn *elevator_completed_req_fn;
 40 
 41         elevator_request_list_fn *elevator_former_req_fn;
 42         elevator_request_list_fn *elevator_latter_req_fn;
 43 
 44         elevator_set_req_fn *elevator_set_req_fn;
 45         elevator_put_req_fn *elevator_put_req_fn;
 46 
 47         elevator_may_queue_fn *elevator_may_queue_fn;
 48 
 49         elevator_init_fn *elevator_init_fn;
 50         elevator_exit_fn *elevator_exit_fn;
 51 };
 52 
 53 #define ELV_NAME_MAX    (16)
 54 
 55 /*
 56  * identifies an elevator type, such as AS or deadline
 57  */
 58 struct elevator_type
 59 {
 60         struct list_head list;
 61         struct elevator_ops ops;
 62         struct elevator_type *elevator_type;
 63         struct kobj_type *elevator_ktype;
 64         char elevator_name[ELV_NAME_MAX];
 65         struct module *elevator_owner;
 66 };
 67 
 68 /*
 69  * each queue has an elevator_queue assoicated with it
 70  */
 71 struct elevator_queue
 72 {
 73         struct elevator_ops *ops;
 74         void *elevator_data;
 75         struct kobject kobj;
 76         struct elevator_type *elevator_type;
 77 };
 78 
 79 /*
 80  * block elevator interface
 81  */
 82 extern void elv_add_request(request_queue_t *, struct request *, int, int);
 83 extern void __elv_add_request(request_queue_t *, struct request *, int, int);
 84 extern int elv_merge(request_queue_t *, struct request **, struct bio *);
 85 extern void elv_merge_requests(request_queue_t *, struct request *,
 86                                struct request *);
 87 extern void elv_merged_request(request_queue_t *, struct request *);
 88 extern void elv_remove_request(request_queue_t *, struct request *);
 89 extern void elv_requeue_request(request_queue_t *, struct request *);
 90 extern int elv_queue_empty(request_queue_t *);
 91 extern struct request *elv_next_request(struct request_queue *q);
 92 extern struct request *elv_former_request(request_queue_t *, struct request *);
 93 extern struct request *elv_latter_request(request_queue_t *, struct request *);
 94 extern int elv_register_queue(request_queue_t *q);
 95 extern void elv_unregister_queue(request_queue_t *q);
 96 extern int elv_may_queue(request_queue_t *, int);
 97 extern void elv_completed_request(request_queue_t *, struct request *);
 98 extern int elv_set_request(request_queue_t *, struct request *, int);
 99 extern void elv_put_request(request_queue_t *, struct request *);
100 
101 /*
102  * io scheduler registration
103  */
104 extern int elv_register(struct elevator_type *);
105 extern void elv_unregister(struct elevator_type *);
106 
107 /*
108  * io scheduler sysfs switching
109  */
110 extern ssize_t elv_iosched_show(request_queue_t *, char *);
111 extern ssize_t elv_iosched_store(request_queue_t *, const char *, size_t);
112 
113 extern int elevator_init(request_queue_t *, char *);
114 extern void elevator_exit(elevator_t *);
115 extern int elv_rq_merge_ok(struct request *, struct bio *);
116 extern int elv_try_merge(struct request *, struct bio *);
117 extern int elv_try_last_merge(request_queue_t *, struct bio *);
118 
119 /*
120  * Return values from elevator merger
121  */
122 #define ELEVATOR_NO_MERGE       0
123 #define ELEVATOR_FRONT_MERGE    1
124 #define ELEVATOR_BACK_MERGE     2
125 
126 /*
127  * Insertion selection
128  */
129 #define ELEVATOR_INSERT_FRONT   1
130 #define ELEVATOR_INSERT_BACK    2
131 #define ELEVATOR_INSERT_SORT    3
132 
133 /*
134  * return values from elevator_may_queue_fn
135  */
136 enum {
137         ELV_MQUEUE_MAY,
138         ELV_MQUEUE_NO,
139         ELV_MQUEUE_MUST,
140 };
141 
142 #endif
143 
  This page was automatically generated by the LXR engine.