aboutsummaryrefslogtreecommitdiff
path: root/kmod/muser.h
blob: 0cd76a9280bf6c35240c9715475d6a1f3a28eaea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/*
 * Copyright (c) 2019, Nutanix Inc. All rights reserved.
 *
 * Author: Thanos Makatos <thanos@nutanix.com>
 *         Swapnil Ingle <swapnil.ingle@nutanix.com>
 *         Felipe Franciosi <felipe@nutanix.com>
 *
 */

#ifndef _LINUX_MUSER_H
#define _LINUX_MUSER_H

#ifndef __KERNEL__
#include <sys/types.h>
#endif

#include <linux/ioctl.h>
#include <linux/vfio.h>

#define MUSER_DEVNODE "muser"

enum muser_cmd_type {
	MUSER_IOCTL = 1,
	MUSER_READ,
	MUSER_WRITE,
	MUSER_MMAP,
	MUSER_DMA_MMAP,
	MUSER_DMA_MUNMAP,
};

struct muser_cmd_rw {
	size_t count;
	loff_t pos;
	char *buf;		/* only used for write */
};

struct muser_cmd_ioctl {
	int vfio_cmd;
	union {
		struct vfio_device_info dev_info;
		struct vfio_region_info reg_info;
		struct vfio_irq_info irq_info;
		struct vfio_irq_set irq_set;
	} data;
};

union muser_cmd_mmap {
	struct {
		union {
			struct {
				unsigned long start;
				unsigned long end;
			};
			unsigned long len;
		};
		unsigned long flags;
		unsigned long pgoff;
	} request;
	struct {
		unsigned long addr;
	} response;
};

struct muser_cmd {
	enum muser_cmd_type type;
	union {
		struct muser_cmd_rw rw;
		struct muser_cmd_ioctl ioctl;
		union muser_cmd_mmap mmap;
	};
	int err;
};

/* ioctl cmds valid for /dev/muser/<uuid> */
#define MUSER_DEV_CMD_WAIT	_IOW('M', 1, struct muser_cmd)
#define MUSER_DEV_CMD_DONE	_IOW('M', 2, struct muser_cmd)

#endif /* _LINUX_MUSER_H */