root/sound/isa/msnd/msnd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*********************************************************************
   3  *
   4  * msnd.h
   5  *
   6  * Turtle Beach MultiSound Sound Card Driver for Linux
   7  *
   8  * Some parts of this header file were derived from the Turtle Beach
   9  * MultiSound Driver Development Kit.
  10  *
  11  * Copyright (C) 1998 Andrew Veliath
  12  * Copyright (C) 1993 Turtle Beach Systems, Inc.
  13  *
  14  ********************************************************************/
  15 #ifndef __MSND_H
  16 #define __MSND_H
  17 
  18 #define DEFSAMPLERATE           44100
  19 #define DEFSAMPLESIZE           SNDRV_PCM_FORMAT_S16
  20 #define DEFCHANNELS             1
  21 
  22 #define SRAM_BANK_SIZE          0x8000
  23 #define SRAM_CNTL_START         0x7F00
  24 #define SMA_STRUCT_START        0x7F40
  25 
  26 #define DSP_BASE_ADDR           0x4000
  27 #define DSP_BANK_BASE           0x4000
  28 
  29 #define AGND                    0x01
  30 #define SIGNAL                  0x02
  31 
  32 #define EXT_DSP_BIT_DCAL        0x0001
  33 #define EXT_DSP_BIT_MIDI_CON    0x0002
  34 
  35 #define BUFFSIZE                0x8000
  36 #define HOSTQ_SIZE              0x40
  37 
  38 #define DAP_BUFF_SIZE           0x2400
  39 
  40 #define DAPQ_STRUCT_SIZE        0x10
  41 #define DARQ_STRUCT_SIZE        0x10
  42 #define DAPQ_BUFF_SIZE          (3 * 0x10)
  43 #define DARQ_BUFF_SIZE          (3 * 0x10)
  44 #define MODQ_BUFF_SIZE          0x400
  45 
  46 #define DAPQ_DATA_BUFF          0x6C00
  47 #define DARQ_DATA_BUFF          0x6C30
  48 #define MODQ_DATA_BUFF          0x6C60
  49 #define MIDQ_DATA_BUFF          0x7060
  50 
  51 #define DAPQ_OFFSET             SRAM_CNTL_START
  52 #define DARQ_OFFSET             (SRAM_CNTL_START + 0x08)
  53 #define MODQ_OFFSET             (SRAM_CNTL_START + 0x10)
  54 #define MIDQ_OFFSET             (SRAM_CNTL_START + 0x18)
  55 #define DSPQ_OFFSET             (SRAM_CNTL_START + 0x20)
  56 
  57 #define HP_ICR                  0x00
  58 #define HP_CVR                  0x01
  59 #define HP_ISR                  0x02
  60 #define HP_IVR                  0x03
  61 #define HP_NU                   0x04
  62 #define HP_INFO                 0x04
  63 #define HP_TXH                  0x05
  64 #define HP_RXH                  0x05
  65 #define HP_TXM                  0x06
  66 #define HP_RXM                  0x06
  67 #define HP_TXL                  0x07
  68 #define HP_RXL                  0x07
  69 
  70 #define HP_ICR_DEF              0x00
  71 #define HP_CVR_DEF              0x12
  72 #define HP_ISR_DEF              0x06
  73 #define HP_IVR_DEF              0x0f
  74 #define HP_NU_DEF               0x00
  75 
  76 #define HP_IRQM                 0x09
  77 
  78 #define HPR_BLRC                0x08
  79 #define HPR_SPR1                0x09
  80 #define HPR_SPR2                0x0A
  81 #define HPR_TCL0                0x0B
  82 #define HPR_TCL1                0x0C
  83 #define HPR_TCL2                0x0D
  84 #define HPR_TCL3                0x0E
  85 #define HPR_TCL4                0x0F
  86 
  87 #define HPICR_INIT              0x80
  88 #define HPICR_HM1               0x40
  89 #define HPICR_HM0               0x20
  90 #define HPICR_HF1               0x10
  91 #define HPICR_HF0               0x08
  92 #define HPICR_TREQ              0x02
  93 #define HPICR_RREQ              0x01
  94 
  95 #define HPCVR_HC                0x80
  96 
  97 #define HPISR_HREQ              0x80
  98 #define HPISR_DMA               0x40
  99 #define HPISR_HF3               0x10
 100 #define HPISR_HF2               0x08
 101 #define HPISR_TRDY              0x04
 102 #define HPISR_TXDE              0x02
 103 #define HPISR_RXDF              0x01
 104 
 105 #define HPIO_290                0
 106 #define HPIO_260                1
 107 #define HPIO_250                2
 108 #define HPIO_240                3
 109 #define HPIO_230                4
 110 #define HPIO_220                5
 111 #define HPIO_210                6
 112 #define HPIO_3E0                7
 113 
 114 #define HPMEM_NONE              0
 115 #define HPMEM_B000              1
 116 #define HPMEM_C800              2
 117 #define HPMEM_D000              3
 118 #define HPMEM_D400              4
 119 #define HPMEM_D800              5
 120 #define HPMEM_E000              6
 121 #define HPMEM_E800              7
 122 
 123 #define HPIRQ_NONE              0
 124 #define HPIRQ_5                 1
 125 #define HPIRQ_7                 2
 126 #define HPIRQ_9                 3
 127 #define HPIRQ_10                4
 128 #define HPIRQ_11                5
 129 #define HPIRQ_12                6
 130 #define HPIRQ_15                7
 131 
 132 #define HIMT_PLAY_DONE          0x00
 133 #define HIMT_RECORD_DONE        0x01
 134 #define HIMT_MIDI_EOS           0x02
 135 #define HIMT_MIDI_OUT           0x03
 136 
 137 #define HIMT_MIDI_IN_UCHAR      0x0E
 138 #define HIMT_DSP                0x0F
 139 
 140 #define HDEX_BASE               0x92
 141 #define HDEX_PLAY_START         (0 + HDEX_BASE)
 142 #define HDEX_PLAY_STOP          (1 + HDEX_BASE)
 143 #define HDEX_PLAY_PAUSE         (2 + HDEX_BASE)
 144 #define HDEX_PLAY_RESUME        (3 + HDEX_BASE)
 145 #define HDEX_RECORD_START       (4 + HDEX_BASE)
 146 #define HDEX_RECORD_STOP        (5 + HDEX_BASE)
 147 #define HDEX_MIDI_IN_START      (6 + HDEX_BASE)
 148 #define HDEX_MIDI_IN_STOP       (7 + HDEX_BASE)
 149 #define HDEX_MIDI_OUT_START     (8 + HDEX_BASE)
 150 #define HDEX_MIDI_OUT_STOP      (9 + HDEX_BASE)
 151 #define HDEX_AUX_REQ            (10 + HDEX_BASE)
 152 
 153 #define HDEXAR_CLEAR_PEAKS      1
 154 #define HDEXAR_IN_SET_POTS      2
 155 #define HDEXAR_AUX_SET_POTS     3
 156 #define HDEXAR_CAL_A_TO_D       4
 157 #define HDEXAR_RD_EXT_DSP_BITS  5
 158 
 159 /* Pinnacle only HDEXAR defs */
 160 #define HDEXAR_SET_ANA_IN       0
 161 #define HDEXAR_SET_SYNTH_IN     4
 162 #define HDEXAR_READ_DAT_IN      5
 163 #define HDEXAR_MIC_SET_POTS     6
 164 #define HDEXAR_SET_DAT_IN       7
 165 
 166 #define HDEXAR_SET_SYNTH_48     8
 167 #define HDEXAR_SET_SYNTH_44     9
 168 
 169 #define HIWORD(l)               ((u16)((((u32)(l)) >> 16) & 0xFFFF))
 170 #define LOWORD(l)               ((u16)(u32)(l))
 171 #define HIBYTE(w)               ((u8)(((u16)(w) >> 8) & 0xFF))
 172 #define LOBYTE(w)               ((u8)(w))
 173 #define MAKELONG(low, hi)       ((long)(((u16)(low))|(((u32)((u16)(hi)))<<16)))
 174 #define MAKEWORD(low, hi)       ((u16)(((u8)(low))|(((u16)((u8)(hi)))<<8)))
 175 
 176 #define PCTODSP_OFFSET(w)       (u16)((w)/2)
 177 #define PCTODSP_BASED(w)        (u16)(((w)/2) + DSP_BASE_ADDR)
 178 #define DSPTOPC_BASED(w)        (((w) - DSP_BASE_ADDR) * 2)
 179 
 180 #ifdef SLOWIO
 181 #  undef outb
 182 #  undef inb
 183 #  define outb                  outb_p
 184 #  define inb                   inb_p
 185 #endif
 186 
 187 /* JobQueueStruct */
 188 #define JQS_wStart              0x00
 189 #define JQS_wSize               0x02
 190 #define JQS_wHead               0x04
 191 #define JQS_wTail               0x06
 192 #define JQS__size               0x08
 193 
 194 /* DAQueueDataStruct */
 195 #define DAQDS_wStart            0x00
 196 #define DAQDS_wSize             0x02
 197 #define DAQDS_wFormat           0x04
 198 #define DAQDS_wSampleSize       0x06
 199 #define DAQDS_wChannels         0x08
 200 #define DAQDS_wSampleRate       0x0A
 201 #define DAQDS_wIntMsg           0x0C
 202 #define DAQDS_wFlags            0x0E
 203 #define DAQDS__size             0x10
 204 
 205 #include <sound/pcm.h>
 206 
 207 struct snd_msnd {
 208         void __iomem            *mappedbase;
 209         int                     play_period_bytes;
 210         int                     playLimit;
 211         int                     playPeriods;
 212         int                     playDMAPos;
 213         int                     banksPlayed;
 214         int                     captureDMAPos;
 215         int                     capturePeriodBytes;
 216         int                     captureLimit;
 217         int                     capturePeriods;
 218         struct snd_card         *card;
 219         void                    *msndmidi_mpu;
 220         struct snd_rawmidi      *rmidi;
 221 
 222         /* Hardware resources */
 223         long io;
 224         int memid, irqid;
 225         int irq, irq_ref;
 226         unsigned long base;
 227 
 228         /* Motorola 56k DSP SMA */
 229         void __iomem    *SMA;
 230         void __iomem    *DAPQ;
 231         void __iomem    *DARQ;
 232         void __iomem    *MODQ;
 233         void __iomem    *MIDQ;
 234         void __iomem    *DSPQ;
 235         int dspq_data_buff, dspq_buff_size;
 236 
 237         /* State variables */
 238         enum { msndClassic, msndPinnacle } type;
 239         fmode_t mode;
 240         unsigned long flags;
 241 #define F_RESETTING                     0
 242 #define F_HAVEDIGITAL                   1
 243 #define F_AUDIO_WRITE_INUSE             2
 244 #define F_WRITING                       3
 245 #define F_WRITEBLOCK                    4
 246 #define F_WRITEFLUSH                    5
 247 #define F_AUDIO_READ_INUSE              6
 248 #define F_READING                       7
 249 #define F_READBLOCK                     8
 250 #define F_EXT_MIDI_INUSE                9
 251 #define F_HDR_MIDI_INUSE                10
 252 #define F_DISABLE_WRITE_NDELAY          11
 253         spinlock_t lock;
 254         spinlock_t mixer_lock;
 255         int nresets;
 256         unsigned recsrc;
 257 #define LEVEL_ENTRIES 32
 258         int left_levels[LEVEL_ENTRIES];
 259         int right_levels[LEVEL_ENTRIES];
 260         int calibrate_signal;
 261         int play_sample_size, play_sample_rate, play_channels;
 262         int play_ndelay;
 263         int capture_sample_size, capture_sample_rate, capture_channels;
 264         int capture_ndelay;
 265         u8 bCurrentMidiPatch;
 266 
 267         int last_playbank, last_recbank;
 268         struct snd_pcm_substream *playback_substream;
 269         struct snd_pcm_substream *capture_substream;
 270 
 271 };
 272 
 273 void snd_msnd_init_queue(void __iomem *base, int start, int size);
 274 
 275 int snd_msnd_send_dsp_cmd(struct snd_msnd *chip, u8 cmd);
 276 int snd_msnd_send_word(struct snd_msnd *chip,
 277                            unsigned char high,
 278                            unsigned char mid,
 279                            unsigned char low);
 280 int snd_msnd_upload_host(struct snd_msnd *chip,
 281                              const u8 *bin, int len);
 282 int snd_msnd_enable_irq(struct snd_msnd *chip);
 283 int snd_msnd_disable_irq(struct snd_msnd *chip);
 284 void snd_msnd_dsp_halt(struct snd_msnd *chip, struct file *file);
 285 int snd_msnd_DAPQ(struct snd_msnd *chip, int start);
 286 int snd_msnd_DARQ(struct snd_msnd *chip, int start);
 287 int snd_msnd_pcm(struct snd_card *card, int device);
 288 
 289 int snd_msndmidi_new(struct snd_card *card, int device);
 290 void snd_msndmidi_input_read(void *mpu);
 291 
 292 void snd_msndmix_setup(struct snd_msnd *chip);
 293 int snd_msndmix_new(struct snd_card *card);
 294 int snd_msndmix_force_recsrc(struct snd_msnd *chip, int recsrc);
 295 #endif /* __MSND_H */

/* [<][>][^][v][top][bottom][index][help] */