soundcard.h 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282
  1. /*
  2. * Copyright by Hannu Savolainen 1993-1997
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are
  6. * met: 1. Redistributions of source code must retain the above copyright
  7. * notice, this list of conditions and the following disclaimer. 2.
  8. * Redistributions in binary form must reproduce the above copyright notice,
  9. * this list of conditions and the following disclaimer in the documentation
  10. * and/or other materials provided with the distribution.
  11. *
  12. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
  13. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  14. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  15. * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  16. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  17. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  18. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  19. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  20. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  21. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  22. * SUCH DAMAGE.
  23. */
  24. #ifndef _UAPISOUNDCARD_H
  25. #define _UAPISOUNDCARD_H
  26. /*
  27. * OSS interface version. With versions earlier than 3.6 this value is
  28. * an integer with value less than 361. In versions 3.6 and later
  29. * it's a six digit hexadecimal value. For example value
  30. * of 0x030600 represents OSS version 3.6.0.
  31. * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of
  32. * the currently active driver.
  33. */
  34. #define SOUND_VERSION 0x030802
  35. #define OPEN_SOUND_SYSTEM
  36. /* In Linux we need to be prepared for cross compiling */
  37. #include <linux/ioctl.h>
  38. /* Endian macros. */
  39. #ifndef __KERNEL__
  40. # include <endian.h>
  41. #endif
  42. /*
  43. * Supported card ID numbers (Should be somewhere else?)
  44. */
  45. #define SNDCARD_ADLIB 1
  46. #define SNDCARD_SB 2
  47. #define SNDCARD_PAS 3
  48. #define SNDCARD_GUS 4
  49. #define SNDCARD_MPU401 5
  50. #define SNDCARD_SB16 6
  51. #define SNDCARD_SB16MIDI 7
  52. #define SNDCARD_UART6850 8
  53. #define SNDCARD_GUS16 9
  54. #define SNDCARD_MSS 10
  55. #define SNDCARD_PSS 11
  56. #define SNDCARD_SSCAPE 12
  57. #define SNDCARD_PSS_MPU 13
  58. #define SNDCARD_PSS_MSS 14
  59. #define SNDCARD_SSCAPE_MSS 15
  60. #define SNDCARD_TRXPRO 16
  61. #define SNDCARD_TRXPRO_SB 17
  62. #define SNDCARD_TRXPRO_MPU 18
  63. #define SNDCARD_MAD16 19
  64. #define SNDCARD_MAD16_MPU 20
  65. #define SNDCARD_CS4232 21
  66. #define SNDCARD_CS4232_MPU 22
  67. #define SNDCARD_MAUI 23
  68. #define SNDCARD_PSEUDO_MSS 24
  69. #define SNDCARD_GUSPNP 25
  70. #define SNDCARD_UART401 26
  71. /* Sound card numbers 27 to N are reserved. Don't add more numbers here. */
  72. /***********************************
  73. * IOCTL Commands for /dev/sequencer
  74. */
  75. #ifndef _SIOWR
  76. #if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
  77. /* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
  78. #define SIOCPARM_MASK IOCPARM_MASK
  79. #define SIOC_VOID IOC_VOID
  80. #define SIOC_OUT IOC_OUT
  81. #define SIOC_IN IOC_IN
  82. #define SIOC_INOUT IOC_INOUT
  83. #define _SIOC_SIZE _IOC_SIZE
  84. #define _SIOC_DIR _IOC_DIR
  85. #define _SIOC_NONE _IOC_NONE
  86. #define _SIOC_READ _IOC_READ
  87. #define _SIOC_WRITE _IOC_WRITE
  88. #define _SIO _IO
  89. #define _SIOR _IOR
  90. #define _SIOW _IOW
  91. #define _SIOWR _IOWR
  92. #else
  93. /* Ioctl's have the command encoded in the lower word,
  94. * and the size of any in or out parameters in the upper
  95. * word. The high 2 bits of the upper word are used
  96. * to encode the in/out status of the parameter; for now
  97. * we restrict parameters to at most 8191 bytes.
  98. */
  99. /* #define SIOCTYPE (0xff<<8) */
  100. #define SIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */
  101. #define SIOC_VOID 0x00000000 /* no parameters */
  102. #define SIOC_OUT 0x20000000 /* copy out parameters */
  103. #define SIOC_IN 0x40000000 /* copy in parameters */
  104. #define SIOC_INOUT (SIOC_IN|SIOC_OUT)
  105. /* the 0x20000000 is so we can distinguish new ioctl's from old */
  106. #define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
  107. #define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
  108. #define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
  109. /* this should be _SIORW, but stdio got there first */
  110. #define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
  111. #define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
  112. #define _SIOC_DIR(x) (x & 0xf0000000)
  113. #define _SIOC_NONE SIOC_VOID
  114. #define _SIOC_READ SIOC_OUT
  115. #define _SIOC_WRITE SIOC_IN
  116. # endif /* _IOWR */
  117. #endif /* !_SIOWR */
  118. #define SNDCTL_SEQ_RESET _SIO ('Q', 0)
  119. #define SNDCTL_SEQ_SYNC _SIO ('Q', 1)
  120. #define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info)
  121. #define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
  122. #define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int)
  123. #define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int)
  124. #define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int)
  125. #define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument) /* Obsolete. Don't use!!!!!! */
  126. #define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int)
  127. #define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int)
  128. #define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int)
  129. #define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int)
  130. #define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info)
  131. #define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int)
  132. #define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int) /* in=dev#, out=memsize */
  133. #define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int) /* in=dev# */
  134. #define SNDCTL_SEQ_PANIC _SIO ('Q',17)
  135. #define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec)
  136. #define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int)
  137. #define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info)
  138. #define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control)
  139. #define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample)
  140. typedef struct synth_control
  141. {
  142. int devno; /* Synthesizer # */
  143. char data[4000]; /* Device spesific command/data record */
  144. }synth_control;
  145. typedef struct remove_sample
  146. {
  147. int devno; /* Synthesizer # */
  148. int bankno; /* MIDI bank # (0=General MIDI) */
  149. int instrno; /* MIDI instrument number */
  150. } remove_sample;
  151. typedef struct seq_event_rec {
  152. unsigned char arr[8];
  153. } seq_event_rec;
  154. #define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int)
  155. #define SNDCTL_TMR_START _SIO ('T', 2)
  156. #define SNDCTL_TMR_STOP _SIO ('T', 3)
  157. #define SNDCTL_TMR_CONTINUE _SIO ('T', 4)
  158. #define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int)
  159. #define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int)
  160. # define TMR_INTERNAL 0x00000001
  161. # define TMR_EXTERNAL 0x00000002
  162. # define TMR_MODE_MIDI 0x00000010
  163. # define TMR_MODE_FSK 0x00000020
  164. # define TMR_MODE_CLS 0x00000040
  165. # define TMR_MODE_SMPTE 0x00000080
  166. #define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int)
  167. #define SNDCTL_TMR_SELECT _SIOW ('T', 8, int)
  168. /*
  169. * Some big endian/little endian handling macros
  170. */
  171. #define _LINUX_PATCHKEY_H_INDIRECT
  172. #include <linux/patchkey.h>
  173. #undef _LINUX_PATCHKEY_H_INDIRECT
  174. #if !defined(__KERNEL__)
  175. # if defined(__BYTE_ORDER)
  176. # if __BYTE_ORDER == __BIG_ENDIAN
  177. # define AFMT_S16_NE AFMT_S16_BE
  178. # elif __BYTE_ORDER == __LITTLE_ENDIAN
  179. # define AFMT_S16_NE AFMT_S16_LE
  180. # else
  181. # error "could not determine byte order"
  182. # endif
  183. # endif
  184. #endif
  185. /*
  186. * Sample loading mechanism for internal synthesizers (/dev/sequencer)
  187. * The following patch_info structure has been designed to support
  188. * Gravis UltraSound. It tries to be universal format for uploading
  189. * sample based patches but is probably too limited.
  190. *
  191. * (PBD) As Hannu guessed, the GUS structure is too limited for
  192. * the WaveFront, but this is the right place for a constant definition.
  193. */
  194. struct patch_info {
  195. unsigned short key; /* Use WAVE_PATCH here */
  196. #define WAVE_PATCH _PATCHKEY(0x04)
  197. #define GUS_PATCH WAVE_PATCH
  198. #define WAVEFRONT_PATCH _PATCHKEY(0x06)
  199. short device_no; /* Synthesizer number */
  200. short instr_no; /* Midi pgm# */
  201. unsigned int mode;
  202. /*
  203. * The least significant byte has the same format than the GUS .PAT
  204. * files
  205. */
  206. #define WAVE_16_BITS 0x01 /* bit 0 = 8 or 16 bit wave data. */
  207. #define WAVE_UNSIGNED 0x02 /* bit 1 = Signed - Unsigned data. */
  208. #define WAVE_LOOPING 0x04 /* bit 2 = looping enabled-1. */
  209. #define WAVE_BIDIR_LOOP 0x08 /* bit 3 = Set is bidirectional looping. */
  210. #define WAVE_LOOP_BACK 0x10 /* bit 4 = Set is looping backward. */
  211. #define WAVE_SUSTAIN_ON 0x20 /* bit 5 = Turn sustaining on. (Env. pts. 3)*/
  212. #define WAVE_ENVELOPES 0x40 /* bit 6 = Enable envelopes - 1 */
  213. #define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */
  214. /* (use the env_rate/env_offs fields). */
  215. /* Linux specific bits */
  216. #define WAVE_VIBRATO 0x00010000 /* The vibrato info is valid */
  217. #define WAVE_TREMOLO 0x00020000 /* The tremolo info is valid */
  218. #define WAVE_SCALE 0x00040000 /* The scaling info is valid */
  219. #define WAVE_FRACTIONS 0x00080000 /* Fraction information is valid */
  220. /* Reserved bits */
  221. #define WAVE_ROM 0x40000000 /* For future use */
  222. #define WAVE_MULAW 0x20000000 /* For future use */
  223. /* Other bits must be zeroed */
  224. int len; /* Size of the wave data in bytes */
  225. int loop_start, loop_end; /* Byte offsets from the beginning */
  226. /*
  227. * The base_freq and base_note fields are used when computing the
  228. * playback speed for a note. The base_note defines the tone frequency
  229. * which is heard if the sample is played using the base_freq as the
  230. * playback speed.
  231. *
  232. * The low_note and high_note fields define the minimum and maximum note
  233. * frequencies for which this sample is valid. It is possible to define
  234. * more than one samples for an instrument number at the same time. The
  235. * low_note and high_note fields are used to select the most suitable one.
  236. *
  237. * The fields base_note, high_note and low_note should contain
  238. * the note frequency multiplied by 1000. For example value for the
  239. * middle A is 440*1000.
  240. */
  241. unsigned int base_freq;
  242. unsigned int base_note;
  243. unsigned int high_note;
  244. unsigned int low_note;
  245. int panning; /* -128=left, 127=right */
  246. int detuning;
  247. /* New fields introduced in version 1.99.5 */
  248. /* Envelope. Enabled by mode bit WAVE_ENVELOPES */
  249. unsigned char env_rate[ 6 ]; /* GUS HW ramping rate */
  250. unsigned char env_offset[ 6 ]; /* 255 == 100% */
  251. /*
  252. * The tremolo, vibrato and scale info are not supported yet.
  253. * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or
  254. * WAVE_SCALE
  255. */
  256. unsigned char tremolo_sweep;
  257. unsigned char tremolo_rate;
  258. unsigned char tremolo_depth;
  259. unsigned char vibrato_sweep;
  260. unsigned char vibrato_rate;
  261. unsigned char vibrato_depth;
  262. int scale_frequency;
  263. unsigned int scale_factor; /* from 0 to 2048 or 0 to 2 */
  264. int volume;
  265. int fractions;
  266. int reserved1;
  267. int spare[2];
  268. char data[1]; /* The waveform data starts here */
  269. };
  270. struct sysex_info {
  271. short key; /* Use SYSEX_PATCH or MAUI_PATCH here */
  272. #define SYSEX_PATCH _PATCHKEY(0x05)
  273. #define MAUI_PATCH _PATCHKEY(0x06)
  274. short device_no; /* Synthesizer number */
  275. int len; /* Size of the sysex data in bytes */
  276. unsigned char data[1]; /* Sysex data starts here */
  277. };
  278. /*
  279. * /dev/sequencer input events.
  280. *
  281. * The data written to the /dev/sequencer is a stream of events. Events
  282. * are records of 4 or 8 bytes. The first byte defines the size.
  283. * Any number of events can be written with a write call. There
  284. * is a set of macros for sending these events. Use these macros if you
  285. * want to maximize portability of your program.
  286. *
  287. * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events.
  288. * (All input events are currently 4 bytes long. Be prepared to support
  289. * 8 byte events also. If you receive any event having first byte >= 128,
  290. * it's a 8 byte event.
  291. *
  292. * The events are documented at the end of this file.
  293. *
  294. * Normal events (4 bytes)
  295. * There is also a 8 byte version of most of the 4 byte events. The
  296. * 8 byte one is recommended.
  297. */
  298. #define SEQ_NOTEOFF 0
  299. #define SEQ_FMNOTEOFF SEQ_NOTEOFF /* Just old name */
  300. #define SEQ_NOTEON 1
  301. #define SEQ_FMNOTEON SEQ_NOTEON
  302. #define SEQ_WAIT TMR_WAIT_ABS
  303. #define SEQ_PGMCHANGE 3
  304. #define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
  305. #define SEQ_SYNCTIMER TMR_START
  306. #define SEQ_MIDIPUTC 5
  307. #define SEQ_DRUMON 6 /*** OBSOLETE ***/
  308. #define SEQ_DRUMOFF 7 /*** OBSOLETE ***/
  309. #define SEQ_ECHO TMR_ECHO /* For synching programs with output */
  310. #define SEQ_AFTERTOUCH 9
  311. #define SEQ_CONTROLLER 10
  312. /*******************************************
  313. * Midi controller numbers
  314. *******************************************
  315. * Controllers 0 to 31 (0x00 to 0x1f) and
  316. * 32 to 63 (0x20 to 0x3f) are continuous
  317. * controllers.
  318. * In the MIDI 1.0 these controllers are sent using
  319. * two messages. Controller numbers 0 to 31 are used
  320. * to send the MSB and the controller numbers 32 to 63
  321. * are for the LSB. Note that just 7 bits are used in MIDI bytes.
  322. */
  323. #define CTL_BANK_SELECT 0x00
  324. #define CTL_MODWHEEL 0x01
  325. #define CTL_BREATH 0x02
  326. /* undefined 0x03 */
  327. #define CTL_FOOT 0x04
  328. #define CTL_PORTAMENTO_TIME 0x05
  329. #define CTL_DATA_ENTRY 0x06
  330. #define CTL_MAIN_VOLUME 0x07
  331. #define CTL_BALANCE 0x08
  332. /* undefined 0x09 */
  333. #define CTL_PAN 0x0a
  334. #define CTL_EXPRESSION 0x0b
  335. /* undefined 0x0c */
  336. /* undefined 0x0d */
  337. /* undefined 0x0e */
  338. /* undefined 0x0f */
  339. #define CTL_GENERAL_PURPOSE1 0x10
  340. #define CTL_GENERAL_PURPOSE2 0x11
  341. #define CTL_GENERAL_PURPOSE3 0x12
  342. #define CTL_GENERAL_PURPOSE4 0x13
  343. /* undefined 0x14 - 0x1f */
  344. /* undefined 0x20 */
  345. /* The controller numbers 0x21 to 0x3f are reserved for the */
  346. /* least significant bytes of the controllers 0x00 to 0x1f. */
  347. /* These controllers are not recognised by the driver. */
  348. /* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */
  349. /* 0=OFF and 127=ON (intermediate values are possible) */
  350. #define CTL_DAMPER_PEDAL 0x40
  351. #define CTL_SUSTAIN 0x40 /* Alias */
  352. #define CTL_HOLD 0x40 /* Alias */
  353. #define CTL_PORTAMENTO 0x41
  354. #define CTL_SOSTENUTO 0x42
  355. #define CTL_SOFT_PEDAL 0x43
  356. /* undefined 0x44 */
  357. #define CTL_HOLD2 0x45
  358. /* undefined 0x46 - 0x4f */
  359. #define CTL_GENERAL_PURPOSE5 0x50
  360. #define CTL_GENERAL_PURPOSE6 0x51
  361. #define CTL_GENERAL_PURPOSE7 0x52
  362. #define CTL_GENERAL_PURPOSE8 0x53
  363. /* undefined 0x54 - 0x5a */
  364. #define CTL_EXT_EFF_DEPTH 0x5b
  365. #define CTL_TREMOLO_DEPTH 0x5c
  366. #define CTL_CHORUS_DEPTH 0x5d
  367. #define CTL_DETUNE_DEPTH 0x5e
  368. #define CTL_CELESTE_DEPTH 0x5e /* Alias for the above one */
  369. #define CTL_PHASER_DEPTH 0x5f
  370. #define CTL_DATA_INCREMENT 0x60
  371. #define CTL_DATA_DECREMENT 0x61
  372. #define CTL_NONREG_PARM_NUM_LSB 0x62
  373. #define CTL_NONREG_PARM_NUM_MSB 0x63
  374. #define CTL_REGIST_PARM_NUM_LSB 0x64
  375. #define CTL_REGIST_PARM_NUM_MSB 0x65
  376. /* undefined 0x66 - 0x78 */
  377. /* reserved 0x79 - 0x7f */
  378. /* Pseudo controllers (not midi compatible) */
  379. #define CTRL_PITCH_BENDER 255
  380. #define CTRL_PITCH_BENDER_RANGE 254
  381. #define CTRL_EXPRESSION 253 /* Obsolete */
  382. #define CTRL_MAIN_VOLUME 252 /* Obsolete */
  383. #define SEQ_BALANCE 11
  384. #define SEQ_VOLMODE 12
  385. /*
  386. * Volume mode decides how volumes are used
  387. */
  388. #define VOL_METHOD_ADAGIO 1
  389. #define VOL_METHOD_LINEAR 2
  390. /*
  391. * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as
  392. * input events.
  393. */
  394. /*
  395. * Event codes 0xf0 to 0xfc are reserved for future extensions.
  396. */
  397. #define SEQ_FULLSIZE 0xfd /* Long events */
  398. /*
  399. * SEQ_FULLSIZE events are used for loading patches/samples to the
  400. * synthesizer devices. These events are passed directly to the driver
  401. * of the associated synthesizer device. There is no limit to the size
  402. * of the extended events. These events are not queued but executed
  403. * immediately when the write() is called (execution can take several
  404. * seconds of time).
  405. *
  406. * When a SEQ_FULLSIZE message is written to the device, it must
  407. * be written using exactly one write() call. Other events cannot
  408. * be mixed to the same write.
  409. *
  410. * For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the
  411. * /dev/sequencer. Don't write other data together with the instrument structure
  412. * Set the key field of the structure to FM_PATCH. The device field is used to
  413. * route the patch to the corresponding device.
  414. *
  415. * For wave table use struct patch_info. Initialize the key field
  416. * to WAVE_PATCH.
  417. */
  418. #define SEQ_PRIVATE 0xfe /* Low level HW dependent events (8 bytes) */
  419. #define SEQ_EXTENDED 0xff /* Extended events (8 bytes) OBSOLETE */
  420. /*
  421. * Record for FM patches
  422. */
  423. typedef unsigned char sbi_instr_data[32];
  424. struct sbi_instrument {
  425. unsigned short key; /* FM_PATCH or OPL3_PATCH */
  426. #define FM_PATCH _PATCHKEY(0x01)
  427. #define OPL3_PATCH _PATCHKEY(0x03)
  428. short device; /* Synth# (0-4) */
  429. int channel; /* Program# to be initialized */
  430. sbi_instr_data operators; /* Register settings for operator cells (.SBI format) */
  431. };
  432. struct synth_info { /* Read only */
  433. char name[30];
  434. int device; /* 0-N. INITIALIZE BEFORE CALLING */
  435. int synth_type;
  436. #define SYNTH_TYPE_FM 0
  437. #define SYNTH_TYPE_SAMPLE 1
  438. #define SYNTH_TYPE_MIDI 2 /* Midi interface */
  439. int synth_subtype;
  440. #define FM_TYPE_ADLIB 0x00
  441. #define FM_TYPE_OPL3 0x01
  442. #define MIDI_TYPE_MPU401 0x401
  443. #define SAMPLE_TYPE_BASIC 0x10
  444. #define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
  445. #define SAMPLE_TYPE_WAVEFRONT 0x11
  446. int perc_mode; /* No longer supported */
  447. int nr_voices;
  448. int nr_drums; /* Obsolete field */
  449. int instr_bank_size;
  450. unsigned int capabilities;
  451. #define SYNTH_CAP_PERCMODE 0x00000001 /* No longer used */
  452. #define SYNTH_CAP_OPL3 0x00000002 /* Set if OPL3 supported */
  453. #define SYNTH_CAP_INPUT 0x00000004 /* Input (MIDI) device */
  454. int dummies[19]; /* Reserve space */
  455. };
  456. struct sound_timer_info {
  457. char name[32];
  458. int caps;
  459. };
  460. #define MIDI_CAP_MPU401 1 /* MPU-401 intelligent mode */
  461. struct midi_info {
  462. char name[30];
  463. int device; /* 0-N. INITIALIZE BEFORE CALLING */
  464. unsigned int capabilities; /* To be defined later */
  465. int dev_type;
  466. int dummies[18]; /* Reserve space */
  467. };
  468. /********************************************
  469. * ioctl commands for the /dev/midi##
  470. */
  471. typedef struct {
  472. unsigned char cmd;
  473. char nr_args, nr_returns;
  474. unsigned char data[30];
  475. } mpu_command_rec;
  476. #define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
  477. #define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
  478. #define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
  479. /********************************************
  480. * IOCTL commands for /dev/dsp and /dev/audio
  481. */
  482. #define SNDCTL_DSP_RESET _SIO ('P', 0)
  483. #define SNDCTL_DSP_SYNC _SIO ('P', 1)
  484. #define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
  485. #define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
  486. #define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
  487. #define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
  488. #define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
  489. #define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
  490. #define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int)
  491. #define SNDCTL_DSP_POST _SIO ('P', 8)
  492. #define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int)
  493. #define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
  494. /* Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
  495. #define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int) /* Returns a mask */
  496. #define SNDCTL_DSP_SETFMT _SIOWR('P',5, int) /* Selects ONE fmt*/
  497. # define AFMT_QUERY 0x00000000 /* Return current fmt */
  498. # define AFMT_MU_LAW 0x00000001
  499. # define AFMT_A_LAW 0x00000002
  500. # define AFMT_IMA_ADPCM 0x00000004
  501. # define AFMT_U8 0x00000008
  502. # define AFMT_S16_LE 0x00000010 /* Little endian signed 16*/
  503. # define AFMT_S16_BE 0x00000020 /* Big endian signed 16 */
  504. # define AFMT_S8 0x00000040
  505. # define AFMT_U16_LE 0x00000080 /* Little endian U16 */
  506. # define AFMT_U16_BE 0x00000100 /* Big endian U16 */
  507. # define AFMT_MPEG 0x00000200 /* MPEG (2) audio */
  508. # define AFMT_AC3 0x00000400 /* Dolby Digital AC3 */
  509. /*
  510. * Buffer status queries.
  511. */
  512. typedef struct audio_buf_info {
  513. int fragments; /* # of available fragments (partially usend ones not counted) */
  514. int fragstotal; /* Total # of fragments allocated */
  515. int fragsize; /* Size of a fragment in bytes */
  516. int bytes; /* Available space in bytes (includes partially used fragments) */
  517. /* Note! 'bytes' could be more than fragments*fragsize */
  518. } audio_buf_info;
  519. #define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info)
  520. #define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info)
  521. #define SNDCTL_DSP_NONBLOCK _SIO ('P',14)
  522. #define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
  523. # define DSP_CAP_REVISION 0x000000ff /* Bits for revision level (0 to 255) */
  524. # define DSP_CAP_DUPLEX 0x00000100 /* Full duplex record/playback */
  525. # define DSP_CAP_REALTIME 0x00000200 /* Real time capability */
  526. # define DSP_CAP_BATCH 0x00000400 /* Device has some kind of */
  527. /* internal buffers which may */
  528. /* cause some delays and */
  529. /* decrease precision of timing */
  530. # define DSP_CAP_COPROC 0x00000800 /* Has a coprocessor */
  531. /* Sometimes it's a DSP */
  532. /* but usually not */
  533. # define DSP_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */
  534. # define DSP_CAP_MMAP 0x00002000 /* Supports mmap() */
  535. # define DSP_CAP_MULTI 0x00004000 /* support multiple open */
  536. # define DSP_CAP_BIND 0x00008000 /* channel binding to front/rear/cneter/lfe */
  537. #define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int)
  538. #define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int)
  539. # define PCM_ENABLE_INPUT 0x00000001
  540. # define PCM_ENABLE_OUTPUT 0x00000002
  541. typedef struct count_info {
  542. int bytes; /* Total # of bytes processed */
  543. int blocks; /* # of fragment transitions since last time */
  544. int ptr; /* Current DMA pointer value */
  545. } count_info;
  546. #define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info)
  547. #define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info)
  548. typedef struct buffmem_desc {
  549. unsigned *buffer;
  550. int size;
  551. } buffmem_desc;
  552. #define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc)
  553. #define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
  554. #define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
  555. #define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
  556. #define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
  557. #define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int)
  558. #define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int)
  559. # define DSP_BIND_QUERY 0x00000000
  560. # define DSP_BIND_FRONT 0x00000001
  561. # define DSP_BIND_SURR 0x00000002
  562. # define DSP_BIND_CENTER_LFE 0x00000004
  563. # define DSP_BIND_HANDSET 0x00000008
  564. # define DSP_BIND_MIC 0x00000010
  565. # define DSP_BIND_MODEM1 0x00000020
  566. # define DSP_BIND_MODEM2 0x00000040
  567. # define DSP_BIND_I2S 0x00000080
  568. # define DSP_BIND_SPDIF 0x00000100
  569. #define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int)
  570. #define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int)
  571. # define SPDIF_PRO 0x0001
  572. # define SPDIF_N_AUD 0x0002
  573. # define SPDIF_COPY 0x0004
  574. # define SPDIF_PRE 0x0008
  575. # define SPDIF_CC 0x07f0
  576. # define SPDIF_L 0x0800
  577. # define SPDIF_DRS 0x4000
  578. # define SPDIF_V 0x8000
  579. /*
  580. * Application's profile defines the way how playback underrun situations should be handled.
  581. *
  582. * APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
  583. * playback buffer whenever an underrun occurs. This consumes some time
  584. * prevents looping the existing buffer.
  585. * APF_CPUINTENS is intended to be set by CPU intensive applications which
  586. * are likely to run out of time occasionally. In this mode the buffer cleanup is
  587. * disabled which saves CPU time but also let's the previous buffer content to
  588. * be played during the "pause" after the underrun.
  589. */
  590. #define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
  591. #define APF_NORMAL 0 /* Normal applications */
  592. #define APF_NETWORK 1 /* Underruns probably caused by an "external" delay */
  593. #define APF_CPUINTENS 2 /* Underruns probably caused by "overheating" the CPU */
  594. #define SOUND_PCM_READ_RATE _SIOR ('P', 2, int)
  595. #define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int)
  596. #define SOUND_PCM_READ_BITS _SIOR ('P', 5, int)
  597. #define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int)
  598. /* Some alias names */
  599. #define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
  600. #define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
  601. #define SOUND_PCM_POST SNDCTL_DSP_POST
  602. #define SOUND_PCM_RESET SNDCTL_DSP_RESET
  603. #define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
  604. #define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
  605. #define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
  606. #define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
  607. #define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
  608. #define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
  609. #define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
  610. #define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
  611. #define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
  612. #define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
  613. #define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
  614. #define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
  615. #define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
  616. #define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
  617. #define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
  618. #define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
  619. /*
  620. * ioctl calls to be used in communication with coprocessors and
  621. * DSP chips.
  622. */
  623. typedef struct copr_buffer {
  624. int command; /* Set to 0 if not used */
  625. int flags;
  626. #define CPF_NONE 0x0000
  627. #define CPF_FIRST 0x0001 /* First block */
  628. #define CPF_LAST 0x0002 /* Last block */
  629. int len;
  630. int offs; /* If required by the device (0 if not used) */
  631. unsigned char data[4000]; /* NOTE! 4000 is not 4k */
  632. } copr_buffer;
  633. typedef struct copr_debug_buf {
  634. int command; /* Used internally. Set to 0 */
  635. int parm1;
  636. int parm2;
  637. int flags;
  638. int len; /* Length of data in bytes */
  639. } copr_debug_buf;
  640. typedef struct copr_msg {
  641. int len;
  642. unsigned char data[4000];
  643. } copr_msg;
  644. #define SNDCTL_COPR_RESET _SIO ('C', 0)
  645. #define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer)
  646. #define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf)
  647. #define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf)
  648. #define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf)
  649. #define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf)
  650. #define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf)
  651. #define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf)
  652. #define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg)
  653. #define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg)
  654. /*********************************************
  655. * IOCTL commands for /dev/mixer
  656. */
  657. /*
  658. * Mixer devices
  659. *
  660. * There can be up to 20 different analog mixer channels. The
  661. * SOUND_MIXER_NRDEVICES gives the currently supported maximum.
  662. * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells
  663. * the devices supported by the particular mixer.
  664. */
  665. #define SOUND_MIXER_NRDEVICES 25
  666. #define SOUND_MIXER_VOLUME 0
  667. #define SOUND_MIXER_BASS 1
  668. #define SOUND_MIXER_TREBLE 2
  669. #define SOUND_MIXER_SYNTH 3
  670. #define SOUND_MIXER_PCM 4
  671. #define SOUND_MIXER_SPEAKER 5
  672. #define SOUND_MIXER_LINE 6
  673. #define SOUND_MIXER_MIC 7
  674. #define SOUND_MIXER_CD 8
  675. #define SOUND_MIXER_IMIX 9 /* Recording monitor */
  676. #define SOUND_MIXER_ALTPCM 10
  677. #define SOUND_MIXER_RECLEV 11 /* Recording level */
  678. #define SOUND_MIXER_IGAIN 12 /* Input gain */
  679. #define SOUND_MIXER_OGAIN 13 /* Output gain */
  680. /*
  681. * The AD1848 codec and compatibles have three line level inputs
  682. * (line, aux1 and aux2). Since each card manufacturer have assigned
  683. * different meanings to these inputs, it's inpractical to assign
  684. * specific meanings (line, cd, synth etc.) to them.
  685. */
  686. #define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */
  687. #define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */
  688. #define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */
  689. #define SOUND_MIXER_DIGITAL1 17 /* Digital (input) 1 */
  690. #define SOUND_MIXER_DIGITAL2 18 /* Digital (input) 2 */
  691. #define SOUND_MIXER_DIGITAL3 19 /* Digital (input) 3 */
  692. #define SOUND_MIXER_PHONEIN 20 /* Phone input */
  693. #define SOUND_MIXER_PHONEOUT 21 /* Phone output */
  694. #define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */
  695. #define SOUND_MIXER_RADIO 23 /* Radio in */
  696. #define SOUND_MIXER_MONITOR 24 /* Monitor (usually mic) volume */
  697. /* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
  698. /* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
  699. #define SOUND_ONOFF_MIN 28
  700. #define SOUND_ONOFF_MAX 30
  701. /* Note! Number 31 cannot be used since the sign bit is reserved */
  702. #define SOUND_MIXER_NONE 31
  703. /*
  704. * The following unsupported macros are no longer functional.
  705. * Use SOUND_MIXER_PRIVATE# macros in future.
  706. */
  707. #define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
  708. #define SOUND_MIXER_MUTE SOUND_MIXER_NONE
  709. #define SOUND_MIXER_LOUD SOUND_MIXER_NONE
  710. #define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \
  711. "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \
  712. "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \
  713. "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
  714. #define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
  715. "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
  716. "line1", "line2", "line3", "dig1", "dig2", "dig3", \
  717. "phin", "phout", "video", "radio", "monitor"}
  718. /* Device bitmask identifiers */
  719. #define SOUND_MIXER_RECSRC 0xff /* Arg contains a bit for each recording source */
  720. #define SOUND_MIXER_DEVMASK 0xfe /* Arg contains a bit for each supported device */
  721. #define SOUND_MIXER_RECMASK 0xfd /* Arg contains a bit for each supported recording source */
  722. #define SOUND_MIXER_CAPS 0xfc
  723. # define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only one recording source at a time */
  724. #define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */
  725. #define SOUND_MIXER_OUTSRC 0xfa /* Arg contains a bit for each input source to output */
  726. #define SOUND_MIXER_OUTMASK 0xf9 /* Arg contains a bit for each supported input source to output */
  727. /* Device mask bits */
  728. #define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
  729. #define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
  730. #define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
  731. #define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
  732. #define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
  733. #define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
  734. #define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
  735. #define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
  736. #define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
  737. #define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
  738. #define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
  739. #define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
  740. #define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
  741. #define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
  742. #define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
  743. #define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
  744. #define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
  745. #define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
  746. #define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
  747. #define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
  748. #define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
  749. #define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
  750. #define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
  751. #define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
  752. #define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
  753. /* Obsolete macros */
  754. #define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
  755. #define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
  756. #define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
  757. #define MIXER_READ(dev) _SIOR('M', dev, int)
  758. #define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
  759. #define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
  760. #define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
  761. #define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
  762. #define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
  763. #define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
  764. #define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
  765. #define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
  766. #define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
  767. #define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
  768. #define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
  769. #define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
  770. #define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
  771. #define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
  772. #define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
  773. #define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
  774. #define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
  775. /* Obsolete macros */
  776. #define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
  777. #define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
  778. #define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
  779. #define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
  780. #define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
  781. #define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
  782. #define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
  783. #define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
  784. #define MIXER_WRITE(dev) _SIOWR('M', dev, int)
  785. #define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
  786. #define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
  787. #define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
  788. #define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
  789. #define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
  790. #define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
  791. #define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
  792. #define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
  793. #define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
  794. #define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
  795. #define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
  796. #define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
  797. #define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
  798. #define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
  799. #define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
  800. #define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
  801. #define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
  802. /* Obsolete macros */
  803. #define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
  804. #define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
  805. #define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
  806. #define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
  807. typedef struct mixer_info
  808. {
  809. char id[16];
  810. char name[32];
  811. int modify_counter;
  812. int fillers[10];
  813. } mixer_info;
  814. typedef struct _old_mixer_info /* Obsolete */
  815. {
  816. char id[16];
  817. char name[32];
  818. } _old_mixer_info;
  819. #define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info)
  820. #define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info)
  821. /*
  822. * A mechanism for accessing "proprietary" mixer features. This method
  823. * permits passing 128 bytes of arbitrary data between a mixer application
  824. * and the mixer driver. Interpretation of the record is defined by
  825. * the particular mixer driver.
  826. */
  827. typedef unsigned char mixer_record[128];
  828. #define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record)
  829. /*
  830. * Two ioctls for special souncard function
  831. */
  832. #define SOUND_MIXER_AGC _SIOWR('M', 103, int)
  833. #define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
  834. /*
  835. * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
  836. * These features can be used when accessing device specific features.
  837. */
  838. #define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int)
  839. #define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int)
  840. #define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int)
  841. #define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int)
  842. #define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int)
  843. /*
  844. * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
  845. * for querying current mixer settings from the driver and for loading
  846. * default volume settings _prior_ activating the mixer (loading
  847. * doesn't affect current state of the mixer hardware). These calls
  848. * are for internal use only.
  849. */
  850. typedef struct mixer_vol_table {
  851. int num; /* Index to volume table */
  852. char name[32];
  853. int levels[32];
  854. } mixer_vol_table;
  855. #define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table)
  856. #define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table)
  857. /*
  858. * An ioctl for identifying the driver version. It will return value
  859. * of the SOUND_VERSION macro used when compiling the driver.
  860. * This call was introduced in OSS version 3.6 and it will not work
  861. * with earlier versions (returns EINVAL).
  862. */
  863. #define OSS_GETVERSION _SIOR ('M', 118, int)
  864. /*
  865. * Level 2 event types for /dev/sequencer
  866. */
  867. /*
  868. * The 4 most significant bits of byte 0 specify the class of
  869. * the event:
  870. *
  871. * 0x8X = system level events,
  872. * 0x9X = device/port specific events, event[1] = device/port,
  873. * The last 4 bits give the subtype:
  874. * 0x02 = Channel event (event[3] = chn).
  875. * 0x01 = note event (event[4] = note).
  876. * (0x01 is not used alone but always with bit 0x02).
  877. * event[2] = MIDI message code (0x80=note off etc.)
  878. *
  879. */
  880. #define EV_SEQ_LOCAL 0x80
  881. #define EV_TIMING 0x81
  882. #define EV_CHN_COMMON 0x92
  883. #define EV_CHN_VOICE 0x93
  884. #define EV_SYSEX 0x94
  885. /*
  886. * Event types 200 to 220 are reserved for application use.
  887. * These numbers will not be used by the driver.
  888. */
  889. /*
  890. * Events for event type EV_CHN_VOICE
  891. */
  892. #define MIDI_NOTEOFF 0x80
  893. #define MIDI_NOTEON 0x90
  894. #define MIDI_KEY_PRESSURE 0xA0
  895. /*
  896. * Events for event type EV_CHN_COMMON
  897. */
  898. #define MIDI_CTL_CHANGE 0xB0
  899. #define MIDI_PGM_CHANGE 0xC0
  900. #define MIDI_CHN_PRESSURE 0xD0
  901. #define MIDI_PITCH_BEND 0xE0
  902. #define MIDI_SYSTEM_PREFIX 0xF0
  903. /*
  904. * Timer event types
  905. */
  906. #define TMR_WAIT_REL 1 /* Time relative to the prev time */
  907. #define TMR_WAIT_ABS 2 /* Absolute time since TMR_START */
  908. #define TMR_STOP 3
  909. #define TMR_START 4
  910. #define TMR_CONTINUE 5
  911. #define TMR_TEMPO 6
  912. #define TMR_ECHO 8
  913. #define TMR_CLOCK 9 /* MIDI clock */
  914. #define TMR_SPP 10 /* Song position pointer */
  915. #define TMR_TIMESIG 11 /* Time signature */
  916. /*
  917. * Local event types
  918. */
  919. #define LOCL_STARTAUDIO 1
  920. #if !defined(__KERNEL__) || defined(USE_SEQ_MACROS)
  921. /*
  922. * Some convenience macros to simplify programming of the
  923. * /dev/sequencer interface
  924. *
  925. * This is a legacy interface for applications written against
  926. * the OSSlib-3.8 style interface. It is no longer possible
  927. * to actually link against OSSlib with this header, but we
  928. * still provide these macros for programs using them.
  929. *
  930. * If you want to use OSSlib, it is recommended that you get
  931. * the GPL version of OSS-4.x and build against that version
  932. * of the header.
  933. *
  934. * We redefine the extern keyword so that make headers_check
  935. * does not complain about SEQ_USE_EXTBUF.
  936. */
  937. #define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
  938. void seqbuf_dump(void); /* This function must be provided by programs */
  939. #define SEQ_PM_DEFINES int __foo_bar___
  940. #define SEQ_LOAD_GMINSTR(dev, instr)
  941. #define SEQ_LOAD_GMDRUM(dev, drum)
  942. #define _SEQ_EXTERN extern
  943. #define SEQ_USE_EXTBUF() \
  944. _SEQ_EXTERN unsigned char _seqbuf[]; \
  945. _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr
  946. #ifndef USE_SIMPLE_MACROS
  947. /* Sample seqbuf_dump() implementation:
  948. *
  949. * SEQ_DEFINEBUF (2048); -- Defines a buffer for 2048 bytes
  950. *
  951. * int seqfd; -- The file descriptor for /dev/sequencer.
  952. *
  953. * void
  954. * seqbuf_dump ()
  955. * {
  956. * if (_seqbufptr)
  957. * if (write (seqfd, _seqbuf, _seqbufptr) == -1)
  958. * {
  959. * perror ("write /dev/sequencer");
  960. * exit (-1);
  961. * }
  962. * _seqbufptr = 0;
  963. * }
  964. */
  965. #define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
  966. #define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
  967. #define _SEQ_ADVBUF(len) _seqbufptr += len
  968. #define SEQ_DUMPBUF seqbuf_dump
  969. #else
  970. /*
  971. * This variation of the sequencer macros is used just to format one event
  972. * using fixed buffer.
  973. *
  974. * The program using the macro library must define the following macros before
  975. * using this library.
  976. *
  977. * #define _seqbuf name of the buffer (unsigned char[])
  978. * #define _SEQ_ADVBUF(len) If the applic needs to know the exact
  979. * size of the event, this macro can be used.
  980. * Otherwise this must be defined as empty.
  981. * #define _seqbufptr Define the name of index variable or 0 if
  982. * not required.
  983. */
  984. #define _SEQ_NEEDBUF(len) /* empty */
  985. #endif
  986. #define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\
  987. _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
  988. _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
  989. _seqbuf[_seqbufptr+2] = (dev);\
  990. _seqbuf[_seqbufptr+3] = (mode);\
  991. _seqbuf[_seqbufptr+4] = 0;\
  992. _seqbuf[_seqbufptr+5] = 0;\
  993. _seqbuf[_seqbufptr+6] = 0;\
  994. _seqbuf[_seqbufptr+7] = 0;\
  995. _SEQ_ADVBUF(8);}
  996. /*
  997. * Midi voice messages
  998. */
  999. #define _CHN_VOICE(dev, event, chn, note, parm) \
  1000. {_SEQ_NEEDBUF(8);\
  1001. _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
  1002. _seqbuf[_seqbufptr+1] = (dev);\
  1003. _seqbuf[_seqbufptr+2] = (event);\
  1004. _seqbuf[_seqbufptr+3] = (chn);\
  1005. _seqbuf[_seqbufptr+4] = (note);\
  1006. _seqbuf[_seqbufptr+5] = (parm);\
  1007. _seqbuf[_seqbufptr+6] = (0);\
  1008. _seqbuf[_seqbufptr+7] = 0;\
  1009. _SEQ_ADVBUF(8);}
  1010. #define SEQ_START_NOTE(dev, chn, note, vol) \
  1011. _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
  1012. #define SEQ_STOP_NOTE(dev, chn, note, vol) \
  1013. _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
  1014. #define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
  1015. _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
  1016. /*
  1017. * Midi channel messages
  1018. */
  1019. #define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
  1020. {_SEQ_NEEDBUF(8);\
  1021. _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
  1022. _seqbuf[_seqbufptr+1] = (dev);\
  1023. _seqbuf[_seqbufptr+2] = (event);\
  1024. _seqbuf[_seqbufptr+3] = (chn);\
  1025. _seqbuf[_seqbufptr+4] = (p1);\
  1026. _seqbuf[_seqbufptr+5] = (p2);\
  1027. *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
  1028. _SEQ_ADVBUF(8);}
  1029. /*
  1030. * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits
  1031. * sending any MIDI bytes but it's absolutely not possible. Trying to do
  1032. * so _will_ cause problems with MPU401 intelligent mode).
  1033. *
  1034. * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be
  1035. * sent by calling SEQ_SYSEX() several times (there must be no other events
  1036. * between them). First sysex fragment must have 0xf0 in the first byte
  1037. * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte
  1038. * between these sysex start and end markers cannot be larger than 0x7f. Also
  1039. * lengths of each fragments (except the last one) must be 6.
  1040. *
  1041. * Breaking the above rules may work with some MIDI ports but is likely to
  1042. * cause fatal problems with some other devices (such as MPU401).
  1043. */
  1044. #define SEQ_SYSEX(dev, buf, len) \
  1045. {int ii, ll=(len); \
  1046. unsigned char *bufp=buf;\
  1047. if (ll>6)ll=6;\
  1048. _SEQ_NEEDBUF(8);\
  1049. _seqbuf[_seqbufptr] = EV_SYSEX;\
  1050. _seqbuf[_seqbufptr+1] = (dev);\
  1051. for(ii=0;ii<ll;ii++)\
  1052. _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
  1053. for(ii=ll;ii<6;ii++)\
  1054. _seqbuf[_seqbufptr+ii+2] = 0xff;\
  1055. _SEQ_ADVBUF(8);}
  1056. #define SEQ_CHN_PRESSURE(dev, chn, pressure) \
  1057. _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
  1058. #define SEQ_SET_PATCH SEQ_PGM_CHANGE
  1059. #define SEQ_PGM_CHANGE(dev, chn, patch) \
  1060. _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
  1061. #define SEQ_CONTROL(dev, chn, controller, value) \
  1062. _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
  1063. #define SEQ_BENDER(dev, chn, value) \
  1064. _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
  1065. #define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\
  1066. _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
  1067. _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
  1068. _seqbuf[_seqbufptr+2] = (dev);\
  1069. _seqbuf[_seqbufptr+3] = (voice);\
  1070. _seqbuf[_seqbufptr+4] = (controller);\
  1071. _seqbuf[_seqbufptr+5] = ((value)&0xff);\
  1072. _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
  1073. _seqbuf[_seqbufptr+7] = 0;\
  1074. _SEQ_ADVBUF(8);}
  1075. /*
  1076. * The following 5 macros are incorrectly implemented and obsolete.
  1077. * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead.
  1078. */
  1079. #define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
  1080. #define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
  1081. #define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
  1082. #define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
  1083. #define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
  1084. /*
  1085. * Timing and synchronization macros
  1086. */
  1087. #define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
  1088. _seqbuf[_seqbufptr+0] = EV_TIMING; \
  1089. _seqbuf[_seqbufptr+1] = (ev); \
  1090. _seqbuf[_seqbufptr+2] = 0;\
  1091. _seqbuf[_seqbufptr+3] = 0;\
  1092. *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
  1093. _SEQ_ADVBUF(8);}
  1094. #define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
  1095. #define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
  1096. #define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
  1097. #define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
  1098. #define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
  1099. #define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
  1100. #define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
  1101. #define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
  1102. #define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
  1103. /*
  1104. * Local control events
  1105. */
  1106. #define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
  1107. _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
  1108. _seqbuf[_seqbufptr+1] = (ev); \
  1109. _seqbuf[_seqbufptr+2] = 0;\
  1110. _seqbuf[_seqbufptr+3] = 0;\
  1111. *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
  1112. _SEQ_ADVBUF(8);}
  1113. #define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
  1114. /*
  1115. * Events for the level 1 interface only
  1116. */
  1117. #define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\
  1118. _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
  1119. _seqbuf[_seqbufptr+1] = (byte);\
  1120. _seqbuf[_seqbufptr+2] = (device);\
  1121. _seqbuf[_seqbufptr+3] = 0;\
  1122. _SEQ_ADVBUF(4);}
  1123. /*
  1124. * Patch loading.
  1125. */
  1126. #define SEQ_WRPATCH(patchx, len) \
  1127. {if (_seqbufptr) SEQ_DUMPBUF();\
  1128. if (write(seqfd, (char*)(patchx), len)==-1) \
  1129. perror("Write patch: /dev/sequencer");}
  1130. #define SEQ_WRPATCH2(patchx, len) \
  1131. (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
  1132. #endif
  1133. #endif /* _UAPISOUNDCARD_H */