Ah! I found it!
--- linux_ioctl.h.orig Mon Feb 28 11:50:23 2000
+++ linux_ioctl.h Mon Feb 28 11:24:08 2000
@@ -32,6 +32,25 @@
#define _LINUX_IOCTL_H_
/*
+ * disk
+ */
+#define LINUX_BLKROSET 0x125d
+#define LINUX_BLKROGET 0x125e
+#define LINUX_BLKRRPART 0x125f
+#define LINUX_BLKGETSIZE 0x1260
+#define LINUX_BLKFLSBUF 0x1261
+#define LINUX_BLKRASET 0x1262
+#define LINUX_BLKRAGET 0x1263
+#define LINUX_BLKFRASET 0x1264
+#define LINUX_BLKFRAGET 0x1265
+#define LINUX_BLKSECTSET 0x1266
+#define LINUX_BLKSECTGET 0x1267
+#define LINUX_BLKSSZGET 0x1268
+
+#define LINUX_IOCTL_DISK_MIN LINUX_BLKROSET
+#define LINUX_IOCTL_DISK_MAX LINUX_BLKSSZGET
+
+/*
* cdrom
*/
#define LINUX_CDROMPAUSE 0x5301
--- linux_ioctl.c.orig Mon Feb 28 11:50:07 2000
+++ linux_ioctl.c Mon Feb 28 11:11:09 2000
@@ -46,6 +46,7 @@
#include <net/if_types.h>
#include <sys/sockio.h>
#include <sys/soundcard.h>
+#include <sys/disklabel.h>
#include <machine/console.h>
@@ -55,12 +56,15 @@
#include <i386/linux/linux_proto.h>
#include <i386/linux/linux_util.h>
+static linux_ioctl_function_t linux_ioctl_disk;
static linux_ioctl_function_t linux_ioctl_cdrom;
static linux_ioctl_function_t linux_ioctl_console;
static linux_ioctl_function_t linux_ioctl_socket;
static linux_ioctl_function_t linux_ioctl_sound;
static linux_ioctl_function_t linux_ioctl_termio;
+static struct linux_ioctl_handler disk_handler =
+{ linux_ioctl_disk, LINUX_IOCTL_DISK_MIN, LINUX_IOCTL_DISK_MAX };
static struct linux_ioctl_handler cdrom_handler =
{ linux_ioctl_cdrom, LINUX_IOCTL_CDROM_MIN, LINUX_IOCTL_CDROM_MAX };
static struct linux_ioctl_handler console_handler =
@@ -72,6 +76,7 @@
static struct linux_ioctl_handler termio_handler =
{ linux_ioctl_termio, LINUX_IOCTL_TERMIO_MIN, LINUX_IOCTL_TERMIO_MAX };
+DATA_SET(linux_ioctl_handler_set, disk_handler);
DATA_SET(linux_ioctl_handler_set, cdrom_handler);
DATA_SET(linux_ioctl_handler_set, console_handler);
DATA_SET(linux_ioctl_handler_set, socket_handler);
@@ -87,6 +92,23 @@
static TAILQ_HEAD(, handler_element) handlers =
TAILQ_HEAD_INITIALIZER(handlers);
+
+static int
+linux_ioctl_disk(struct proc *p, struct linux_ioctl_args *args)
+{
+ struct file *fp = p->p_fd->fd_ofiles[args->fd];
+ int error;
+ struct disklabel dl;
+
+ switch (args->cmd & 0xffff) {
+ case LINUX_BLKGETSIZE:
+ error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, p);
+ if (error)
+ return (error);
+ return copyout(&(dl.d_secperunit), (caddr_t)args->arg,
sizeof(dl.d_secperunit));
+ }
+ return (ENOIOCTL);
+}
/*
* termio related ioctls
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message