Implement Linux BLKGETSIZE ioctl, and open the door to implementing
other BLK.* ioctls should the desire arize. Approved by: jkh (via dufault)
This commit is contained in:
parent
a9a948a9bb
commit
9deb82d478
@ -31,6 +31,25 @@
|
||||
#ifndef _LINUX_IOCTL_H_
|
||||
#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
|
||||
*/
|
||||
|
@ -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 sound_handler =
|
||||
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);
|
||||
@ -88,6 +93,24 @@ struct handler_element
|
||||
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));
|
||||
break;
|
||||
}
|
||||
return (ENOIOCTL);
|
||||
}
|
||||
|
||||
/*
|
||||
* termio related ioctls
|
||||
*/
|
||||
|
@ -31,6 +31,25 @@
|
||||
#ifndef _LINUX_IOCTL_H_
|
||||
#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
|
||||
*/
|
||||
|
@ -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 sound_handler =
|
||||
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);
|
||||
@ -88,6 +93,24 @@ struct handler_element
|
||||
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));
|
||||
break;
|
||||
}
|
||||
return (ENOIOCTL);
|
||||
}
|
||||
|
||||
/*
|
||||
* termio related ioctls
|
||||
*/
|
||||
|
@ -31,6 +31,25 @@
|
||||
#ifndef _LINUX_IOCTL_H_
|
||||
#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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user