idl: add offload data transfer ioctl types
authorDavid Disseldorp <ddiss@samba.org>
Thu, 15 Mar 2012 13:43:26 +0000 (14:43 +0100)
committerDavid Disseldorp <ddiss@samba.org>
Thu, 15 Mar 2012 17:40:11 +0000 (18:40 +0100)
For future use in handling FSCTL_OFFLOAD_READ, FSCTL_OFFLOAD_WRITE and
IOCTL_STORAGE_QUERY_PROPERTY requests new to Windows 8.

Based on preliminary data structure documentation from:
http://msdn.microsoft.com/en-us/library/windows/hardware/hh451101%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/hh451122%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/hh449428%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/hh451469%28v=vs.85%29.aspx

Signed-off-by: Andreas Schneider <asn@samba.org>
Signed-off-by: Lars Müller <lars@samba.org>
Autobuild-User: David Disseldorp <ddiss@samba.org>
Autobuild-Date: Thu Mar 15 18:40:11 CET 2012 on sn-devel-104

librpc/idl/ioctl.idl

index 1c319eafeccccd69241ab3847448542a97ec4449..4672777909285cbb3d37458a3443f5ef99ff9594 100644 (file)
@@ -30,4 +30,61 @@ interface copychunk
                uint32 chunk_bytes_written;
                uint32 total_bytes_written;
        } srv_copychunk_rsp;
+
+       typedef [public] struct {
+               uint32 version;
+               uint32 size;
+               uint32 maximum_token_lifetime;
+               uint32 default_token_lifetime;
+               hyper maximum_xfer_size;
+               hyper optimal_xfer_count;
+               uint32 maximum_data_descriptors;
+               uint32 maximum_xfer_length_per_descriptor;
+               uint32 optimal_xfer_length_per_descriptor;
+               uint16 optimal_xfer_length_granularity;
+               uint8 reserved[2];
+       } device_copy_offload_descriptor;
+
+       /* XXX: 0x00000001 is unconfirmed */
+       const uint32 STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA = 0x00000001;
+       typedef [public] struct {
+               uint32 token_type;
+               uint8 reserved[2];
+               uint16 token_id_len;
+               [size_is(token_id_len)] uint8 token[];
+       } storage_offload_token;
+
+       typedef [public] struct {
+               uint32 size;
+               uint32 flags;
+               uint32 token_time_to_live;
+               uint32 reserved;
+               hyper file_offset;
+               hyper length;
+       } fsctl_offload_read_input;
+
+       const uint32 OFFLOAD_READ_FLAG_FILE_TOO_SMALL = 0x00000001;
+       const uint32 OFFLOAD_READ_FLAG_ALL_ZERO_BEYOND_RANGE = 0x00000002;
+       const uint32 OFFLOAD_READ_FLAG_CANNOT_OFFLOAD_BEYOND_RANGE = 0x00000004;
+       typedef [public] struct {
+               uint32 size;
+               uint32 flags;
+               hyper xfer_length;
+               uint8 token[512];
+       } fsctl_offload_read_output;
+
+       typedef [public] struct {
+               uint32 size;
+               uint32 flags;
+               hyper file_offset;
+               hyper copy_length;
+               hyper xfer_offset;
+               uint8 token[512];
+       } fsctl_offload_write_input;
+
+       typedef [public] struct {
+               uint32 size;
+               uint32 flags;
+               hyper length_written;
+       } fsctl_offload_write_output;
 }