#ifndef _MINIX_BLOCKDRIVER_H #define _MINIX_BLOCKDRIVER_H #include typedef int device_id_t; typedef int thread_id_t; /* Types supported for the 'type' field of struct blockdriver. */ typedef enum { BLOCKDRIVER_TYPE_DISK, /* handle partition requests */ BLOCKDRIVER_TYPE_OTHER /* do not handle partition requests */ } blockdriver_type_t; /* Entry points into the device dependent code of block drivers. */ struct blockdriver { blockdriver_type_t bdr_type; int (*bdr_open)(devminor_t minor, int access); int (*bdr_close)(devminor_t minor); ssize_t (*bdr_transfer)(devminor_t minor, int do_write, u64_t pos, endpoint_t endpt, iovec_t *iov, unsigned int count, int flags); int (*bdr_ioctl)(devminor_t minor, unsigned long request, endpoint_t endpt, cp_grant_id_t grant, endpoint_t user_endpt); void (*bdr_cleanup)(void); struct device *(*bdr_part)(devminor_t minor); void (*bdr_geometry)(devminor_t minor, struct part_geom *part); void (*bdr_intr)(unsigned int mask); void (*bdr_alarm)(clock_t stamp); void (*bdr_other)(message *m_ptr, int ipc_status); int (*bdr_device)(devminor_t minor, device_id_t *id); }; /* Functions defined by libblockdriver. These can be used for both * singlethreaded and multithreaded drivers. */ void blockdriver_announce(int type); #ifndef _BLOCKDRIVER_MT_API /* Additional functions for the singlethreaded version. These allow the driver * to either use the stock driver_task(), or implement its own message loop. * To avoid accidents, these functions are not exposed when minix/driver_mt.h * has been included previously. */ int blockdriver_receive_mq(message *m_ptr, int *status_ptr); void blockdriver_process(struct blockdriver *dp, message *m_ptr, int ipc_status); void blockdriver_terminate(void); void blockdriver_task(struct blockdriver *bdp); int blockdriver_mq_queue(message *m_ptr, int status); #endif /* !_BLOCKDRIVER_MT_API */ /* Parameters for the disk drive. */ #define SECTOR_SIZE 512 /* physical sector size in bytes */ #define SECTOR_SHIFT 9 /* for division */ #define SECTOR_MASK 511 /* and remainder */ #define CD_SECTOR_SIZE 2048 /* sector size of a CD-ROM in bytes */ /* Size of the DMA buffer buffer in bytes. */ #define DMA_BUF_SIZE (DMA_SECTORS * SECTOR_SIZE) #endif /* _MINIX_BLOCKDRIVER_H */