Commit b7fb14d3 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

ide: remove the legacy ide driver



The legay ide driver has been replace with libata starting in 2003 and has
been scheduled for removal for a while.  Finally kill it off so that we
can start cleaning up various bits of cruft it forced on the block layer.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent b90257bf
Loading
Loading
Loading
Loading
+25 −820
Original line number Diff line number Diff line
@@ -7,8 +7,8 @@ Summary of `HDIO_` ioctl calls
November, 2004

This document attempts to describe the ioctl(2) calls supported by
the HD/IDE layer.  These are by-and-large implemented (as of Linux 2.6)
in drivers/ide/ide.c and drivers/block/scsi_ioctl.c
the HD/IDE layer.  These are by-and-large implemented (as of Linux 5.11)
drivers/ata/libata-scsi.c.

ioctl values are listed in <linux/hdreg.h>.  As of this writing, they
are as follows:
@@ -17,50 +17,17 @@ are as follows:

	=======================	=======================================
	HDIO_GETGEO		get device geometry
	HDIO_GET_UNMASKINTR	get current unmask setting
	HDIO_GET_MULTCOUNT	get current IDE blockmode setting
	HDIO_GET_QDMA		get use-qdma flag
	HDIO_SET_XFER		set transfer rate via proc
	HDIO_OBSOLETE_IDENTITY	OBSOLETE, DO NOT USE
	HDIO_GET_KEEPSETTINGS	get keep-settings-on-reset flag
	HDIO_GET_32BIT		get current io_32bit setting
	HDIO_GET_NOWERR		get ignore-write-error flag
	HDIO_GET_DMA		get use-dma flag
	HDIO_GET_NICE		get nice flags
	HDIO_GET_IDENTITY	get IDE identification info
	HDIO_GET_WCACHE		get write cache mode on|off
	HDIO_GET_ACOUSTIC	get acoustic value
	HDIO_GET_ADDRESS	get sector addressing mode
	HDIO_GET_BUSSTATE	get the bus state of the hwif
	HDIO_TRISTATE_HWIF	execute a channel tristate
	HDIO_DRIVE_RESET	execute a device reset
	HDIO_DRIVE_TASKFILE	execute raw taskfile
	HDIO_DRIVE_TASK		execute task and special drive command
	HDIO_DRIVE_CMD		execute a special drive command
	HDIO_DRIVE_CMD_AEB	HDIO_DRIVE_TASK
	=======================	=======================================

    ioctls that pass non-pointer values:

	=======================	=======================================
	HDIO_SET_MULTCOUNT	change IDE blockmode
	HDIO_SET_UNMASKINTR	permit other irqs during I/O
	HDIO_SET_KEEPSETTINGS	keep ioctl settings on reset
	HDIO_SET_32BIT		change io_32bit flags
	HDIO_SET_NOWERR		change ignore-write-error flag
	HDIO_SET_DMA		change use-dma flag
	HDIO_SET_PIO_MODE	reconfig interface to new speed
	HDIO_SCAN_HWIF		register and (re)scan interface
	HDIO_SET_NICE		set nice flags
	HDIO_UNREGISTER_HWIF	unregister interface
	HDIO_SET_WCACHE		change write cache enable-disable
	HDIO_SET_ACOUSTIC	change acoustic behavior
	HDIO_SET_BUSSTATE	set the bus state of the hwif
	HDIO_SET_QDMA		change use-qdma flag
	HDIO_SET_ADDRESS	change lba addressing modes

	HDIO_SET_IDE_SCSI	Set scsi emulation mode on/off
	HDIO_SET_SCSI_IDE	not implemented yet
	=======================	=======================================


@@ -137,512 +104,49 @@ HDIO_GETGEO




HDIO_GET_UNMASKINTR
	get current unmask setting


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_UNMASKINTR, &val);

	inputs:
		none



	outputs:
		The value of the drive's current unmask setting





HDIO_SET_UNMASKINTR
	permit other irqs during I/O


	usage::

	  unsigned long val;

	  ioctl(fd, HDIO_SET_UNMASKINTR, val);

	inputs:
		New value for unmask flag



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 1]
	  - EBUSY	Controller busy




HDIO_GET_MULTCOUNT
	get current IDE blockmode setting


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_MULTCOUNT, &val);

	inputs:
		none



	outputs:
		The value of the current IDE block mode setting.  This
		controls how many sectors the drive will transfer per
		interrupt.



