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/drivers/sb16/sb16.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 #ifndef SB16_H
    2 #define SB16_H
    3 
    4 #include "../drivers.h"
    5 #include <sys/ioc_sound.h>
    6 #include <minix/sound.h>
    7 
    8 
    9 #define SB_TIMEOUT              32000   /* timeout count */
   10 
   11 /* IRQ, base address and DMA channels */
   12 #define SB_IRQ          7
   13 #define SB_BASE_ADDR    0x220           /* 0x210, 0x220, 0x230, 0x240,
   14                                          * 0x250, 0x260, 0x280        
   15                                          */
   16 #define SB_DMA_8        1               /* 0, 1, 3 */
   17 #define SB_DMA_16       5               /* 5, 6, 7 */
   18 #if _WORD_SIZE == 2
   19 #define DMA_SIZE        8192            /* Dma buffer MUST BE MULTIPLE OF 2 */
   20 #else
   21 #define DMA_SIZE        (64 * 1024)             /* Dma buffer MUST BE MULTIPLE OF 2 */
   22 #endif
   23 
   24 /* Some defaults for the DSP */
   25 #define DEFAULT_SPEED           22050      /* Sample rate */
   26 #define DEFAULT_BITS            8          /* Nr. of bits */
   27 #define DEFAULT_SIGN            0          /* 0 = unsigned, 1 = signed */
   28 #define DEFAULT_STEREO          0          /* 0 = mono, 1 = stereo */
   29 
   30 /* DMA port addresses */
   31 #define DMA8_ADDR       ((SB_DMA_8 & 3) << 1) + 0x00
   32 #define DMA8_COUNT      ((SB_DMA_8 & 3) << 1) + 0x01 
   33 #define DMA8_MASK       0x0A
   34 #define DMA8_MODE       0x0B
   35 #define DMA8_CLEAR      0x0C
   36 
   37 
   38 /* If after this preprocessing stuff DMA8_PAGE is not defined
   39  * the 8-bit DMA channel specified is not valid
   40  */
   41 #if SB_DMA_8 == 0
   42 #  define DMA8_PAGE     0x87    
   43 #else 
   44 #  if SB_DMA_8 == 1
   45 #    define DMA8_PAGE   0x83    
   46 #  else 
   47 #    if SB_DMA_8 == 3
   48 #      define DMA8_PAGE 0x82
   49 #    endif
   50 #  endif
   51 #endif
   52 
   53         
   54 #define DMA16_ADDR      ((SB_DMA_16 & 3) << 2) + 0xC0
   55 #define DMA16_COUNT     ((SB_DMA_16 & 3) << 2) + 0xC2 
   56 #define DMA16_MASK      0xD4
   57 #define DMA16_MODE      0xD6
   58 #define DMA16_CLEAR     0xD8
   59 
   60 
   61 /* If after this preprocessing stuff DMA16_PAGE is not defined
   62  * the 16-bit DMA channel specified is not valid
   63  */
   64 #if SB_DMA_16 == 5
   65 #  define DMA16_PAGE      0x8B  
   66 #else 
   67 #  if SB_DMA_16 == 6
   68 #    define DMA16_PAGE    0x89  
   69 #  else 
   70 #    if SB_DMA_16 == 7
   71 #      define DMA16_PAGE  0x8A
   72 #    endif
   73 #  endif
   74 #endif
   75 
   76 
   77 /* DMA modes */
   78 #define DMA16_AUTO_PLAY         0x58 + (SB_DMA_16 & 3)
   79 #define DMA16_AUTO_REC          0x54 + (SB_DMA_16 & 3)
   80 #define DMA8_AUTO_PLAY          0x58 + SB_DMA_8
   81 #define DMA8_AUTO_REC           0x54 + SB_DMA_8
   82 
   83 
   84 /* IO ports for soundblaster */
   85 #define DSP_RESET       0x6 + SB_BASE_ADDR
   86 #define DSP_READ        0xA + SB_BASE_ADDR
   87 #define DSP_WRITE       0xC + SB_BASE_ADDR
   88 #define DSP_COMMAND     0xC + SB_BASE_ADDR
   89 #define DSP_STATUS      0xC + SB_BASE_ADDR
   90 #define DSP_DATA_AVL    0xE + SB_BASE_ADDR
   91 #define DSP_DATA16_AVL  0xF + SB_BASE_ADDR
   92 #define MIXER_REG       0x4 + SB_BASE_ADDR
   93 #define MIXER_DATA      0x5 + SB_BASE_ADDR
   94 #define OPL3_LEFT       0x0 + SB_BASE_ADDR
   95 #define OPL3_RIGHT      0x2 + SB_BASE_ADDR
   96 #define OPL3_BOTH       0x8 + SB_BASE_ADDR
   97 
   98 
   99 /* DSP Commands */
  100 #define DSP_INPUT_RATE          0x42  /* set input sample rate */
  101 #define DSP_OUTPUT_RATE         0x41  /* set output sample rate */
  102 #define DSP_CMD_SPKON           0xD1  /* set speaker on */
  103 #define DSP_CMD_SPKOFF          0xD3  /* set speaker off */
  104 #define DSP_CMD_DMA8HALT        0xD0  /* halt DMA 8-bit operation */  
  105 #define DSP_CMD_DMA8CONT        0xD4  /* continue DMA 8-bit operation */
  106 #define DSP_CMD_DMA16HALT       0xD5  /* halt DMA 16-bit operation */
  107 #define DSP_CMD_DMA16CONT       0xD6  /* continue DMA 16-bit operation */
  108 #define DSP_GET_VERSION         0xE1  /* get version number of DSP */
  109 #define DSP_CMD_8BITAUTO_IN     0xCE  /* 8 bit auto-initialized input */
  110 #define DSP_CMD_8BITAUTO_OUT    0xC6  /* 8 bit auto-initialized output */
  111 #define DSP_CMD_16BITAUTO_IN    0xBE  /* 16 bit auto-initialized input */
  112 #define DSP_CMD_16BITAUTO_OUT   0xB6  /* 16 bit auto-initialized output */
  113 #define DSP_CMD_IRQREQ8         0xF2  /* Interrupt request 8 bit        */
  114 #define DSP_CMD_IRQREQ16        0xF3  /* Interrupt request 16 bit        */
  115 
  116 
  117 /* DSP Modes */
  118 #define DSP_MODE_MONO_US        0x00  /* Mono unsigned */
  119 #define DSP_MODE_MONO_S         0x10  /* Mono signed */
  120 #define DSP_MODE_STEREO_US      0x20  /* Stereo unsigned */
  121 #define DSP_MODE_STEREO_S       0x30  /* Stereo signed */
  122 
  123 
  124 /* MIXER commands */
  125 #define MIXER_RESET             0x00  /* Reset */
  126 #define MIXER_DAC_LEVEL         0x04  /* Used for detection only */
  127 #define MIXER_MASTER_LEFT       0x30  /* Master volume left */
  128 #define MIXER_MASTER_RIGHT      0x31  /* Master volume right */
  129 #define MIXER_DAC_LEFT          0x32  /* Dac level left */
  130 #define MIXER_DAC_RIGHT         0x33  /* Dac level right */
  131 #define MIXER_FM_LEFT           0x34  /* Fm level left */
  132 #define MIXER_FM_RIGHT          0x35  /* Fm level right */
  133 #define MIXER_CD_LEFT           0x36  /* Cd audio level left */
  134 #define MIXER_CD_RIGHT          0x37  /* Cd audio level right */
  135 #define MIXER_LINE_LEFT         0x38  /* Line in level left */
  136 #define MIXER_LINE_RIGHT        0x39  /* Line in level right */
  137 #define MIXER_MIC_LEVEL         0x3A  /* Microphone level */
  138 #define MIXER_PC_LEVEL          0x3B  /* Pc speaker level */
  139 #define MIXER_OUTPUT_CTRL       0x3C  /* Output control */
  140 #define MIXER_IN_LEFT           0x3D  /* Input control left */
  141 #define MIXER_IN_RIGHT          0x3E  /* Input control right */
  142 #define MIXER_GAIN_IN_LEFT      0x3F  /* Input gain control left */
  143 #define MIXER_GAIN_IN_RIGHT     0x40  /* Input gain control right */
  144 #define MIXER_GAIN_OUT_LEFT     0x41  /* Output gain control left */
  145 #define MIXER_GAIN_OUT_RIGHT    0x42  /* Output gain control rigth */
  146 #define MIXER_AGC               0x43  /* Automatic gain control */
  147 #define MIXER_TREBLE_LEFT       0x44  /* Treble left */
  148 #define MIXER_TREBLE_RIGHT      0x45  /* Treble right */
  149 #define MIXER_BASS_LEFT         0x46  /* Bass left */
  150 #define MIXER_BASS_RIGHT        0x47  /* Bass right */
  151 #define MIXER_SET_IRQ           0x80  /* Set irq number */
  152 #define MIXER_SET_DMA           0x81  /* Set DMA channels */
  153 #define MIXER_IRQ_STATUS        0x82  /* Irq status */
  154 
  155 /* Mixer constants */
  156 #define MIC                             0x01  /* Microphone */
  157 #define CD_RIGHT                0x02   
  158 #define CD_LEFT                 0x04
  159 #define LINE_RIGHT              0x08
  160 #define LINE_LEFT               0x10
  161 #define FM_RIGHT                0x20
  162 #define FM_LEFT                 0x40
  163 
  164 /* DSP constants */
  165 #define DMA_NR_OF_BUFFERS               2
  166 #define DSP_MAX_SPEED                   44100      /* Max sample speed in KHz */
  167 #define DSP_MIN_SPEED                   4000       /* Min sample speed in KHz */
  168 #define DSP_MAX_FRAGMENT_SIZE   DMA_SIZE /  DMA_NR_OF_BUFFERS /* Maximum fragment size */
  169 #define DSP_MIN_FRAGMENT_SIZE   1024       /* Minimum fragment size */
  170 #define DSP_NR_OF_BUFFERS               8
  171 
  172 
  173 /* Number of bytes you can DMA before hitting a 64K boundary: */
  174 #define dma_bytes_left(phys)    \
  175    ((unsigned) (sizeof(int) == 2 ? 0 : 0x10000) - (unsigned) ((phys) & 0xFFFF))
  176 
  177 
  178 _PROTOTYPE(int mixer_set, (int reg, int data));
  179 _PROTOTYPE( int sb16_inb, (int port) );
  180 _PROTOTYPE( void sb16_outb, (int port, int value) );
  181 
  182 
  183 #endif /* SB16_H */

Cache object: 60e89b6d6d933dca17908a89e7fa572d


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