[BACK]Return to mcdreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / isa

Annotation of sys/dev/isa/mcdreg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: mcdreg.h,v 1.6 2003/11/16 20:30:06 avsm Exp $ */
        !             2: /*     $NetBSD: mcdreg.h,v 1.8 1997/04/04 18:59:37 christos Exp $      */
        !             3:
        !             4: /*
        !             5:  * Copyright 1993 by Holger Veit (data part)
        !             6:  * Copyright 1993 by Brian Moore (audio part)
        !             7:  * All rights reserved.
        !             8:  *
        !             9:  * Redistribution and use in source and binary forms, with or without
        !            10:  * modification, are permitted provided that the following conditions
        !            11:  * are met:
        !            12:  * 1. Redistributions of source code must retain the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer.
        !            14:  * 2. Redistributions in binary form must reproduce the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer in the
        !            16:  *    documentation and/or other materials provided with the distribution.
        !            17:  * 3. All advertising materials mentioning features or use of this software
        !            18:  *    must display the following acknowledgement:
        !            19:  *     This software was developed by Holger Veit and Brian Moore
        !            20:  *      for use with "386BSD" and similar operating systems.
        !            21:  *    "Similar operating systems" includes mainly non-profit oriented
        !            22:  *    systems for research and education, including but not restricted to
        !            23:  *    "NetBSD", "FreeBSD", "Mach" (by CMU).
        !            24:  * 4. Neither the name of the developer(s) nor the name "386BSD"
        !            25:  *    may be used to endorse or promote products derived from this
        !            26:  *    software without specific prior written permission.
        !            27:  *
        !            28:  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPER(S) ``AS IS'' AND ANY
        !            29:  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            30:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            31:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE DEVELOPER(S) BE
        !            32:  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
        !            33:  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
        !            34:  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
        !            35:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
        !            36:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
        !            37:  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
        !            38:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            39:  *
        !            40:  * This file contains definitions for some cdrom control commands
        !            41:  * and status codes. This info was "inherited" from the DOS MTMCDE.SYS
        !            42:  * driver, and is thus not complete (and may even be wrong). Some day
        !            43:  * the manufacturer or anyone else might provide better documentation,
        !            44:  * so this file (and the driver) will then have a better quality.
        !            45:  */
        !            46:
        !            47: typedef unsigned char  bcd_t;
        !            48: #define        M_msf(msf)      msf[0]
        !            49: #define        S_msf(msf)      msf[1]
        !            50: #define        F_msf(msf)      msf[2]
        !            51:
        !            52: #define        MCD_COMMAND     0
        !            53: #define        MCD_STATUS      0
        !            54: #define        MCD_RDATA       0
        !            55: #define        MCD_RESET       1
        !            56: #define        MCD_XFER        1
        !            57: #define        MCD_CTL2        2 /* XXX Is this right? */
        !            58: #define        MCD_CONFIG      3
        !            59: #define MCD_NPORT      4
        !            60:
        !            61: #define        MCD_MASK_DMA    0x07    /* bits 2-0 = DMA channel */
        !            62: #define        MCD_MASK_IRQ    0x70    /* bits 6-4 = INT number */
        !            63:                                /* 001 = int 2,9 */
        !            64:                                /* 010 = int 3 */
        !            65:                                /* 011 = int 5 */
        !            66:                                /* 100 = int 10 */
        !            67:                                /* 101 = int 11 */
        !            68:
        !            69: /* Status bits */
        !            70: #define        MCD_ST_DOOROPEN         0x80
        !            71: #define        MCD_ST_DSKIN            0x40
        !            72: #define        MCD_ST_DSKCHNG          0x20
        !            73: #define        MCD_ST_SPINNING         0x10
        !            74: #define        MCD_ST_AUDIODISK        0x08    /* audio disk is in */
        !            75: #define        MCD_ST_READERR          0x04
        !            76: #define        MCD_ST_AUDIOBSY         0x02    /* audio disk is playing */
        !            77: #define        MCD_ST_CMDCHECK         0x01    /* command error */
        !            78:
        !            79: /* Xfer bits */
        !            80: #define        MCD_XF_STATUSUNAVAIL    0x04
        !            81: #define        MCD_XF_DATAUNAVAIL      0x02
        !            82:
        !            83: /* Modes */
        !            84: #define        MCD_MD_TESTMODE         0x80    /* 0 = DATALENGTH is valid */
        !            85: #define        MCD_MD_DATALENGTH       0x40    /* 1 = read ECC data also */
        !            86: #define        MCD_MD_ECCMODE          0x20    /* 1 = disable secondary ECC */
        !            87: #define        MCD_MD_SPINDOWN         0x08    /* 1 = spin down */
        !            88: #define        MCD_MD_READTOC          0x04    /* 1 = read TOC on GETQCHN */
        !            89: #define        MCD_MD_PLAYAUDIO        0x01    /* 1 = play audio through headphones */
        !            90:
        !            91: #define        MCD_MD_RAW              (MCD_MD_PLAYAUDIO|MCD_MD_ECCMODE|MCD_MD_DATALENGTH)
        !            92: #define        MCD_MD_COOKED           (MCD_MD_PLAYAUDIO)
        !            93: #define        MCD_MD_TOC              (MCD_MD_PLAYAUDIO|MCD_MD_READTOC)
        !            94: #define        MCD_MD_SLEEP            (MCD_MD_PLAYAUDIO|MCD_MD_SPINDOWN)
        !            95:
        !            96: #define        MCD_BLKSIZE_RAW         sizeof(struct mcd_rawsector)
        !            97: #define        MCD_BLKSIZE_COOKED      2048
        !            98:
        !            99: /* Lock states */
        !           100: #define        MCD_LK_UNLOCK           0x00
        !           101: #define        MCD_LK_LOCK             0x01
        !           102: #define        MCD_LK_TEST             0x02
        !           103:
        !           104: /* Config commands */
        !           105: #define        MCD_CF_IRQENABLE        0x10
        !           106: #define        MCD_CF_DMATIMEOUT       0x08
        !           107: #define        MCD_CF_READUPC          0x04
        !           108: #define        MCD_CF_DMAENABLE        0x02
        !           109: #define        MCD_CF_BLOCKSIZE        0x01
        !           110:
        !           111: /* UPC subcommands */
        !           112: #define        MCD_UPC_DISABLE         0x00
        !           113: #define        MCD_UPC_ENABLE          0x01
        !           114:
        !           115: /* commands known by the controller */
        !           116: #define        MCD_CMDRESET            0x00
        !           117: #define        MCD_CMDGETVOLINFO       0x10    /* gets mcd_volinfo */
        !           118: #define        MCD_CMDGETDISKINFO      0x11    /* gets mcd_disk */
        !           119: #define        MCD_CMDGETQCHN          0x20    /* gets mcd_qchninfo */
        !           120: #define        MCD_CMDGETSENSE         0x30    /* gets sense info */
        !           121: #define        MCD_CMDGETSTAT          0x40    /* gets a byte of status */
        !           122: #define        MCD_CMDSETMODE          0x50    /* set transmission mode, needs byte */
        !           123: #define        MCD_CMDSTOPAUDIO        0x70
        !           124: #define        MCD_CMDSTOPAUDIOTIME    0x80
        !           125: #define        MCD_CMDGETVOLUME        0x8E    /* gets mcd_volume */
        !           126: #define        MCD_CMDCONFIGDRIVE      0x90
        !           127: #define        MCD_CMDSETDRIVEMODE     0xa0    /* set drive mode */
        !           128: #define        MCD_CMDSETVOLUME        0xae    /* sets mcd_volume */
        !           129: #define        MCD_CMDREAD1            0xb0    /* read n sectors */
        !           130: #define        MCD_CMDREADSINGLESPEED  0xc0    /* read (single speed) */
        !           131: #define        MCD_CMDREADDOUBLESPEED  0xc1    /* read (double speed) */
        !           132: #define        MCD_CMDGETDRIVEMODE     0xc2    /* get drive mode */
        !           133: #define        MCD_CMDREAD3            0xc3    /* ? */
        !           134: #define        MCD_CMDSETINTERLEAVE    0xc8    /* set interleave for read */
        !           135: #define        MCD_CMDCONTINFO         0xdc    /* get controller info */
        !           136: #define        MCD_CMDSTOP             0xf0    /* stop everything */
        !           137: #define        MCD_CMDEJECTDISK        0xf6
        !           138: #define        MCD_CMDCLOSETRAY        0xf8
        !           139: #define        MCD_CMDSETLOCK          0xfe    /* needs byte */
        !           140:
        !           141: union mcd_qchninfo {
        !           142:        struct {
        !           143:                u_char  control:4;
        !           144:                u_char  addr_type:4;
        !           145:                u_char  trk_no;
        !           146:                u_char  idx_no;
        !           147:                bcd_t   track_size[3];
        !           148:                u_char  :8;
        !           149:                bcd_t   absolute_pos[3];
        !           150:        } toc;
        !           151:        struct {
        !           152:                u_char  control:4;
        !           153:                u_char  addr_type:4;
        !           154:                u_char  trk_no;
        !           155:                u_char  idx_no;
        !           156:                bcd_t   relative_pos[3];
        !           157:                u_char  :8;
        !           158:                bcd_t   absolute_pos[3];
        !           159:        } current;
        !           160:        struct {
        !           161:                u_char  control:4;
        !           162:                u_char  addr_type:4;
        !           163:                u_char  upccode[7];
        !           164:                u_char  junk[2];
        !           165:        } upc;
        !           166: } __packed;
        !           167:
        !           168: struct mcd_volinfo {
        !           169:        bcd_t   trk_low;
        !           170:        bcd_t   trk_high;
        !           171:        bcd_t   vol_msf[3];
        !           172:        bcd_t   trk1_msf[3];
        !           173: } __packed;
        !           174:
        !           175: struct mcd_result {
        !           176:        u_char  length;
        !           177:        union {
        !           178:                struct {
        !           179:                        u_char  data[1];
        !           180:                } raw;
        !           181:                struct {
        !           182:                        u_char  code;
        !           183:                        u_char  version;
        !           184:                } continfo;
        !           185:                union mcd_qchninfo qchninfo;
        !           186:                struct mcd_volinfo volinfo;
        !           187:        } data;
        !           188: } __packed;
        !           189:
        !           190: struct mcd_command {
        !           191:        u_char  opcode;
        !           192:        u_char  length;
        !           193:        union {
        !           194:                struct {
        !           195:                        u_char  data[1];
        !           196:                } raw;
        !           197:                struct {
        !           198:                        bcd_t   start_msf[3];
        !           199:                        bcd_t   reserved[3];
        !           200:                } seek;
        !           201:                struct {
        !           202:                        bcd_t   start_msf[3];
        !           203:                        bcd_t   length[3];
        !           204:                } read;
        !           205:                struct {
        !           206:                        bcd_t   start_msf[3];
        !           207:                        bcd_t   end_msf[3];
        !           208:                } play;
        !           209:                struct {
        !           210:                        u_char  mode;
        !           211:                } datamode;
        !           212:                struct {
        !           213:                        u_char  time;
        !           214:                } hold;
        !           215:                struct {
        !           216:                        u_char  mode;
        !           217:                } drivemode;
        !           218:                struct {
        !           219:                        u_char  mode;
        !           220:                } lockmode;
        !           221:                struct {
        !           222:                        u_char  subcommand;
        !           223:                        u_char  data1, data2;
        !           224:                } config;
        !           225:        } data;
        !           226: } __packed;
        !           227:
        !           228: struct mcd_mbox {
        !           229:        struct mcd_command cmd;
        !           230:        struct mcd_result res;
        !           231: } __packed;
        !           232:
        !           233: struct mcd_volume {
        !           234:        u_char  v0l;
        !           235:        u_char  v0rs;
        !           236:        u_char  v0r;
        !           237:        u_char  v0ls;
        !           238: } __packed;
        !           239:
        !           240: struct mcd_rawsector {
        !           241:        u_char  sync1[12];
        !           242:        u_char  header[4];
        !           243:        u_char  subheader1[4];
        !           244:        u_char  subheader2[4];
        !           245:        u_char  data[MCD_BLKSIZE_COOKED];
        !           246:        u_char  ecc_bits[280];
        !           247: } __packed;

CVSweb