blob: 4c4b3560f789cc4698750c323ec5dffe1752f6c0 [file] [log] [blame]
Christopher Ferris05d08e92016-02-04 13:16:38 -08001/****************************************************************************
2 ****************************************************************************
3 ***
4 *** This header was automatically generated from a Linux kernel header
5 *** of the same name, to make information necessary for userspace to
6 *** call into the kernel available to libc. It contains only constants,
7 *** structures, and macros generated from the original header, and thus,
8 *** contains no copyrightable information.
9 ***
10 *** To edit the content of this header, modify the corresponding
11 *** source file (e.g. under external/kernel-headers/original/) then
12 *** run bionic/libc/kernel/tools/update_all.py
13 ***
14 *** Any manual change here will be lost the next time this script will
15 *** be run. You've been warned!
16 ***
17 ****************************************************************************
18 ****************************************************************************/
19#ifndef _LINUX_USERFAULTFD_H
20#define _LINUX_USERFAULTFD_H
21#include <linux/types.h>
22#define UFFD_API ((__u64) 0xAA)
Christopher Ferris05d08e92016-02-04 13:16:38 -080023#define UFFD_API_FEATURES (0)
24#define UFFD_API_IOCTLS ((__u64) 1 << _UFFDIO_REGISTER | (__u64) 1 << _UFFDIO_UNREGISTER | (__u64) 1 << _UFFDIO_API)
25#define UFFD_API_RANGE_IOCTLS ((__u64) 1 << _UFFDIO_WAKE | (__u64) 1 << _UFFDIO_COPY | (__u64) 1 << _UFFDIO_ZEROPAGE)
26#define _UFFDIO_REGISTER (0x00)
Christopher Ferris05d08e92016-02-04 13:16:38 -080027#define _UFFDIO_UNREGISTER (0x01)
28#define _UFFDIO_WAKE (0x02)
29#define _UFFDIO_COPY (0x03)
30#define _UFFDIO_ZEROPAGE (0x04)
Christopher Ferris05d08e92016-02-04 13:16:38 -080031#define _UFFDIO_API (0x3F)
32#define UFFDIO 0xAA
33#define UFFDIO_API _IOWR(UFFDIO, _UFFDIO_API, struct uffdio_api)
34#define UFFDIO_REGISTER _IOWR(UFFDIO, _UFFDIO_REGISTER, struct uffdio_register)
Christopher Ferris05d08e92016-02-04 13:16:38 -080035#define UFFDIO_UNREGISTER _IOR(UFFDIO, _UFFDIO_UNREGISTER, struct uffdio_range)
36#define UFFDIO_WAKE _IOR(UFFDIO, _UFFDIO_WAKE, struct uffdio_range)
37#define UFFDIO_COPY _IOWR(UFFDIO, _UFFDIO_COPY, struct uffdio_copy)
38#define UFFDIO_ZEROPAGE _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, struct uffdio_zeropage)
Christopher Ferris05d08e92016-02-04 13:16:38 -080039struct uffd_msg {
40 __u8 event;
41 __u8 reserved1;
42 __u16 reserved2;
Christopher Ferris05d08e92016-02-04 13:16:38 -080043 __u32 reserved3;
44 union {
45 struct {
46 __u64 flags;
Christopher Ferris05d08e92016-02-04 13:16:38 -080047 __u64 address;
48 } pagefault;
49 struct {
50 __u64 reserved1;
Christopher Ferris05d08e92016-02-04 13:16:38 -080051 __u64 reserved2;
52 __u64 reserved3;
53 } reserved;
54 } arg;
Christopher Ferris05d08e92016-02-04 13:16:38 -080055} __packed;
56#define UFFD_EVENT_PAGEFAULT 0x12
57#define UFFD_PAGEFAULT_FLAG_WRITE (1 << 0)
58#define UFFD_PAGEFAULT_FLAG_WP (1 << 1)
Christopher Ferris05d08e92016-02-04 13:16:38 -080059struct uffdio_api {
60 __u64 api;
61 __u64 features;
62 __u64 ioctls;
Christopher Ferris05d08e92016-02-04 13:16:38 -080063};
64struct uffdio_range {
65 __u64 start;
66 __u64 len;
Christopher Ferris05d08e92016-02-04 13:16:38 -080067};
68struct uffdio_register {
69 struct uffdio_range range;
70#define UFFDIO_REGISTER_MODE_MISSING ((__u64) 1 << 0)
Christopher Ferris05d08e92016-02-04 13:16:38 -080071#define UFFDIO_REGISTER_MODE_WP ((__u64) 1 << 1)
72 __u64 mode;
73 __u64 ioctls;
74};
Christopher Ferris05d08e92016-02-04 13:16:38 -080075struct uffdio_copy {
76 __u64 dst;
77 __u64 src;
78 __u64 len;
Christopher Ferris05d08e92016-02-04 13:16:38 -080079#define UFFDIO_COPY_MODE_DONTWAKE ((__u64) 1 << 0)
80 __u64 mode;
81 __s64 copy;
82};
Christopher Ferris05d08e92016-02-04 13:16:38 -080083struct uffdio_zeropage {
84 struct uffdio_range range;
85#define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64) 1 << 0)
86 __u64 mode;
Christopher Ferris05d08e92016-02-04 13:16:38 -080087 __s64 zeropage;
88};
89#endif