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/mcd/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 /*-
    2  * Copyright 1993 by Holger Veit (data part)
    3  * Copyright 1993 by Brian Moore (audio part)
    4  * Changes Copyright 1993 by Gary Clark II
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. All advertising materials mentioning features or use of this software
   16  *    must display the following acknowledgement:
   17  *      This software was developed by Holger Veit and Brian Moore
   18  *      for use with "386BSD" and similar operating systems.
   19  *    "Similar operating systems" includes mainly non-profit oriented
   20  *    systems for research and education, including but not restricted to
   21  *    "NetBSD", "FreeBSD", "Mach" (by CMU).
   22  * 4. Neither the name of the developer(s) nor the name "386BSD"
   23  *    may be used to endorse or promote products derived from this
   24  *    software without specific prior written permission.
   25  *
   26  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPER(S) ``AS IS'' AND ANY
   27  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE DEVELOPER(S) BE
   30  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
   31  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
   32  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   33  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   34  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   36  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   37  *
   38  * This file contains definitions for some cdrom control commands
   39  * and status codes. This info was "inherited" from the DOS MTMCDE.SYS
   40  * driver, and is thus not complete (and may even be wrong). Some day
   41  * the manufacturer or anyone else might provide better documentation,
   42  * so this file (and the driver) will then have a better quality.
   43  *
   44  * $FreeBSD: releng/9.0/sys/dev/mcd/mcdreg.h 143063 2005-03-02 21:33:29Z joerg $
   45  */
   46 
   47 #ifndef MCD_H
   48 #define MCD_H
   49 
   50 /* toc */
   51 #define MCD_MAXTOCS     104     /* from the Linux driver */
   52 #define MCD_LASTPLUS1   170     /* special toc entry */
   53 
   54 typedef unsigned char   bcd_t;
   55 #define M_msf(msf)      msf[0]
   56 #define S_msf(msf)      msf[1]
   57 #define F_msf(msf)      msf[2]
   58 
   59 /* io lines used */
   60 #define MCD_IO_BASE     0x300
   61 
   62 #define MCD_REG_COMMAND 0
   63 #define MCD_REG_STATUS  0
   64 #define MCD_REG_RDATA   0
   65 
   66 #define MCD_REG_RESET   1
   67 #define MCD_REG_CTL2    2       /* XXX Is this right? */
   68 #define MCD_REG_CONFIG  3
   69 
   70 #define MCD_MASK_DMA    0x07    /* bits 2-0 = DMA channel */
   71 #define MCD_MASK_IRQ    0x70    /* bits 6-4 = INT number */
   72                                 /* 001 = int 2,9 */
   73                                 /* 010 = int 3 */
   74                                 /* 011 = int 5 */
   75                                 /* 100 = int 10 */
   76                                 /* 101 = int 11 */
   77 /* flags */
   78 #define MFL_DATA_NOT_AVAIL      0x02
   79 #define MFL_STATUS_NOT_AVAIL    0x04
   80 
   81 /* New Commands */
   82 #define M_RESET         0x00
   83 #define M_PICKLE        0x04
   84 
   85 /* ports */
   86 #define MCD_DATA        0
   87 #define MCD_FLAGS       1
   88 #define MCD_CTRL        2
   89 #define CHANNEL         3       /* XXX ??? */
   90 
   91 /* Status bits */
   92 #define MCD_ST_DOOROPEN         0x80
   93 #define MCD_ST_DSKIN            0x40
   94 #define MCD_ST_DSKCHNG          0x20
   95 #define MCD_ST_SPINNING         0x10
   96 #define MCD_ST_AUDIODISK        0x08    /* Audio Disk is in */
   97 #define MCD_ST_BUSY             0x04
   98 #define MCD_ST_AUDIOBSY         0x02    /* Audio Disk is Playing */
   99 #define MCD_ST_CMDCHECK         0x01    /* Command error */
  100 
  101 /* commands known by the controller */
  102 #define MCD_CMDRESET            0x00
  103 #define MCD_CMDGETVOLINFO       0x10    /* gets mcd_volinfo */
  104 #define MCD_CMDGETDISKINFO      0x11    /* gets mcd_disk information */
  105 #define MCD_CMDGETQCHN          0x20    /* gets mcd_qchninfo */
  106 #define MCD_CMDGETSENSE         0x30    /* gets sense info */
  107 #define MCD_CMDGETSTAT          0x40    /* gets a byte of status */
  108 
  109 #define MCD_CMDSETMODE          0x50    /* set transmission mode, needs byte */
  110 
  111 #define MCD_MDBIT_TESTMODE      0x80    /* 0 = DATALENGTH setting is valid */
  112 #define MCD_MDBIT_DATALENGTH    0x40    /* 0 = Read User Data Only */
  113                                         /* 1 = Read Raw sectors (2352 bytes) */
  114 
  115 #define MCDBLK  2048                            /* for cooked mode */
  116 #define MCDRBLK sizeof(struct mcd_rawsector)    /* for raw mode */
  117 
  118 #define MCD_MDBIT_ECCMODE       0x20    /* 0 = Use secondary correction */
  119                                         /* 1 = Don't use secondary ECC */
  120 #define MCD_MDBIT_SPINDOWN      0x08    /* 0 = Spin Up, 1 = Spin Down */
  121 #define MCD_MDBIT_GET_TOC       0x04    /* 0 = Get UPC on next GETQCHAN */
  122                                         /* 1 = Get TOC on GETQCHAN */
  123 #define MCD_MDBIT_MUTEDATA      0x01    /* 1 = Don't play back Data as audio */
  124 
  125 #define MCD_MD_RAW              (MCD_MDBIT_DATALENGTH|MCD_MDBIT_ECCMODE|MCD_MDBIT_MUTEDATA)
  126 #define MCD_MD_COOKED           (MCD_MDBIT_MUTEDATA)
  127 #define MCD_MD_TOC              (MCD_MDBIT_GET_TOC|MCD_MDBIT_MUTEDATA)
  128 
  129 #define MCD_CMDSTOPAUDIO        0x70
  130 #define MCD_CMDSTOPAUDIOTIME    0x80
  131 #define MCD_CMDGETVOLUME        0x8E    /* gets mcd_volume */
  132 #define MCD_CMDSETDRIVEMODE     0xA0    /* Set drive mode */
  133 #define MCD_READUPC             0xA2    /* Get UPC info */
  134 #define MCD_CMDSETVOLUME        0xAE    /* sets mcd_volume */
  135 #define MCD_CMDREAD1            0xB0    /* read n sectors */
  136 #define MCD_CMDSINGLESPEEDREAD  0xC0    /* read from-to */
  137 #define MCD_CMDSTARTAUDIOMSF    0xC1    /* read audio data */
  138 #define MCD_CMDDOUBLESPEEDREAD  0xC1    /* Read lots of data from the drive */
  139 #define MCD_CMDGETDRIVEMODE     0xC2    /* Get the drive mode */
  140 #define MCD_CMDREAD             0xC3    /* Read data from the drive */
  141 #define MCD_CMDSETINTERLEAVE    0xC8    /* Adjust the interleave */
  142 #define MCD_CMDCONTINFO         0xDC    /* Get controller info */
  143 #define MCD_CMDSTOP             0xF0    /* Stop everything */
  144 #define MCD_CMDEJECTDISK        0xF6
  145 #define MCD_CMDCLOSETRAY        0xF8
  146 
  147 #define MCD_CMDLOCKDRV          0xFE    /* needs byte */
  148 #define MCD_LK_UNLOCK   0x00
  149 #define MCD_LK_LOCK     0x01
  150 #define MCD_LK_TEST     0x02
  151 
  152 /* DMA Enable Stuff */
  153 #define MCD_DMA_IRQFLAGS        0x10    /* Set data0 for IRQ click */
  154 
  155 #define MCD_DMA_PREIRQ          0x01    /* All of these are for */
  156 #define MCD_DMA_POSTIRQ         0x02    /* MCD_DMA_IRQFLAG...   */
  157 #define MCD_DMA_ERRIRQ          0x04    /*                      */
  158 
  159 #define MCD_DMA_TIMEOUT         0x08    /* Set data0 for DMA timeout */
  160 #define MCD_DMA_UPCFLAG         0x04    /* 1 = Next command will be READUPC */
  161 
  162 #define MCD_DMA_DMAMODE         0x02    /* 1 = Data uses DMA */
  163 #define MCD_DMA_TRANSFERLENGTH  0x01    /* data0 = MSB, data1 = LSB of block length */
  164 
  165 struct mcd_dma_mode {
  166         u_char  dma_mode;
  167         u_char  data0;          /* If dma_mode & 0x10: Use IRQ settings */
  168         u_char  data1;          /* Used if dma_mode & 0x01 */
  169 } __packed;
  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 } __packed;
  177 
  178 struct mcd_qchninfo {
  179         u_char  addr_type:4;
  180         u_char  control:4;
  181         u_char  trk_no;
  182         u_char  idx_no;
  183         bcd_t   trk_size_msf[3];
  184         u_char  :8;
  185         bcd_t   hd_pos_msf[3];
  186 } __packed;
  187 
  188 struct mcd_volume {
  189         u_char  v0l;
  190         u_char  v0rs;
  191         u_char  v0r;
  192         u_char  v0ls;
  193 } __packed;
  194 
  195 struct mcd_holdtime {
  196         u_char  units_of_ten_seconds;
  197                         /* If this is 0, the default (12) is used */
  198 } __packed;
  199 
  200 struct mcd_read1 {
  201         bcd_t   start_msf[3];
  202         u_char  nsec[3];
  203 } __packed;
  204 
  205 struct mcd_read2 {
  206         bcd_t   start_msf[3];
  207         bcd_t   end_msf[3];
  208 } __packed;
  209 
  210 struct mcd_rawsector {
  211         u_char sync1[12];
  212         u_char header[4];
  213         u_char subheader1[4];
  214         u_char subheader2[4];
  215         u_char data[MCDBLK];
  216         u_char ecc_bits[280];
  217 } __packed;
  218 
  219 #endif /* MCD_H */

Cache object: bf4bd7aeb908dcc933faf7a65d1a8777


[ 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.