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

Commit fe607aa9 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by James Bottomley
Browse files

[SCSI] dc395x: atomic_kmap for PIO

parent beb8abd9
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -976,6 +976,16 @@ static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
	}
}

static inline void pio_trigger(void)
{
	static int feedback_requested;

	if (!feedback_requested) {
		feedback_requested = 1;
		printk(KERN_WARNING "%s: Please, contact <linux-scsi@vger.kernel.org> "
		       "to help improve support for your system.\n", __FILE__);
	}
}

/* Prepare SRB for being sent to Device DCB w/ command *cmd */
static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
@@ -2320,6 +2330,7 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
					      CFG2_WIDEFIFO);
			while (DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) != 0x40) {
				u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
				pio_trigger();
				*(srb->virt_addr)++ = byte;
				if (debug_enabled(DBG_PIO))
					printk(" %02x", byte);
@@ -2331,6 +2342,7 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
                /* Read the last byte ... */
				if (srb->total_xfer_length > 0) {
					u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
					pio_trigger();
					*(srb->virt_addr)++ = byte;
					srb->total_xfer_length--;
					if (debug_enabled(DBG_PIO))
@@ -2507,6 +2519,7 @@ static void data_io_transfer(struct AdapterCtlBlk *acb,
				if (debug_enabled(DBG_PIO))
					printk(" %02x", (unsigned char) *(srb->virt_addr));

				pio_trigger();
				DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 
				     *(srb->virt_addr)++);

+8 −0
Original line number Diff line number Diff line
@@ -988,7 +988,15 @@ dc390_DataIn_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)

	    if( residual )
	    {
		static int feedback_requested;
		bval = DC390_read8 (ScsiFifo);	    /* get one residual byte */

		if (!feedback_requested) {
			feedback_requested = 1;
			printk(KERN_WARNING "%s: Please, contact <linux-scsi@vger.kernel.org> "
			       "to help improve support for your system.\n", __FILE__);
		}

		ptr = (u8 *) bus_to_virt( pSRB->SGBusAddr );
		*ptr = bval;
		pSRB->SGBusAddr++; xferCnt++;