2.2.13ac3 and ide19991111 patch

Ted Cabeen (secabeen@pobox.com)
Wed, 17 Nov 1999 15:21:03 -0600


This is a multipart MIME message.

--==_Exmh_-10413312900
Content-Type: text/plain; charset=us-ascii

Unfortuately, 2.2.13-ac3 and ide-19991111 don't work well together, so here
are two patches which make them work together. The first one is to be
applied to ide-cd.c after the ide patch fails on ide-cd.c The second patch
(bzipped) is the complete patch for ide-cd.c after the ac3 patch but before
ide-19991111. Enjoy!

--- linux-13ac3/drivers/block/ide-cd.c Wed Nov 17 14:50:10 1999
+++ kernel-source-2.2.13/drivers/block/ide-cd.c Wed Nov 17 14:25:08 1999
@@ -282,6 +282,7 @@
#include <linux/interrupt.h>
#include <linux/errno.h>
#include <linux/cdrom.h>
+#include <linux/ide.h>

#include <asm/irq.h>
#include <asm/io.h>
@@ -289,7 +290,6 @@
#include <asm/uaccess.h>
#include <asm/unaligned.h>

-#include "ide.h"
#include "ide-cd.h"

/****************************************************************************
@@ -664,13 +664,15 @@
called when the interrupt from the drive arrives. Otherwise, HANDLER
will be called immediately after the drive is prepared for the transfer. */

-static int cdrom_start_packet_command (ide_drive_t *drive, int xferlen,
+static ide_startstop_t cdrom_start_packet_command (ide_drive_t *drive, int xferlen,
ide_handler_t *handler)
{
+ ide_startstop_t startstop;
struct cdrom_info *info = drive->driver_data;

/* Wait for the controller to be idle. */
- if (ide_wait_stat(drive, 0, BUSY_STAT, WAIT_READY)) return 1;
+ if (ide_wait_stat (&startstop, drive, 0, BUSY_STAT, WAIT_READY))
+ return startstop;

if (info->dma)
info->dma = !HWIF(drive)->dmaproc(ide_dma_read, drive);
@@ -684,7 +686,7 @@
OUT_BYTE (xferlen >> 8 , IDE_HCYL_REG);
if (IDE_CONTROL_REG)
OUT_BYTE (drive->ctl, IDE_CONTROL_REG);
-
+
if (info->dma)
(void) (HWIF(drive)->dmaproc(ide_dma_begin, drive));

@@ -704,7 +706,7 @@
by cdrom_start_packet_command.
HANDLER is the interrupt handler to call when the command completes
or there's data ready. */
-static int cdrom_transfer_packet_command (ide_drive_t *drive,
+static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
unsigned char *cmd_buf, int cmd_len,
ide_handler_t *handler)
{
@@ -843,14 +845,13 @@

if (dma) {
if (dma_error) {
- ide_error (drive, "dma error", stat);
- return;
+ return ide_error (drive, "dma error", stat);
}
for (i = rq->nr_sectors; i > 0;) {
i -= rq->current_nr_sectors;
ide_end_request(1, HWGROUP(drive));
}
- return;
+ return ide_stopped;
}

/* Read the interrupt reason and the transfer length. */
@@ -947,6 +948,7 @@
/* Done moving data!
Wait for another interrupt. */
ide_set_handler(drive, &cdrom_read_intr, WAIT_CMD);
+ return ide_started;
}

/*
@@ -1063,7 +1065,7 @@
put_unaligned(htonl (frame), (unsigned int *) &pc.c[2]);

/* Send the command to the drive and return. */
- (void) cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c),
+ return cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c),
&cdrom_read_intr);
}

@@ -1072,14 +1074,15 @@
#define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */
#define IDECD_SEEK_TIMEOUT WAIT_CMD /* 10 sec */

-static void cdrom_seek_intr (ide_drive_t *drive)
+static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
{
struct cdrom_info *info = drive->driver_data;
int stat;
static int retry = 10;
+ ide_startstop_t startstop;

- if (cdrom_decode_status (drive, 0, &stat))
- return;
+ if (cdrom_decode_status (&startstop, drive, 0, &stat))
+ return startstop;
CDROM_CONFIG_FLAGS(drive)->seeking = 1;

if (retry && jiffies - info->start_seek > IDECD_SEEK_TIMER) {
@@ -1106,16 +1109,16 @@
memset (&pc.c, 0, sizeof (pc.c));
pc.c[0] = GPCMD_SEEK;
put_unaligned(cpu_to_be32(frame), (unsigned int *) &pc.c[2]);
- (void) cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c), &cdrom_seek_intr);
+ return cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c), &cdrom_seek_intr);
}

-static void cdrom_start_seek (ide_drive_t *drive, unsigned int block)
+static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
{
struct cdrom_info *info = drive->driver_data;

info->dma = 0;
info->start_seek = jiffies;
- cdrom_start_packet_command (drive, 0, cdrom_start_seek_continuation);
+ return cdrom_start_packet_command (drive, 0, cdrom_start_seek_continuation);
}

