1 ======================================= 1 ======================================= 2 Software Interface ALSA-DSP MADI Driver 2 Software Interface ALSA-DSP MADI Driver 3 ======================================= 3 ======================================= 4 4 5 (translated from German, so no good English ;- 5 (translated from German, so no good English ;-), 6 6 7 2004 - winfried ritsch 7 2004 - winfried ritsch 8 8 9 9 10 Full functionality has been added to the drive 10 Full functionality has been added to the driver. Since some of 11 the Controls and startup-options are ALSA-Sta 11 the Controls and startup-options are ALSA-Standard and only the 12 special Controls are described and discussed b 12 special Controls are described and discussed below. 13 13 14 14 15 Hardware functionality 15 Hardware functionality 16 ====================== 16 ====================== 17 17 18 Audio transmission 18 Audio transmission 19 ------------------ 19 ------------------ 20 20 21 * number of channels -- depends on transmissi 21 * number of channels -- depends on transmission mode 22 22 23 The number of channels chosen 23 The number of channels chosen is from 1..Nmax. The reason to 24 use for a lower number of chan 24 use for a lower number of channels is only resource allocation, 25 since unused DMA channels are 25 since unused DMA channels are disabled and less memory is 26 allocated. So also the through 26 allocated. So also the throughput of the PCI system can be 27 scaled. (Only important for lo 27 scaled. (Only important for low performance boards). 28 28 29 * Single Speed -- 1..64 channels 29 * Single Speed -- 1..64 channels 30 30 31 .. note:: 31 .. note:: 32 (Note: Choosing the 56channel 32 (Note: Choosing the 56channel mode for transmission or as 33 receiver, only 56 are transmi 33 receiver, only 56 are transmitted/received over the MADI, but 34 all 64 channels are available 34 all 64 channels are available for the mixer, so channel count 35 for the driver) 35 for the driver) 36 36 37 * Double Speed -- 1..32 channels 37 * Double Speed -- 1..32 channels 38 38 39 .. note:: 39 .. note:: 40 Note: Choosing the 56-channel 40 Note: Choosing the 56-channel mode for 41 transmission/receive-mode , o 41 transmission/receive-mode , only 28 are transmitted/received 42 over the MADI, but all 32 cha 42 over the MADI, but all 32 channels are available for the mixer, 43 so channel count for the driv 43 so channel count for the driver 44 44 45 45 46 * Quad Speed -- 1..16 channels 46 * Quad Speed -- 1..16 channels 47 47 48 .. note:: 48 .. note:: 49 Choosing the 56-channel mode 49 Choosing the 56-channel mode for 50 transmission/receive-mode , o 50 transmission/receive-mode , only 14 are transmitted/received 51 over the MADI, but all 16 cha 51 over the MADI, but all 16 channels are available for the mixer, 52 so channel count for the driv 52 so channel count for the driver 53 53 54 * Format -- signed 32 Bit Little Endian (SNDRV 54 * Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE) 55 55 56 * Sample Rates -- 56 * Sample Rates -- 57 57 58 Single Speed -- 32000, 44100, 48000 58 Single Speed -- 32000, 44100, 48000 59 59 60 Double Speed -- 64000, 88200, 96000 (un 60 Double Speed -- 64000, 88200, 96000 (untested) 61 61 62 Quad Speed -- 128000, 176400, 192000 (u 62 Quad Speed -- 128000, 176400, 192000 (untested) 63 63 64 * access-mode -- MMAP (memory mapped), Not int 64 * access-mode -- MMAP (memory mapped), Not interleaved (PCM_NON-INTERLEAVED) 65 65 66 * buffer-sizes -- 64,128,256,512,1024,2048,819 66 * buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples 67 67 68 * fragments -- 2 68 * fragments -- 2 69 69 70 * Hardware-pointer -- 2 Modi 70 * Hardware-pointer -- 2 Modi 71 71 72 72 73 The Card supports the readout 73 The Card supports the readout of the actual Buffer-pointer, 74 where DMA reads/writes. Since 74 where DMA reads/writes. Since of the bulk mode of PCI it is only 75 64 Byte accurate. SO it is no 75 64 Byte accurate. SO it is not really usable for the 76 ALSA-mid-level functions (her 76 ALSA-mid-level functions (here the buffer-ID gives a better 77 result), but if MMAP is used 77 result), but if MMAP is used by the application. Therefore it 78 can be configured at load-tim 78 can be configured at load-time with the parameter 79 precise-pointer. 79 precise-pointer. 80 80 81 81 82 .. hint:: 82 .. hint:: 83 (Hint: Experimenting I found 83 (Hint: Experimenting I found that the pointer is maximum 64 to 84 large never to small. So if y 84 large never to small. So if you subtract 64 you always have a 85 safe pointer for writing, whi 85 safe pointer for writing, which is used on this mode inside 86 ALSA. In theory now you can g 86 ALSA. In theory now you can get now a latency as low as 16 87 Samples, which is a quarter o 87 Samples, which is a quarter of the interrupt possibilities.) 88 88 89 * Precise Pointer -- off 89 * Precise Pointer -- off 90 interr 90 interrupt used for pointer-calculation 91 91 92 * Precise Pointer -- on 92 * Precise Pointer -- on 93 hardwa 93 hardware pointer used. 94 94 95 Controller 95 Controller 96 ---------- 96 ---------- 97 97 98 Since DSP-MADI-Mixer has 8152 Fader, it does n 98 Since DSP-MADI-Mixer has 8152 Fader, it does not make sense to 99 use the standard mixer-controls, since this wo 99 use the standard mixer-controls, since this would break most of 100 (especially graphic) ALSA-Mixer GUIs. So Mixer 100 (especially graphic) ALSA-Mixer GUIs. So Mixer control has be 101 provided by a 2-dimensional controller using t 101 provided by a 2-dimensional controller using the 102 hwdep-interface. 102 hwdep-interface. 103 103 104 Also all 128+256 Peak and RMS-Meter can be acc 104 Also all 128+256 Peak and RMS-Meter can be accessed via the 105 hwdep-interface. Since it could be a performan 105 hwdep-interface. Since it could be a performance problem always 106 copying and converting Peak and RMS-Levels eve 106 copying and converting Peak and RMS-Levels even if you just need 107 one, I decided to export the hardware structur 107 one, I decided to export the hardware structure, so that of 108 needed some driver-guru can implement a memory 108 needed some driver-guru can implement a memory-mapping of mixer 109 or peak-meters over ioctl, or also to do only 109 or peak-meters over ioctl, or also to do only copying and no 110 conversion. A test-application shows the usage 110 conversion. A test-application shows the usage of the controller. 111 111 112 * Latency Controls --- not implemented !!! 112 * Latency Controls --- not implemented !!! 113 113 114 .. note:: 114 .. note:: 115 Note: Within the windows-driver the 115 Note: Within the windows-driver the latency is accessible of a 116 control-panel, but buffer-sizes are 116 control-panel, but buffer-sizes are controlled with ALSA from 117 hwparams-calls and should not be ch 117 hwparams-calls and should not be changed in run-state, I did not 118 implement it here. 118 implement it here. 119 119 120 120 121 * System Clock -- suspended !!!! 121 * System Clock -- suspended !!!! 122 122 123 * Name -- "System Clock Mode" 123 * Name -- "System Clock Mode" 124 124 125 * Access -- Read Write 125 * Access -- Read Write 126 126 127 * Values -- "Master" "Slave" 127 * Values -- "Master" "Slave" 128 128 129 .. note:: 129 .. note:: 130 !!!! This is a hardware-func 130 !!!! This is a hardware-function but is in conflict with the 131 Clock-source controller, whi 131 Clock-source controller, which is a kind of ALSA-standard. I 132 makes sense to set the card 132 makes sense to set the card to a special mode (master at some 133 frequency or slave), since e 133 frequency or slave), since even not using an Audio-application 134 a studio should have working 134 a studio should have working synchronisations setup. So use 135 Clock-source-controller inst 135 Clock-source-controller instead !!!! 136 136 137 * Clock Source 137 * Clock Source 138 138 139 * Name -- "Sample Clock Source" 139 * Name -- "Sample Clock Source" 140 140 141 * Access -- Read Write 141 * Access -- Read Write 142 142 143 * Values -- "AutoSync", "Internal 32.0 kHz", 143 * Values -- "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", 144 "Internal 48.0 kHz", "Internal 64.0 kHz", 144 "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", 145 "Internal 96.0 kHz" 145 "Internal 96.0 kHz" 146 146 147 Choose between Master at a sp 147 Choose between Master at a specific Frequency and so also the 148 Speed-mode or Slave (Autosync 148 Speed-mode or Slave (Autosync). Also see "Preferred Sync Ref" 149 149 150 .. warning:: 150 .. warning:: 151 !!!! This is no pure hardware function 151 !!!! This is no pure hardware function but was implemented by 152 ALSA by some ALSA-drivers before, so I 152 ALSA by some ALSA-drivers before, so I use it also. !!! 153 153 154 154 155 * Preferred Sync Ref 155 * Preferred Sync Ref 156 156 157 * Name -- "Preferred Sync Reference" 157 * Name -- "Preferred Sync Reference" 158 158 159 * Access -- Read Write 159 * Access -- Read Write 160 160 161 * Values -- "Word" "MADI" 161 * Values -- "Word" "MADI" 162 162 163 163 164 Within the Auto-sync-Mode the 164 Within the Auto-sync-Mode the preferred Sync Source can be 165 chosen. If it is not availabl 165 chosen. If it is not available another is used if possible. 166 166 167 .. note:: 167 .. note:: 168 Note: Since MADI has a much h 168 Note: Since MADI has a much higher bit-rate than word-clock, the 169 card should synchronise bette 169 card should synchronise better in MADI Mode. But since the 170 RME-PLL is very good, there a 170 RME-PLL is very good, there are almost no problems with 171 word-clock too. I never found 171 word-clock too. I never found a difference. 172 172 173 173 174 * TX 64 channel 174 * TX 64 channel 175 175 176 * Name -- "TX 64 channels mode" 176 * Name -- "TX 64 channels mode" 177 177 178 * Access -- Read Write 178 * Access -- Read Write 179 179 180 * Values -- 0 1 180 * Values -- 0 1 181 181 182 Using 64-channel-modus (1) or 182 Using 64-channel-modus (1) or 56-channel-modus for 183 MADI-transmission (0). 183 MADI-transmission (0). 184 184 185 185 186 .. note:: 186 .. note:: 187 Note: This control is for out 187 Note: This control is for output only. Input-mode is detected 188 automatically from hardware s 188 automatically from hardware sending MADI. 189 189 190 190 191 * Clear TMS 191 * Clear TMS 192 192 193 * Name -- "Clear Track Marker" 193 * Name -- "Clear Track Marker" 194 194 195 * Access -- Read Write 195 * Access -- Read Write 196 196 197 * Values -- 0 1 197 * Values -- 0 1 198 198 199 199 200 Don't use to lower 5 Audio-bi 200 Don't use to lower 5 Audio-bits on AES as additional Bits. 201 201 202 202 203 * Safe Mode oder Auto Input 203 * Safe Mode oder Auto Input 204 204 205 * Name -- "Safe Mode" 205 * Name -- "Safe Mode" 206 206 207 * Access -- Read Write 207 * Access -- Read Write 208 208 209 * Values -- 0 1 (default on) 209 * Values -- 0 1 (default on) 210 210 211 If on (1), then if either the 211 If on (1), then if either the optical or coaxial connection 212 has a failure, there is a tak 212 has a failure, there is a takeover to the working one, with no 213 sample failure. Its only usef 213 sample failure. Its only useful if you use the second as a 214 backup connection. 214 backup connection. 215 215 216 * Input 216 * Input 217 217 218 * Name -- "Input Select" 218 * Name -- "Input Select" 219 219 220 * Access -- Read Write 220 * Access -- Read Write 221 221 222 * Values -- optical coaxial 222 * Values -- optical coaxial 223 223 224 224 225 Choosing the Input, optical o 225 Choosing the Input, optical or coaxial. If Safe-mode is active, 226 this is the preferred Input. 226 this is the preferred Input. 227 227 228 Mixer 228 Mixer 229 ----- 229 ----- 230 230 231 * Mixer 231 * Mixer 232 232 233 * Name -- "Mixer" 233 * Name -- "Mixer" 234 234 235 * Access -- Read Write 235 * Access -- Read Write 236 236 237 * Values - <channel-number 0-127> <Value 0-6 237 * Values - <channel-number 0-127> <Value 0-65535> 238 238 239 239 240 Here as a first value the cha 240 Here as a first value the channel-index is taken to get/set the 241 corresponding mixer channel, 241 corresponding mixer channel, where 0-63 are the input to output 242 fader and 64-127 the playback 242 fader and 64-127 the playback to outputs fader. Value 0 243 is channel muted 0 and 32768 243 is channel muted 0 and 32768 an amplification of 1. 244 244 245 * Chn 1-64 245 * Chn 1-64 246 246 247 fast mixer for the ALSA-mixer utils. Th 247 fast mixer for the ALSA-mixer utils. The diagonal of the 248 mixer-matrix is implemented from playba 248 mixer-matrix is implemented from playback to output. 249 249 250 250 251 * Line Out 251 * Line Out 252 252 253 * Name -- "Line Out" 253 * Name -- "Line Out" 254 254 255 * Access -- Read Write 255 * Access -- Read Write 256 256 257 * Values -- 0 1 257 * Values -- 0 1 258 258 259 Switching on and off the anal 259 Switching on and off the analog out, which has nothing to do 260 with mixing or routing. the a 260 with mixing or routing. the analog outs reflects channel 63,64. 261 261 262 262 263 Information (only read access) 263 Information (only read access) 264 ------------------------------ 264 ------------------------------ 265 265 266 * Sample Rate 266 * Sample Rate 267 267 268 * Name -- "System Sample Rate" 268 * Name -- "System Sample Rate" 269 269 270 * Access -- Read-only 270 * Access -- Read-only 271 271 272 getting the sample rate. 272 getting the sample rate. 273 273 274 274 275 * External Rate measured 275 * External Rate measured 276 276 277 * Name -- "External Rate" 277 * Name -- "External Rate" 278 278 279 * Access -- Read only 279 * Access -- Read only 280 280 281 281 282 Should be "Autosync Rate", bu 282 Should be "Autosync Rate", but Name used is 283 ALSA-Scheme. External Sample 283 ALSA-Scheme. External Sample frequency liked used on Autosync is 284 reported. 284 reported. 285 285 286 286 287 * MADI Sync Status 287 * MADI Sync Status 288 288 289 * Name -- "MADI Sync Lock Status" 289 * Name -- "MADI Sync Lock Status" 290 290 291 * Access -- Read 291 * Access -- Read 292 292 293 * Values -- 0,1,2 293 * Values -- 0,1,2 294 294 295 MADI-Input is 0=Unlocked, 1=Locked, or 295 MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced. 296 296 297 297 298 * Word Clock Sync Status 298 * Word Clock Sync Status 299 299 300 * Name -- "Word Clock Lock Status" 300 * Name -- "Word Clock Lock Status" 301 301 302 * Access -- Read 302 * Access -- Read 303 303 304 * Values -- 0,1,2 304 * Values -- 0,1,2 305 305 306 Word Clock Input is 0=Unlocked, 1=Locke 306 Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced. 307 307 308 * AutoSync 308 * AutoSync 309 309 310 * Name -- "AutoSync Reference" 310 * Name -- "AutoSync Reference" 311 311 312 * Access -- Read 312 * Access -- Read 313 313 314 * Values -- "WordClock", "MADI", "None" 314 * Values -- "WordClock", "MADI", "None" 315 315 316 Sync-Reference is either "Wor 316 Sync-Reference is either "WordClock", "MADI" or none. 317 317 318 * RX 64ch --- noch nicht implementiert 318 * RX 64ch --- noch nicht implementiert 319 319 320 MADI-Receiver is in 64 channel mode ode 320 MADI-Receiver is in 64 channel mode oder 56 channel mode. 321 321 322 322 323 * AB_inp --- not tested 323 * AB_inp --- not tested 324 324 325 Used input for Auto-Input. 325 Used input for Auto-Input. 326 326 327 327 328 * actual Buffer Position --- not implemented 328 * actual Buffer Position --- not implemented 329 329 330 !!! this is a ALSA internal functio 330 !!! this is a ALSA internal function, so no control is used !!! 331 331 332 332 333 333 334 Calling Parameter 334 Calling Parameter 335 ================= 335 ================= 336 336 337 * index int array (min = 1, max = 8) 337 * index int array (min = 1, max = 8) 338 338 339 Index value for RME HDSPM interface. card 339 Index value for RME HDSPM interface. card-index within ALSA 340 340 341 note: ALSA-standard 341 note: ALSA-standard 342 342 343 * id string array (min = 1, max = 8) 343 * id string array (min = 1, max = 8) 344 344 345 ID string for RME HDSPM interface. 345 ID string for RME HDSPM interface. 346 346 347 note: ALSA-standard 347 note: ALSA-standard 348 348 349 * enable int array (min = 1, max = 8) 349 * enable int array (min = 1, max = 8) 350 350 351 Enable/disable specific HDSPM sound-cards 351 Enable/disable specific HDSPM sound-cards. 352 352 353 note: ALSA-standard 353 note: ALSA-standard 354 354 355 * precise_ptr int array (min = 1, max = 8) 355 * precise_ptr int array (min = 1, max = 8) 356 356 357 Enable precise pointer, or disable. 357 Enable precise pointer, or disable. 358 358 359 .. note:: 359 .. note:: 360 note: Use only when the application suppo 360 note: Use only when the application supports this (which is a special case). 361 361 362 * line_outs_monitor int array (min = 1, max = 362 * line_outs_monitor int array (min = 1, max = 8) 363 363 364 Send playback streams to analog outs by d 364 Send playback streams to analog outs by default. 365 365 366 .. note:: 366 .. note:: 367 note: each playback channel is mixed 367 note: each playback channel is mixed to the same numbered output 368 channel (routed). This is against th 368 channel (routed). This is against the ALSA-convention, where all 369 channels have to be muted on after l 369 channels have to be muted on after loading the driver, but was 370 used before on other cards, so i his 370 used before on other cards, so i historically use it again) 371 371 372 372 373 373 374 * enable_monitor int array (min = 1, max = 8) 374 * enable_monitor int array (min = 1, max = 8) 375 375 376 Enable Analog Out on Channel 63/64 by def 376 Enable Analog Out on Channel 63/64 by default. 377 377 378 .. note :: 378 .. note :: 379 note: here the analog output is enabled 379 note: here the analog output is enabled (but not routed).
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.