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

Commit e089d43f authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6:
  Use menuconfig objects: IDE
  sl82c105: Switch to ref counting API
  ide: remove ide_use_dma()
  ide: add missing validity checks for identify words 62 and 63
  ide: remove ide_dma_enable()
  sl82c105: add speedproc() method and MWDMA0/1 support
  cs5530/sc1200: add ->speedproc support
  cs5530/sc1200: DMA support cleanup
  ide: use ide_tune_dma() part #2
  cs5530/sc1200: add ->udma_filter methods
  ide: always disable DMA before tuning it
  pdc202xx_new: use ide_tune_dma()
  alim15x3: use ide_tune_dma()
  sis5513: PIO mode setup fixes
  serverworks: PIO mode setup fixes
  pdc202xx_old: rewrite mode programming code (v2)
parents 0e402c6e e0ff9cd1
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -4,13 +4,10 @@
# Andre Hedrick <andre@linux-ide.org>
#

if BLOCK

menu "ATA/ATAPI/MFM/RLL support"
	depends on HAS_IOMEM

config IDE
menuconfig IDE
	tristate "ATA/ATAPI/MFM/RLL support"
	depends on BLOCK
	depends on HAS_IOMEM
	---help---
	  If you say Y here, your kernel will be able to manage low cost mass
	  storage units such as ATA/(E)IDE and ATAPI units. The most common
@@ -1099,8 +1096,4 @@ config BLK_DEV_HD_ONLY
config BLK_DEV_HD
	def_bool BLK_DEV_HD_IDE || BLK_DEV_HD_ONLY

endif

endmenu

endif
endif # IDE
+1 −13
Original line number Diff line number Diff line
@@ -1002,18 +1002,6 @@ static int cris_ide_build_dmatable (ide_drive_t *drive)
	return 1;	/* let the PIO routines handle this weirdness */
}

static int cris_config_drive_for_dma (ide_drive_t *drive)
{
	u8 speed = ide_max_dma_mode(drive);

	if (!speed)
		return 0;

	speed_cris_ide(drive, speed);

	return ide_dma_enable(drive);
}

/*
 * cris_dma_intr() is the handler for disk read/write DMA interrupts
 */
@@ -1043,7 +1031,7 @@ static ide_startstop_t cris_dma_intr (ide_drive_t *drive)

static int cris_dma_check(ide_drive_t *drive)
{
	if (ide_use_dma(drive) && cris_config_drive_for_dma(drive))
	if (ide_tune_dma(drive))
		return 0;

	return -1;
+12 −41
Original line number Diff line number Diff line
@@ -670,41 +670,6 @@ int __ide_dma_good_drive (ide_drive_t *drive)

EXPORT_SYMBOL(__ide_dma_good_drive);

int ide_use_dma(ide_drive_t *drive)
{
	struct hd_driveid *id = drive->id;
	ide_hwif_t *hwif = drive->hwif;

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

	/* consult the list of known "bad" drives */
	if (__ide_dma_bad_drive(drive))
		return 0;

	/* capable of UltraDMA modes */
	if (id->field_valid & 4) {
		if (hwif->ultra_mask & id->dma_ultra)
			return 1;
	}

	/* capable of regular DMA modes */
	if (id->field_valid & 2) {
		if (hwif->mwdma_mask & id->dma_mword)
			return 1;
		if (hwif->swdma_mask & id->dma_1word)
			return 1;
	}

	/* consult the list of known "good" drives */
	if (__ide_dma_good_drive(drive) && id->eide_dma_time < 150)
		return 1;

	return 0;
}

EXPORT_SYMBOL_GPL(ide_use_dma);

static const u8 xfer_mode_bases[] = {
	XFER_UDMA_0,
	XFER_MW_DMA_0,
@@ -731,9 +696,11 @@ static unsigned int ide_get_mode_mask(ide_drive_t *drive, u8 base)
			mask &= 0x07;
		break;
	case XFER_MW_DMA_0:
		if (id->field_valid & 2)
			mask = id->dma_mword & hwif->mwdma_mask;
		break;
	case XFER_SW_DMA_0:
		if (id->field_valid & 2)
			mask = id->dma_1word & hwif->swdma_mask;
		break;
	default:
@@ -783,8 +750,11 @@ int ide_tune_dma(ide_drive_t *drive)
{
	u8 speed;

	/* TODO: use only ide_max_dma_mode() */
	if (!ide_use_dma(drive))
	if ((drive->id->capability & 1) == 0 || drive->autodma == 0)
		return 0;

	/* consult the list of known "bad" drives */
	if (__ide_dma_bad_drive(drive))
		return 0;

	speed = ide_max_dma_mode(drive);
@@ -792,9 +762,10 @@ int ide_tune_dma(ide_drive_t *drive)
	if (!speed)
		return 0;

	drive->hwif->speedproc(drive, speed);
	if (drive->hwif->speedproc(drive, speed))
		return 0;

	return ide_dma_enable(drive);
	return 1;
}

EXPORT_SYMBOL_GPL(ide_tune_dma);
+1 −0
Original line number Diff line number Diff line
@@ -223,6 +223,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *
			break;
		if (drive->hwif->ide_dma_check == NULL)
			break;
		drive->hwif->dma_off_quietly(drive);
		ide_set_dma(drive);
		break;
	}
+0 −12
Original line number Diff line number Diff line
@@ -111,18 +111,6 @@ u8 ide_rate_filter(ide_drive_t *drive, u8 speed)

EXPORT_SYMBOL(ide_rate_filter);

int ide_dma_enable (ide_drive_t *drive)
{
	ide_hwif_t *hwif	= HWIF(drive);
	struct hd_driveid *id	= drive->id;

	return ((int)	((((id->dma_ultra >> 8) & hwif->ultra_mask) ||
			  ((id->dma_mword >> 8) & hwif->mwdma_mask) ||
			  ((id->dma_1word >> 8) & hwif->swdma_mask)) ? 1 : 0));
}

EXPORT_SYMBOL(ide_dma_enable);

int ide_use_fast_pio(ide_drive_t *drive)
{
	struct hd_driveid *id = drive->id;
Loading