1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2022 Intel Corporation. 3 * All rights reserved. 4 */ 5 /** \file 6 * Userspace block device layer 7 */ 8 #ifndef SPDK_UBLK_INTERNAL_H 9 #define SPDK_UBLK_INTERNAL_H 10 11 #include <linux/ublk_cmd.h> 12 13 #include "spdk/ublk.h" 14 15 #ifndef UBLK_F_CMD_IOCTL_ENCODE 16 #define UBLK_F_CMD_IOCTL_ENCODE (1UL << 6) 17 #endif 18 19 #ifndef UBLK_F_USER_COPY 20 #define UBLK_F_USER_COPY (1UL << 7) 21 #endif 22 23 #ifndef UBLK_U_CMD_GET_FEATURES 24 #define UBLK_U_CMD_GET_FEATURES _IOR('u', 0x13, struct ublksrv_ctrl_cmd) 25 #endif 26 27 #ifndef UBLKSRV_IO_BUF_OFFSET 28 #define UBLKSRV_IO_BUF_OFFSET 0x80000000 29 #endif 30 31 #ifndef UBLK_IO_BUF_BITS 32 #define UBLK_IO_BUF_BITS 25 33 #endif 34 35 #ifndef UBLK_TAG_OFF 36 #define UBLK_TAG_OFF UBLK_IO_BUF_BITS 37 #endif 38 39 #ifndef UBLK_TAG_BITS 40 #define UBLK_TAG_BITS 16 41 #endif 42 43 #ifndef UBLK_QID_OFF 44 #define UBLK_QID_OFF (UBLK_TAG_OFF + UBLK_TAG_BITS) 45 #endif 46 47 48 #define UBLK_DEV_QUEUE_DEPTH 128 49 #define UBLK_DEV_NUM_QUEUE 1 50 51 #ifdef __cplusplus 52 extern "C" { 53 #endif 54 55 typedef void (*ublk_ctrl_cb)(void *cb_arg, int result); 56 57 int ublk_create_target(const char *cpumask_str); 58 int ublk_destroy_target(spdk_ublk_fini_cb cb_fn, void *cb_arg); 59 int ublk_start_disk(const char *bdev_name, uint32_t ublk_id, 60 uint32_t num_queues, uint32_t queue_depth, 61 ublk_ctrl_cb ctrl_cb, void *cb_arg); 62 int ublk_stop_disk(uint32_t ublk_id, ublk_ctrl_cb ctrl_cb, void *cb_arg); 63 struct spdk_ublk_dev *ublk_dev_find_by_id(uint32_t ublk_id); 64 uint32_t ublk_dev_get_id(struct spdk_ublk_dev *ublk); 65 const char *ublk_dev_get_bdev_name(struct spdk_ublk_dev *ublk); 66 struct spdk_ublk_dev *ublk_dev_first(void); 67 struct spdk_ublk_dev *ublk_dev_next(struct spdk_ublk_dev *prev); 68 uint32_t ublk_dev_get_queue_depth(struct spdk_ublk_dev *ublk); 69 uint32_t ublk_dev_get_num_queues(struct spdk_ublk_dev *ublk); 70 71 #ifdef __cplusplus 72 } 73 #endif 74 75 #endif /* SPDK_UBLK_INTERNAL_H */ 76