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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * dev_table.h
  3.  *
  4.  * Global definitions for device call tables
  5.  *
  6.  *
  7.  * Copyright (C) by Hannu Savolainen 1993-1997
  8.  *
  9.  * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
  10.  * Version 2 (June 1991). See the "COPYING" file distributed with this software
  11.  * for more info.
  12.  */
  13. #ifndef _DEV_TABLE_H_
  14. #define _DEV_TABLE_H_
  15. /*
  16.  * Sound card numbers 27 to 999. (1 to 26 are defined in soundcard.h)
  17.  * Numbers 1000 to N are reserved for driver's internal use.
  18.  */
  19. #define SNDCARD_DESKPROXL 27 /* Compaq Deskpro XL */
  20. #define SNDCARD_VIDC 28 /* ARMs VIDC */
  21. #define SNDCARD_SBPNP 29
  22. #define SNDCARD_SOFTOSS 36
  23. #define SNDCARD_VMIDI 37
  24. #define SNDCARD_OPL3SA1 38 /* Note: clash in msnd.h */
  25. #define SNDCARD_OPL3SA1_SB 39
  26. #define SNDCARD_OPL3SA1_MPU 40
  27. #define SNDCARD_WAVEFRONT               41
  28. #define SNDCARD_OPL3SA2                 42
  29. #define SNDCARD_OPL3SA2_MPU             43
  30. #define SNDCARD_WAVEARTIST              44 /* Waveartist */
  31. #define SNDCARD_OPL3SA2_MSS             45 /* Originally missed */
  32. #define SNDCARD_AD1816                  88
  33. /*
  34.  * NOTE!  NOTE! NOTE! NOTE!
  35.  *
  36.  * If you modify this file, please check the dev_table.c also.
  37.  *
  38.  * NOTE!  NOTE! NOTE! NOTE!
  39.  */
  40. struct driver_info 
  41. {
  42. char *driver_id;
  43. int card_subtype; /* Driver specific. Usually 0 */
  44. int card_type; /* From soundcard.h */
  45. char *name;
  46. void (*attach) (struct address_info *hw_config);
  47. int (*probe) (struct address_info *hw_config);
  48. void (*unload) (struct address_info *hw_config);
  49. };
  50. struct card_info 
  51. {
  52. int card_type; /* Link (search key) to the driver list */
  53. struct address_info config;
  54. int enabled;
  55. void *for_driver_use;
  56. };
  57. /*
  58.  * Device specific parameters (used only by dmabuf.c)
  59.  */
  60. #define MAX_SUB_BUFFERS (32*MAX_REALTIME_FACTOR)
  61. #define DMODE_NONE 0
  62. #define DMODE_OUTPUT PCM_ENABLE_OUTPUT
  63. #define DMODE_INPUT PCM_ENABLE_INPUT
  64. struct dma_buffparms 
  65. {
  66. int      dma_mode; /* DMODE_INPUT, DMODE_OUTPUT or DMODE_NONE */
  67. int  closing;
  68. /*
  69.    * Pointers to raw buffers
  70.    */
  71.    char     *raw_buf;
  72.      unsigned long   raw_buf_phys;
  73. int buffsize;
  74.       /*
  75.          * Device state tables
  76.          */
  77. unsigned long flags;
  78. #define DMA_BUSY 0x00000001
  79. #define DMA_RESTART 0x00000002
  80. #define DMA_ACTIVE 0x00000004
  81. #define DMA_STARTED 0x00000008
  82. #define DMA_EMPTY 0x00000010
  83. #define DMA_ALLOC_DONE 0x00000020
  84. #define DMA_SYNCING 0x00000040
  85. #define DMA_DIRTY 0x00000080
  86. #define DMA_POST 0x00000100
  87. #define DMA_NODMA 0x00000200
  88. #define DMA_NOTIMEOUT 0x00000400
  89. int      open_mode;
  90. /*
  91.  * Queue parameters.
  92.  */
  93.         int      qlen;
  94.         int      qhead;
  95.         int      qtail;
  96. int  cfrag; /* Current incomplete fragment (write) */
  97. int      nbufs;
  98. int      counts[MAX_SUB_BUFFERS];
  99. int      subdivision;
  100. int      fragment_size;
  101.         int  needs_reorg;
  102. int  max_fragments;
  103. int  bytes_in_use;
  104. int  underrun_count;
  105. unsigned long  byte_counter;
  106. unsigned long  user_counter;
  107. unsigned long  max_byte_counter;
  108. int  data_rate; /* Bytes/second */
  109. int  mapping_flags;
  110. #define DMA_MAP_MAPPED 0x00000001
  111. char neutral_byte;
  112. int dma; /* DMA channel */
  113. int     applic_profile; /* Application profile (APF_*) */
  114. /* Interrupt callback stuff */
  115. void (*audio_callback) (int dev, int parm);
  116. int callback_parm;
  117. int  buf_flags[MAX_SUB_BUFFERS];
  118. #define  BUFF_EOF 0x00000001 /* Increment eof count */
  119. #define  BUFF_DIRTY 0x00000002 /* Buffer written */
  120. };
  121. /*
  122.  * Structure for use with various microcontrollers and DSP processors 
  123.  * in the recent sound cards.
  124.  */
  125. typedef struct coproc_operations 
  126. {
  127. char name[64];
  128. struct module *owner;
  129. int (*open) (void *devc, int sub_device);
  130. void (*close) (void *devc, int sub_device);
  131. int (*ioctl) (void *devc, unsigned int cmd, caddr_t arg, int local);
  132. void (*reset) (void *devc);
  133. void *devc; /* Driver specific info */
  134. } coproc_operations;
  135. struct audio_driver 
  136. {
  137. struct module *owner;
  138. int (*open) (int dev, int mode);
  139. void (*close) (int dev);
  140. void (*output_block) (int dev, unsigned long buf, 
  141.       int count, int intrflag);
  142. void (*start_input) (int dev, unsigned long buf, 
  143.      int count, int intrflag);
  144. int (*ioctl) (int dev, unsigned int cmd, caddr_t arg);
  145. int (*prepare_for_input) (int dev, int bufsize, int nbufs);
  146. int (*prepare_for_output) (int dev, int bufsize, int nbufs);
  147. void (*halt_io) (int dev);
  148. int (*local_qlen)(int dev);
  149. void (*copy_user) (int dev,
  150. char *localbuf, int localoffs,
  151.                         const char *userbuf, int useroffs,
  152.                         int max_in, int max_out,
  153.                         int *used, int *returned,
  154.                         int len);
  155. void (*halt_input) (int dev);
  156. void (*halt_output) (int dev);
  157. void (*trigger) (int dev, int bits);
  158. int (*set_speed)(int dev, int speed);
  159. unsigned int (*set_bits)(int dev, unsigned int bits);
  160. short (*set_channels)(int dev, short channels);
  161. void (*postprocess_write)(int dev);  /* Device spesific postprocessing for written data */
  162. void (*preprocess_read)(int dev);  /* Device spesific preprocessing for read data */
  163. void (*mmap)(int dev);
  164. };
  165. struct audio_operations 
  166. {
  167.         char name[128];
  168. int flags;
  169. #define NOTHING_SPECIAL  0x00
  170. #define NEEDS_RESTART 0x01
  171. #define DMA_AUTOMODE 0x02
  172. #define DMA_DUPLEX 0x04
  173. #define DMA_PSEUDO_AUTOMODE 0x08
  174. #define DMA_HARDSTOP 0x10
  175. #define DMA_EXACT 0x40
  176. #define DMA_NORESET 0x80
  177. int  format_mask; /* Bitmask for supported audio formats */
  178. void *devc; /* Driver specific info */
  179. struct audio_driver *d;
  180. void *portc; /* Driver spesific info */
  181. struct dma_buffparms *dmap_in, *dmap_out;
  182. struct coproc_operations *coproc;
  183. int mixer_dev;
  184. int enable_bits;
  185.   int open_mode;
  186. int go;
  187. int min_fragment; /* 0 == unlimited */
  188. int max_fragment; /* 0 == unlimited */
  189. int parent_dev; /* 0 -> no parent, 1 to n -> parent=parent_dev+1 */
  190. /* fields formerly in dmabuf.c */
  191. wait_queue_head_t in_sleeper;
  192. wait_queue_head_t out_sleeper;
  193. wait_queue_head_t poll_sleeper;
  194. /* fields formerly in audio.c */
  195. int audio_mode;
  196. #define AM_NONE 0
  197. #define AM_WRITE OPEN_WRITE
  198. #define  AM_READ OPEN_READ
  199. int local_format;
  200. int audio_format;
  201. int local_conversion;
  202. #define CNV_MU_LAW 0x00000001
  203. /* large structures at the end to keep offsets small */
  204. struct dma_buffparms dmaps[2];
  205. };
  206. int *load_mixer_volumes(char *name, int *levels, int present);
  207. struct mixer_operations 
  208. {
  209. struct module *owner;
  210. char id[16];
  211. char name[64];
  212. int (*ioctl) (int dev, unsigned int cmd, caddr_t arg);
  213. void *devc;
  214. int modify_counter;
  215. };
  216. struct synth_operations 
  217. {
  218. struct module *owner;
  219. char *id; /* Unique identifier (ASCII) max 29 char */
  220. struct synth_info *info;
  221. int midi_dev;
  222. int synth_type;
  223. int synth_subtype;
  224. int (*open) (int dev, int mode);
  225. void (*close) (int dev);
  226. int (*ioctl) (int dev, unsigned int cmd, caddr_t arg);
  227. int (*kill_note) (int dev, int voice, int note, int velocity);
  228. int (*start_note) (int dev, int voice, int note, int velocity);
  229. int (*set_instr) (int dev, int voice, int instr);
  230. void (*reset) (int dev);
  231. void (*hw_control) (int dev, unsigned char *event);
  232. int (*load_patch) (int dev, int format, const char *addr,
  233.      int offs, int count, int pmgr_flag);
  234. void (*aftertouch) (int dev, int voice, int pressure);
  235. void (*controller) (int dev, int voice, int ctrl_num, int value);
  236. void (*panning) (int dev, int voice, int value);
  237. void (*volume_method) (int dev, int mode);
  238. void (*bender) (int dev, int chn, int value);
  239. int (*alloc_voice) (int dev, int chn, int note, struct voice_alloc_info *alloc);
  240. void (*setup_voice) (int dev, int voice, int chn);
  241. int (*send_sysex)(int dev, unsigned char *bytes, int len);
  242.   struct voice_alloc_info alloc;
  243.   struct channel_info chn_info[16];
  244. int emulation;
  245. #define EMU_GM 1 /* General MIDI */
  246. #define EMU_XG 2 /* Yamaha XG */
  247. #define MAX_SYSEX_BUF 64
  248. unsigned char sysex_buf[MAX_SYSEX_BUF];
  249. int sysex_ptr;
  250. };
  251. struct midi_input_info 
  252. {
  253. /* MIDI input scanner variables */
  254. #define MI_MAX 10
  255. int             m_busy;
  256.      unsigned char   m_buf[MI_MAX];
  257. unsigned char m_prev_status; /* For running status */
  258.      int             m_ptr;
  259. #define MST_INIT 0
  260. #define MST_DATA 1
  261. #define MST_SYSEX 2
  262.      int             m_state;
  263.      int             m_left;
  264. };
  265. struct midi_operations 
  266. {
  267. struct module *owner;
  268. struct midi_info info;
  269. struct synth_operations *converter;
  270. struct midi_input_info in_info;
  271. int (*open) (int dev, int mode,
  272. void (*inputintr)(int dev, unsigned char data),
  273. void (*outputintr)(int dev)
  274. );
  275. void (*close) (int dev);
  276. int (*ioctl) (int dev, unsigned int cmd, caddr_t arg);
  277. int (*outputc) (int dev, unsigned char data);
  278. int (*start_read) (int dev);
  279. int (*end_read) (int dev);
  280. void (*kick)(int dev);
  281. int (*command) (int dev, unsigned char *data);
  282. int (*buffer_status) (int dev);
  283. int (*prefix_cmd) (int dev, unsigned char status);
  284. struct coproc_operations *coproc;
  285. void *devc;
  286. };
  287. struct sound_lowlev_timer 
  288. {
  289. int dev;
  290. int priority;
  291. unsigned int (*tmr_start)(int dev, unsigned int usecs);
  292. void (*tmr_disable)(int dev);
  293. void (*tmr_restart)(int dev);
  294. };
  295. struct sound_timer_operations 
  296. {
  297. struct module *owner;
  298. struct sound_timer_info info;
  299. int priority;
  300. int devlink;
  301. int (*open)(int dev, int mode);
  302. void (*close)(int dev);
  303. int (*event)(int dev, unsigned char *ev);
  304. unsigned long (*get_time)(int dev);
  305. int (*ioctl) (int dev, unsigned int cmd, caddr_t arg);
  306. void (*arm_timer)(int dev, long time);
  307. };
  308. #ifdef _DEV_TABLE_C_   
  309. struct audio_operations *audio_devs[MAX_AUDIO_DEV];
  310. int num_audiodevs;
  311. struct mixer_operations *mixer_devs[MAX_MIXER_DEV];
  312. int num_mixers;
  313. struct synth_operations *synth_devs[MAX_SYNTH_DEV+MAX_MIDI_DEV];
  314. int num_synths;
  315. struct midi_operations *midi_devs[MAX_MIDI_DEV];
  316. int num_midis;
  317. extern struct sound_timer_operations default_sound_timer;
  318. struct sound_timer_operations *sound_timer_devs[MAX_TIMER_DEV] = {
  319. &default_sound_timer, NULL
  320. }; 
  321. int num_sound_timers = 1;
  322. #else
  323. extern struct audio_operations *audio_devs[MAX_AUDIO_DEV];
  324. extern int num_audiodevs;
  325. extern struct mixer_operations *mixer_devs[MAX_MIXER_DEV];
  326. extern int num_mixers;
  327. extern struct synth_operations *synth_devs[MAX_SYNTH_DEV+MAX_MIDI_DEV];
  328. extern int num_synths;
  329. extern struct midi_operations *midi_devs[MAX_MIDI_DEV];
  330. extern int num_midis;
  331. extern struct sound_timer_operations * sound_timer_devs[MAX_TIMER_DEV];
  332. extern int num_sound_timers;
  333. #endif /* _DEV_TABLE_C_ */
  334. extern int sound_map_buffer (int dev, struct dma_buffparms *dmap, buffmem_desc *info);
  335. void sound_timer_init (struct sound_lowlev_timer *t, char *name);
  336. void sound_dma_intr (int dev, struct dma_buffparms *dmap, int chan);
  337. #define AUDIO_DRIVER_VERSION 2
  338. #define MIXER_DRIVER_VERSION 2
  339. int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver,
  340. int driver_size, int flags, unsigned int format_mask,
  341. void *devc, int dma1, int dma2);
  342. int sound_install_mixer(int vers, char *name, struct mixer_operations *driver,
  343. int driver_size, void *devc);
  344. void sound_unload_audiodev(int dev);
  345. void sound_unload_mixerdev(int dev);
  346. void sound_unload_mididev(int dev);
  347. void sound_unload_synthdev(int dev);
  348. void sound_unload_timerdev(int dev);
  349. int sound_alloc_audiodev(void);
  350. int sound_alloc_mixerdev(void);
  351. int sound_alloc_timerdev(void);
  352. int sound_alloc_synthdev(void);
  353. int sound_alloc_mididev(void);
  354. #endif /* _DEV_TABLE_H_ */