1 #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 */ 63