summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorchopps <chopps@NetBSD.org>1994-05-09 07:40:47 +0000
committerchopps <chopps@NetBSD.org>1994-05-09 07:40:47 +0000
commit95faa87c6099ec95bf79d5ab66613939eafa01f2 (patch)
treecd027c29a6bdfae2c5a33678d527a6fe86cba37a /sys/dev
parent4138ebf515b76124421e2c55aa0fb466c01f74ea (diff)
remove union's from sense_data struct, conditionaly define RAW_PART
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/scsipi/cd.c4
-rw-r--r--sys/dev/scsipi/scsi_all.h33
-rw-r--r--sys/dev/scsipi/scsi_base.c38
-rw-r--r--sys/dev/scsipi/sd.c6
-rw-r--r--sys/dev/scsipi/st.c18
5 files changed, 65 insertions, 34 deletions
diff --git a/sys/dev/scsipi/cd.c b/sys/dev/scsipi/cd.c
index e3a8b36affa..07e940d2f95 100644
--- a/sys/dev/scsipi/cd.c
+++ b/sys/dev/scsipi/cd.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: cd.c,v 1.25 1994/04/11 03:53:58 mycroft Exp $
+ * $Id: cd.c,v 1.26 1994/05/09 07:40:47 chopps Exp $
*/
/*
@@ -80,7 +80,9 @@ int Debugger();
#define MAKECDDEV(maj, unit, part) (makedev(maj,(unit<<3)|part))
#define CDPART(z) (minor(z) & 0x07)
#define CDUNIT(z) (minor(z) >> 3)
+#ifndef RAW_PART
#define RAW_PART 3
+#endif
struct cd_data {
struct device sc_dev;
diff --git a/sys/dev/scsipi/scsi_all.h b/sys/dev/scsipi/scsi_all.h
index 3c04dccebca..b1ebc8f1eb0 100644
--- a/sys/dev/scsipi/scsi_all.h
+++ b/sys/dev/scsipi/scsi_all.h
@@ -18,7 +18,7 @@
*
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
*
- * $Id: scsi_all.h,v 1.3 1994/03/29 04:29:27 mycroft Exp $
+ * $Id: scsi_all.h,v 1.4 1994/05/09 07:40:50 chopps Exp $
*/
#ifndef _SCSI_SCSI_ALL_H
@@ -244,8 +244,12 @@ struct scsi_inquiry_data
u_char extra[8];
};
-
-struct scsi_sense_data
+/*
+ * The union had to die. It caused a padding problem with
+ * m68k gcc, specifically `ext.extended.segment' was being
+ * read at byte 2 not 1.
+ */
+struct scsi_sense_data_old /* XXXX The union had to die. */
{
/* 1*/ u_char error_code; /* same bits as new version */
union
@@ -268,6 +272,29 @@ struct scsi_sense_data
} extended;
}ext;
}; /* total of 32 bytes */
+
+/*
+ * This looks bad, and it is. However it fixes padding problems
+ * caused by using unions. This *needs* to be an array, if this code
+ * is to work on any architecture.
+ */
+struct scsi_sense_data
+{
+/* 1*/ u_char error_code; /* same bits as new version */
+#define XXX_unextended_blockhi extended_segment
+#define XXX_unextended_blockmed extended_flags
+#define XXX_unextended_blocklow extended_info[0]
+/* 2*/ u_char extended_segment;
+/* 3*/ u_char extended_flags; /* same bits as new version */
+/* 7*/ u_char extended_info[4];
+/* 8*/ u_char extended_extra_len;
+ /*
+ * allocate enough room to hold new stuff
+ * (by increasing 16 to 24 below)
+ */
+/*32*/ u_char extended_extra_bytes[24];
+}; /* total of 32 bytes */
+
struct scsi_sense_data_new
{
/* 1*/ u_char error_code;
diff --git a/sys/dev/scsipi/scsi_base.c b/sys/dev/scsipi/scsi_base.c
index 1585d5dbd8c..051c639142c 100644
--- a/sys/dev/scsipi/scsi_base.c
+++ b/sys/dev/scsipi/scsi_base.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: scsi_base.c,v 1.12 1994/04/20 22:13:33 mycroft Exp $
+ * $Id: scsi_base.c,v 1.13 1994/05/09 07:40:52 chopps Exp $
*/
/*
@@ -578,20 +578,20 @@ scsi_interpret_sense(xs)
sense->error_code & SSD_ERRCODE,
sense->error_code & SSD_ERRCODE_VALID ? 1 : 0);
printf("seg%x key%x ili%x eom%x fmark%x\n",
- sense->ext.extended.segment,
- sense->ext.extended.flags & SSD_KEY,
- sense->ext.extended.flags & SSD_ILI ? 1 : 0,
- sense->ext.extended.flags & SSD_EOM ? 1 : 0,
- sense->ext.extended.flags & SSD_FILEMARK ? 1 : 0);
+ sense->extended_segment,
+ sense->extended_flags & SSD_KEY,
+ sense->extended_flags & SSD_ILI ? 1 : 0,
+ sense->extended_flags & SSD_EOM ? 1 : 0,
+ sense->extended_flags & SSD_FILEMARK ? 1 : 0);
printf("info: %x %x %x %x followed by %d extra bytes\n",
- sense->ext.extended.info[0],
- sense->ext.extended.info[1],
- sense->ext.extended.info[2],
- sense->ext.extended.info[3],
- sense->ext.extended.extra_len);
+ sense->extended_info[0],
+ sense->extended_info[1],
+ sense->extended_info[2],
+ sense->extended_info[3],
+ sense->extended_extra_len);
printf("extra: ");
- while (count < sense->ext.extended.extra_len)
- printf("%x ", sense->ext.extended.extra_bytes[count++]);
+ while (count < sense->extended_extra_len)
+ printf("%x ", sense->extended_extra_bytes[count++]);
printf("\n");
}
#endif /*SCSIDEBUG */
@@ -614,14 +614,14 @@ scsi_interpret_sense(xs)
*/
case 0x71: /* delayed error */
sc_print_addr(sc_link);
- key = sense->ext.extended.flags & SSD_KEY;
+ key = sense->extended_flags & SSD_KEY;
printf(" DELAYED ERROR, key = 0x%x\n", key);
case 0x70:
if (sense->error_code & SSD_ERRCODE_VALID)
- info = ntohl(*((long *) sense->ext.extended.info));
+ info = ntohl(*((long *) sense->extended_info));
else
info = 0;
- key = sense->ext.extended.flags & SSD_KEY;
+ key = sense->extended_flags & SSD_KEY;
if (key && !silent) {
sc_print_addr(sc_link);
@@ -680,9 +680,9 @@ scsi_interpret_sense(xs)
sense->error_code & SSD_ERRCODE);
if (sense->error_code & SSD_ERRCODE_VALID) {
printf(" at block no. %d (decimal)",
- (sense->ext.unextended.blockhi << 16) +
- (sense->ext.unextended.blockmed << 8) +
- (sense->ext.unextended.blocklow));
+ (sense->XXX_unextended_blockhi << 16) +
+ (sense->XXX_unextended_blockmed << 8) +
+ (sense->XXX_unextended_blocklow));
}
printf("\n");
}
diff --git a/sys/dev/scsipi/sd.c b/sys/dev/scsipi/sd.c
index 0c364bdfa3b..ba2524dfe10 100644
--- a/sys/dev/scsipi/sd.c
+++ b/sys/dev/scsipi/sd.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: sd.c,v 1.29 1994/04/11 03:54:10 mycroft Exp $
+ * $Id: sd.c,v 1.30 1994/05/09 07:40:53 chopps Exp $
*/
/*
@@ -78,7 +78,9 @@ int Debugger();
#define MAKESDDEV(maj, unit, part) (makedev(maj,(unit<<3)|part))
#define SDPART(z) (minor(z) & 0x07)
#define SDUNIT(z) (minor(z) >> 3)
-#define RAW_PART 3
+#ifndef RAW_PART
+#define RAW_PART 3 /* XXX should be 2 */
+#endif
struct sd_data {
struct device sc_dev;
diff --git a/sys/dev/scsipi/st.c b/sys/dev/scsipi/st.c
index 85347e8ec64..ba758af7f6c 100644
--- a/sys/dev/scsipi/st.c
+++ b/sys/dev/scsipi/st.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: st.c,v 1.29 1994/04/24 05:40:05 mycroft Exp $
+ * $Id: st.c,v 1.30 1994/05/09 07:40:56 chopps Exp $
*/
/*
@@ -1710,24 +1710,24 @@ st_interpret_sense(xs)
* Get the sense fields and work out what code
*/
if (sense->error_code & SSD_ERRCODE_VALID)
- info = ntohl(*((int *) sense->ext.extended.info));
+ info = ntohl(*((int *) sense->extended_info));
else
info = xs->datalen; /* bad choice if fixed blocks */
if ((sense->error_code & SSD_ERRCODE) != 0x70)
return -1; /* let the generic code handle it */
if (st->flags & ST_FIXEDBLOCKS) {
xs->resid = info * st->blksiz;
- if (sense->ext.extended.flags & SSD_EOM) {
+ if (sense->extended_flags & SSD_EOM) {
st->flags |= ST_EIO_PENDING;
if (bp)
bp->b_resid = xs->resid;
}
- if (sense->ext.extended.flags & SSD_FILEMARK) {
+ if (sense->extended_flags & SSD_FILEMARK) {
st->flags |= ST_AT_FILEMARK;
if (bp)
bp->b_resid = xs->resid;
}
- if (sense->ext.extended.flags & SSD_ILI) {
+ if (sense->extended_flags & SSD_ILI) {
st->flags |= ST_EIO_PENDING;
if (bp)
bp->b_resid = xs->resid;
@@ -1760,14 +1760,14 @@ st_interpret_sense(xs)
}
} else { /* must be variable mode */
xs->resid = xs->datalen; /* to be sure */
- if (sense->ext.extended.flags & SSD_EOM)
+ if (sense->extended_flags & SSD_EOM)
return EIO;
- if (sense->ext.extended.flags & SSD_FILEMARK) {
+ if (sense->extended_flags & SSD_FILEMARK) {
if (bp)
bp->b_resid = bp->b_bcount;
return 0;
}
- if (sense->ext.extended.flags & SSD_ILI) {
+ if (sense->extended_flags & SSD_ILI) {
if (info < 0) {
/*
* the record was bigger than the read
@@ -1783,7 +1783,7 @@ st_interpret_sense(xs)
bp->b_resid = info;
}
}
- key = sense->ext.extended.flags & SSD_KEY;
+ key = sense->extended_flags & SSD_KEY;
if (key == 0x8) {
/*