sb16drv.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* sb16drv.h - global comment */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01c,21sep01,dat  Fix ANSI violations for diab compiler
  7. 01b,03feb00,jk   updated to reflect new sb16drv.c code drop.
  8. 01a,14oct99,jk   extracted from file sb16drv.c.
  9. */
  10. /*
  11. DESCRIPTION
  12. */
  13. #ifndef __INCsb16drvh
  14. #define __INCsb16drvh
  15. #include "drv/sound/sound_dma.h"
  16. #include "drv/sound/sound_ioctl.h"
  17. #ifdef __cplusplus
  18. extern "C"
  19. {
  20. #endif /* __cplusplus */
  21. #define INT_NUM_IRQ0 0x20
  22. #define INT_VEC_GET(irq) (INT_NUM_IRQ0 + irq)
  23. /* I/O ports */
  24. #define SBP( codec, x ) ( (codec) -> port + s_b_SB_##x )
  25. #define SBP1( port, x ) ( (port) + s_b_SB_##x )
  26. #define s_b_SB_RESET 0x6
  27. #define s_b_SB_READ 0xa
  28. #define s_b_SB_WRITE 0xc
  29. #define s_b_SB_COMMAND 0xc
  30. #define s_b_SB_STATUS 0xc
  31. #define s_b_SB_DATA_AVAIL 0xe
  32. #define s_b_SB_DATA_AVAIL_16  0xf
  33. #define s_b_SB_MIXER_ADDR 0x4
  34. #define s_b_SB_MIXER_DATA 0x5
  35. #define s_b_SB_OPL3_LEFT 0x0
  36. #define s_b_SB_OPL3_RIGHT 0x2
  37. #define s_b_SB_OPL3_BOTH 0x8
  38. /* dsp commands
  39.  */
  40. #define SB_DSP_SAMPLE_RATE 0x40
  41. #define SB_DSP_SAMPLE_RATE_OUT 0x41
  42. #define SB_DSP_SAMPLE_RATE_IN 0x42
  43. #define SB_DSP_MONO_8BIT 0xa0
  44. #define SB_DSP_MONO_16BIT 0xa4
  45. #define SB_DSP_STEREO_8BIT 0xa8
  46. #define SB_DSP_STEREO_16BIT 0xac
  47. #define SB_DSP4_OUT16_AI 0xb6
  48. #define SB_DSP4_IN16_AI 0xbe
  49. #define SB_DSP4_OUT8_AI 0xc6
  50. #define SB_DSP4_IN8_AI 0xce
  51. #define SB_DSP_DMA8_OFF 0xd0
  52. #define SB_DSP_SPEAKER_ON 0xd1
  53. #define SB_DSP_SPEAKER_OFF 0xd3
  54. #define SB_DSP_DMA8_ON 0xd4
  55. #define SB_DSP_DMA16_OFF 0xd5
  56. #define SB_DSP_DMA16_ON 0xd6
  57. #define SB_DSP_DMA16_EXIT       0xd9
  58. #define SB_DSP_DMA8_EXIT        0xda
  59. #define SB_DSP_GET_VERSION 0xe1
  60. /* dsp input/output formats
  61.  */
  62. #define SB_DSP4_MODE_UNS_MONO 0x00
  63. #define SB_DSP4_MODE_SIGN_MONO 0x10
  64. #define SB_DSP4_MODE_UNS_STEREO 0x20
  65. #define SB_DSP4_MODE_SIGN_STEREO 0x30
  66. /* OPL3 commands
  67.  */
  68. #define TEST_REGISTER 0x01
  69. #define TIMER_CONTROL_REGISTER 0x04 /* Left side */
  70. #define CONNECTION_SELECT_REGISTER 0x04 /* Right side */
  71. #define OPL3_MODE_REGISTER 0x05 /* Right side */
  72. #define KEYON_BLOCK 0xb0 /* Left side ???*/
  73. #define PERCUSSION_REGISTER 0xbd /* Left side only */
  74. #define TIMER1_REGISTER 0x02
  75. #define TIMER2_REGISTER 0x03
  76. /* TEST_REGISTER options
  77.  */
  78. #define ENABLE_WAVE_SELECT 0x20
  79. /* TIMER_CONTROL_REGISTER options
  80.  */
  81. #define IRQ_RESET 0x80
  82. #define TIMER1_MASK 0x40
  83. #define TIMER2_MASK 0x20
  84. /* OPL3_MODE_REGISTER options
  85.  */
  86. #define OPL3_ENABLE 0x01
  87. /* Mixer commands
  88.  */
  89. #define SB_MIXER_MASTER_DEV 0x30
  90. #define SB_MIXER_PCM_DEV 0x32
  91. #define SB_MIXER_SYNTH_DEV 0x34
  92. #define SB_MIXER_CD_DEV 0x36
  93. #define SB_MIXER_LINE_DEV 0x38
  94. #define SB_MIXER_MIC_DEV 0x3a
  95. #define SB_MIXER_SPEAKER_DEV 0x3b
  96. #define SB_MIXER_OUTPUT_SW 0x3c
  97. #define SB_MIXER_IGAIN_DEV 0x3f
  98. #define SB_MIXER_OGAIN_DEV 0x41
  99. #define SB_MIXER_MIC_AGC 0x43
  100. #define SB_MIXER_TREBLE_DEV 0x44
  101. #define SB_MIXER_BASS_DEV 0x46
  102. #define SB_MIXER_IRQ_NR 0x80
  103. #define SB_MIXER_DMA_NR 0x81
  104. #define SB_MIXER_IRQ_STAT 0x82
  105. #define SB_MIXER_MPU_NR         0x84
  106. #define RATE_MIN  4000
  107. #define RATE_MAX 44100
  108. #define MAX_DMA_MSGS 2
  109. #define MAX_DMA_SIZE 32768
  110. #define TASK_PRIORITY    0
  111. #define TASK_OPTIONS     0
  112. #define TASK_STACK_SIZE  2048
  113. typedef struct
  114. {
  115.   char *name;
  116.   int reg;
  117.   int max_value;
  118.   int shift;
  119.   int unknownfield;
  120. } MIXER_INFO;
  121. typedef struct
  122. {
  123.   char *buffer;
  124.   int length;
  125.   int direction;
  126. } DMA_MSG;
  127. typedef struct snd_fd_struct SND_FD;
  128. typedef struct dsp_fd_struct DSP_FD;
  129. typedef struct mixer_fd_struct MIXER_FD;
  130. typedef struct
  131. {
  132.   DEV_HDR devHdr;
  133.   unsigned short port; /* base port of DSP chip */
  134.   unsigned short mpu_port; /* MPU port for SB DSP 4.0+ */
  135.   unsigned short irq; /* IRQ number of DSP chip */
  136.   unsigned short dma8; /* 8-bit DMA */
  137.   unsigned short dma16; /* 16-bit DMA */
  138.   unsigned short version; /* version of DSP chip */
  139.   SEM_ID devSem;
  140.   SEM_ID intSem;
  141.   SEM_ID bufSem;
  142.   MSG_Q_ID dmaQ;
  143.   DSP_FD *pDsp;
  144.   MIXER_FD *pMixer;
  145.   int dmaIndex;
  146.   int tid;
  147.   int taskBusy;
  148.   int dmaAuto;
  149. } SND_DEV;
  150. struct snd_fd_struct
  151. {
  152.   SND_DEV *pDev;
  153.   FUNCPTR fdClose;
  154.   FUNCPTR fdRead;
  155.   FUNCPTR fdWrite;
  156.   FUNCPTR fdIoctl;
  157. };
  158. struct dsp_fd_struct
  159. {
  160.   SND_FD dev;
  161.   int dmaDirection;
  162.   int dmaChannel;
  163.   snd_info_t info;
  164. };
  165. struct mixer_fd_struct
  166. {
  167.   SND_FD dev;
  168. };
  169. /* function declarations */
  170. #if defined(__STDC__) || defined(__cplusplus)
  171. STATUS sb16Drv (void);
  172. STATUS sb16DevCreate (char *devName, int port, int irq, int dma8, int dma16);
  173. #else
  174. STATUS sb16Drv ();
  175. STATUS sb16DevCreate ();
  176. #endif  /* __STDC__ */
  177. #ifdef __cplusplus
  178. }
  179. #endif /* __cplusplus */
  180. #endif /* __INCsb16drvh */