]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/dde/fbsd/examples/l4ata/src/types.h
Inital import
[l4.git] / l4 / pkg / dde / fbsd / examples / l4ata / src / types.h
1 #ifndef _types_h
2 #define _types_h
3
4 #include <l4/bddf/busdriver_types.h>
5 #include <l4/bddf/busdriver_if_ipc.h>
6 #include <l4/lock/lock.h>
7 #include <l4/dde/fbsd/ata.h>
8
9 #ifdef RTMON
10 #include <l4/rt_mon/histogram.h>
11 extern rt_mon_histogram_t *rtm_request_duration;
12 extern rt_mon_histogram_t *rtm_request_setup_cpu;
13 extern rt_mon_histogram_t *rtm_request_setup_wall;
14 #endif
15
16 typedef struct l4ata_disk_info {
17         device_handle_t bddf_device;
18         l4semaphore_t reqloop_start;
19 } l4ata_disk_info_t;
20
21 typedef struct l4ata_req_info {
22         // lock for securing outstanding counter
23         l4lock_t lock;
24         // outstanding bio counter
25         unsigned outstanding;
26         // set to 1 on bio error
27         int error;
28         // associated bddf device
29         dad_disk_t *dsk;
30         // associated bddf request
31         bus_request_t *req;
32 } l4ata_req_info_t;
33
34 typedef struct l4ata_bio_info {
35         // pointer to request info
36    l4ata_req_info_t *ri;
37    // first ds associated with this bio
38    struct ds_list_element *first_ds;
39    // number of ds-s associated with this bio (continious from start_ds)
40    int ds_count;
41 } l4ata_bio_info_t;
42
43 #define dad_l4ata_di(dsk) ((l4ata_disk_info_t*)(dsk->client_priv))
44 #define dadrq_l4ata_bi(dadrq) ((l4ata_bio_info_t*)(dadrq->client_priv))
45
46 /* in disk.c: */
47 int  l4ata_init_disk(void);
48 void l4ata_register_disk(dad_disk_t *dsk);
49
50 /* in reqloop.c */
51 void l4ata_request_loop(void *arg);
52 int  l4ata_start_request_loop(device_handle_t, void *);
53
54 /* in request.c */
55 bus_generic_req_fn l4ata_handle_generic_request;
56 void l4ata_handle_request(dad_disk_t *dsk, bus_request_t *req);
57
58 #endif // _types_h