Annotation of uae/src/include/scg/scgcmd.h, revision 1.1.1.1

1.1       root        1: /* @(#)scgcmd.h        2.14 98/11/29 Copyright 1986 J. Schilling */
                      2: /*
                      3:  *     Definitions for the SCSI general driver 'scg'
                      4:  *
                      5:  *     Copyright (c) 1986 J. Schilling
                      6:  */
                      7: /*
                      8:  * This program is free software; you can redistribute it and/or modify
                      9:  * it under the terms of the GNU General Public License as published by
                     10:  * the Free Software Foundation; either version 2, or (at your option)
                     11:  * any later version.
                     12:  *
                     13:  * This program is distributed in the hope that it will be useful,
                     14:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     15:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     16:  * GNU General Public License for more details.
                     17:  *
                     18:  * You should have received a copy of the GNU General Public License
                     19:  * along with this program; see the file COPYING.  If not, write to
                     20:  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     21:  */
                     22: 
                     23: #ifndef        _SCGCMD_H
                     24: #define        _SCGCMD_H
                     25: 
                     26: #include "scg/utypes.h"
                     27: #include "scg/btorder.h"
                     28: 
                     29: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                     30: #elif  defined(_BIT_FIELDS_HTOL)       /* Motorola byteorder */
                     31: #else 
                     32: /*
                     33:  * #error will not work for all compilers (e.g. sunos4)
                     34:  * The following line will abort compilation on all compilers
                     35:  * if none of the above is defines. And that's  what we want.
                     36:  */
                     37: error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
                     38: #endif
                     39: 
                     40: /*
                     41:  * SCSI status completion block.
                     42:  */
                     43: #define        SCSI_EXTENDED_STATUS
                     44: 
                     45: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                     46: 
                     47: struct scsi_status {
                     48:        Ucbit   vu_00   : 1;    /* vendor unique */
                     49:        Ucbit   chk     : 1;    /* check condition: sense data available */
                     50:        Ucbit   cm      : 1;    /* condition met */
                     51:        Ucbit   busy    : 1;    /* device busy or reserved */
                     52:        Ucbit   is      : 1;    /* intermediate status sent */
                     53:        Ucbit   vu_05   : 1;    /* vendor unique */
                     54: #define st_scsi2       vu_05   /* SCSI-2 modifier bit */
                     55:        Ucbit   vu_06   : 1;    /* vendor unique */
                     56:        Ucbit   st_rsvd : 1;    /* reserved */
                     57: 
                     58: #ifdef SCSI_EXTENDED_STATUS
                     59: #define        ext_st1 st_rsvd         /* extended status (next byte valid) */
                     60:        /* byte 1 */
                     61:        Ucbit   ha_er   : 1;    /* host adapter detected error */
                     62:        Ucbit   reserved: 6;    /* reserved */
                     63:        Ucbit   ext_st2 : 1;    /* extended status (next byte valid) */
                     64:        /* byte 2 */
                     65:        u_char  byte2;          /* third byte */
                     66: #endif /* SCSI_EXTENDED_STATUS */
                     67: };
                     68: 
                     69: #else  /* Motorola byteorder */
                     70: 
                     71: struct scsi_status {
                     72:        Ucbit   st_rsvd : 1;    /* reserved */
                     73:        Ucbit   vu_06   : 1;    /* vendor unique */
                     74:        Ucbit   vu_05   : 1;    /* vendor unique */
                     75: #define st_scsi2       vu_05   /* SCSI-2 modifier bit */
                     76:        Ucbit   is      : 1;    /* intermediate status sent */
                     77:        Ucbit   busy    : 1;    /* device busy or reserved */
                     78:        Ucbit   cm      : 1;    /* condition met */
                     79:        Ucbit   chk     : 1;    /* check condition: sense data available */
                     80:        Ucbit   vu_00   : 1;    /* vendor unique */
                     81: #ifdef SCSI_EXTENDED_STATUS
                     82: #define        ext_st1 st_rsvd         /* extended status (next byte valid) */
                     83:        /* byte 1 */
                     84:        Ucbit   ext_st2 : 1;    /* extended status (next byte valid) */
                     85:        Ucbit   reserved: 6;    /* reserved */
                     86:        Ucbit   ha_er   : 1;    /* host adapter detected error */
                     87:        /* byte 2 */
                     88:        u_char  byte2;          /* third byte */
                     89: #endif /* SCSI_EXTENDED_STATUS */
                     90: };
                     91: #endif
                     92: 
                     93: /*
                     94:  * OLD Standard (Non Extended) SCSI Sense. Used mainly by the
                     95:  * Adaptec ACB 4000 which is the only controller that
                     96:  * does not support the Extended sense format.
                     97:  */
                     98: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                     99: 
                    100: struct scsi_sense {            /* scsi sense for error classes 0-6 */
                    101:        Ucbit   code    : 7;    /* error class/code */
                    102:        Ucbit   adr_val : 1;    /* sense data is valid */
                    103: #ifdef comment
                    104:        Ucbit   high_addr:5;    /* high byte of block addr */
                    105:        Ucbit   rsvd    : 3;
                    106: #else
                    107:        u_char  high_addr;      /* high byte of block addr */
                    108: #endif
                    109:        u_char  mid_addr;       /* middle byte of block addr */
                    110:        u_char  low_addr;       /* low byte of block addr */
                    111: };
                    112: 
                    113: #else  /* Motorola byteorder */
                    114: 
                    115: struct scsi_sense {            /* scsi sense for error classes 0-6 */
                    116:        Ucbit   adr_val : 1;    /* sense data is valid */
                    117:        Ucbit   code    : 7;    /* error class/code */
                    118: #ifdef comment
                    119:        Ucbit   rsvd    : 3;
                    120:        Ucbit   high_addr:5;    /* high byte of block addr */
                    121: #else
                    122:        u_char  high_addr;      /* high byte of block addr */
                    123: #endif
                    124:        u_char  mid_addr;       /* middle byte of block addr */
                    125:        u_char  low_addr;       /* low byte of block addr */
                    126: };
                    127: #endif
                    128: 
                    129: /*
                    130:  * SCSI extended sense parameter block.
                    131:  */
                    132: #ifdef comment
                    133: #define SC_CLASS_EXTENDED_SENSE 0x7     /* indicates extended sense */
                    134: #endif
                    135: 
                    136: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                    137: 
                    138: struct scsi_ext_sense {        /* scsi extended sense for error class 7 */
                    139:        /* byte 0 */
                    140:        Ucbit   type    : 7;    /* fixed at 0x70 */
                    141:        Ucbit   adr_val : 1;    /* sense data is valid */
                    142:        /* byte 1 */
                    143:        u_char  seg_num;        /* segment number, applies to copy cmd only */
                    144:        /* byte 2 */
                    145:        Ucbit   key     : 4;    /* sense key, see below */
                    146:        Ucbit           : 1;    /* reserved */
                    147:        Ucbit   ili     : 1;    /* incorrect length indicator */
                    148:        Ucbit   eom     : 1;    /* end of media */
                    149:        Ucbit   fil_mk  : 1;    /* file mark on device */
                    150:        /* bytes 3 through 7 */
                    151:        u_char  info_1;         /* information byte 1 */
                    152:        u_char  info_2;         /* information byte 2 */
                    153:        u_char  info_3;         /* information byte 3 */
                    154:        u_char  info_4;         /* information byte 4 */
                    155:        u_char  add_len;        /* number of additional bytes */
                    156:        /* bytes 8 through 13, CCS additions */
                    157:        u_char  optional_8;     /* CCS search and copy only */
                    158:        u_char  optional_9;     /* CCS search and copy only */
                    159:        u_char  optional_10;    /* CCS search and copy only */
                    160:        u_char  optional_11;    /* CCS search and copy only */
                    161:        u_char  sense_code;     /* sense code */
                    162:        u_char  qual_code;      /* sense code qualifier */
                    163:        u_char  fru_code;       /* Field replacable unit code */
                    164:        Ucbit   bptr    : 3;    /* bit pointer for failure (if bpv) */
                    165:        Ucbit   bpv     : 1;    /* bit pointer is valid */
                    166:        Ucbit           : 2;
                    167:        Ucbit   cd      : 1;    /* pointers refer to command not data */
                    168:        Ucbit   sksv    : 1;    /* sense key specific valid */
                    169:        u_char  field_ptr[2];   /* field pointer for failure */
                    170:        u_char  add_info[2];    /* round up to 20 bytes */
                    171: };
                    172: 
                    173: #else  /* Motorola byteorder */
                    174: 
                    175: struct scsi_ext_sense {        /* scsi extended sense for error class 7 */
                    176:        /* byte 0 */
                    177:        Ucbit   adr_val : 1;    /* sense data is valid */
                    178:        Ucbit   type    : 7;    /* fixed at 0x70 */
                    179:        /* byte 1 */
                    180:        u_char  seg_num;        /* segment number, applies to copy cmd only */
                    181:        /* byte 2 */
                    182:        Ucbit   fil_mk  : 1;    /* file mark on device */
                    183:        Ucbit   eom     : 1;    /* end of media */
                    184:        Ucbit   ili     : 1;    /* incorrect length indicator */
                    185:        Ucbit           : 1;    /* reserved */
                    186:        Ucbit   key     : 4;    /* sense key, see below */
                    187:        /* bytes 3 through 7 */
                    188:        u_char  info_1;         /* information byte 1 */
                    189:        u_char  info_2;         /* information byte 2 */
                    190:        u_char  info_3;         /* information byte 3 */
                    191:        u_char  info_4;         /* information byte 4 */
                    192:        u_char  add_len;        /* number of additional bytes */
                    193:        /* bytes 8 through 13, CCS additions */
                    194:        u_char  optional_8;     /* CCS search and copy only */
                    195:        u_char  optional_9;     /* CCS search and copy only */
                    196:        u_char  optional_10;    /* CCS search and copy only */
                    197:        u_char  optional_11;    /* CCS search and copy only */
                    198:        u_char  sense_code;     /* sense code */
                    199:        u_char  qual_code;      /* sense code qualifier */
                    200:        u_char  fru_code;       /* Field replacable unit code */
                    201:        Ucbit   sksv    : 1;    /* sense key specific valid */
                    202:        Ucbit   cd      : 1;    /* pointers refer to command not data */
                    203:        Ucbit           : 2;
                    204:        Ucbit   bpv     : 1;    /* bit pointer is valid */
                    205:        Ucbit   bptr    : 3;    /* bit pointer for failure (if bpv) */
                    206:        u_char  field_ptr[2];   /* field pointer for failure */
                    207:        u_char  add_info[2];    /* round up to 20 bytes */
                    208: };
                    209: #endif
                    210: 
                    211: /*
                    212:  * SCSI Operation codes. 
                    213:  */
                    214: #define SC_TEST_UNIT_READY     0x00
                    215: #define SC_REZERO_UNIT         0x01
                    216: #define SC_REQUEST_SENSE       0x03
                    217: #define SC_FORMAT              0x04
                    218: #define SC_FORMAT_TRACK                0x06
                    219: #define SC_REASSIGN_BLOCK      0x07            /* CCS only */
                    220: #define SC_SEEK                        0x0b
                    221: #define SC_TRANSLATE           0x0f            /* ACB4000 only */
                    222: #define SC_INQUIRY             0x12            /* CCS only */
                    223: #define SC_MODE_SELECT         0x15
                    224: #define SC_RESERVE             0x16
                    225: #define SC_RELEASE             0x17
                    226: #define SC_MODE_SENSE          0x1a
                    227: #define SC_START               0x1b
                    228: #define SC_READ_DEFECT_LIST    0x37            /* CCS only, group 1 */
                    229: #define SC_READ_BUFFER          0x3c            /* CCS only, group 1 */
                    230:        /*
                    231:         * Note, these two commands use identical command blocks for all
                    232:         * controllers except the Adaptec ACB 4000 which sets bit 1 of byte 1.
                    233:         */
                    234: #define SC_READ                        0x08
                    235: #define SC_WRITE               0x0a
                    236: #define SC_EREAD               0x28            /* 10 byte read */
                    237: #define SC_EWRITE              0x2a            /* 10 byte write */
                    238: #define SC_WRITE_VERIFY                0x2e            /* 10 byte write+verify */
                    239: #define SC_WRITE_FILE_MARK     0x10
                    240: #define SC_UNKNOWN             0xff            /* cmd list terminator */
                    241: 
                    242: 
                    243: /*
                    244:  * Messages that SCSI can send.
                    245:  */
                    246: #define SC_COMMAND_COMPLETE    0x00
                    247: #define SC_SYNCHRONOUS         0x01
                    248: #define SC_SAVE_DATA_PTR       0x02
                    249: #define SC_RESTORE_PTRS                0x03
                    250: #define SC_DISCONNECT          0x04
                    251: #define SC_ABORT               0x06
                    252: #define SC_MSG_REJECT          0x07
                    253: #define SC_NO_OP               0x08
                    254: #define SC_PARITY              0x09
                    255: #define SC_IDENTIFY            0x80
                    256: #define SC_DR_IDENTIFY         0xc0
                    257: #define SC_DEVICE_RESET                0x0c
                    258: 
                    259: /*
                    260:  * Standard SCSI control blocks.
                    261:  * These go in or out over the SCSI bus.
                    262:  */
                    263: 
                    264: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                    265: 
                    266: struct scsi_g0cdb {            /* scsi group 0 command description block */
                    267:        u_char  cmd;            /* command code */
                    268:        Ucbit   high_addr : 5;  /* high part of block address */
                    269:        Ucbit   lun       : 3;  /* logical unit number */
                    270:        u_char  mid_addr;       /* middle part of block address */
                    271:        u_char  low_addr;       /* low part of block address */
                    272:        u_char  count;          /* transfer length */
                    273:        Ucbit   link      : 1;  /* link (another command follows) */
                    274:        Ucbit   fr        : 1;  /* flag request (interrupt at completion) */
                    275:        Ucbit   rsvd      : 4;  /* reserved */
                    276:        Ucbit   vu_56     : 1;  /* vendor unique (byte 5 bit 6) */
                    277:        Ucbit   vu_57     : 1;  /* vendor unique (byte 5 bit 7) */
                    278: };
                    279: 
                    280: #else  /* Motorola byteorder */
                    281: 
                    282: struct scsi_g0cdb {            /* scsi group 0 command description block */
                    283:        u_char  cmd;            /* command code */
                    284:        Ucbit   lun       : 3;  /* logical unit number */
                    285:        Ucbit   high_addr : 5;  /* high part of block address */
                    286:        u_char  mid_addr;       /* middle part of block address */
                    287:        u_char  low_addr;       /* low part of block address */
                    288:        u_char  count;          /* transfer length */
                    289:        Ucbit   vu_57     : 1;  /* vendor unique (byte 5 bit 7) */
                    290:        Ucbit   vu_56     : 1;  /* vendor unique (byte 5 bit 6) */
                    291:        Ucbit   rsvd      : 4;  /* reserved */
                    292:        Ucbit   fr        : 1;  /* flag request (interrupt at completion) */
                    293:        Ucbit   link      : 1;  /* link (another command follows) */
                    294: };
                    295: #endif
                    296: 
                    297: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                    298: 
                    299: struct scsi_g1cdb {            /* scsi group 1 command description block */
                    300:        u_char  cmd;            /* command code */
                    301:        Ucbit   reladr    : 1;  /* address is relative */
                    302:        Ucbit   res       : 4;  /* reserved bits 1-4 of byte 1 */
                    303:        Ucbit   lun       : 3;  /* logical unit number */
                    304:        u_char  addr[4];        /* logical block address */
                    305:        u_char  res6;           /* reserved byte 6 */
                    306:        u_char  count[2];       /* transfer length */
                    307:        Ucbit   link      : 1;  /* link (another command follows) */
                    308:        Ucbit   fr        : 1;  /* flag request (interrupt at completion) */
                    309:        Ucbit   rsvd      : 4;  /* reserved */
                    310:        Ucbit   vu_96     : 1;  /* vendor unique (byte 5 bit 6) */
                    311:        Ucbit   vu_97     : 1;  /* vendor unique (byte 5 bit 7) */
                    312: };
                    313: 
                    314: #else  /* Motorola byteorder */
                    315: 
                    316: struct scsi_g1cdb {            /* scsi group 1 command description block */
                    317:        u_char  cmd;            /* command code */
                    318:        Ucbit   lun       : 3;  /* logical unit number */
                    319:        Ucbit   res       : 4;  /* reserved bits 1-4 of byte 1 */
                    320:        Ucbit   reladr    : 1;  /* address is relative */
                    321:        u_char  addr[4];        /* logical block address */
                    322:        u_char  res6;           /* reserved byte 6 */
                    323:        u_char  count[2];       /* transfer length */
                    324:        Ucbit   vu_97     : 1;  /* vendor unique (byte 5 bit 7) */
                    325:        Ucbit   vu_96     : 1;  /* vendor unique (byte 5 bit 6) */
                    326:        Ucbit   rsvd      : 4;  /* reserved */
                    327:        Ucbit   fr        : 1;  /* flag request (interrupt at completion) */
                    328:        Ucbit   link      : 1;  /* link (another command follows) */
                    329: };
                    330: #endif
                    331: 
                    332: #if    defined(_BIT_FIELDS_LTOH)       /* Intel byteorder */
                    333: 
                    334: struct scsi_g5cdb {            /* scsi group 5 command description block */
                    335:        u_char  cmd;            /* command code */
                    336:        Ucbit   reladr    : 1;  /* address is relative */
                    337:        Ucbit   res       : 4;  /* reserved bits 1-4 of byte 1 */
                    338:        Ucbit   lun       : 3;  /* logical unit number */
                    339:        u_char  addr[4];        /* logical block address */
                    340:        u_char  count[4];       /* transfer length */
                    341:        u_char  res10;          /* reserved byte 10 */
                    342:        Ucbit   link      : 1;  /* link (another command follows) */
                    343:        Ucbit   fr        : 1;  /* flag request (interrupt at completion) */
                    344:        Ucbit   rsvd      : 4;  /* reserved */
                    345:        Ucbit   vu_B6     : 1;  /* vendor unique (byte B bit 6) */
                    346:        Ucbit   vu_B7     : 1;  /* vendor unique (byte B bit 7) */
                    347: };
                    348: 
                    349: #else  /* Motorola byteorder */
                    350: 
                    351: struct scsi_g5cdb {            /* scsi group 5 command description block */
                    352:        u_char  cmd;            /* command code */
                    353:        Ucbit   lun       : 3;  /* logical unit number */
                    354:        Ucbit   res       : 4;  /* reserved bits 1-4 of byte 1 */
                    355:        Ucbit   reladr    : 1;  /* address is relative */
                    356:        u_char  addr[4];        /* logical block address */
                    357:        u_char  count[4];       /* transfer length */
                    358:        u_char  res10;          /* reserved byte 10 */
                    359:        Ucbit   vu_B7     : 1;  /* vendor unique (byte B bit 7) */
                    360:        Ucbit   vu_B6     : 1;  /* vendor unique (byte B bit 6) */
                    361:        Ucbit   rsvd      : 4;  /* reserved */
                    362:        Ucbit   fr        : 1;  /* flag request (interrupt at completion) */
                    363:        Ucbit   link      : 1;  /* link (another command follows) */
                    364: };
                    365: #endif
                    366: 
                    367: #define        SC_G0_CDBLEN    6       /* Len of Group 0 commands */
                    368: #define        SC_G1_CDBLEN    10      /* Len of Group 1 commands */
                    369: #define        SC_G5_CDBLEN    12      /* Len of Group 5 commands */
                    370: 
                    371: #define        SCG_MAX_CMD     24      /* 24 bytes max. size is supported */
                    372: #define        SCG_MAX_STATUS  3       /* XXX (sollte 4 allign.) Mamimum Status Len */
                    373: #define        SCG_MAX_SENSE   32      /* Mamimum Sense Len for auto Req. Sense */
                    374: 
                    375: #define        DEF_SENSE_LEN   16      /* Default Sense Len */
                    376: #define        CCS_SENSE_LEN   18      /* Sense Len for CCS compatible devices */
                    377: 
                    378: struct scg_cmd {
                    379:        caddr_t addr;                   /* Address of data in user space */
                    380:        int     size;                   /* DMA count for data transfer */
                    381:        int     flags;                  /* see below for definition */
                    382:        int     cdb_len;                /* Size of SCSI command in bytes */
                    383:                                        /* NOTE: rel 4 uses this field only */
                    384:                                        /* with commands not in group 1 or 2*/
                    385:        int     sense_len;              /* for intr() if -1 don't get sense */
                    386:        int     timeout;                /* timeout in seconds */
                    387:                                        /* NOTE: actual resolution depends */
                    388:                                        /* on driver implementation */
                    389:        int     kdebug;                 /* driver kernel debug level */
                    390:        int     resid;                  /* Bytes not transfered */
                    391:        int     error;                  /* Error code from scgintr() */
                    392:        int     ux_errno;               /* UNIX error code */
                    393: #ifdef comment
                    394: XXX    struct  scsi_status scb; ???    /* Status returnd by command */
                    395: #endif
                    396:        union {
                    397:                struct  scsi_status Scb;/* Status returnd by command */
                    398:                u_char  cmd_scb[SCG_MAX_STATUS];
                    399:        } u_scb;
                    400: #define        scb     u_scb.Scb
                    401: #ifdef comment
                    402: XXX    struct  scsi_sense sense; ???   /* Sense bytes from command */
                    403: #endif
                    404:        union {
                    405:                struct  scsi_sense Sense;/* Sense bytes from command */
                    406:                u_char  cmd_sense[SCG_MAX_SENSE];
                    407:        } u_sense;
                    408: #define        sense   u_sense.Sense
                    409:        int     sense_count;            /* Number of bytes valid in sense */
                    410:        int     target;                 /* SCSI target id */
                    411:        union {                         /* SCSI command descriptor block */
                    412:                struct  scsi_g0cdb g0_cdb;
                    413:                struct  scsi_g1cdb g1_cdb;
                    414:                struct  scsi_g5cdb g5_cdb;
                    415:                u_char  cmd_cdb[SCG_MAX_CMD];
                    416:        } cdb;                          /* 24 bytes max. size is supported */
                    417: };
                    418: 
                    419: #define        dma_read        flags           /* 1 if DMA to Sun, 0 otherwise */
                    420: 
                    421: /*
                    422:  * definition for flags field in scg_cmd struct
                    423:  */
                    424: #define        SCG_RECV_DATA   0x0001          /* DMA direction to Sun */
                    425: #define        SCG_DISRE_ENA   0x0002          /* enable disconnect/reconnect */
                    426: #define        SCG_SILENT      0x0004          /* be silent on errors */
                    427: #define        SCG_CMD_RETRY   0x0008          /* enable retries */
                    428: #define        SCG_NOPARITY    0x0010          /* disable parity for this command */
                    429: 
                    430: /*
                    431:  * definition for error field in scg_cmd struct
                    432:  *
                    433:  * The codes refer to SCSI general errors, not to device
                    434:  * specific errors.  Device specific errors are discovered
                    435:  * by checking the sense data.
                    436:  * The distinction between retryable and fatal is somewhat ad hoc.
                    437:  */
                    438: #define SCG_NO_ERROR   0               /* cdb transported without error */
                    439: #define SCG_RETRYABLE  1               /* any other case */
                    440: #define SCG_FATAL      2               /* could not select target */
                    441: #define SCG_TIMEOUT    3               /* driver timed out */
                    442: 
                    443: #define        g0_cdbaddr(cdb, a)      ((cdb)->high_addr = (a) >> 16,\
                    444:                                 (cdb)->mid_addr = ((a) >> 8) & 0xFF,\
                    445:                                 (cdb)->low_addr = (a) & 0xFF)
                    446: 
                    447: #define        g1_cdbaddr(cdb, a)      ((cdb)->addr[0] = (a) >> 24,\
                    448:                                 (cdb)->addr[1] = ((a) >> 16)& 0xFF,\
                    449:                                 (cdb)->addr[2] = ((a) >> 8) & 0xFF,\
                    450:                                 (cdb)->addr[3] = (a) & 0xFF)
                    451: 
                    452: #define g5_cdbaddr(cdb, a)     g1_cdbaddr(cdb, a)
                    453: 
                    454: #define        g0_cdblen(cdb, len)     ((cdb)->count = (len))
                    455: 
                    456: #define        g1_cdblen(cdb, len)     ((cdb)->count[0] = ((len) >> 8) & 0xFF,\
                    457:                                 (cdb)->count[1] = (len) & 0xFF)
                    458: 
                    459: #define g5_cdblen(cdb, len)    ((cdb)->count[0] = (len) >> 24L,\
                    460:                                 (cdb)->count[1] = ((len) >> 16L)& 0xFF,\
                    461:                                 (cdb)->count[2] = ((len) >> 8L) & 0xFF,\
                    462:                                 (cdb)->count[3] = (len) & 0xFF)
                    463: 
                    464: #define        i_to_long(a, i)         (((u_char *)(a))[0] = ((i) >> 24)& 0xFF,\
                    465:                                 ((u_char *)(a))[1] = ((i) >> 16)& 0xFF,\
                    466:                                 ((u_char *)(a))[2] = ((i) >> 8) & 0xFF,\
                    467:                                 ((u_char *)(a))[3] = (i) & 0xFF)
                    468: 
                    469: #define        i_to_3_byte(a, i)       (((u_char *)(a))[0] = ((i) >> 16)& 0xFF,\
                    470:                                 ((u_char *)(a))[1] = ((i) >> 8) & 0xFF,\
                    471:                                 ((u_char *)(a))[2] = (i) & 0xFF)
                    472: 
                    473: #define        i_to_4_byte(a, i)       (((u_char *)(a))[0] = ((i) >> 24)& 0xFF,\
                    474:                                 ((u_char *)(a))[1] = ((i) >> 16)& 0xFF,\
                    475:                                 ((u_char *)(a))[2] = ((i) >> 8) & 0xFF,\
                    476:                                 ((u_char *)(a))[3] = (i) & 0xFF)
                    477: 
                    478: #define        i_to_short(a, i)        (((u_char *)(a))[0] = ((i) >> 8) & 0xFF,\
                    479:                                 ((u_char *)(a))[1] = (i) & 0xFF)
                    480: 
                    481: #define        a_to_u_short(a) ((unsigned short) \
                    482:                        ((((unsigned char*) a)[1]       & 0xFF) | \
                    483:                         (((unsigned char*) a)[0] << 8  & 0xFF00)))
                    484: 
                    485: #define        a_to_3_byte(a)  ((unsigned long) \
                    486:                        ((((unsigned char*) a)[2]       & 0xFF) | \
                    487:                         (((unsigned char*) a)[1] << 8  & 0xFF00) | \
                    488:                         (((unsigned char*) a)[0] << 16 & 0xFF0000)))
                    489: 
                    490: #ifdef __STDC__
                    491: #define        a_to_u_long(a)  ((unsigned long) \
                    492:                        ((((unsigned char*) a)[3]       & 0xFF) | \
                    493:                         (((unsigned char*) a)[2] << 8  & 0xFF00) | \
                    494:                         (((unsigned char*) a)[1] << 16 & 0xFF0000) | \
                    495:                         (((unsigned char*) a)[0] << 24 & 0xFF000000UL)))
                    496: #else
                    497: #define        a_to_u_long(a)  ((unsigned long) \
                    498:                        ((((unsigned char*) a)[3]       & 0xFF) | \
                    499:                         (((unsigned char*) a)[2] << 8  & 0xFF00) | \
                    500:                         (((unsigned char*) a)[1] << 16 & 0xFF0000) | \
                    501:                         (((unsigned char*) a)[0] << 24 & 0xFF000000)))
                    502: #endif
                    503: 
                    504: 
                    505: /* Peripheral Device Type */
                    506: 
                    507: #define        SC_DASD                 0x00
                    508: #define        SC_SEQD                 0x01
                    509: #define        SC_PRTD                 0x02 
                    510: #define        SC_PROCD                0x03 
                    511: #define        SC_OPTD                 0x04
                    512: #define        SC_ROMD                 0x05
                    513: #define        SC_SCAN                 0x06
                    514: #define        SC_OMEM                 0x07
                    515: #define        SC_JUKE                 0x08
                    516: #define        SC_COMM                 0x09
                    517: #define        SC_NOTPR                0x7F
                    518: 
                    519: #endif /* _SCGCMD_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.