diff options
author | Thomas Schwinge <tschwinge@gnu.org> | 2006-10-08 13:43:51 +0000 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gnu.org> | 2009-06-18 00:26:42 +0200 |
commit | 143ee06bfad83cdf9395da4c975668086e41cf4a (patch) | |
tree | ec8a1c1e3c61792e91676b320d673901d706baff /linux | |
parent | b07c6b082f978e1e9944f63670467d8ed0d9ea76 (diff) |
2006-10-08 Thomas Schwinge <tschwinge@gnu.org>
* linux/dev/drivers/scsi/sd_ioctl.c: Move file...
* linux/src/drivers/scsi/sd_ioctl.c: ... here.
Diffstat (limited to 'linux')
-rw-r--r-- | linux/dev/drivers/scsi/sd_ioctl.c | 128 | ||||
-rw-r--r-- | linux/src/drivers/scsi/sd_ioctl.c | 9 |
2 files changed, 9 insertions, 128 deletions
diff --git a/linux/dev/drivers/scsi/sd_ioctl.c b/linux/dev/drivers/scsi/sd_ioctl.c deleted file mode 100644 index 4c58f04..0000000 --- a/linux/dev/drivers/scsi/sd_ioctl.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * drivers/scsi/sd_ioctl.c - * - * ioctl handling for SCSI disks - */ - -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/mm.h> -#include <linux/fs.h> -#include <linux/hdreg.h> -#include <linux/errno.h> - -#include <asm/segment.h> - -#include <linux/blk.h> -#include "scsi.h" -#include <scsi/scsi_ioctl.h> -#include "hosts.h" -#include "sd.h" -#include <scsi/scsicam.h> /* must follow "hosts.h" */ - -int sd_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg) -{ - kdev_t dev = inode->i_rdev; - int error; - struct Scsi_Host * host; - int diskinfo[4]; - struct hd_geometry *loc = (struct hd_geometry *) arg; - - switch (cmd) { - case HDIO_GETGEO: /* Return BIOS disk parameters */ - if (!loc) return -EINVAL; -#ifndef MACH - error = verify_area(VERIFY_WRITE, loc, sizeof(*loc)); - if (error) - return error; -#endif - host = rscsi_disks[MINOR(dev) >> 4].device->host; - -/* default to most commonly used values */ - - diskinfo[0] = 0x40; - diskinfo[1] = 0x20; - diskinfo[2] = rscsi_disks[MINOR(dev) >> 4].capacity >> 11; - -/* override with calculated, extended default, or driver values */ - - if(host->hostt->bios_param != NULL) - host->hostt->bios_param(&rscsi_disks[MINOR(dev) >> 4], - dev, - &diskinfo[0]); - else scsicam_bios_param(&rscsi_disks[MINOR(dev) >> 4], - dev, &diskinfo[0]); - -#ifdef MACH - loc->heads = diskinfo[0]; - loc->sectors = diskinfo[1]; - loc->cylinders = diskinfo[2]; - loc->start = sd[MINOR(inode->i_rdev)].start_sect; -#else - put_user(diskinfo[0], &loc->heads); - put_user(diskinfo[1], &loc->sectors); - put_user(diskinfo[2], &loc->cylinders); - put_user(sd[MINOR(inode->i_rdev)].start_sect, &loc->start); -#endif - return 0; - case BLKGETSIZE: /* Return device size */ - if (!arg) return -EINVAL; - error = verify_area(VERIFY_WRITE, (long *) arg, sizeof(long)); - if (error) - return error; - put_user(sd[MINOR(inode->i_rdev)].nr_sects, - (long *) arg); - return 0; - - case BLKRASET: - if (!suser()) - return -EACCES; - if(!(inode->i_rdev)) return -EINVAL; - if(arg > 0xff) return -EINVAL; - read_ahead[MAJOR(inode->i_rdev)] = arg; - return 0; - - case BLKRAGET: - if (!arg) - return -EINVAL; - error = verify_area(VERIFY_WRITE, (int *) arg, sizeof(int)); - if (error) - return error; - put_user(read_ahead[MAJOR(inode->i_rdev)], (int *) arg); - return 0; - - case BLKFLSBUF: - if(!suser()) return -EACCES; - if(!(inode->i_rdev)) return -EINVAL; - fsync_dev(inode->i_rdev); - invalidate_buffers(inode->i_rdev); - return 0; - - case BLKRRPART: /* Re-read partition tables */ - return revalidate_scsidisk(dev, 1); - - RO_IOCTLS(dev, arg); - - default: - return scsi_ioctl(rscsi_disks[MINOR(dev) >> 4].device , cmd, (void *) arg); - } -} - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 4 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -4 - * c-argdecl-indent: 4 - * c-label-offset: -4 - * c-continued-statement-offset: 4 - * c-continued-brace-offset: 0 - * indent-tabs-mode: nil - * tab-width: 8 - * End: - */ diff --git a/linux/src/drivers/scsi/sd_ioctl.c b/linux/src/drivers/scsi/sd_ioctl.c index 52fd754..4c58f04 100644 --- a/linux/src/drivers/scsi/sd_ioctl.c +++ b/linux/src/drivers/scsi/sd_ioctl.c @@ -31,9 +31,11 @@ int sd_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigne switch (cmd) { case HDIO_GETGEO: /* Return BIOS disk parameters */ if (!loc) return -EINVAL; +#ifndef MACH error = verify_area(VERIFY_WRITE, loc, sizeof(*loc)); if (error) return error; +#endif host = rscsi_disks[MINOR(dev) >> 4].device->host; /* default to most commonly used values */ @@ -51,10 +53,17 @@ int sd_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigne else scsicam_bios_param(&rscsi_disks[MINOR(dev) >> 4], dev, &diskinfo[0]); +#ifdef MACH + loc->heads = diskinfo[0]; + loc->sectors = diskinfo[1]; + loc->cylinders = diskinfo[2]; + loc->start = sd[MINOR(inode->i_rdev)].start_sect; +#else put_user(diskinfo[0], &loc->heads); put_user(diskinfo[1], &loc->sectors); put_user(diskinfo[2], &loc->cylinders); put_user(sd[MINOR(inode->i_rdev)].start_sect, &loc->start); +#endif return 0; case BLKGETSIZE: /* Return device size */ if (!arg) return -EINVAL; |