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

Commit 3131e530 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
  ide: fix IDE_HFLAG_NO_ATAPI_DMA handling in config_drive_for_dma()
  ide: move ide_fixstring() documentation to ide-iops.c from ide.h
  ide: add missing #ifdef/#endif CONFIG_IDE_TASK_IOCTL
  ide: fix ide_find_dma_mode() to print human-readable info
  ide: add missing rq.ref_count initialization to ide_diag_taskfile()
  ide: clear HOB bit for REQ_TYPE_ATA_TASK requests in ide_end_drive_cmd()
  ide: check rq->cmd_type in drive_cmd_intr()
  ide/Kconfig: fix BLK_DEV_OFFBOARD dependencies
  ide: unexport ide_fix_driveid
  ide/Kconfig: add IDEDISK_MULTI_MODE text adapted from hdparm manual page
  ide: do_identify() string termination fix
  piix: add support for ICH7 on Acer 5602aWLMi
parents 41557e7c bcbf6ee3
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -152,9 +152,22 @@ config BLK_DEV_IDEDISK
	  If unsure, say Y.

config IDEDISK_MULTI_MODE
	bool "Use multi-mode by default"
	help
	  If you get this error, try to say Y here:
	bool "Use multiple sector mode for Programmed Input/Output by default"
	help
	  This setting is irrelevant for most IDE disks, with direct memory
	  access, to which multiple sector mode does not apply. Multiple sector
	  mode is a feature of most modern IDE hard drives, permitting the
	  transfer of multiple sectors per Programmed Input/Output interrupt,
	  rather than the usual one sector per interrupt. When this feature is
	  enabled, it can reduce operating system overhead for disk Programmed
	  Input/Output. On some systems, it also can increase the data
	  throughput of Programmed Input/Output. Some drives, however, seemed
	  to run slower with multiple sector mode enabled. Some drives claimed
	  to support multiple sector mode, but lost data at some settings.
	  Under rare circumstances, such failures could result in massive
	  filesystem corruption.

	  If you get the following error, try to say Y here:

	  hda: set_multmode: status=0x51 { DriveReady SeekComplete Error }
	  hda: set_multmode: error=0x04 { DriveStatusError }
@@ -380,9 +393,10 @@ config IDEPCI_SHARE_IRQ
config IDEPCI_PCIBUS_ORDER
	def_bool BLK_DEV_IDE=y && BLK_DEV_IDEPCI

# TODO: split it on per host driver config options (or module parameters)
config BLK_DEV_OFFBOARD
	bool "Boot off-board chipsets first support"
	depends on BLK_DEV_IDEPCI
	depends on BLK_DEV_IDEPCI && (BLK_DEV_AEC62XX || BLK_DEV_GENERIC || BLK_DEV_HPT34X || BLK_DEV_HPT366 || BLK_DEV_PDC202XX_NEW || BLK_DEV_PDC202XX_OLD || BLK_DEV_TC86C001)
	help
	  Normally, IDE controllers built into the motherboard (on-board
	  controllers) are assigned to ide0 and ide1 while those on add-in PCI
+3 −2
Original line number Diff line number Diff line
@@ -340,7 +340,7 @@ static int config_drive_for_dma (ide_drive_t *drive)

	if (drive->media != ide_disk) {
		if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
			return -1;
			return 0;
	}

	/*
@@ -752,7 +752,8 @@ u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode)
			mode = XFER_MW_DMA_1;
	}

	printk(KERN_DEBUG "%s: selected mode 0x%x\n", drive->name, mode);
	printk(KERN_DEBUG "%s: %s mode selected\n", drive->name,
			  mode ? ide_xfer_verbose(mode) : "no DMA");

	return min(mode, req_mode);
}
+4 −1
Original line number Diff line number Diff line
@@ -340,6 +340,8 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
		if (args) {
			args[0] = stat;
			args[1] = err;
			/* be sure we're looking at the low order bits */
			hwif->OUTB(drive->ctl & ~0x80, IDE_CONTROL_REG);
			args[2] = hwif->INB(IDE_NSECTOR_REG);
			args[3] = hwif->INB(IDE_SECTOR_REG);
			args[4] = hwif->INB(IDE_LCYL_REG);
@@ -654,7 +656,8 @@ static ide_startstop_t drive_cmd_intr (ide_drive_t *drive)
	int retries = 10;

	local_irq_enable_in_hardirq();
	if ((stat & DRQ_STAT) && args && args[3]) {
	if (rq->cmd_type == REQ_TYPE_ATA_CMD &&
	    (stat & DRQ_STAT) && args && args[3]) {
		u8 io_32bit = drive->io_32bit;
		drive->io_32bit = 0;
		hwif->ata_input_data(drive, &args[4], args[3] * SECTOR_WORDS);
+6 −2
Original line number Diff line number Diff line
@@ -403,8 +403,12 @@ void ide_fix_driveid (struct hd_driveid *id)
#endif
}

/* FIXME: exported for use by the USB storage (isd200.c) code only */
EXPORT_SYMBOL(ide_fix_driveid);
/*
 * ide_fixstring() cleans up and (optionally) byte-swaps a text string,
 * removing leading/trailing blanks and compressing internal blanks.
 * It is primarily used to tidy up the model name/number fields as
 * returned by the WIN_[P]IDENTIFY commands.
 */

void ide_fixstring (u8 *s, const int bytecount, const int byteswap)
{
+3 −2
Original line number Diff line number Diff line
@@ -172,11 +172,12 @@ static inline void do_identify (ide_drive_t *drive, u8 cmd)
	ide_fixstring(id->fw_rev,    sizeof(id->fw_rev),    bswap);
	ide_fixstring(id->serial_no, sizeof(id->serial_no), bswap);

	/* we depend on this a lot! */
	id->model[sizeof(id->model)-1] = '\0';

	if (strstr(id->model, "E X A B Y T E N E S T"))
		goto err_misc;

	/* we depend on this a lot! */
	id->model[sizeof(id->model)-1] = '\0';
	printk("%s: %s, ", drive->name, id->model);
	drive->present = 1;
	drive->dead = 0;
Loading