HDIO_SET_MULTCOUNT
	change IDE blockmode


	usage::

	  int val;

	  ioctl(fd, HDIO_SET_MULTCOUNT, val);

	inputs:
		New value for IDE block mode setting.  This controls how many
		sectors the drive will transfer per interrupt.

	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range supported by disk.
	  - EBUSY	Controller busy or blockmode already set.
	  - EIO		Drive did not accept new block mode.

	notes:
	  Source code comments read::

	    This is tightly woven into the driver->do_special cannot
	    touch.  DON'T do it again until a total personality rewrite
	    is committed.

	  If blockmode has already been set, this ioctl will fail with
	  -EBUSY



HDIO_GET_QDMA
	get use-qdma flag


	Not implemented, as of 2.6.8.1



HDIO_SET_XFER
	set transfer rate via proc


	Not implemented, as of 2.6.8.1



HDIO_OBSOLETE_IDENTITY
	OBSOLETE, DO NOT USE


	Same as HDIO_GET_IDENTITY (see below), except that it only
	returns the first 142 bytes of drive identity information.



HDIO_GET_IDENTITY
	get IDE identification info


	usage::

	  unsigned char identity[512];

	  ioctl(fd, HDIO_GET_IDENTITY, identity);

	inputs:
		none



	outputs:
		ATA drive identity information.  For full description, see
		the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in
		the ATA specification.

	error returns:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - ENOMSG	IDENTIFY DEVICE information not available

	notes:
		Returns information that was obtained when the drive was
		probed.  Some of this information is subject to change, and
		this ioctl does not re-probe the drive to update the
		information.

		This information is also available from /proc/ide/hdX/identify



HDIO_GET_KEEPSETTINGS
	get keep-settings-on-reset flag


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_KEEPSETTINGS, &val);

	inputs:
		none



	outputs:
		The value of the current "keep settings" flag



	notes:
		When set, indicates that kernel should restore settings
		after a drive reset.



HDIO_SET_KEEPSETTINGS
	keep ioctl settings on reset


	usage::

	  long val;

	  ioctl(fd, HDIO_SET_KEEPSETTINGS, val);

	inputs:
		New value for keep_settings flag



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 1]
	  - EBUSY		Controller busy



HDIO_GET_32BIT
	get current io_32bit setting


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_32BIT, &val);

	inputs:
		none



	outputs:
		The value of the current io_32bit setting



	notes:
		0=16-bit, 1=32-bit, 2,3 = 32bit+sync





HDIO_GET_NOWERR
	get ignore-write-error flag


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_NOWERR, &val);

	inputs:
		none



	outputs:
		The value of the current ignore-write-error flag





HDIO_GET_DMA
	get use-dma flag


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_DMA, &val);

	inputs:
		none



	outputs:
		The value of the current use-dma flag





HDIO_GET_NICE
	get nice flags


	usage::

	  long nice;

	  ioctl(fd, HDIO_GET_NICE, &nice);

	inputs:
		none



	outputs:
		The drive's "nice" values.



	notes:
		Per-drive flags which determine when the system will give more
		bandwidth to other devices sharing the same IDE bus.

		See <linux/hdreg.h>, near symbol IDE_NICE_DSC_OVERLAP.




HDIO_SET_NICE
	set nice flags


	usage::

	  unsigned long nice;

	  ...
	  ioctl(fd, HDIO_SET_NICE, nice);

	inputs:
		bitmask of nice flags.



	outputs:
		none



	error returns:
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EPERM	Flags other than DSC_OVERLAP and NICE_1 set.
	  - EPERM	DSC_OVERLAP specified but not supported by drive

	notes:
		This ioctl sets the DSC_OVERLAP and NICE_1 flags from values
		provided by the user.

		Nice flags are listed in <linux/hdreg.h>, starting with
		IDE_NICE_DSC_OVERLAP.  These values represent shifts.





HDIO_GET_WCACHE
	get write cache mode on|off


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_WCACHE, &val);

	inputs:
		none



	outputs:
		The value of the current write cache mode





HDIO_GET_ACOUSTIC
	get acoustic value


	usage::

	  long val;

	  ioctl(fd, HDIO_GET_ACOUSTIC, &val);

	inputs:
		none



	outputs:
		The value of the current acoustic settings



	notes:
		See HDIO_SET_ACOUSTIC





