The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/isa/mcdreg.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: fcf20afbb0a6dc0cb8088ba08b02be08


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.