Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c223701c authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide: add "hdx=nodma" kernel parameter



* Add "hdx=nodma" option allowing user to disallow DMA for a given device.

* Obsolete "ide=nodma" option.

Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 9ff6f72f
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -242,6 +242,8 @@ Summary of ide driver parameters for kernel command line
			  and quite likely to cause trouble with
			  and quite likely to cause trouble with
			  older/odd IDE drives.
			  older/odd IDE drives.


 "hdx=nodma"		: disallow DMA

 "hdx=swapdata"		: when the drive is a disk, byte swap all data
 "hdx=swapdata"		: when the drive is a disk, byte swap all data


 "hdx=bswap"		: same as above..........
 "hdx=bswap"		: same as above..........
@@ -286,8 +288,6 @@ Summary of ide driver parameters for kernel command line


 "ide=reverse"		: formerly called to pci sub-system, but now local.
 "ide=reverse"		: formerly called to pci sub-system, but now local.


 "ide=nodma"		: disable DMA globally for the IDE subsystem.

The following are valid ONLY on ide0, which usually corresponds
The following are valid ONLY on ide0, which usually corresponds
to the first ATA interface found on the particular host, and the defaults for
to the first ATA interface found on the particular host, and the defaults for
the base,ctl ports must not be altered.
the base,ctl ports must not be altered.
+1 −1
Original line number Original line Diff line number Diff line
@@ -759,7 +759,7 @@ static int ide_tune_dma(ide_drive_t *drive)
{
{
	u8 speed;
	u8 speed;


	if (noautodma || (drive->id->capability & 1) == 0)
	if (noautodma || drive->nodma || (drive->id->capability & 1) == 0)
		return 0;
		return 0;


	/* consult the list of known "bad" drives */
	/* consult the list of known "bad" drives */
+5 −2
Original line number Original line Diff line number Diff line
@@ -1272,7 +1272,7 @@ static int __init ide_setup(char *s)
	if (!strcmp(s, "ide=nodma")) {
	if (!strcmp(s, "ide=nodma")) {
		printk(" : Prevented DMA\n");
		printk(" : Prevented DMA\n");
		noautodma = 1;
		noautodma = 1;
		return 1;
		goto obsolete_option;
	}
	}


#ifdef CONFIG_IDEPCI_PCIBUS_ORDER
#ifdef CONFIG_IDEPCI_PCIBUS_ORDER
@@ -1306,7 +1306,7 @@ static int __init ide_setup(char *s)
	 */
	 */
	if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) {
	if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) {
		const char *hd_words[] = {
		const char *hd_words[] = {
			"none", "noprobe", "nowerr", "cdrom", "minus5",
			"none", "noprobe", "nowerr", "cdrom", "nodma",
			"autotune", "noautotune", "minus8", "swapdata", "bswap",
			"autotune", "noautotune", "minus8", "swapdata", "bswap",
			"noflush", "remap", "remap63", "scsi", NULL };
			"noflush", "remap", "remap63", "scsi", NULL };
		unit = s[2] - 'a';
		unit = s[2] - 'a';
@@ -1334,6 +1334,9 @@ static int __init ide_setup(char *s)
				drive->ready_stat = 0;
				drive->ready_stat = 0;
				hwif->noprobe = 0;
				hwif->noprobe = 0;
				goto done;
				goto done;
			case -5: /* nodma */
				drive->nodma = 1;
				goto done;
			case -6: /* "autotune" */
			case -6: /* "autotune" */
				drive->autotune = IDE_TUNE_AUTO;
				drive->autotune = IDE_TUNE_AUTO;
				goto obsolete_option;
				goto obsolete_option;
+1 −0
Original line number Original line Diff line number Diff line
@@ -599,6 +599,7 @@ typedef struct ide_drive_s {
	unsigned nice0		: 1;	/* give obvious excess bandwidth */
	unsigned nice0		: 1;	/* give obvious excess bandwidth */
	unsigned nice2		: 1;	/* give a share in our own bandwidth */
	unsigned nice2		: 1;	/* give a share in our own bandwidth */
	unsigned doorlocking	: 1;	/* for removable only: door lock/unlock works */
	unsigned doorlocking	: 1;	/* for removable only: door lock/unlock works */
	unsigned nodma		: 1;	/* disallow DMA */
	unsigned autotune	: 2;	/* 0=default, 1=autotune, 2=noautotune */
	unsigned autotune	: 2;	/* 0=default, 1=autotune, 2=noautotune */
	unsigned remap_0_to_1	: 1;	/* 0=noremap, 1=remap 0->1 (for EZDrive) */
	unsigned remap_0_to_1	: 1;	/* 0=noremap, 1=remap 0->1 (for EZDrive) */
	unsigned blocked        : 1;	/* 1=powermanagment told us not to do anything, so sleep nicely */
	unsigned blocked        : 1;	/* 1=powermanagment told us not to do anything, so sleep nicely */