xref: /linux/include/uapi/linux/cachefiles.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1c8383054SJeffle Xu /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2c8383054SJeffle Xu #ifndef _LINUX_CACHEFILES_H
3c8383054SJeffle Xu #define _LINUX_CACHEFILES_H
4c8383054SJeffle Xu 
5c8383054SJeffle Xu #include <linux/types.h>
6*9032b6e8SJeffle Xu #include <linux/ioctl.h>
7c8383054SJeffle Xu 
8c8383054SJeffle Xu /*
9c8383054SJeffle Xu  * Fscache ensures that the maximum length of cookie key is 255. The volume key
10c8383054SJeffle Xu  * is controlled by netfs, and generally no bigger than 255.
11c8383054SJeffle Xu  */
12c8383054SJeffle Xu #define CACHEFILES_MSG_MAX_SIZE	1024
13c8383054SJeffle Xu 
14c8383054SJeffle Xu enum cachefiles_opcode {
15c8383054SJeffle Xu 	CACHEFILES_OP_OPEN,
16324b954aSJeffle Xu 	CACHEFILES_OP_CLOSE,
17*9032b6e8SJeffle Xu 	CACHEFILES_OP_READ,
18c8383054SJeffle Xu };
19c8383054SJeffle Xu 
20c8383054SJeffle Xu /*
21c8383054SJeffle Xu  * Message Header
22c8383054SJeffle Xu  *
23c8383054SJeffle Xu  * @msg_id	a unique ID identifying this message
24c8383054SJeffle Xu  * @opcode	message type, CACHEFILE_OP_*
25c8383054SJeffle Xu  * @len		message length, including message header and following data
26c8383054SJeffle Xu  * @object_id	a unique ID identifying a cache file
27c8383054SJeffle Xu  * @data	message type specific payload
28c8383054SJeffle Xu  */
29c8383054SJeffle Xu struct cachefiles_msg {
30c8383054SJeffle Xu 	__u32 msg_id;
31c8383054SJeffle Xu 	__u32 opcode;
32c8383054SJeffle Xu 	__u32 len;
33c8383054SJeffle Xu 	__u32 object_id;
34c8383054SJeffle Xu 	__u8  data[];
35c8383054SJeffle Xu };
36c8383054SJeffle Xu 
37c8383054SJeffle Xu /*
38c8383054SJeffle Xu  * @data contains the volume_key followed directly by the cookie_key. volume_key
39c8383054SJeffle Xu  * is a NUL-terminated string; @volume_key_size indicates the size of the volume
40c8383054SJeffle Xu  * key in bytes. cookie_key is binary data, which is netfs specific;
41c8383054SJeffle Xu  * @cookie_key_size indicates the size of the cookie key in bytes.
42c8383054SJeffle Xu  *
43c8383054SJeffle Xu  * @fd identifies an anon_fd referring to the cache file.
44c8383054SJeffle Xu  */
45c8383054SJeffle Xu struct cachefiles_open {
46c8383054SJeffle Xu 	__u32 volume_key_size;
47c8383054SJeffle Xu 	__u32 cookie_key_size;
48c8383054SJeffle Xu 	__u32 fd;
49c8383054SJeffle Xu 	__u32 flags;
50c8383054SJeffle Xu 	__u8  data[];
51c8383054SJeffle Xu };
52c8383054SJeffle Xu 
53*9032b6e8SJeffle Xu /*
54*9032b6e8SJeffle Xu  * @off		indicates the starting offset of the requested file range
55*9032b6e8SJeffle Xu  * @len		indicates the length of the requested file range
56*9032b6e8SJeffle Xu  */
57*9032b6e8SJeffle Xu struct cachefiles_read {
58*9032b6e8SJeffle Xu 	__u64 off;
59*9032b6e8SJeffle Xu 	__u64 len;
60*9032b6e8SJeffle Xu };
61*9032b6e8SJeffle Xu 
62*9032b6e8SJeffle Xu /*
63*9032b6e8SJeffle Xu  * Reply for READ request
64*9032b6e8SJeffle Xu  * @arg for this ioctl is the @id field of READ request.
65*9032b6e8SJeffle Xu  */
66*9032b6e8SJeffle Xu #define CACHEFILES_IOC_READ_COMPLETE	_IOW(0x98, 1, int)
67*9032b6e8SJeffle Xu 
68c8383054SJeffle Xu #endif
69