Lines Matching refs:card

91 status_t emuxki_init(emuxki_dev *card);
92 void emuxki_shutdown(emuxki_dev *card);
219 emuxki_mem_new(emuxki_dev *card, int ptbidx, size_t size)
247 emuxki_pmem_alloc(emuxki_dev *card, size_t size)
254 ptb = card->ptb_log_base;
255 silentpage = card->silentpage_phy_base << 1;
274 if ((mem = emuxki_mem_new(card, i, size)) == NULL) {
283 LIST_INSERT_HEAD(&(card->mem), mem, next);
300 emuxki_rmem_alloc(emuxki_dev *card, size_t size)
305 mem = emuxki_mem_new(card, EMU_RMEM, size);
310 LIST_INSERT_HEAD(&(card->mem), mem, next);
318 emuxki_mem_free(emuxki_dev *card, void *ptr)
324 ptb = card->ptb_log_base;
325 silentpage = (card->silentpage_phy_base) << 1;
327 LIST_FOREACH(mem, &card->mem, next) {
361 = IS_AUDIGY(&chan->voice->stream->card->config) ? 0xc0 : 0xff; /* not max */
426 chan->voice->stream->card->channel[num] = chan;
434 chan->voice->stream->card->channel[chan->num] = NULL;
491 emuxki_dev *card = chan->voice->stream->card;
494 if (IS_AUDIGY(&card->config)) {
495 emuxki_chan_write(&card->config, chano, 0x4c, 0);
496 emuxki_chan_write(&card->config, chano, 0x4d, 0);
497 emuxki_chan_write(&card->config, chano, 0x4e, 0);
498 emuxki_chan_write(&card->config, chano, 0x4f, 0);
500 emuxki_chan_write(&card->config, chano, EMU_A_CHAN_FXRT1,
505 emuxki_chan_write(&card->config, chano, EMU_A_CHAN_FXRT2,
510 emuxki_chan_write(&card->config, chano, EMU_A_CHAN_SENDAMOUNTS,
516 emuxki_chan_write(&card->config, chano, EMU_CHAN_FXRT,
523 emuxki_chan_write(&card->config, chano, 0x10000000 | EMU_CHAN_PTRX,
525 emuxki_chan_write(&card->config, chano, EMU_CHAN_DSL,
527 emuxki_chan_write(&card->config, chano, EMU_CHAN_PSST,
536 emuxki_dev *card = chan->voice->stream->card;
543 mapval = (card->silentpage_phy_base) << 1 | EMU_CHAN_MAP_PTI_MASK;
546 emuxki_chan_write(&card->config, chano, EMU_CHAN_CPF_STEREO, voice->stereo);
550 emuxki_chan_write(&card->config, chano, EMU_CHAN_CCCA,
554 emuxki_chan_write(&card->config, chano, EMU_CHAN_Z1, 0);
555 emuxki_chan_write(&card->config, chano, EMU_CHAN_Z2, 0);
556 emuxki_chan_write(&card->config, chano, EMU_CHAN_MAPA, mapval);
557 emuxki_chan_write(&card->config, chano, EMU_CHAN_MAPB, mapval);
558 emuxki_chan_write(&card->config, chano, EMU_CHAN_CVCF_CURRFILTER,
560 emuxki_chan_write(&card->config, chano, EMU_CHAN_VTFT_FILTERTARGET,
562 emuxki_chan_write(&card->config, chano, EMU_CHAN_ATKHLDM,
565 emuxki_chan_write(&card->config, chano, EMU_CHAN_DCYSUSM,
568 emuxki_chan_write(&card->config, chano, EMU_CHAN_LFOVAL1,
570 emuxki_chan_write(&card->config, chano, EMU_CHAN_LFOVAL2,
572 emuxki_chan_write(&card->config, chano, EMU_CHAN_FMMOD,
575 emuxki_chan_write(&card->config, chano, EMU_CHAN_TREMFRQ,
577 emuxki_chan_write(&card->config, chano, EMU_CHAN_FM2FRQ2,
580 emuxki_chan_write(&card->config, chano, EMU_CHAN_ENVVAL,
582 emuxki_chan_write(&card->config, chano, EMU_CHAN_ATKHLDV,
585 emuxki_chan_write(&card->config, chano, EMU_CHAN_ENVVOL,
587 emuxki_chan_write(&card->config, chano, EMU_CHAN_PEFE,
598 emuxki_dev *card = chan->voice->stream->card;
609 emuxki_chan_write(&card->config, chano,
611 emuxki_chan_write(&card->config, chano, EMU_CHAN_CCR_CACHEINVALIDSIZE, 0);
612 emuxki_chan_write(&card->config, chano, EMU_CHAN_CCR_READADDRESS, 64);
613 emuxki_chan_write(&card->config, chano, EMU_CHAN_CCR_CACHEINVALIDSIZE,
615 emuxki_chan_write(&card->config, chano, EMU_CHAN_IFATN,
618 emuxki_chan_write(&card->config, chano, EMU_CHAN_VTFT_VOLUMETARGET,
620 emuxki_chan_write(&card->config, chano, EMU_CHAN_CVCF_CURRVOL,
622 emuxki_chan_write(&card->config, 0, EMU_MKSUBREG(1, chano,
625 emuxki_chan_write(&card->config, 0, EMU_MKSUBREG(1, chano,
628 emuxki_chan_write(&card->config, chano, EMU_CHAN_DCYSUSV,
631 emuxki_chan_write(&card->config, chano, EMU_CHAN_PTRX_PITCHTARGET,
633 emuxki_chan_write(&card->config, chano, EMU_CHAN_CPF_PITCH,
635 emuxki_chan_write(&card->config, chano, EMU_CHAN_IP, chan->pitch.intial);
644 emuxki_dev *card = chan->voice->stream->card;
650 emuxki_chan_write(&card->config, chano, EMU_CHAN_PTRX_PITCHTARGET, 0);
651 emuxki_chan_write(&card->config, chano, EMU_CHAN_CPF_PITCH, 0);
652 emuxki_chan_write(&card->config, chano, EMU_CHAN_IFATN_ATTENUATION, 0xff);
653 emuxki_chan_write(&card->config, chano, EMU_CHAN_VTFT_VOLUMETARGET, 0);
654 emuxki_chan_write(&card->config, chano, EMU_CHAN_CVCF_CURRVOL, 0);
655 emuxki_chan_write(&card->config, chano, EMU_CHAN_IP, 0);
689 emuxki_channel **channel = voice->stream->card->channel;
773 emuxki_chan_write(&voice->stream->card->config, 0, buffaddr_reg, 0);
774 emuxki_chan_write(&voice->stream->card->config, 0, buffsize_reg,
786 IS_AUDIGY(&voice->stream->card->config) ? 0xc0 : 0xff; /* not max */
803 switch(voice->stream->card->play_mode) {
873 switch(voice->stream->card->play_mode) {
943 switch(voice->stream->card->play_mode) {
1132 LIST_FOREACH(mem, &voice->stream->card->mem, next) {
1197 emuxki_chan_write(&voice->stream->card->config, 0, buffaddr_reg, voice->buffer->phy_base);
1198 emuxki_chan_write(&voice->stream->card->config, 0, buffsize_reg, EMU_RECBS_BUFSIZE_NONE);
1199 emuxki_chan_write(&voice->stream->card->config, 0, buffsize_reg, EMU_RECBS_BUFSIZE_4096);
1204 while (emuxki_chan_read(&voice->stream->card->config, 0, idx_reg))
1215 return (emuxki_chan_read(&voice->stream->card->config,
1223 idx_reg = IS_AUDIGY(&voice->stream->card->config) ? EMU_A_MICIDX : EMU_MICIDX;
1226 idx_reg = IS_AUDIGY(&voice->stream->card->config) ? EMU_A_ADCIDX : EMU_ADCIDX;
1235 //TRACE(("emuxki_voice_curaddr : %lu\n", emuxki_chan_read(&voice->stream->card->config, 0, idx_reg)));
1236 return emuxki_chan_read(&voice->stream->card->config,
1244 emuxki_resched_timer(emuxki_dev *card)
1254 LIST_FOREACH(stream, &card->streams, next) {
1267 if (card->timerate > timerate) {
1268 LOG(("emuxki_resched_timer written (old %u, new %u)\n", card->timerate, timerate));
1269 card->timerate = timerate;
1270 emuxki_reg_write_16(&card->config, EMU_TIMER, timerate);
1272 if (!active && (card->timerstate & EMU_TIMER_STATE_ENABLED)) {
1273 emuxki_inte_disable(&card->config, EMU_INTE_INTERTIMERENB);
1274 card->timerstate &= ~EMU_TIMER_STATE_ENABLED;
1277 if (active && !(card->timerstate & EMU_TIMER_STATE_ENABLED)) {
1278 emuxki_inte_enable(&card->config, EMU_INTE_INTERTIMERENB);
1279 card->timerstate |= EMU_TIMER_STATE_ENABLED;
1282 LOG(("emuxki_resched_timer state : %x\n", card->timerstate));
1310 if (IS_AUDIGY(&voice->stream->card->config))
1317 if (IS_AUDIGY(&voice->stream->card->config))
1323 if (IS_AUDIGY(&voice->stream->card->config))
1350 emuxki_inte_enable(&voice->stream->card->config, EMU_INTE_MICBUFENABLE);
1357 adccr_value |= ( (IS_AUDIGY(&voice->stream->card->config) ? EMU_A_ADCCR_LCHANENABLE : EMU_ADCCR_LCHANENABLE )
1358 | ( IS_AUDIGY(&voice->stream->card->config) ? EMU_A_ADCCR_RCHANENABLE : EMU_ADCCR_RCHANENABLE ));
1360 adccr_value |= IS_AUDIGY(&voice->stream->card->config) ? EMU_A_ADCCR_LCHANENABLE : EMU_ADCCR_LCHANENABLE;
1363 emuxki_chan_write(&voice->stream->card->config, 0, EMU_ADCCR, adccr_value);
1365 emuxki_inte_enable(&voice->stream->card->config, EMU_INTE_ADCBUFENABLE);
1369 if (IS_AUDIGY(&voice->stream->card->config)) {
1370 emuxki_chan_write(&voice->stream->card->config, 0, EMU_A_FXWC1,
1372 emuxki_chan_write(&voice->stream->card->config, 0, EMU_A_FXWC2,
1375 emuxki_chan_write(&voice->stream->card->config, 0, EMU_FXWC,
1378 emuxki_inte_enable(&voice->stream->card->config, EMU_INTE_EFXBUFENABLE);
1386 emuxki_resched_timer(voice->stream->card);
1404 emuxki_inte_disable(&voice->stream->card->config, EMU_INTE_MICBUFENABLE);
1407 emuxki_chan_write(&voice->stream->card->config, 0, EMU_ADCCR, 0);
1408 emuxki_inte_disable(&voice->stream->card->config, EMU_INTE_ADCBUFENABLE);
1411 if (IS_AUDIGY(&voice->stream->card->config)) {
1412 emuxki_chan_write(&voice->stream->card->config, 0, EMU_A_FXWC1, 0);
1413 emuxki_chan_write(&voice->stream->card->config, 0, EMU_A_FXWC2, 0);
1415 emuxki_chan_write(&voice->stream->card->config, 0, EMU_FXWC, 0);
1416 emuxki_inte_disable(&voice->stream->card->config, EMU_INTE_EFXBUFENABLE);
1424 emuxki_resched_timer(voice->stream->card);
1490 emuxki_mem_free(stream->card, voice->buffer->log_base);
1525 buffer = emuxki_pmem_alloc(stream->card, stream->bufframes
1528 buffer = emuxki_rmem_alloc(stream->card, stream->bufframes
1668 emuxki_stream_new(emuxki_dev *card, uint8 use, uint32 bufframes, uint8 bufcount)
1677 stream->card = card;
1700 LIST_INSERT_HEAD((&card->streams), stream, next);
1724 emuxki_mem_free(stream->card, voice->buffer->log_base);
1752 emuxki_gpr_set(emuxki_dev *card, emuxki_gpr *gpr, int32 type, float *values)
1765 emuxki_write_gpr(&card->config, gpr->gpr + i, 0);
1782 emuxki_write_gpr(&card->config, gpr->gpr + i, db_table[index]);
1791 emuxki_gpr_get(emuxki_dev *card, emuxki_gpr *gpr, int32 type, float *values)
1813 emuxki_gpr_dump(emuxki_dev * card, uint16 count)
1821 value = emuxki_read_gpr(&card->config, pc);
1829 emuxki_gpr_new(emuxki_dev *card, const char *name, emuxki_gpr_type type, uint16 *gpr_num,
1837 gpr = &card->gpr[*gpr_num];
1852 emuxki_gpr_set(card, gpr, EMU_MIX_MUTE, values);
1858 emuxki_gpr_set(card, gpr, EMU_MIX_GAIN, values);
1867 emuxki_parameter_set(emuxki_dev *card, const void* cookie, int32 type, int32 *value)
1875 card->digital_enabled = *value == 1;
1876 if (IS_AUDIGY(&card->config))
1877 if (IS_AUDIGY2(&card->config)) {
1879 emuxki_reg_write_32(&card->config, EMU_A_IOCFG,
1880 (card->digital_enabled ? 0 : EMU_A_IOCFG_GPOUT0) |
1881 (emuxki_reg_read_32(&card->config, EMU_A_IOCFG)
1885 emuxki_reg_write_32(&card->config, EMU_A_IOCFG,
1886 (card->digital_enabled ? EMU_A_IOCFG_GPOUT0 | EMU_A_IOCFG_GPOUT1 : 0) |
1887 (emuxki_reg_read_32(&card->config, EMU_A_IOCFG)
1892 emuxki_reg_write_32(&card->config, EMU_HCFG,
1893 (card->digital_enabled ? EMU_HCFG_GPOUTPUT0 : 0) |
1894 (emuxki_reg_read_32(&card->config, EMU_HCFG) & ~EMU_HCFG_GPOUTPUT0));
1903 card->play_mode = (*value + 1) * 2;
1904 LIST_FOREACH(stream, &card->streams, next) {
1921 emuxki_parameter_get(emuxki_dev *card, const void* cookie, int32 type, int32 *value)
1927 *value = card->digital_enabled ? 1 : 0;
1930 *value = card->play_mode / 2 - 1;
1940 emuxki_dev *card = arg;
1946 while ((ipr = emuxki_reg_read_32(&card->config, EMU_IPR))) {
1950 LIST_FOREACH(stream, &card->streams, next) {
1965 //trace_hardware_regs(&card->config);
1978 midi_interrupt(card); /* Gameport */
1982 if (!midi_interrupt(card)) {
1983 emuxki_inte_disable(&card->config, EMU_INTE_MIDITXENABLE);
1992 LIST_FOREACH(stream, &card->streams, next) {
2006 //trace_hardware_regs(&card->config);
2019 LIST_FOREACH(stream, &card->streams, next)
2025 TRACE(("EMU_IPR_CHANNELLOOP read %x\n", emuxki_chan_read(&voice->card->config, 0, EMU_CLIPL)));
2026 emuxki_chan_write(&voice->card->config, 0, EMU_CLIPL, emuxki_chan_read(&voice->card->config, 0, EMU_CLIPL));
2039 emuxki_reg_write_32(&card->config, EMU_IPR, ipr);
2042 if (IS_AUDIGY2(&card->config)) {
2043 while ((ipr = emuxki_reg_read_32(&card->config, EMU_A2_IPR2))) {
2044 emuxki_reg_write_32(&card->config, EMU_A2_IPR2, ipr);
2048 if (!IS_AUDIGY2_VALUE(&card->config)) {
2049 while ((ipr = emuxki_reg_read_32(&card->config, EMU_A2_IPR3))) {
2050 emuxki_reg_write_32(&card->config, EMU_A2_IPR3, ipr);
2115 emuxki_dev * card)
2118 sprintf(card->midi.name, "midi/emuxki/%ld", card-cards+1);
2119 names[num_names++] = card->midi.name;
2122 // sprintf(card->joy.name1, "joystick/"DRIVER_NAME "/%x", card-cards+1);
2123 // names[num_names++] = card->joy.name1;
2125 sprintf(card->name, "audio/hmulti/emuxki/%ld", card-cards+1);
2126 names[num_names++] = card->name;
2133 emuxki_setup(emuxki_dev * card)
2139 PRINT(("setup_emuxki(%p)\n", card));
2141 make_device_names(card);
2142 card->config.nabmbar = card->info.u.h0.base_registers[0];
2143 card->config.irq = card->info.u.h0.interrupt_line;
2144 card->config.type = 0;
2145 if (card->info.device_id == CREATIVELABS_AUDIGY_DEVICE_ID) {
2146 card->config.type |= TYPE_AUDIGY;
2147 if (card->info.revision == 4)
2148 card->config.type |= TYPE_AUDIGY2;
2149 } else if (card->info.device_id == CREATIVELABS_AUDIGY2_VALUE_DEVICE_ID)
2150 card->config.type |= TYPE_AUDIGY | TYPE_AUDIGY2 | TYPE_AUDIGY2_VALUE;
2154 card->name, card->info.device_id, card->info.revision,
2155 card->info.u.h0.subsystem_id, card->config.nabmbar));
2157 cmd = (*pci->read_pci_config)(card->info.bus, card->info.device, card->info.function, PCI_command, 2);
2159 (*pci->write_pci_config)(card->info.bus, card->info.device, card->info.function, PCI_command, 2, cmd | PCI_command_io);
2160 cmd = (*pci->read_pci_config)(card->info.bus, card->info.device, card->info.function, PCI_command, 2);
2163 dump_hardware_regs(&card->config);
2165 emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_LOCKSOUNDCACHE | EMU_HCFG_LOCKTANKCACHE_MASK|
2168 dump_hardware_regs(&card->config);
2172 if ((err = (*mpu401->create_device)((card->config.nabmbar + (!IS_AUDIGY(&card->config) ? EMU_MUDATA : 0)),
2173 &card->midi.driver, !IS_AUDIGY(&card->config) ? 0 : 0x11020004, midi_interrupt_op, &card->midi)) < B_OK)
2176 card->midi.card = card;
2180 /* base = card->info.u.h0.base_registers[0];
2181 (*pci->write_pci_config) (card->info.bus,card->info.device,
2182 card->info.function, 0x10, 2, base);
2184 if ((*gameport->create_device)(base, &card->joy.driver) < B_OK) {
2186 (*gameport->delete_device)(card->joy.driver);
2192 emuxki_codec_write(&card->config, 0x00, 0x0000);
2195 ac97_init(&card->config);
2196 ac97_amp_enable(&card->config, true);
2199 ac97_get_vendor_id(&card->config)));
2201 ac97_get_vendor_id_description(&card->config)));
2203 ac97_get_3d_stereo_enhancement(&card->config)));
2205 if (IS_AUDIGY2(&card->config)) {
2206 emuxki_reg_write_32(&card->config, EMU_A_IOCFG,
2207 EMU_A_IOCFG_GPOUT0 | emuxki_reg_read_32(&card->config, EMU_A_IOCFG));
2210 dump_hardware_regs(&card->config);
2212 /*PRINT(("codec master output = %#04x\n",emuxki_codec_read(&card->config, 0x02)));
2213 PRINT(("codec aux output = %#04x\n",emuxki_codec_read(&card->config, 0x04)));
2214 PRINT(("codec mono output = %#04x\n",emuxki_codec_read(&card->config, 0x06)));
2215 PRINT(("codec pcm output = %#04x\n",emuxki_codec_read(&card->config, 0x18)));
2216 PRINT(("codec line in = %#04x\n",emuxki_codec_read(&card->config, 0x10)));
2217 PRINT(("codec record line in= %#04x\n",emuxki_codec_read(&card->config, 0x1a)));
2218 PRINT(("codec record gain = %#04x\n",emuxki_codec_read(&card->config, 0x1c)));*/
2220 /*PRINT(("adc index = %#08x\n",emuxki_chan_read(&card->config, EMU_ADCIDX, 0)));
2221 PRINT(("micro index = %#08x\n",emuxki_chan_read(&card->config, EMU_MICIDX, 0)));
2222 PRINT(("fx index = %#08x\n",emuxki_chan_read(&card->config, EMU_FXIDX, 0)));
2223 PRINT(("adc addr = %#08x\n",emuxki_chan_read(&card->config, EMU_ADCBA, 0)));
2224 PRINT(("micro addr = %#08x\n",emuxki_chan_read(&card->config, EMU_MICBA, 0)));
2225 PRINT(("fx addr = %#08x\n",emuxki_chan_read(&card->config, EMU_FXBA, 0)));
2226 PRINT(("adc size = %#08x\n",emuxki_chan_read(&card->config, EMU_ADCBS, 0)));
2227 PRINT(("micro size = %#08x\n",emuxki_chan_read(&card->config, EMU_MICBS, 0)));
2228 PRINT(("fx size = %#08x\n",emuxki_chan_read(&card->config, EMU_FXBS, 0)));
2230 PRINT(("EMU_ADCCR = %#08x\n",emuxki_chan_read(&card->config, EMU_ADCCR, 0)));
2231 PRINT(("EMU_FXWC = %#08x\n",emuxki_chan_read(&card->config, EMU_FXWC, 0)));
2232 PRINT(("EMU_FXWC = %#08x\n",emuxki_reg_read_32(&card->config, EMU_FXWC)));*/
2237 emuxki_codec_write(&card->config, AC97_MASTER_VOLUME, 0x0000);
2239 emuxki_codec_write(&card->config, AC97_AUX_OUT_VOLUME, 0x0000);
2241 //emuxki_codec_write(&card->config, AC97_MONO_VOLUME, 0x0004);
2243 emuxki_codec_write(&card->config, AC97_PCM_OUT_VOLUME, 0x0808);
2245 //emuxki_codec_write(&card->config, AC97_LINE_IN_VOLUME, 0x8808);
2247 emuxki_codec_write(&card->config, AC97_RECORD_SELECT, 0x0404);
2249 //emuxki_codec_write(&card->config, AC97_RECORD_GAIN, 0x0000);
2251 PRINT(("codec master output = %#04x\n",emuxki_codec_read(&card->config, AC97_MASTER_VOLUME)));
2252 PRINT(("codec aux output = %#04x\n",emuxki_codec_read(&card->config, AC97_AUX_OUT_VOLUME)));
2253 PRINT(("codec mono output = %#04x\n",emuxki_codec_read(&card->config, AC97_MONO_VOLUME)));
2254 PRINT(("codec pcm output = %#04x\n",emuxki_codec_read(&card->config, AC97_PCM_OUT_VOLUME)));
2255 PRINT(("codec line in = %#04x\n",emuxki_codec_read(&card->config, AC97_LINE_IN_VOLUME)));
2256 PRINT(("codec record line in= %#04x\n",emuxki_codec_read(&card->config, AC97_RECORD_SELECT)));
2257 PRINT(("codec record gain = %#04x\n",emuxki_codec_read(&card->config, AC97_RECORD_GAIN)));
2259 if (emuxki_codec_read(&card->config, AC97_EXTENDED_AUDIO_ID) & 0x0080) {
2260 card->config.type |= TYPE_LIVE_5_1;
2261 emuxki_chan_write(&card->config, 0, EMU_AC97SLOT, EMU_AC97SLOT_CENTER | EMU_AC97SLOT_LFE);
2262 emuxki_codec_write(&card->config, AC97_SURROUND_VOLUME, 0x0000);
2265 if ((err = emuxki_init(card)))
2268 if (IS_AUDIGY(&card->config) || IS_LIVE_5_1(&card->config)) {
2269 card->play_mode = 6; // mode 5.1
2271 card->play_mode = 4; // mode 4.0
2274 emuxki_reg_write_32(&card->config, EMU_INTE, EMU_INTE_SAMPLERATER | EMU_INTE_PCIERRENABLE);
2275 if (IS_AUDIGY2(&card->config)) {
2276 emuxki_reg_write_32(&card->config, EMU_A2_INTE2, 0);
2277 if (!IS_AUDIGY2_VALUE(&card->config)) {
2278 emuxki_reg_write_32(&card->config, EMU_A2_INTE3, 0);
2282 PRINT(("installing interrupt : %" B_PRIx32 "\n", card->config.irq));
2283 err = install_io_interrupt_handler(card->config.irq, emuxki_int, card, 0);
2286 emuxki_shutdown(card);
2290 emuxki_inte_enable(&card->config, EMU_INTE_VOLINCRENABLE | EMU_INTE_VOLDECRENABLE
2292 if (IS_AUDIGY2(&card->config)) {
2293 emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_AUDIOENABLE |
2296 } else if (IS_AUDIGY(&card->config)) {
2297 emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_AUDIOENABLE |
2300 emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_AUDIOENABLE |
2311 emuxki_dump_fx(emuxki_dev * card)
2319 zero = IS_AUDIGY(&card->config) ? EMU_A_DSP_CST(0) : EMU_DSP_CST(0);
2322 emuxki_dsp_getop(&card->config, &pc, &op, &r, &a, &x, &y);
2332 emuxki_initfx(emuxki_dev * card)
2341 emuxki_write_gpr(&card->config, pc, 0);
2342 card->gpr[pc].gpr = -1;
2346 emuxki_chan_write(&card->config, 0, EMU_TANKMEMDATAREGBASE + pc, 0);
2347 emuxki_chan_write(&card->config, 0, EMU_TANKMEMADDRREGBASE + pc, 0);
2360 a_front_gpr = emuxki_gpr_new(card, "Analog Front",
2362 a_rear_gpr = emuxki_gpr_new(card, "Analog Rear",
2364 if (IS_AUDIGY(&card->config) || IS_LIVE_5_1(&card->config))
2365 a_center_sub_gpr = emuxki_gpr_new(card, "Analog Center/Sub",
2368 d_front_gpr = emuxki_gpr_new(card, "Digital Front",
2370 d_rear_gpr = emuxki_gpr_new(card, "Digital Rear",
2372 d_center_sub_gpr = emuxki_gpr_new(card, "Digital Center/Sub",
2376 p_ac97_in_gpr = emuxki_gpr_new(card, "AC97 Record In",
2378 p_cd_in_gpr = emuxki_gpr_new(card, "CD Spdif In",
2382 r_ac97_in_gpr = emuxki_gpr_new(card, "AC97 Record In",
2384 r_cd_in_gpr = emuxki_gpr_new(card, "CD Spdif In",
2386 r_fx_out_gpr = emuxki_gpr_new(card, "FX 0/1",
2389 card->gpr_count = gpr;
2391 if (IS_AUDIGY(&card->config)) {
2393 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2397 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2403 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2407 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2413 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2417 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2423 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2427 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2433 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2437 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2443 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2447 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2453 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2457 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2463 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2467 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2473 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2477 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2483 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2487 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2493 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2497 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2503 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2507 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2513 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2517 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2523 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2527 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2533 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2537 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2546 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
2550 emuxki_chan_write(&card->config, 0, EMU_A_DBG, 0); /* Is it really necessary ? */
2554 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2558 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2564 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2568 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2574 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2578 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2584 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2588 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2594 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2598 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2604 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2608 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2614 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2618 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2624 if (IS_LIVE_5_1(&card->config)) {
2625 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2629 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2636 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2640 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2646 /*emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2650 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2656 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2660 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2666 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2670 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2676 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2680 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2686 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2690 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
2696 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2700 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
2707 emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
2711 emuxki_chan_write(&card->config, 0, EMU_DBG, 0); /* Is it really necessary ? */
2714 emuxki_dump_fx(card);
2719 emuxki_init(emuxki_dev * card)
2726 emuxki_chan_write(&card->config, 0, EMU_CLIEL, 0);
2727 emuxki_chan_write(&card->config, 0, EMU_CLIEH, 0);
2728 emuxki_chan_write(&card->config, 0, EMU_SOLEL, 0);
2729 emuxki_chan_write(&card->config, 0, EMU_SOLEH, 0);
2732 emuxki_chan_write(&card->config, 0, EMU_MICBS, EMU_RECBS_BUFSIZE_NONE);
2733 emuxki_chan_write(&card->config, 0, EMU_MICBA, 0);
2734 emuxki_chan_write(&card->config, 0, EMU_FXBS, EMU_RECBS_BUFSIZE_NONE);
2735 emuxki_chan_write(&card->config, 0, EMU_FXBA, 0);
2736 emuxki_chan_write(&card->config, 0, EMU_ADCBS, EMU_RECBS_BUFSIZE_NONE);
2737 emuxki_chan_write(&card->config, 0, EMU_ADCBA, 0);
2739 if (IS_AUDIGY(&card->config)) {
2740 emuxki_chan_write(&card->config, 0, EMU_SPBYPASS, EMU_SPBYPASS_24_BITS);
2741 emuxki_chan_write(&card->config, 0, EMU_AC97SLOT, EMU_AC97SLOT_CENTER | EMU_AC97SLOT_LFE);
2746 emuxki_chan_write(&card->config, i, EMU_CHAN_DCYSUSV, 0);
2747 emuxki_chan_write(&card->config, i, EMU_CHAN_IP, 0);
2748 emuxki_chan_write(&card->config, i, EMU_CHAN_VTFT, 0xffff);
2749 emuxki_chan_write(&card->config, i, EMU_CHAN_CVCF, 0xffff);
2750 emuxki_chan_write(&card->config, i, EMU_CHAN_PTRX, 0);
2751 emuxki_chan_write(&card->config, i, EMU_CHAN_CPF, 0);
2752 emuxki_chan_write(&card->config, i, EMU_CHAN_CCR, 0);
2753 emuxki_chan_write(&card->config, i, EMU_CHAN_PSST, 0);
2754 emuxki_chan_write(&card->config, i, EMU_CHAN_DSL, 0x10); /* Why 16 ? */
2755 emuxki_chan_write(&card->config, i, EMU_CHAN_CCCA, 0);
2756 emuxki_chan_write(&card->config, i, EMU_CHAN_Z1, 0);
2757 emuxki_chan_write(&card->config, i, EMU_CHAN_Z2, 0);
2758 emuxki_chan_write(&card->config, i, EMU_CHAN_FXRT, 0x32100000);
2759 emuxki_chan_write(&card->config, i, EMU_CHAN_ATKHLDM, 0);
2760 emuxki_chan_write(&card->config, i, EMU_CHAN_DCYSUSM, 0);
2761 emuxki_chan_write(&card->config, i, EMU_CHAN_IFATN, 0xffff);
2762 emuxki_chan_write(&card->config, i, EMU_CHAN_PEFE, 0);
2763 emuxki_chan_write(&card->config, i, EMU_CHAN_FMMOD, 0);
2764 emuxki_chan_write(&card->config, i, EMU_CHAN_TREMFRQ, 24);
2765 emuxki_chan_write(&card->config, i, EMU_CHAN_FM2FRQ2, 24);
2766 emuxki_chan_write(&card->config, i, EMU_CHAN_TEMPENV, 0);
2768 emuxki_chan_write(&card->config, i, EMU_CHAN_LFOVAL2, 0);
2769 emuxki_chan_write(&card->config, i, EMU_CHAN_LFOVAL1, 0);
2770 emuxki_chan_write(&card->config, i, EMU_CHAN_ATKHLDV, 0);
2771 emuxki_chan_write(&card->config, i, EMU_CHAN_ENVVOL, 0);
2772 emuxki_chan_write(&card->config, i, EMU_CHAN_ENVVAL, 0);
2781 emuxki_chan_write(&card->config, 0, EMU_SPCS0, spcs);
2782 emuxki_chan_write(&card->config, 0, EMU_SPCS1, spcs);
2783 emuxki_chan_write(&card->config, 0, EMU_SPCS2, spcs);
2785 if (IS_AUDIGY2(&card->config)) {
2786 emuxki_chan_write(&card->config, 0, EMU_A2_SPDIF_SAMPLERATE, EMU_A2_SPDIF_UNKNOWN);
2788 emuxki_p16v_write(&card->config, 0, EMU_A2_SRCSEL,
2791 if (IS_AUDIGY2_VALUE(&card->config)) {
2792 emuxki_p16v_write(&card->config, 0, EMU_A2_P17V_I2S, EMU_A2_P17V_I2S_ENABLE);
2793 emuxki_p16v_write(&card->config, 0, EMU_A2_P17V_SPDIF, EMU_A2_P17V_SPDIF_ENABLE);
2795 emuxki_reg_write_32(&card->config, EMU_A_IOCFG,
2796 emuxki_reg_read_32(&card->config, EMU_A_IOCFG) & ~0x8);
2798 emuxki_p16v_write(&card->config, 0, EMU_A2_SRCMULTI, EMU_A2_SRCMULTI_ENABLE_INPUT);
2803 emuxki_initfx(card);
2806 card->ptb_area = alloc_mem(&card->ptb_phy_base, &card->ptb_log_base,
2810 card->silentpage_area = alloc_mem(&card->silentpage_phy_base, &card->silentpage_log_base,
2813 if (card->ptb_area < B_OK || card->silentpage_area < B_OK) {
2815 if (card->ptb_area > B_OK)
2816 delete_area(card->ptb_area);
2817 if (card->silentpage_area > B_OK)
2818 delete_area(card->silentpage_area);
2824 memset(card->ptb_log_base, 0, EMU_PTESIZE);
2831 silentpage = ((uintptr_t)card->silentpage_phy_base) << 1;
2832 ptb = card->ptb_log_base;
2837 emuxki_chan_write(&card->config, 0, EMU_PTB, (uintptr_t)card->ptb_phy_base);
2838 emuxki_chan_write(&card->config, 0, EMU_TCBS, 0); /* This means 16K TCB */
2839 emuxki_chan_write(&card->config, 0, EMU_TCB, 0); /* No TCB use for now */
2847 emuxki_chan_write(&card->config, i, EMU_CHAN_MAPA, silentpage);
2848 emuxki_chan_write(&card->config, i, EMU_CHAN_MAPB, silentpage);
2849 card->channel[i] = NULL;
2853 LIST_INIT(&(card->streams));
2856 LIST_INIT(&(card->mem));
2859 card->timerstate &= ~EMU_TIMER_STATE_ENABLED;
2860 card->timerate = 0xffff;
2979 emuxki_shutdown(emuxki_dev *card)
2983 PRINT(("shutdown(%p)\n", card));
2985 emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_LOCKSOUNDCACHE |
2987 emuxki_reg_write_32(&card->config, EMU_INTE, 0);
2989 dump_hardware_regs(&card->config);
2992 emuxki_chan_write(&card->config, 0, EMU_CLIEL, 0);
2993 emuxki_chan_write(&card->config, 0, EMU_CLIEH, 0);
2994 emuxki_chan_write(&card->config, 0, EMU_SOLEL, 0);
2995 emuxki_chan_write(&card->config, 0, EMU_SOLEH, 0);
3000 emuxki_chan_write(&card->config, i, EMU_CHAN_DCYSUSV, 0);
3002 emuxki_chan_write(&card->config, i, EMU_CHAN_VTFT, 0);
3003 emuxki_chan_write(&card->config, i, EMU_CHAN_CVCF, 0);
3004 emuxki_chan_write(&card->config, i, EMU_CHAN_PTRX, 0);
3005 emuxki_chan_write(&card->config, i, EMU_CHAN_CPF, 0);
3008 remove_io_interrupt_handler(card->config.irq, emuxki_int, card);
3014 emuxki_chan_write(&card->config, 0, EMU_MICBS, EMU_RECBS_BUFSIZE_NONE);
3015 emuxki_chan_write(&card->config, 0, EMU_MICBA, 0);
3016 emuxki_chan_write(&card->config, 0, EMU_FXBS, EMU_RECBS_BUFSIZE_NONE);
3017 emuxki_chan_write(&card->config, 0, EMU_FXBA, 0);
3018 if (IS_AUDIGY(&card->config)) {
3019 emuxki_chan_write(&card->config, 0, EMU_A_FXWC1, 0);
3020 emuxki_chan_write(&card->config, 0, EMU_A_FXWC2, 0);
3022 emuxki_chan_write(&card->config, 0, EMU_FXWC, 0);
3024 emuxki_chan_write(&card->config, 0, EMU_ADCBS, EMU_RECBS_BUFSIZE_NONE);
3025 emuxki_chan_write(&card->config, 0, EMU_ADCBA, 0);
3031 emuxki_chan_write(&card->config, 0, EMU_TCB, 0); /* 16K again */
3032 emuxki_chan_write(&card->config, 0, EMU_TCBS, 0);
3034 emuxki_chan_write(&card->config, 0, EMU_DBG, 0x8000); /* necessary ? */
3037 if (card->ptb_area > B_OK)
3038 delete_area(card->ptb_area);
3040 if (card->silentpage_area > B_OK)
3041 delete_area(card->silentpage_area);
3043 // (*gameport->delete_device)(card->joy.driver);