diff options
| author | chopps <chopps@NetBSD.org> | 1994-05-09 07:40:47 +0000 |
|---|---|---|
| committer | chopps <chopps@NetBSD.org> | 1994-05-09 07:40:47 +0000 |
| commit | 95faa87c6099ec95bf79d5ab66613939eafa01f2 (patch) | |
| tree | cd027c29a6bdfae2c5a33678d527a6fe86cba37a /sys/dev | |
| parent | 4138ebf515b76124421e2c55aa0fb466c01f74ea (diff) | |
remove union's from sense_data struct, conditionaly define RAW_PART
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/scsipi/cd.c | 4 | ||||
| -rw-r--r-- | sys/dev/scsipi/scsi_all.h | 33 | ||||
| -rw-r--r-- | sys/dev/scsipi/scsi_base.c | 38 | ||||
| -rw-r--r-- | sys/dev/scsipi/sd.c | 6 | ||||
| -rw-r--r-- | sys/dev/scsipi/st.c | 18 |
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) { /* |