HDIO_GET_ADDRESS
	usage::


	  long val;

	  ioctl(fd, HDIO_GET_ADDRESS, &val);

	inputs:
		none



	outputs:
		The value of the current addressing mode:

	    =  ===================
	    0  28-bit
	    1  48-bit
	    2  48-bit doing 28-bit
	    3  64-bit
	    =  ===================



HDIO_GET_BUSSTATE
	get the bus state of the hwif


	usage::

	  long state;

	  ioctl(fd, HDIO_SCAN_HWIF, &state);

	inputs:
		none



	outputs:
		Current power state of the IDE bus.  One of BUSSTATE_OFF,
		BUSSTATE_ON, or BUSSTATE_TRISTATE

	error returns:
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN




HDIO_SET_BUSSTATE
	set the bus state of the hwif


	usage::

	  int state;
	  unsigned char identity[512];

	  ...
	  ioctl(fd, HDIO_SCAN_HWIF, state);
	  ioctl(fd, HDIO_GET_IDENTITY, identity);

	inputs:
		Desired IDE power state.  One of BUSSTATE_OFF, BUSSTATE_ON,
		or BUSSTATE_TRISTATE

	outputs:
		none



	error returns:
	  - EACCES	Access denied:  requires CAP_SYS_RAWIO
	  - EOPNOTSUPP	Hardware interface does not support bus power control



	outputs:
		ATA drive identity information.  For full description, see
		the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in
		the ATA specification.

HDIO_TRISTATE_HWIF
	execute a channel tristate
	error returns:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - ENOMSG	IDENTIFY DEVICE information not available

	notes:
		Returns information that was obtained when the drive was
		probed.  Some of this information is subject to change, and
		this ioctl does not re-probe the drive to update the
		information.

	Not implemented, as of 2.6.8.1.  See HDIO_SET_BUSSTATE
		This information is also available from /proc/ide/hdX/identify



HDIO_DRIVE_RESET
	execute a device reset
HDIO_GET_32BIT
	get current io_32bit setting


	usage::

	  int args[3]
	  long val;

	  ...
	  ioctl(fd, HDIO_DRIVE_RESET, args);
	  ioctl(fd, HDIO_GET_32BIT, &val);

	inputs:
		none
@@ -650,22 +154,12 @@ HDIO_DRIVE_RESET


	outputs:
		none

		The value of the current io_32bit setting


	error returns:
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - ENXIO	No such device:	phy dead or ctl_addr == 0
	  - EIO		I/O error:	reset timed out or hardware error

	notes:

	  - Execute a reset on the device as soon as the current IO
	    operation has completed.

	  - Executes an ATAPI soft reset if applicable, otherwise
	    executes an ATA soft reset on the controller.
		0=16-bit, 1=32-bit, 2,3 = 32bit+sync



@@ -1026,14 +520,6 @@ HDIO_DRIVE_TASK



HDIO_DRIVE_CMD_AEB
	HDIO_DRIVE_TASK


	Not implemented, as of 2.6.8.1



HDIO_SET_32BIT
	change io_32bit flags

@@ -1059,284 +545,3 @@ HDIO_SET_32BIT
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 3]
	  - EBUSY	Controller busy




HDIO_SET_NOWERR
	change ignore-write-error flag


	usage::

	  int val;

	  ioctl(fd, HDIO_SET_NOWERR, val);

	inputs:
		New value for ignore-write-error flag.  Used for ignoring


	  WRERR_STAT

	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 1]
	  - EBUSY		Controller busy



HDIO_SET_DMA
	change use-dma flag


	usage::

	  long val;

	  ioctl(fd, HDIO_SET_DMA, val);

	inputs:
		New value for use-dma flag



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 1]
	  - EBUSY	Controller busy



HDIO_SET_PIO_MODE
	reconfig interface to new speed


	usage::

	  long val;

	  ioctl(fd, HDIO_SET_PIO_MODE, val);

	inputs:
		New interface speed.



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 255]
	  - EBUSY	Controller busy



