2014-02-06 17:09:22 +01:00
|
|
|
From b7e5d07c5a7f73cd199e76366fb715ddee2b17a3 Mon Sep 17 00:00:00 2001
|
2014-01-18 02:33:15 +01:00
|
|
|
From: =?UTF-8?q?Andreas=20F=C3=A4rber?= <afaerber@suse.de>
|
|
|
|
Date: Sat, 18 Jan 2014 02:15:05 +0100
|
|
|
|
Subject: [PATCH] linux-user: Implement BLKPG ioctl
|
|
|
|
MIME-Version: 1.0
|
|
|
|
Content-Type: text/plain; charset=UTF-8
|
|
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
|
|
|
|
Signed-off-by: Andreas Färber <afaerber@suse.de>
|
|
|
|
---
|
|
|
|
linux-user/ioctls.h | 1 +
|
|
|
|
linux-user/syscall.c | 1 +
|
|
|
|
linux-user/syscall_defs.h | 1 +
|
|
|
|
linux-user/syscall_types.h | 13 +++++++++++++
|
|
|
|
4 files changed, 16 insertions(+)
|
|
|
|
|
|
|
|
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
|
|
|
|
index a96a419..ffd6d09 100644
|
|
|
|
--- a/linux-user/ioctls.h
|
|
|
|
+++ b/linux-user/ioctls.h
|
|
|
|
@@ -95,6 +95,7 @@
|
|
|
|
IOCTL(BLKRAGET, IOC_R, MK_PTR(TYPE_LONG))
|
|
|
|
IOCTL(BLKSSZGET, IOC_R, MK_PTR(TYPE_LONG))
|
|
|
|
IOCTL(BLKBSZGET, IOC_R, MK_PTR(TYPE_INT))
|
|
|
|
+ IOCTL(BLKPG, IOC_W, MK_PTR(MK_STRUCT(STRUCT_blkpg_ioctl_arg)))
|
|
|
|
#ifdef FIBMAP
|
|
|
|
IOCTL(FIBMAP, IOC_W | IOC_R, MK_PTR(TYPE_LONG))
|
|
|
|
#endif
|
|
|
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
|
|
index 4f7327a..ef82a0e 100644
|
|
|
|
--- a/linux-user/syscall.c
|
|
|
|
+++ b/linux-user/syscall.c
|
|
|
|
@@ -107,6 +107,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base,
|
|
|
|
#include <linux/reboot.h>
|
|
|
|
#include <linux/route.h>
|
|
|
|
#include <linux/filter.h>
|
|
|
|
+#include <linux/blkpg.h>
|
|
|
|
#include "linux_loop.h"
|
|
|
|
#include "cpu-uname.h"
|
|
|
|
|
|
|
|
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
|
|
|
index 2d41202..3cdd471 100644
|
|
|
|
--- a/linux-user/syscall_defs.h
|
|
|
|
+++ b/linux-user/syscall_defs.h
|
|
|
|
@@ -895,6 +895,7 @@ struct target_pollfd {
|
|
|
|
#define TARGET_BLKSECTSET TARGET_IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
|
|
|
|
#define TARGET_BLKSECTGET TARGET_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
|
|
|
|
#define TARGET_BLKSSZGET TARGET_IO(0x12,104)/* get block device sector size */
|
|
|
|
+#define TARGET_BLKPG TARGET_IO(0x12,105)/* Partition table and disk geometry handling */
|
|
|
|
/* A jump here: 108-111 have been used for various private purposes. */
|
|
|
|
#define TARGET_BLKBSZGET TARGET_IOR(0x12, 112, abi_ulong)
|
|
|
|
#define TARGET_BLKBSZSET TARGET_IOW(0x12, 113, abi_ulong)
|
|
|
|
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
|
|
|
|
index dd78619..56e344c 100644
|
|
|
|
--- a/linux-user/syscall_types.h
|
|
|
|
+++ b/linux-user/syscall_types.h
|
|
|
|
@@ -248,3 +248,16 @@ STRUCT(fiemap,
|
|
|
|
TYPE_INT, /* fm_mapped_extents */
|
|
|
|
TYPE_INT, /* fm_extent_count */
|
|
|
|
TYPE_INT) /* fm_reserved */
|
|
|
|
+
|
|
|
|
+STRUCT(blkpg_partition,
|
|
|
|
+ TYPE_LONGLONG, /* start */
|
|
|
|
+ TYPE_LONGLONG, /* length */
|
|
|
|
+ TYPE_INT, /* pno */
|
|
|
|
+ MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
|
|
|
|
+ MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
|
|
|
|
+
|
|
|
|
+STRUCT(blkpg_ioctl_arg,
|
|
|
|
+ TYPE_INT, /* op */
|
|
|
|
+ TYPE_INT, /* flags */
|
|
|
|
+ TYPE_INT, /* datalen */
|
|
|
|
+ MK_PTR(MK_STRUCT(STRUCT_blkpg_partition))) /* data */
|