xref: /spdk/lib/ublk/ublk_internal.h (revision a4009e7ad3d0aa0cfda4ce321e22161cbd1a26dc)
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_start_cb)(void *cb_arg, int result);
56 typedef void (*ublk_del_cb)(void *cb_arg);
57 
58 int ublk_create_target(const char *cpumask_str);
59 int ublk_destroy_target(spdk_ublk_fini_cb cb_fn, void *cb_arg);
60 int ublk_start_disk(const char *bdev_name, uint32_t ublk_id,
61 		    uint32_t num_queues, uint32_t queue_depth,
62 		    ublk_start_cb start_cb, void *cb_arg);
63 int ublk_stop_disk(uint32_t ublk_id, ublk_del_cb del_cb, void *cb_arg);
64 struct spdk_ublk_dev *ublk_dev_find_by_id(uint32_t ublk_id);
65 uint32_t ublk_dev_get_id(struct spdk_ublk_dev *ublk);
66 const char *ublk_dev_get_bdev_name(struct spdk_ublk_dev *ublk);
67 struct spdk_ublk_dev *ublk_dev_first(void);
68 struct spdk_ublk_dev *ublk_dev_next(struct spdk_ublk_dev *prev);
69 uint32_t ublk_dev_get_queue_depth(struct spdk_ublk_dev *ublk);
70 uint32_t ublk_dev_get_num_queues(struct spdk_ublk_dev *ublk);
71 
72 #ifdef __cplusplus
73 }
74 #endif
75 
76 #endif /* SPDK_UBLK_INTERNAL_H */
77