#ifndef __DMU_H #define __DMU_H #include /************** * dm-userspace **************/ enum { DMU_STATUS_UNKNOWN = 0, DMU_STATUS_BLOCK_FLUSHED, DMU_STATUS_INVAL_COMPLETE, DMU_STATUS_INVAL_FAILED, DMU_STATUS_SYNC_COMPLETE }; struct dmu_context; struct dmu_map_data; typedef int (*status_handler)(void *data, uint64_t id, uint32_t status); typedef int (*map_req_handler)(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_status_handler(struct dmu_context *ctx, status_handler handler, void *data); void dmu_register_map_handler(struct dmu_context *ctx, map_req_handler handler, void *data); int dmu_invalidate_block(struct dmu_context *ctx, uint64_t block); int dmu_sync_complete(struct dmu_context *ctx, uint64_t id); 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); void dmu_map_set_writable(struct dmu_map_data *data, int writable); int dmu_map_is_write(struct dmu_map_data *data); void dmu_map_set_sync(struct dmu_map_data *data); #endif