idl: add offload data transfer ioctl types
[mat/samba.git] / librpc / idl / ioctl.idl
1 #include "idl_types.h"
2 [
3         pointer_default(unique)
4 ]
5 interface copychunk
6 {
7         typedef [public] struct {
8                 uint8 resume_key[24];
9                 uint32 context_len;
10                 /* <56> Windows sends 4 bytes of zero for the context field. */
11                 uint8 context[4];
12         } req_resume_key_rsp;
13
14         typedef struct {
15                 hyper source_off;
16                 hyper target_off;
17                 uint32 length;
18                 uint32 reserved;
19         } srv_copychunk;
20
21         typedef [public] struct {
22                 uint8 source_key[24];
23                 uint32 chunk_count;
24                 uint32 reserved;
25                 srv_copychunk chunks[chunk_count];
26         } srv_copychunk_copy;
27
28         typedef [public] struct {
29                 uint32 chunks_written;
30                 uint32 chunk_bytes_written;
31                 uint32 total_bytes_written;
32         } srv_copychunk_rsp;
33
34         typedef [public] struct {
35                 uint32 version;
36                 uint32 size;
37                 uint32 maximum_token_lifetime;
38                 uint32 default_token_lifetime;
39                 hyper maximum_xfer_size;
40                 hyper optimal_xfer_count;
41                 uint32 maximum_data_descriptors;
42                 uint32 maximum_xfer_length_per_descriptor;
43                 uint32 optimal_xfer_length_per_descriptor;
44                 uint16 optimal_xfer_length_granularity;
45                 uint8 reserved[2];
46         } device_copy_offload_descriptor;
47
48         /* XXX: 0x00000001 is unconfirmed */
49         const uint32 STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA = 0x00000001;
50         typedef [public] struct {
51                 uint32 token_type;
52                 uint8 reserved[2];
53                 uint16 token_id_len;
54                 [size_is(token_id_len)] uint8 token[];
55         } storage_offload_token;
56
57         typedef [public] struct {
58                 uint32 size;
59                 uint32 flags;
60                 uint32 token_time_to_live;
61                 uint32 reserved;
62                 hyper file_offset;
63                 hyper length;
64         } fsctl_offload_read_input;
65
66         const uint32 OFFLOAD_READ_FLAG_FILE_TOO_SMALL = 0x00000001;
67         const uint32 OFFLOAD_READ_FLAG_ALL_ZERO_BEYOND_RANGE = 0x00000002;
68         const uint32 OFFLOAD_READ_FLAG_CANNOT_OFFLOAD_BEYOND_RANGE = 0x00000004;
69         typedef [public] struct {
70                 uint32 size;
71                 uint32 flags;
72                 hyper xfer_length;
73                 uint8 token[512];
74         } fsctl_offload_read_output;
75
76         typedef [public] struct {
77                 uint32 size;
78                 uint32 flags;
79                 hyper file_offset;
80                 hyper copy_length;
81                 hyper xfer_offset;
82                 uint8 token[512];
83         } fsctl_offload_write_input;
84
85         typedef [public] struct {
86                 uint32 size;
87                 uint32 flags;
88                 hyper length_written;
89         } fsctl_offload_write_output;
90 }