Module Name:    src
Committed By:   jdolecek
Date:           Mon Sep 17 19:30:26 UTC 2018

Modified Files:
        src/sys/dev/ata [jdolecek-ncqfixes]: atavar.h
        src/sys/dev/ic [jdolecek-ncqfixes]: ahcisata_core.c mvsata.c siisata.c
        src/sys/dev/scsipi [jdolecek-ncqfixes]: atapi_wdc.c

Log Message:
move ATAPI-only members of ata_xfer to an union struct to further save space


To generate a diff of this commit:
cvs rdiff -u -r1.99.2.3 -r1.99.2.4 src/sys/dev/ata/atavar.h
cvs rdiff -u -r1.62.2.3 -r1.62.2.4 src/sys/dev/ic/ahcisata_core.c
cvs rdiff -u -r1.41.2.2 -r1.41.2.3 src/sys/dev/ic/mvsata.c
cvs rdiff -u -r1.35.6.3 -r1.35.6.4 src/sys/dev/ic/siisata.c
cvs rdiff -u -r1.129.6.2 -r1.129.6.3 src/sys/dev/scsipi/atapi_wdc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ata/atavar.h
diff -u src/sys/dev/ata/atavar.h:1.99.2.3 src/sys/dev/ata/atavar.h:1.99.2.4
--- src/sys/dev/ata/atavar.h:1.99.2.3	Mon Sep 17 19:00:43 2018
+++ src/sys/dev/ata/atavar.h	Mon Sep 17 19:30:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: atavar.h,v 1.99.2.3 2018/09/17 19:00:43 jdolecek Exp $	*/
+/*	$NetBSD: atavar.h,v 1.99.2.4 2018/09/17 19:30:25 jdolecek Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.
@@ -144,8 +144,6 @@ struct ata_xfer {
 	void	*c_databuf;		/* pointer to data buffer */
 	int	c_bcount;		/* byte count left */
 	int	c_skip;			/* bytes already transferred */
-	int	c_dscpoll;		/* counter for dsc polling (ATAPI) */
-	int	c_lenoff;		/* offset to c_bcount (ATAPI) */
 #define ATACH_ERR_ST(error, status)	((error) << 8 | (status))
 #define ATACH_ERR(val)			(((val) >> 8) & 0xff)
 #define ATACH_ST(val)			(((val) >> 0) & 0xff)
