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/i386/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 /*
    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: src/sys/i386/isa/mcdreg.h,v 1.11.4.1 1999/09/05 08:13:13 peter Exp $
   45  */
   46 
   47 #ifndef MCD_H
   48 #define MCD_H
   49 
   50 #ifdef __GNUC__
   51 #if __GNUC__ >= 2
   52 #pragma pack(1)
   53 #endif
   54 #endif
   55 
   56 typedef unsigned char   bcd_t;
   57 #define M_msf(msf)      msf[0]
   58 #define S_msf(msf)      msf[1]
   59 #define F_msf(msf)      msf[2]
   60 
   61 /* io lines used */
   62 #define MCD_IO_BASE     0x300
   63 
   64 #define mcd_command     0
   65 #define mcd_status      0
   66 #define mcd_rdata       0
   67 
   68 #define mcd_reset       1
   69 #define mcd_ctl2        2 /* XXX Is this right? */
   70 #define mcd_config      3
   71 
   72 #define MCD_MASK_DMA    0x07    /* bits 2-0 = DMA channel */
   73 #define MCD_MASK_IRQ    0x70    /* bits 6-4 = INT number */
   74                                 /* 001 = int 2,9 */
   75                                 /* 010 = int 3 */
   76                                 /* 011 = int 5 */
   77                                 /* 100 = int 10 */
   78                                 /* 101 = int 11 */
   79 /* flags */
   80 #define MFL_DATA_NOT_AVAIL      0x02
   81 #define MFL_STATUS_NOT_AVAIL    0x04
   82 
   83 /* New Commands */
   84 #define M_RESET         0x00
   85 #define M_PICKLE        0x04
   86 
   87 /* ports */
   88 #define MCD_DATA        0
   89 #define MCD_FLAGS       1
   90 #define MCD_CTRL        2
   91 #define CHANNEL         3       /* XXX ??? */
   92 
   93 /* Status bits */
   94 #define MCD_ST_DOOROPEN         0x80
   95 #define MCD_ST_DSKIN            0x40
   96 #define MCD_ST_DSKCHNG          0x20
   97 #define MCD_ST_SPINNING         0x10
   98 #define MCD_ST_AUDIODISK        0x08    /* Audio Disk is in */
   99 #define MCD_ST_BUSY             0x04
  100 #define MCD_ST_AUDIOBSY         0x02    /* Audio Disk is Playing */
  101 #define MCD_ST_CMDCHECK         0x01    /* Command error */
  102 
  103 /* commands known by the controller */
  104 #define MCD_CMDRESET            0x00
  105 #define MCD_CMDGETVOLINFO       0x10    /* gets mcd_volinfo */
  106 #define MCD_CMDGETDISKINFO      0x11    /* gets mcd_disk information */
  107 #define MCD_CMDGETQCHN          0x20    /* gets mcd_qchninfo */
  108 #define MCD_CMDGETSENSE         0x30    /* gets sense info */
  109 #define MCD_CMDGETSTAT          0x40    /* gets a byte of status */
  110 
  111 #define MCD_CMDSETMODE          0x50    /* set transmission mode, needs byte */
  112 
  113 #define MCD_MDBIT_TESTMODE      0x80    /* 0 = DATALENGTH setting is valid */
  114 #define MCD_MDBIT_DATALENGTH    0x40    /* 0 = Read User Data Only */
  115                                         /* 1 = Read Raw sectors (2352 bytes) */
  116 
  117 #define MCDBLK  2048                            /* for cooked mode */
  118 #define MCDRBLK sizeof(struct mcd_rawsector)    /* for raw mode */
  119 
  120 #define MCD_MDBIT_ECCMODE       0x20    /* 0 = Use secondary correction */
  121                                         /* 1 = Don't use secondary ECC */
  122 #define MCD_MDBIT_SPINDOWN      0x08    /* 0 = Spin Up, 1 = Spin Down */
  123 #define MCD_MDBIT_GET_TOC       0x04    /* 0 = Get UPC on next GETQCHAN */
  124                                         /* 1 = Get TOC on GETQCHAN */
  125 #define MCD_MDBIT_MUTEDATA      0x01    /* 1 = Don't play back Data as audio */
  126 
  127 #define MCD_MD_RAW              (MCD_MDBIT_DATALENGTH|MCD_MDBIT_ECCMODE|MCD_MDBIT_MUTEDATA)
  128 #define MCD_MD_COOKED           (MCD_MDBIT_MUTEDATA)
  129 #define MCD_MD_TOC              (MCD_MDBIT_GET_TOC|MCD_MDBIT_MUTEDATA)
  130 
  131 #define MCD_CMDSTOPAUDIO        0x70
  132 #define MCD_CMDSTOPAUDIOTIME    0x80
  133 #define MCD_CMDGETVOLUME        0x8E    /* gets mcd_volume */
  134 #define MCD_CMDSETDRIVEMODE     0xA0    /* Set drive mode */
  135 #define MCD_READUPC             0xA2    /* Get UPC info */
  136 #define MCD_CMDSETVOLUME        0xAE    /* sets mcd_volume */
  137 #define MCD_CMDREAD1            0xB0    /* read n sectors */
  138 #define MCD_CMDSINGLESPEEDREAD  0xC0    /* read from-to */
  139 #define MCD_CMDSTARTAUDIOMSF    0xC1    /* read audio data */
  140 #define MCD_CMDDOUBLESPEEDREAD  0xC1    /* Read lots of data from the drive */
  141 #define MCD_CMDGETDRIVEMODE     0xC2    /* Get the drive mode */
  142 #define MCD_CMDREAD             0xC3    /* Read data from the drive */
  143 #define MCD_CMDSETINTERLEAVE    0xC8    /* Adjust the interleave */
  144 #define MCD_CMDCONTINFO         0xDC    /* Get controller info */
  145 #define MCD_CMDSTOP             0xF0    /* Stop everything */
  146 #define MCD_CMDEJECTDISK        0xF6
  147 #define MCD_CMDCLOSETRAY        0xF8
  148 
  149 #define MCD_CMDLOCKDRV          0xFE    /* needs byte */
  150 #define MCD_LK_UNLOCK   0x00
  151 #define MCD_LK_LOCK     0x01
  152 #define MCD_LK_TEST     0x02
  153 
  154 /* DMA Enable Stuff */
  155 #define MCD_DMA_IRQFLAGS        0x10    /* Set data0 for IRQ click */
  156 
  157 #define MCD_DMA_PREIRQ          0x01    /* All of these are for */
  158 #define MCD_DMA_POSTIRQ         0x02    /* MCD_DMA_IRQFLAG...   */
  159 #define MCD_DMA_ERRIRQ          0x04    /*                      */
  160 
  161 #define MCD_DMA_TIMEOUT         0x08    /* Set data0 for DMA timeout */
  162 #define MCD_DMA_UPCFLAG         0x04    /* 1 = Next command will be READUPC */
  163 
  164 #define MCD_DMA_DMAMODE         0x02    /* 1 = Data uses DMA */
  165 #define MCD_DMA_TRANSFERLENGTH  0x01    /* data0 = MSB, data1 = LSB of block length */
  166 
  167 struct mcd_dma_mode {
  168         u_char  dma_mode;
  169         u_char  data0;          /* If dma_mode & 0x10: Use IRQ settings */
  170         u_char  data1;          /* Used if dma_mode & 0x01 */
  171 };
  172 
  173 struct mcd_volinfo {
  174         bcd_t   trk_low;
  175         bcd_t   trk_high;
  176         bcd_t   vol_msf[3];
  177         bcd_t   trk1_msf[3];
  178 };
  179 
  180 struct mcd_qchninfo {
  181         u_char  addr_type:4;
  182         u_char  control:4;
  183         u_char  trk_no;
  184         u_char  idx_no;
  185         bcd_t   trk_size_msf[3];
  186         u_char  :8;
  187         bcd_t   hd_pos_msf[3];
  188 };
  189 
  190 struct mcd_volume {
  191         u_char  v0l;
  192         u_char  v0rs;
  193         u_char  v0r;
  194         u_char  v0ls;
  195 };
  196 
  197 struct mcd_holdtime {
  198         u_char  units_of_ten_seconds;
  199                         /* If this is 0, the default (12) is used */
  200 };
  201 
  202 struct mcd_read1 {
  203         bcd_t   start_msf[3];
  204         u_char  nsec[3];
  205 };
  206 
  207 struct mcd_read2 {
  208         bcd_t   start_msf[3];
  209         bcd_t   end_msf[3];
  210 };
  211 
  212 struct mcd_rawsector {
  213         u_char sync1[12];
  214         u_char header[4];
  215         u_char subheader1[4];
  216         u_char subheader2[4];
  217         u_char data[MCDBLK];
  218         u_char ecc_bits[280];
  219 };
  220 
  221 #ifdef __GNUC__
  222 #if __GNUC__ >= 2
  223 #pragma pack(4)
  224 #endif
  225 #endif
  226 #endif /* MCD_H */

Cache object: 9f5a8ceee3926277719f51021ace920e


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