#ifndef __DMU_H #define __DMU_H #include /************** * dm-userspace **************/ struct dmu_context; struct dmu_map_data; /* Returns 1 to allow IO to complete, 0 to delay */ typedef int (*map_done_handler_t)(void *data, struct dmu_map_data *map_data); /* Returns 1 to map IO, -1 to fail IO, 0 to delay */ typedef int (*map_req_handler_t)(void *data, struct dmu_map_data *map_data); /* High-level control operations */ struct dmu_context *dmu_ctl_open(char *dev, int flags); int dmu_ctl_close(struct dmu_context *ctx); int dmu_ctl_send_queue(struct dmu_context *ctx); void dmu_register_map_done_handler(struct dmu_context *ctx, map_done_handler_t handler, void *data); void dmu_register_map_handler(struct dmu_context *ctx, map_req_handler_t handler, void *data); int dmu_invalidate_block(struct dmu_context *ctx, uint64_t block); int dmu_events_pending(struct dmu_context *ctx, unsigned int msec); int dmu_process_events(struct dmu_context *ctx); /* Map manipulation functions */ void dmu_map_set_block(struct dmu_map_data *data, uint64_t block); uint64_t dmu_map_get_block(struct dmu_map_data *data); void dmu_map_set_offset(struct dmu_map_data *data, int64_t offset); uint32_t dmu_map_get_id(struct dmu_map_data *data); void dmu_map_set_dest_dev(struct dmu_map_data *data, dev_t dev); void dmu_map_set_copy_src_dev(struct dmu_map_data *data, dev_t dev); int dmu_map_is_write(struct dmu_map_data *data); /* Functions for submitting out-of-order events */ int dmu_async_map(struct dmu_context *ctx, struct dmu_map_data *data, int fail); int dmu_async_map_done(struct dmu_context *ctx, uint64_t id, int fail); #endif