@@ -153,11 +151,16 @@ struct ata_xfer {
 	union {
 		struct ata_bio	c_bio;		/* ATA transfer */
 		struct ata_command c_ata_c;	/* ATA command */ 
-		struct scsipi_xfer *c_scsipi;	/* SCSI transfer */
+		struct {
+			struct scsipi_xfer *c_scsipi;	/* SCSI transfer */
+			int	c_dscpoll; /* counter for dsc polling (ATAPI) */
+			int	c_lenoff;  /* offset to c_bcount (ATAPI) */
+		} atapi;
 	} u;
 #define c_bio	u.c_bio
 #define c_ata_c	u.c_ata_c
-#define c_scsipi u.c_scsipi
+#define c_atapi u.atapi
+#define c_scsipi c_atapi.c_scsipi
 
 	/* Link on the command queue. */
 	SIMPLEQ_ENTRY(ata_xfer) c_xferchain;

Index: src/sys/dev/ic/ahcisata_core.c
diff -u src/sys/dev/ic/ahcisata_core.c:1.62.2.3 src/sys/dev/ic/ahcisata_core.c:1.62.2.4
--- src/sys/dev/ic/ahcisata_core.c:1.62.2.3	Mon Sep 17 18:36:13 2018
+++ src/sys/dev/ic/ahcisata_core.c	Mon Sep 17 19:30:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ahcisata_core.c,v 1.62.2.3 2018/09/17 18:36:13 jdolecek Exp $	*/
+/*	$NetBSD: ahcisata_core.c,v 1.62.2.4 2018/09/17 19:30:25 jdolecek Exp $	*/
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.62.2.3 2018/09/17 18:36:13 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.62.2.4 2018/09/17 19:30:25 jdolecek Exp $");
 
 #include <sys/types.h>
 #include <sys/malloc.h>
@@ -1877,11 +1877,11 @@ ahci_atapi_scsipi_request(struct scsipi_
 			xfer->c_flags |= C_POLL;
 		xfer->c_drive = drive;
 		xfer->c_flags |= C_ATAPI;
-		xfer->c_scsipi = sc_xfer;
 		xfer->c_databuf = sc_xfer->data;
 		xfer->c_bcount = sc_xfer->datalen;
 		xfer->ops = &ahci_atapi_xfer_ops;
-		xfer->c_dscpoll = 0;
+		xfer->c_scsipi = sc_xfer;
+		xfer->c_atapi.c_dscpoll = 0;
 		s = splbio();
 		ata_exec_xfer(atac->atac_channels[channel], xfer);
 #ifdef DIAGNOSTIC

Index: src/sys/dev/ic/mvsata.c
diff -u src/sys/dev/ic/mvsata.c:1.41.2.2 src/sys/dev/ic/mvsata.c:1.41.2.3
--- src/sys/dev/ic/mvsata.c:1.41.2.2	Mon Sep 17 18:36:14 2018
+++ src/sys/dev/ic/mvsata.c	Mon Sep 17 19:30:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsata.c,v 1.41.2.2 2018/09/17 18:36:14 jdolecek Exp $	*/
+/*	$NetBSD: mvsata.c,v 1.41.2.3 2018/09/17 19:30:25 jdolecek Exp $	*/
 /*
  * Copyright (c) 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.41.2.2 2018/09/17 18:36:14 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.41.2.3 2018/09/17 19:30:25 jdolecek Exp $");
 
 #include "opt_mvsata.h"
 
@@ -2092,11 +2092,11 @@ mvsata_atapi_scsipi_request(struct scsip
 			xfer->c_flags |= C_POLL;
 		xfer->c_drive = drive;
 		xfer->c_flags |= C_ATAPI;
-		xfer->c_scsipi = sc_xfer;
 		xfer->c_databuf = sc_xfer->data;
 		xfer->c_bcount = sc_xfer->datalen;
 		xfer->ops = &mvsata_atapi_xfer_ops;
-		xfer->c_dscpoll = 0;
+		xfer->c_scsipi = sc_xfer;
+		xfer->c_atapi.c_dscpoll = 0;
 		s = splbio();
 		ata_exec_xfer(chp, xfer);
 #ifdef DIAGNOSTIC
@@ -2444,7 +2444,7 @@ again:
 			mvsata_atapi_reset(chp, xfer);
 			return 1;
 		}
-		xfer->c_lenoff = len - xfer->c_bcount;
+		xfer->c_atapi.c_lenoff = len - xfer->c_bcount;
 		if (xfer->c_bcount < len) {
 			aprint_error_dev(atac->atac_dev, "channel %d drive %d:"
 			    " warning: write only %d of %d requested bytes\n",
@@ -2456,7 +2456,7 @@ again:
 		wdc->dataout_pio(chp, drvp->drive_flags,
 		    (char *)xfer->c_databuf + xfer->c_skip, len);
 
-		for (i = xfer->c_lenoff; i > 0; i -= 2)
+		for (i = xfer->c_atapi.c_lenoff; i > 0; i -= 2)
 			MVSATA_WDC_WRITE_2(mvport, SRB_PIOD, 0);
 
 		xfer->c_skip += len;
@@ -2480,7 +2480,7 @@ again:
 			mvsata_atapi_reset(chp, xfer);
 			return 1;
 		}
-		xfer->c_lenoff = len - xfer->c_bcount;
+		xfer->c_atapi.c_lenoff = len - xfer->c_bcount;
 		if (xfer->c_bcount < len) {
 			aprint_error_dev(atac->atac_dev, "channel %d drive %d:"
 			    " warning: reading only %d of %d bytes\n",
@@ -2492,7 +2492,7 @@ again:
 		wdc->datain_pio(chp, drvp->drive_flags,
 		    (char *)xfer->c_databuf + xfer->c_skip, len);
 
-		if (xfer->c_lenoff > 0)
+		if (xfer->c_atapi.c_lenoff > 0)
 			wdcbit_bucket(chp, len - xfer->c_bcount);
 
 		xfer->c_skip += len;
@@ -2625,14 +2625,15 @@ mvsata_atapi_phase_complete(struct ata_x
 		DPRINTF(DEBUG_XFERS,
 		    ("%s:%d:%d: mvsata_atapi_phase_complete: polldsc %d\n",
 		    device_xname(atac->atac_dev), chp->ch_channel,
-		    xfer->c_drive, xfer->c_dscpoll));
+		    xfer->c_drive, xfer->c_atapi.c_dscpoll));
 		if (cold)
 			panic("mvsata_atapi_phase_complete: cold");
 
 		if (wdcwait(chp, WDCS_DSC, WDCS_DSC, 10, AT_POLL, &tfd) ==
 		    WDCWAIT_TOUT) {
 			/* 10ms not enough, try again in 1 tick */
-			if (xfer->c_dscpoll++ > mstohz(sc_xfer->timeout)) {
+			if (xfer->c_atapi.c_dscpoll++ >
+			    mstohz(sc_xfer->timeout)) {
 				aprint_error_dev(atac->atac_dev,
 				    "channel %d: wait_for_dsc failed\n",
 				    chp->ch_channel);

Index: src/sys/dev/ic/siisata.c
diff -u src/sys/dev/ic/siisata.c:1.35.6.3 src/sys/dev/ic/siisata.c:1.35.6.4
--- src/sys/dev/ic/siisata.c:1.35.6.3	Mon Sep 17 18:36:14 2018
+++ src/sys/dev/ic/siisata.c	Mon Sep 17 19:30:26 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: siisata.c,v 1.35.6.3 2018/09/17 18:36:14 jdolecek Exp $ */
+/* $NetBSD: siisata.c,v 1.35.6.4 2018/09/17 19:30:26 jdolecek Exp $ */
 
 /* from ahcisata_core.c */
 
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siisata.c,v 1.35.6.3 2018/09/17 18:36:14 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siisata.c,v 1.35.6.4 2018/09/17 19:30:26 jdolecek Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1837,11 +1837,11 @@ siisata_atapi_scsipi_request(struct scsi
 			xfer->c_flags |= C_POLL;
 		xfer->c_drive = drive;
 		xfer->c_flags |= C_ATAPI;
-		xfer->c_scsipi = sc_xfer;
 		xfer->c_databuf = sc_xfer->data;
 		xfer->c_bcount = sc_xfer->datalen;
 		xfer->ops = &siisata_atapi_xfer_ops;
-		xfer->c_dscpoll = 0;
+		xfer->c_scsipi = sc_xfer;
+		xfer->c_atapi.c_dscpoll = 0;
 		s = splbio();
 		ata_exec_xfer(atac->atac_channels[channel], xfer);
 #ifdef DIAGNOSTIC

Index: src/sys/dev/scsipi/atapi_wdc.c
diff -u src/sys/dev/scsipi/atapi_wdc.c:1.129.6.2 src/sys/dev/scsipi/atapi_wdc.c:1.129.6.3
--- src/sys/dev/scsipi/atapi_wdc.c:1.129.6.2	Mon Sep 17 18:36:14 2018
+++ src/sys/dev/scsipi/atapi_wdc.c	Mon Sep 17 19:30:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: atapi_wdc.c,v 1.129.6.2 2018/09/17 18:36:14 jdolecek Exp $	*/
+/*	$NetBSD: atapi_wdc.c,v 1.129.6.3 2018/09/17 19:30:26 jdolecek Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: atapi_wdc.c,v 1.129.6.2 2018/09/17 18:36:14 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: atapi_wdc.c,v 1.129.6.3 2018/09/17 19:30:26 jdolecek Exp $");
 
 #ifndef ATADEBUG
 #define ATADEBUG
@@ -457,11 +457,11 @@ wdc_atapi_scsipi_request(struct scsipi_c
 			xfer->c_flags &= ~C_DMA;
 #endif	/* NATA_DMA */
 
-		xfer->c_scsipi = sc_xfer;
 		xfer->c_databuf = sc_xfer->data;
 		xfer->c_bcount = sc_xfer->datalen;
 		xfer->ops = &wdc_atapi_xfer_ops;
-		xfer->c_dscpoll = 0;
+		xfer->c_scsipi = sc_xfer;
+		xfer->c_atapi.c_dscpoll = 0;
 		s = splbio();
 		ata_exec_xfer(atac->atac_channels[channel], xfer);
 #ifdef DIAGNOSTIC
@@ -781,8 +781,8 @@ wdc_atapi_intr(struct ata_channel *chp, 
 
 		/* restore transfer length */
 		len = xfer->c_bcount;
-		if (xfer->c_lenoff < 0)
-			len += xfer->c_lenoff;
+		if (xfer->c_atapi.c_lenoff < 0)
+			len += xfer->c_atapi.c_lenoff;
 
 		if (sc_xfer->xs_control & XS_CTL_DATA_IN)
 			goto end_piobm_datain;
@@ -915,7 +915,7 @@ again:
 			return 1;
 		}
 #endif
-		xfer->c_lenoff = len - xfer->c_bcount;
+		xfer->c_atapi.c_lenoff = len - xfer->c_bcount;
 		if (xfer->c_bcount < len) {
 			printf("wdc_atapi_intr: warning: write only "
 			    "%d of %d requested bytes\n", xfer->c_bcount, len);
@@ -940,7 +940,7 @@ again:
 #if NATA_PIOBM
 	end_piobm_dataout:
 #endif
-		for (i = xfer->c_lenoff; i > 0; i -= 2)
+		for (i = xfer->c_atapi.c_lenoff; i > 0; i -= 2)
 			bus_space_write_2(wdr->cmd_iot,
 			    wdr->cmd_iohs[wd_data], 0, 0);
 
@@ -969,7 +969,7 @@ again:
 			return 1;
 		}
 #endif
-		xfer->c_lenoff = len - xfer->c_bcount;
+		xfer->c_atapi.c_lenoff = len - xfer->c_bcount;
 		if (xfer->c_bcount < len) {
 			printf("wdc_atapi_intr: warning: reading only "
 			    "%d of %d bytes\n", xfer->c_bcount, len);
@@ -994,8 +994,8 @@ again:
 #if NATA_PIOBM
 	end_piobm_datain:
 #endif
-		if (xfer->c_lenoff > 0)
-			wdcbit_bucket(chp, xfer->c_lenoff);
+		if (xfer->c_atapi.c_lenoff > 0)
+			wdcbit_bucket(chp, xfer->c_atapi.c_lenoff);
 
 		xfer->c_skip += len;
 		xfer->c_bcount -= len;
@@ -1073,7 +1073,7 @@ wdc_atapi_phase_complete(struct ata_xfer
 		ATADEBUG_PRINT(("wdc_atapi_phase_complete(%s:%d:%d) "
 		    "polldsc %d\n", device_xname(atac->atac_dev),
 		    chp->ch_channel,
-		    xfer->c_drive, xfer->c_dscpoll), DEBUG_XFERS);
+		    xfer->c_drive, xfer->c_atapi.c_dscpoll), DEBUG_XFERS);
 #if 1
 		if (cold)
 			panic("wdc_atapi_phase_complete: cold");
@@ -1081,7 +1081,7 @@ wdc_atapi_phase_complete(struct ata_xfer
 		if (wdcwait(chp, WDCS_DSC, WDCS_DSC, 10,
 		    AT_POLL, &tfd) == WDCWAIT_TOUT) {
 			/* 10ms not enough, try again in 1 tick */
-			if (xfer->c_dscpoll++ >
+			if (xfer->c_atapi.c_dscpoll++ >
 			    mstohz(sc_xfer->timeout)) {
 				printf("%s:%d:%d: wait_for_dsc "
 				    "failed\n",

Reply via email to