sb.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #define DSP_RESET (devc->base + 0x6)
  2. #define DSP_READ (devc->base + 0xA)
  3. #define DSP_WRITE (devc->base + 0xC)
  4. #define DSP_COMMAND (devc->base + 0xC)
  5. #define DSP_STATUS (devc->base + 0xC)
  6. #define DSP_DATA_AVAIL (devc->base + 0xE)
  7. #define DSP_DATA_AVL16 (devc->base + 0xF)
  8. #define MIXER_ADDR (devc->base + 0x4)
  9. #define MIXER_DATA (devc->base + 0x5)
  10. #define OPL3_LEFT (devc->base + 0x0)
  11. #define OPL3_RIGHT (devc->base + 0x2)
  12. #define OPL3_BOTH (devc->base + 0x8)
  13. /* DSP Commands */
  14. #define DSP_CMD_SPKON 0xD1
  15. #define DSP_CMD_SPKOFF 0xD3
  16. #define DSP_CMD_DMAON 0xD0
  17. #define DSP_CMD_DMAOFF 0xD4
  18. #define IMODE_NONE 0
  19. #define IMODE_OUTPUT PCM_ENABLE_OUTPUT
  20. #define IMODE_INPUT PCM_ENABLE_INPUT
  21. #define IMODE_INIT 3
  22. #define IMODE_MIDI 4
  23. #define NORMAL_MIDI 0
  24. #define UART_MIDI 1
  25. /*
  26.  * Device models
  27.  */
  28. #define MDL_NONE 0
  29. #define MDL_SB1 1 /* SB1.0 or 1.5 */
  30. #define MDL_SB2 2 /* SB2.0 */
  31. #define MDL_SB201 3 /* SB2.01 */
  32. #define MDL_SBPRO 4 /* SB Pro */
  33. #define MDL_SB16 5 /* SB16/32/AWE */
  34. #define MDL_SBPNP  6 /* SB16/32/AWE PnP */
  35. #define MDL_JAZZ 10 /* Media Vision Jazz16 */
  36. #define MDL_SMW 11 /* Logitech SoundMan Wave (Jazz16) */
  37. #define MDL_ESS 12 /* ESS ES688 and ES1688 */
  38. #define MDL_AZTECH 13 /* Aztech Sound Galaxy family */
  39. #define MDL_ES1868MIDI 14 /* MIDI port of ESS1868 */
  40. #define MDL_AEDSP 15 /* Audio Excel DSP 16 */
  41. #define MDL_ESSPCI 16 /* ESS PCI card */
  42. #define MDL_YMPCI 17 /* Yamaha PCI sb in emulation */
  43. #define SUBMDL_ALS007 42 /* ALS-007 differs from SB16 only in mixer */
  44. /* register assignment */
  45. #define SUBMDL_ALS100 43 /* ALS-100 allows sampling rates of up */
  46. /* to 48kHz */
  47. /*
  48.  * Config flags
  49.  */
  50. #define SB_NO_MIDI 0x00000001
  51. #define SB_NO_MIXER 0x00000002
  52. #define SB_NO_AUDIO 0x00000004
  53. #define SB_NO_RECORDING 0x00000008 /* No audio recording */
  54. #define SB_MIDI_ONLY (SB_NO_AUDIO|SB_NO_MIXER)
  55. #define SB_PCI_IRQ 0x00000010 /* PCI shared IRQ */
  56. struct mixer_def {
  57. unsigned int regno: 8;
  58. unsigned int bitoffs:4;
  59. unsigned int nbits:4;
  60. };
  61. typedef struct mixer_def mixer_tab[32][2];
  62. typedef struct mixer_def mixer_ent;
  63. struct sb_module_options
  64. {
  65. int  esstype; /* ESS chip type */
  66. int  acer; /* Do acer notebook init? */
  67. int  sm_games; /* Logitech soundman games? */
  68. };
  69. typedef struct sb_devc {
  70.    int dev;
  71. /* Hardware parameters */
  72.    int *osp;
  73.    int minor, major;
  74.    int type;
  75.    int model, submodel;
  76.    int caps;
  77. # define SBCAP_STEREO 0x00000001
  78. # define SBCAP_16BITS 0x00000002
  79. /* Hardware resources */
  80.    int base;
  81.    int irq;
  82.    int dma8, dma16;
  83.    
  84.    int pcibase; /* For ESS Maestro etc */
  85. /* State variables */
  86.      int opened;
  87. /* new audio fields for full duplex support */
  88.    int fullduplex;
  89.    int duplex;
  90.    int speed, bits, channels;
  91.    volatile int irq_ok;
  92.    volatile int intr_active, irq_mode;
  93. /* duplicate audio fields for full duplex support */
  94.    volatile int intr_active_16, irq_mode_16;
  95. /* Mixer fields */
  96.    int *levels;
  97.    mixer_tab *iomap;
  98.    int mixer_caps, recmask, outmask, supported_devices;
  99.    int supported_rec_devices, supported_out_devices;
  100.    int my_mixerdev;
  101.    int sbmixnum;
  102. /* Audio fields */
  103.    unsigned long trg_buf;
  104.    int      trigger_bits;
  105.    int      trg_bytes;
  106.    int      trg_intrflag;
  107.    int      trg_restart;
  108. /* duplicate audio fields for full duplex support */
  109.    unsigned long trg_buf_16;
  110.    int      trigger_bits_16;
  111.    int      trg_bytes_16;
  112.    int      trg_intrflag_16;
  113.    int      trg_restart_16;
  114.    unsigned char tconst;
  115. /* MIDI fields */
  116.    int my_mididev;
  117.    int input_opened;
  118.    int midi_broken;
  119.    void (*midi_input_intr) (int dev, unsigned char data);
  120.    void *midi_irq_cookie; /* IRQ cookie for the midi */
  121.    spinlock_t lock;
  122.    struct sb_module_options sbmo; /* Module options */
  123. } sb_devc;
  124. /*
  125.  * PCI card types
  126.  */
  127. #define SB_PCI_ESSMAESTRO 1 /* ESS Maestro Legacy */
  128. #define SB_PCI_YAMAHA 2 /* Yamaha Legacy */
  129. /* 
  130.  * Functions
  131.  */
  132.  
  133. int sb_dsp_command (sb_devc *devc, unsigned char val);
  134. int sb_dsp_get_byte(sb_devc * devc);
  135. int sb_dsp_reset (sb_devc *devc);
  136. void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
  137. unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
  138. int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo);
  139. int sb_dsp_init (struct address_info *hw_config, struct module *owner);
  140. void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
  141. int sb_mixer_init(sb_devc *devc, struct module *owner);
  142. void sb_mixer_unload(sb_devc *devc);
  143. void sb_mixer_set_stereo (sb_devc *devc, int mode);
  144. void smw_mixer_init(sb_devc *devc);
  145. void sb_dsp_midi_init (sb_devc *devc, struct module *owner);
  146. void sb_audio_init (sb_devc *devc, char *name, struct module *owner);
  147. void sb_midi_interrupt (sb_devc *devc);
  148. void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val);
  149. int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right);
  150. int sb_audio_open(int dev, int mode);
  151. void sb_audio_close(int dev);
  152. extern sb_devc *last_sb;
  153. /* From sb_common.c */
  154. void sb_dsp_disable_midi(int port);
  155. void sb_dsp_disable_recording(int port);
  156. int probe_sbmpu (struct address_info *hw_config, struct module *owner);
  157. void unload_sbmpu (struct address_info *hw_config);
  158. void unload_sb16(struct address_info *hw_info);
  159. void unload_sb16midi(struct address_info *hw_info);