/* Fix up a possibly partially-processed request so that we can
@@ -1134,7 +1137,7 @@
/*
* Start a read request from the CD-ROM.
*/
-static void cdrom_start_read (ide_drive_t *drive, unsigned int block)
+static ide_startstop_t cdrom_start_read (ide_drive_t *drive, unsigned int block)
{
struct cdrom_info *info = drive->driver_data;
struct request *rq = HWGROUP(drive)->rq;
@@ -1154,7 +1157,7 @@

/* Satisfy whatever we can of this request from our cached sector. */
if (cdrom_read_from_buffer(drive))
- return;
+ return ide_stopped;

info->nsectors_buffered = 0;

@@ -1166,7 +1169,7 @@
info->dma = 0;

/* Start sending the read request to the drive. */
- cdrom_start_packet_command(drive, 32768, cdrom_start_read_continuation);
+ return cdrom_start_packet_command(drive, 32768, cdrom_start_read_continuation);
}

/****************************************************************************
@@ -1272,21 +1275,22 @@

/* Now we wait for another interrupt. */
ide_set_handler(drive, &cdrom_pc_intr, WAIT_CMD);
+ return ide_started;
}


-static void cdrom_do_pc_continuation (ide_drive_t *drive)
+static ide_startstop_t cdrom_do_pc_continuation (ide_drive_t *drive)
{
struct request *rq = HWGROUP(drive)->rq;
struct packet_command *pc = (struct packet_command *)rq->buffer;

/* Send the command to the drive and return. */
- cdrom_transfer_packet_command (drive, pc->c,
+ return cdrom_transfer_packet_command (drive, pc->c,
sizeof (pc->c), &cdrom_pc_intr);
}


-static void cdrom_do_packet_command (ide_drive_t *drive)
+static ide_startstop_t cdrom_do_packet_command (ide_drive_t *drive)
{
int len;
struct request *rq = HWGROUP(drive)->rq;
@@ -1383,9 +1387,10 @@
/****************************************************************************
* cdrom driver request routine.
*/
-static
+static ide_startstop_t
void ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, unsigned long block)
{
+ ide_startstop_t action;
struct cdrom_info *info = drive->driver_data;

switch (rq->cmd) {
@@ -1397,36 +1402,34 @@
if ((stat & SEEK_STAT) != SEEK_STAT) {
if (elpased < IDECD_SEEK_TIMEOUT) {
ide_stall_queue(drive, IDECD_SEEK_TIMER);
- return;
+ return ide_stopped;
}
printk ("%s: DSC timeout\n", drive->name);
}
CDROM_CONFIG_FLAGS(drive)->seeking = 0;
}
if (IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap)
- cdrom_start_seek (drive, block);
+ action = cdrom_start_seek (drive, block);
else
- cdrom_start_read (drive, block);
+ action = cdrom_start_read (drive, block);
info->last_block = block;
- break;
+ return action;
}

case PACKET_COMMAND:
case REQUEST_SENSE_COMMAND: {
- cdrom_do_packet_command(drive);
- break;
+ return cdrom_do_packet_command(drive);
}

case RESET_DRIVE_COMMAND: {
cdrom_end_request(1, drive);
- ide_do_reset(drive);
- break;
+ return ide_do_reset(drive);
}

default: {
printk("ide-cd: bad cmd %d\n", rq -> cmd);
cdrom_end_request(0, drive);
- break;
+ return ide_stopped;
}
}
}
@@ -2545,19 +2548,24 @@
else
printk (" drive");

- printk (", %dkB Cache", be16_to_cpu(buf.cap.buffer_size));
-
- if (drive->using_dma) {
- if ((drive->id->field_valid & 4) &&
- (drive->id->dma_ultra & (drive->id->dma_ultra >> 8) & 7)) {
- printk(", UDMA"); /* UDMA BIOS-enabled! */
- } else if (drive->id->field_valid & 4) {
- printk(", (U)DMA"); /* Can be BIOS-enabled! */
- } else {
- printk(", DMA");
- }
- }
- printk("\n");
+ printk (", %dkB Cache", ntohs(buf.cap.buffer_size));
+
+ if (drive->using_dma) {
+ if ((drive->id->field_valid & 4) &&
+ (drive->id->word93 & 0x2000) &&
+ (HWIF(drive)->udma_four) &&
+ (drive->id->dma_ultra & (drive->id->dma_ultra >> 11) & 3)) {
+ printk(", UDMA(66)"); /* UDMA BIOS-enabled! */
+ } else if ((drive->id->field_valid & 4) &&
+ (drive->id->dma_ultra & (drive->id->dma_ultra >> 8) & 7)) {
+ printk(", UDMA(33)"); /* UDMA BIOS-enabled! */
+ } else if (drive->id->field_valid & 4) {
+ printk(", (U)DMA"); /* Can be BIOS-enabled! */
+ } else {
+ printk(", DMA");
+ }
+ }
+ printk("\n");

return nslots;
}

--
Ted Cabeen           http://www.pobox.com/~secabeen         secabeen@pobox.com
Check Website or finger for PGP Public Key        secabeen@midway.uchicago.edu
"I have taken all knowledge to be my province." -F. Bacon   cococabeen@aol.com
"Human kind cannot bear very much reality."-T.S.Eliot 73126.626@compuserve.com

--==_Exmh_-10413312900 Content-Type: application/x-bzip2 ; name="patch-2.2.13ac3.ide19991111.bz2" Content-Description: patch-2.2.13ac3.ide19991111.bz2 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch-2.2.13ac3.ide19991111.bz2"

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 pwoSDLsEYOA=

--==_Exmh_-10413312900--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/