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