HDIO_SCAN_HWIF
	register and (re)scan interface


	usage::

	  int args[3]

	  ...
	  ioctl(fd, HDIO_SCAN_HWIF, args);

	inputs:

	  =======	=========================
	  args[0]	io address to probe


	  args[1]	control address to probe
	  args[2]	irq number
	  =======	=========================

	outputs:
		none



	error returns:
	  - EACCES	Access denied:  requires CAP_SYS_RAWIO
	  - EIO		Probe failed.

	notes:
		This ioctl initializes the addresses and irq for a disk
		controller, probes for drives, and creates /proc/ide
		interfaces as appropriate.



HDIO_UNREGISTER_HWIF
	unregister interface


	usage::

	  int index;

	  ioctl(fd, HDIO_UNREGISTER_HWIF, index);

	inputs:
		index		index of hardware interface to unregister



	outputs:
		none



	error returns:
	  - EACCES	Access denied:  requires CAP_SYS_RAWIO

	notes:
		This ioctl removes a hardware interface from the kernel.

		Currently (2.6.8) this ioctl silently fails if any drive on
		the interface is busy.



HDIO_SET_WCACHE
	change write cache enable-disable


	usage::

	  int val;

	  ioctl(fd, HDIO_SET_WCACHE, val);

	inputs:
		New value for write cache enable



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 1]
	  - EBUSY	Controller busy



HDIO_SET_ACOUSTIC
	change acoustic behavior


	usage::

	  int val;

	  ioctl(fd, HDIO_SET_ACOUSTIC, val);

	inputs:
		New value for drive acoustic settings



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 254]
	  - EBUSY	Controller busy



HDIO_SET_QDMA
	change use-qdma flag


	Not implemented, as of 2.6.8.1



HDIO_SET_ADDRESS
	change lba addressing modes


	usage::

	  int val;

	  ioctl(fd, HDIO_SET_ADDRESS, val);

	inputs:
		New value for addressing mode

	    =   ===================
	    0   28-bit
	    1   48-bit
	    2   48-bit doing 28-bit
	    =   ===================

	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 2]
	  - EBUSY		Controller busy
	  - EIO		Drive does not support lba48 mode.


HDIO_SET_IDE_SCSI
	usage::


	  long val;

	  ioctl(fd, HDIO_SET_IDE_SCSI, val);

	inputs:
		New value for scsi emulation mode (?)



	outputs:
		none



	error return:
	  - EINVAL	Called on a partition instead of the whole disk device
	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
	  - EINVAL	value out of range [0 1]
	  - EBUSY	Controller busy



HDIO_SET_SCSI_IDE
	Not implemented, as of 2.6.8.1
+0 −16
Original line number Diff line number Diff line
@@ -8763,22 +8763,6 @@ L: linux-i2c@vger.kernel.org
S:	Maintained
F:	drivers/i2c/busses/i2c-icy.c
IDE SUBSYSTEM
M:	"David S. Miller" <davem@davemloft.net>
L:	linux-ide@vger.kernel.org
S:	Maintained
Q:	http://patchwork.ozlabs.org/project/linux-ide/list/
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide.git
F:	Documentation/ide/
F:	drivers/ide/
F:	include/linux/ide.h
IDE/ATAPI DRIVERS
L:	linux-ide@vger.kernel.org
S:	Orphan
F:	Documentation/cdrom/ide-cd.rst
F:	drivers/ide/ide-cd*
IDEAPAD LAPTOP EXTRAS DRIVER
M:	Ike Panhc <ike.pan@canonical.com>
L:	platform-driver-x86@vger.kernel.org
+0 −2
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ source "drivers/nvme/Kconfig"

source "drivers/misc/Kconfig"

source "drivers/ide/Kconfig"

source "drivers/scsi/Kconfig"

source "drivers/ata/Kconfig"
+0 −1
Original line number Diff line number Diff line
@@ -78,7 +78,6 @@ obj-$(CONFIG_CXL_BUS) += cxl/
obj-$(CONFIG_DMA_SHARED_BUFFER) += dma-buf/
obj-$(CONFIG_NUBUS)		+= nubus/
obj-y				+= macintosh/
obj-$(CONFIG_IDE)		+= ide/
obj-y				+= scsi/
obj-y				+= nvme/
obj-$(CONFIG_ATA)		+= ata/

drivers/ide/Kconfig

deleted100644 → 0
+0 −827

File deleted.

Preview size limit exceeded, changes collapsed.

Loading