Commit 43bd8a67 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'for-5.14/libata-2021-06-27' of git://git.kernel.dk/linux-block

Pull libata updates from Jens Axboe:
 "The big change in this round is that we're finally in a position where
  we can sanely remove the old drivers/ide/ code, as libata covers
  everything we need by now.

  This is exciting for two reasons:

   1) we delete a lot of legacy code that doesn't really meet the
      standards we have today, and

   2) it enables us to clean up various bits in the block layer that
      exist only because of the old IDE code.

  Outside of that, just a few minor fixes here, fixups for warnings,
  etc"

* tag 'for-5.14/libata-2021-06-27' of git://git.kernel.dk/linux-block: (29 commits)
  ata: rb532_cf: remove redundant codes
  ide: remove the legacy ide driver
  m68k: use libata instead of the legacy ide driver
  ARM: disable CONFIG_IDE in pxa_defconfig
  ARM: disable CONFIG_IDE in footbridge_defconfig
  alpha: use libata instead of the legacy ide driver
  pata_cypress: add a module option to disable BM-DMA
  ata: pata_macio: Avoid overwriting initialised field in 'pata_macio_sht'
  ata: pata_serverworks: Avoid overwriting initialised field in 'serverworks_osb4_sht
  ata: pata_sc1200: sc1200_sht'Avoid overwriting initialised field in '
  ata: pata_cs5530: Avoid overwriting initialised field in 'cs5530_sht'
  ata: pata_cs5520: Avoid overwriting initialised field in 'cs5520_sht'
  ata: pata_atiixp: Avoid overwriting initialised field in 'atiixp_sht'
  ata: sata_nv: Do not over-write initialise fields in 'nv_adma_sht' and 'nv_swncq_sht'
  ata: sata_mv: Do not over-write initialise fields in 'mv6_sht'
  ata: sata_sil24: Do not over-write initialise fields in 'sil24_sht'
  ata: ahci: Ensure initialised fields are not overwritten in AHCI_SHT()
  ata: include: libata: Move fields commonly over-written to separate MACRO
  ahci: Add support for Dell S140 and later controllers
  ata: ahci_sunxi: Disable DIPM
  ...
parents 66d92825 1af11d09
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
@@ -8771,22 +8771,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
+6 −7
Original line number Diff line number Diff line
@@ -25,19 +25,18 @@ CONFIG_PNP=y
CONFIG_ISAPNP=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_IDE=y
CONFIG_BLK_DEV_IDECD=y
CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_GENERIC=y
CONFIG_BLK_DEV_ALI15X3=y
CONFIG_BLK_DEV_CMD64X=y
CONFIG_BLK_DEV_CY82C693=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SR=y
CONFIG_SCSI_AIC7XXX=m
CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
CONFIG_ATA=y
# CONFIG_SATA_PMP is not set
CONFIG_PATA_ALI=y
CONFIG_PATA_CMD64X=y
CONFIG_PATA_CYPRESS=y
CONFIG_ATA_GENERIC=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
CONFIG_NET_ETHERNET=y
+0 −1
Original line number Diff line number Diff line
@@ -64,7 +64,6 @@ CONFIG_PARIDE_ON26=m
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=y
CONFIG_IDE=y
CONFIG_NETDEVICES=y
CONFIG_NET_ETHERNET=y
CONFIG_NET_VENDOR_3COM=y
+0 −2
Original line number Diff line number Diff line
@@ -215,8 +215,6 @@ CONFIG_IIO=m
CONFIG_AD5446=m
CONFIG_EEPROM_AT24=m
CONFIG_SENSORS_LIS3_SPI=m
CONFIG_IDE=m
CONFIG_BLK_DEV_IDECS=m
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=m
CONFIG_CHR_DEV_ST=m
Loading