//\r
// Lowest numbered queue for sending normal priority requests.\r
//\r
-#define VIRTIO_FS_REQUEST_QUEUE 1\r
+#define VIRTIO_FS_REQUEST_QUEUE 1\r
\r
//\r
// Number of bytes in the "VIRTIO_FS_CONFIG.Tag" field.\r
//\r
-#define VIRTIO_FS_TAG_BYTES 36\r
+#define VIRTIO_FS_TAG_BYTES 36\r
\r
//\r
// Device configuration layout.\r
// encoded bytes take up the entire Tag field, then there is no NUL\r
// terminator.\r
//\r
- UINT8 Tag[VIRTIO_FS_TAG_BYTES];\r
+ UINT8 Tag[VIRTIO_FS_TAG_BYTES];\r
//\r
// The total number of request virtqueues exposed by the device (i.e.,\r
// excluding the "hiprio" queue).\r
//\r
- UINT32 NumReqQueues;\r
+ UINT32 NumReqQueues;\r
} VIRTIO_FS_CONFIG;\r
#pragma pack ()\r
\r
// interface version 7.32.\r
//\r
#define VIRTIO_FS_FUSE_MAJOR 7\r
-#define VIRTIO_FS_FUSE_MINOR 31\r
+#define VIRTIO_FS_FUSE_MINOR 31\r
\r
//\r
// The inode number of the root directory.\r
//\r
-#define VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID 1\r
+#define VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID 1\r
\r
//\r
// Distinguished errno values.\r
//\r
-#define VIRTIO_FS_FUSE_ERRNO_ENOENT (-2)\r
+#define VIRTIO_FS_FUSE_ERRNO_ENOENT (-2)\r
\r
//\r
// File mode bitmasks.\r
//\r
-#define VIRTIO_FS_FUSE_MODE_TYPE_MASK 0170000u\r
-#define VIRTIO_FS_FUSE_MODE_TYPE_REG 0100000u\r
-#define VIRTIO_FS_FUSE_MODE_TYPE_DIR 0040000u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_RWXU 0000700u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_RUSR 0000400u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_WUSR 0000200u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_RWXG 0000070u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_RGRP 0000040u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_WGRP 0000020u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_RWXO 0000007u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_ROTH 0000004u\r
-#define VIRTIO_FS_FUSE_MODE_PERM_WOTH 0000002u\r
+#define VIRTIO_FS_FUSE_MODE_TYPE_MASK 0170000u\r
+#define VIRTIO_FS_FUSE_MODE_TYPE_REG 0100000u\r
+#define VIRTIO_FS_FUSE_MODE_TYPE_DIR 0040000u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_RWXU 0000700u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_RUSR 0000400u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_WUSR 0000200u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_XUSR 0000100u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_RWXG 0000070u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_RGRP 0000040u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_WGRP 0000020u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_XGRP 0000010u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_RWXO 0000007u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_ROTH 0000004u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_WOTH 0000002u\r
+#define VIRTIO_FS_FUSE_MODE_PERM_XOTH 0000001u\r
+\r
+//\r
+// Flags for VirtioFsFuseOpSetAttr, in the VIRTIO_FS_FUSE_SETATTR_REQUEST.Valid\r
+// field.\r
+//\r
+#define VIRTIO_FS_FUSE_SETATTR_REQ_F_MODE BIT0\r
+#define VIRTIO_FS_FUSE_SETATTR_REQ_F_SIZE BIT3\r
+#define VIRTIO_FS_FUSE_SETATTR_REQ_F_ATIME BIT4\r
+#define VIRTIO_FS_FUSE_SETATTR_REQ_F_MTIME BIT5\r
\r
//\r
// Flags for VirtioFsFuseOpOpen.\r
//\r
-#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDONLY 0\r
-#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR 2\r
+#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDONLY 0\r
+#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR 2\r
\r
//\r
// Flags for VirtioFsFuseOpInit.\r
//\r
-#define VIRTIO_FS_FUSE_INIT_REQ_F_DO_READDIRPLUS BIT13\r
+#define VIRTIO_FS_FUSE_INIT_REQ_F_DO_READDIRPLUS BIT13\r
\r
/**\r
Macro for calculating the size of a directory stream entry.\r
//\r
// Flags for VirtioFsFuseOpRename2.\r
//\r
-#define VIRTIO_FS_FUSE_RENAME2_REQ_F_NOREPLACE BIT0\r
+#define VIRTIO_FS_FUSE_RENAME2_REQ_F_NOREPLACE BIT0\r
\r
//\r
// FUSE operation codes.\r
VirtioFsFuseOpLookup = 1,\r
VirtioFsFuseOpForget = 2,\r
VirtioFsFuseOpGetAttr = 3,\r
+ VirtioFsFuseOpSetAttr = 4,\r
VirtioFsFuseOpMkDir = 9,\r
VirtioFsFuseOpUnlink = 10,\r
VirtioFsFuseOpRmDir = 11,\r
// Request-response headers common to all request types.\r
//\r
typedef struct {\r
- UINT32 Len;\r
- UINT32 Opcode;\r
- UINT64 Unique;\r
- UINT64 NodeId;\r
- UINT32 Uid;\r
- UINT32 Gid;\r
- UINT32 Pid;\r
- UINT32 Padding;\r
+ UINT32 Len;\r
+ UINT32 Opcode;\r
+ UINT64 Unique;\r
+ UINT64 NodeId;\r
+ UINT32 Uid;\r
+ UINT32 Gid;\r
+ UINT32 Pid;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_REQUEST;\r
\r
typedef struct {\r
- UINT32 Len;\r
- INT32 Error;\r
- UINT64 Unique;\r
+ UINT32 Len;\r
+ INT32 Error;\r
+ UINT64 Unique;\r
} VIRTIO_FS_FUSE_RESPONSE;\r
\r
//\r
// an inode.\r
//\r
typedef struct {\r
- UINT64 NodeId;\r
- UINT64 Generation;\r
- UINT64 EntryValid;\r
- UINT64 AttrValid;\r
- UINT32 EntryValidNsec;\r
- UINT32 AttrValidNsec;\r
+ UINT64 NodeId;\r
+ UINT64 Generation;\r
+ UINT64 EntryValid;\r
+ UINT64 AttrValid;\r
+ UINT32 EntryValidNsec;\r
+ UINT32 AttrValidNsec;\r
} VIRTIO_FS_FUSE_NODE_RESPONSE;\r
\r
//\r
// an inode.\r
//\r
typedef struct {\r
- UINT64 Ino;\r
- UINT64 Size;\r
- UINT64 Blocks;\r
- UINT64 Atime;\r
- UINT64 Mtime;\r
- UINT64 Ctime;\r
- UINT32 AtimeNsec;\r
- UINT32 MtimeNsec;\r
- UINT32 CtimeNsec;\r
- UINT32 Mode;\r
- UINT32 Nlink;\r
- UINT32 Uid;\r
- UINT32 Gid;\r
- UINT32 Rdev;\r
- UINT32 Blksize;\r
- UINT32 Padding;\r
+ UINT64 Ino;\r
+ UINT64 Size;\r
+ UINT64 Blocks;\r
+ UINT64 Atime;\r
+ UINT64 Mtime;\r
+ UINT64 Ctime;\r
+ UINT32 AtimeNsec;\r
+ UINT32 MtimeNsec;\r
+ UINT32 CtimeNsec;\r
+ UINT32 Mode;\r
+ UINT32 Nlink;\r
+ UINT32 Uid;\r
+ UINT32 Gid;\r
+ UINT32 Rdev;\r
+ UINT32 Blksize;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE;\r
\r
//\r
// Header for VirtioFsFuseOpForget.\r
//\r
typedef struct {\r
- UINT64 NumberOfLookups;\r
+ UINT64 NumberOfLookups;\r
} VIRTIO_FS_FUSE_FORGET_REQUEST;\r
\r
//\r
-// Headers for VirtioFsFuseOpGetAttr.\r
+// Headers for VirtioFsFuseOpGetAttr (VIRTIO_FS_FUSE_GETATTR_RESPONSE is also\r
+// for VirtioFsFuseOpSetAttr).\r
//\r
typedef struct {\r
- UINT32 GetAttrFlags;\r
- UINT32 Dummy;\r
- UINT64 FileHandle;\r
+ UINT32 GetAttrFlags;\r
+ UINT32 Dummy;\r
+ UINT64 FileHandle;\r
} VIRTIO_FS_FUSE_GETATTR_REQUEST;\r
\r
typedef struct {\r
- UINT64 AttrValid;\r
- UINT32 AttrValidNsec;\r
- UINT32 Dummy;\r
+ UINT64 AttrValid;\r
+ UINT32 AttrValidNsec;\r
+ UINT32 Dummy;\r
} VIRTIO_FS_FUSE_GETATTR_RESPONSE;\r
\r
+//\r
+// Header for VirtioFsFuseOpSetAttr.\r
+//\r
+typedef struct {\r
+ UINT32 Valid;\r
+ UINT32 Padding;\r
+ UINT64 FileHandle;\r
+ UINT64 Size;\r
+ UINT64 LockOwner;\r
+ UINT64 Atime;\r
+ UINT64 Mtime;\r
+ UINT64 Ctime;\r
+ UINT32 AtimeNsec;\r
+ UINT32 MtimeNsec;\r
+ UINT32 CtimeNsec;\r
+ UINT32 Mode;\r
+ UINT32 Unused4;\r
+ UINT32 Uid;\r
+ UINT32 Gid;\r
+ UINT32 Unused5;\r
+} VIRTIO_FS_FUSE_SETATTR_REQUEST;\r
+\r
//\r
// Header for VirtioFsFuseOpMkDir.\r
//\r
typedef struct {\r
- UINT32 Mode;\r
- UINT32 Umask;\r
+ UINT32 Mode;\r
+ UINT32 Umask;\r
} VIRTIO_FS_FUSE_MKDIR_REQUEST;\r
\r
//\r
// Headers for VirtioFsFuseOpOpen and VirtioFsFuseOpOpenDir.\r
//\r
typedef struct {\r
- UINT32 Flags;\r
- UINT32 Unused;\r
+ UINT32 Flags;\r
+ UINT32 Unused;\r
} VIRTIO_FS_FUSE_OPEN_REQUEST;\r
\r
typedef struct {\r
- UINT64 FileHandle;\r
- UINT32 OpenFlags;\r
- UINT32 Padding;\r
+ UINT64 FileHandle;\r
+ UINT32 OpenFlags;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_OPEN_RESPONSE;\r
\r
//\r
// Header for VirtioFsFuseOpRead and VirtioFsFuseOpReadDirPlus.\r
//\r
typedef struct {\r
- UINT64 FileHandle;\r
- UINT64 Offset;\r
- UINT32 Size;\r
- UINT32 ReadFlags;\r
- UINT64 LockOwner;\r
- UINT32 Flags;\r
- UINT32 Padding;\r
+ UINT64 FileHandle;\r
+ UINT64 Offset;\r
+ UINT32 Size;\r
+ UINT32 ReadFlags;\r
+ UINT64 LockOwner;\r
+ UINT32 Flags;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_READ_REQUEST;\r
\r
//\r
// Headers for VirtioFsFuseOpWrite.\r
//\r
typedef struct {\r
- UINT64 FileHandle;\r
- UINT64 Offset;\r
- UINT32 Size;\r
- UINT32 WriteFlags;\r
- UINT64 LockOwner;\r
- UINT32 Flags;\r
- UINT32 Padding;\r
+ UINT64 FileHandle;\r
+ UINT64 Offset;\r
+ UINT32 Size;\r
+ UINT32 WriteFlags;\r
+ UINT64 LockOwner;\r
+ UINT32 Flags;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_WRITE_REQUEST;\r
\r
typedef struct {\r
- UINT32 Size;\r
- UINT32 Padding;\r
+ UINT32 Size;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_WRITE_RESPONSE;\r
\r
//\r
// Header for VirtioFsFuseOpStatFs.\r
//\r
typedef struct {\r
- UINT64 Blocks;\r
- UINT64 Bfree;\r
- UINT64 Bavail;\r
- UINT64 Files;\r
- UINT64 Ffree;\r
- UINT32 Bsize;\r
- UINT32 Namelen;\r
- UINT32 Frsize;\r
- UINT32 Padding;\r
- UINT32 Spare[6];\r
+ UINT64 Blocks;\r
+ UINT64 Bfree;\r
+ UINT64 Bavail;\r
+ UINT64 Files;\r
+ UINT64 Ffree;\r
+ UINT32 Bsize;\r
+ UINT32 Namelen;\r
+ UINT32 Frsize;\r
+ UINT32 Padding;\r
+ UINT32 Spare[6];\r
} VIRTIO_FS_FUSE_STATFS_RESPONSE;\r
\r
//\r
// Header for VirtioFsFuseOpRelease and VirtioFsFuseOpReleaseDir.\r
//\r
typedef struct {\r
- UINT64 FileHandle;\r
- UINT32 Flags;\r
- UINT32 ReleaseFlags;\r
- UINT64 LockOwner;\r
+ UINT64 FileHandle;\r
+ UINT32 Flags;\r
+ UINT32 ReleaseFlags;\r
+ UINT64 LockOwner;\r
} VIRTIO_FS_FUSE_RELEASE_REQUEST;\r
\r
//\r
// Header for VirtioFsFuseOpFsync and VirtioFsFuseOpFsyncDir.\r
//\r
typedef struct {\r
- UINT64 FileHandle;\r
- UINT32 FsyncFlags;\r
- UINT32 Padding;\r
+ UINT64 FileHandle;\r
+ UINT32 FsyncFlags;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_FSYNC_REQUEST;\r
\r
//\r
// Header for VirtioFsFuseOpFlush.\r
//\r
typedef struct {\r
- UINT64 FileHandle;\r
- UINT32 Unused;\r
- UINT32 Padding;\r
- UINT64 LockOwner;\r
+ UINT64 FileHandle;\r
+ UINT32 Unused;\r
+ UINT32 Padding;\r
+ UINT64 LockOwner;\r
} VIRTIO_FS_FUSE_FLUSH_REQUEST;\r
\r
//\r
// Headers for VirtioFsFuseOpInit.\r
//\r
typedef struct {\r
- UINT32 Major;\r
- UINT32 Minor;\r
- UINT32 MaxReadahead;\r
- UINT32 Flags;\r
+ UINT32 Major;\r
+ UINT32 Minor;\r
+ UINT32 MaxReadahead;\r
+ UINT32 Flags;\r
} VIRTIO_FS_FUSE_INIT_REQUEST;\r
\r
typedef struct {\r
- UINT32 Major;\r
- UINT32 Minor;\r
- UINT32 MaxReadahead;\r
- UINT32 Flags;\r
- UINT16 MaxBackground;\r
- UINT16 CongestionThreshold;\r
- UINT32 MaxWrite;\r
- UINT32 TimeGran;\r
- UINT16 MaxPages;\r
- UINT16 MapAlignment;\r
- UINT32 Unused[8];\r
+ UINT32 Major;\r
+ UINT32 Minor;\r
+ UINT32 MaxReadahead;\r
+ UINT32 Flags;\r
+ UINT16 MaxBackground;\r
+ UINT16 CongestionThreshold;\r
+ UINT32 MaxWrite;\r
+ UINT32 TimeGran;\r
+ UINT16 MaxPages;\r
+ UINT16 MapAlignment;\r
+ UINT32 Unused[8];\r
} VIRTIO_FS_FUSE_INIT_RESPONSE;\r
\r
//\r
// Header for VirtioFsFuseOpCreate.\r
//\r
typedef struct {\r
- UINT32 Flags;\r
- UINT32 Mode;\r
- UINT32 Umask;\r
- UINT32 Padding;\r
+ UINT32 Flags;\r
+ UINT32 Mode;\r
+ UINT32 Umask;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_CREATE_REQUEST;\r
\r
//\r
// sizes.\r
//\r
typedef struct {\r
- VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp;\r
- VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp;\r
- UINT64 NodeId;\r
- UINT64 CookieForNextEntry;\r
- UINT32 Namelen;\r
- UINT32 Type;\r
+ VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp;\r
+ VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp;\r
+ UINT64 NodeId;\r
+ UINT64 CookieForNextEntry;\r
+ UINT32 Namelen;\r
+ UINT32 Type;\r
} VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE;\r
\r
//\r
// Header for VirtioFsFuseOpRename2.\r
//\r
typedef struct {\r
- UINT64 NewDir;\r
- UINT32 Flags;\r
- UINT32 Padding;\r
+ UINT64 NewDir;\r
+ UINT32 Flags;\r
+ UINT32 Padding;\r
} VIRTIO_FS_FUSE_RENAME2_REQUEST;\r
#pragma pack ()\r
\r