root / lab4 / .minix-src / include / minix / blockdriver.h @ 14
History | View | Annotate | Download (2.28 KB)
1 | 13 | up20180614 | #ifndef _MINIX_BLOCKDRIVER_H
|
---|---|---|---|
2 | #define _MINIX_BLOCKDRIVER_H
|
||
3 | |||
4 | #include <minix/driver.h> |
||
5 | |||
6 | typedef int device_id_t; |
||
7 | typedef int thread_id_t; |
||
8 | |||
9 | /* Types supported for the 'type' field of struct blockdriver. */
|
||
10 | typedef enum { |
||
11 | BLOCKDRIVER_TYPE_DISK, /* handle partition requests */
|
||
12 | BLOCKDRIVER_TYPE_OTHER /* do not handle partition requests */
|
||
13 | } blockdriver_type_t; |
||
14 | |||
15 | /* Entry points into the device dependent code of block drivers. */
|
||
16 | struct blockdriver {
|
||
17 | blockdriver_type_t bdr_type; |
||
18 | int (*bdr_open)(devminor_t minor, int access); |
||
19 | int (*bdr_close)(devminor_t minor);
|
||
20 | ssize_t (*bdr_transfer)(devminor_t minor, int do_write, u64_t pos,
|
||
21 | endpoint_t endpt, iovec_t *iov, unsigned int count, int flags); |
||
22 | int (*bdr_ioctl)(devminor_t minor, unsigned long request, endpoint_t endpt, |
||
23 | cp_grant_id_t grant, endpoint_t user_endpt); |
||
24 | void (*bdr_cleanup)(void); |
||
25 | struct device *(*bdr_part)(devminor_t minor);
|
||
26 | void (*bdr_geometry)(devminor_t minor, struct part_geom *part); |
||
27 | void (*bdr_intr)(unsigned int mask); |
||
28 | void (*bdr_alarm)(clock_t stamp);
|
||
29 | void (*bdr_other)(message *m_ptr, int ipc_status); |
||
30 | int (*bdr_device)(devminor_t minor, device_id_t *id);
|
||
31 | }; |
||
32 | |||
33 | /* Functions defined by libblockdriver. These can be used for both
|
||
34 | * singlethreaded and multithreaded drivers.
|
||
35 | */
|
||
36 | void blockdriver_announce(int type); |
||
37 | |||
38 | #ifndef _BLOCKDRIVER_MT_API
|
||
39 | /* Additional functions for the singlethreaded version. These allow the driver
|
||
40 | * to either use the stock driver_task(), or implement its own message loop.
|
||
41 | * To avoid accidents, these functions are not exposed when minix/driver_mt.h
|
||
42 | * has been included previously.
|
||
43 | */
|
||
44 | int blockdriver_receive_mq(message *m_ptr, int *status_ptr); |
||
45 | void blockdriver_process(struct blockdriver *dp, message *m_ptr, int |
||
46 | ipc_status); |
||
47 | void blockdriver_terminate(void); |
||
48 | void blockdriver_task(struct blockdriver *bdp); |
||
49 | int blockdriver_mq_queue(message *m_ptr, int status); |
||
50 | #endif /* !_BLOCKDRIVER_MT_API */ |
||
51 | |||
52 | /* Parameters for the disk drive. */
|
||
53 | #define SECTOR_SIZE 512 /* physical sector size in bytes */ |
||
54 | #define SECTOR_SHIFT 9 /* for division */ |
||
55 | #define SECTOR_MASK 511 /* and remainder */ |
||
56 | |||
57 | #define CD_SECTOR_SIZE 2048 /* sector size of a CD-ROM in bytes */ |
||
58 | |||
59 | /* Size of the DMA buffer buffer in bytes. */
|
||
60 | #define DMA_BUF_SIZE (DMA_SECTORS * SECTOR_SIZE)
|
||
61 | |||
62 | #endif /* _MINIX_BLOCKDRIVER_H */ |