Lines Matching refs:emu
321 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_gpr_ctl_get() local
327 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_get()
330 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_get()
336 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_gpr_ctl_put() local
344 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_put()
356 snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, val); in snd_emu10k1_gpr_ctl_put()
359 snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, db_table[val]); in snd_emu10k1_gpr_ctl_put()
367 … snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[j * ctl->vcount + i], 0, bass_table[val][j]); in snd_emu10k1_gpr_ctl_put()
375 …snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[j * ctl->vcount + i], 0, treble_table[val][j]); in snd_emu10k1_gpr_ctl_put()
378 snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, onoff_table[val]); in snd_emu10k1_gpr_ctl_put()
383 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_put()
391 static void snd_emu10k1_fx8010_interrupt(struct snd_emu10k1 *emu) in snd_emu10k1_fx8010_interrupt() argument
395 irq = emu->fx8010.irq_handlers; in snd_emu10k1_fx8010_interrupt()
398 if (snd_emu10k1_ptr_read(emu, emu->gpr_base + irq->gpr_running, 0) & 0xffff0000) { in snd_emu10k1_fx8010_interrupt()
400 irq->handler(emu, irq->private_data); in snd_emu10k1_fx8010_interrupt()
401 snd_emu10k1_ptr_write(emu, emu->gpr_base + irq->gpr_running, 0, 1); in snd_emu10k1_fx8010_interrupt()
407 int snd_emu10k1_fx8010_register_irq_handler(struct snd_emu10k1 *emu, in snd_emu10k1_fx8010_register_irq_handler() argument
419 spin_lock_irqsave(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_register_irq_handler()
420 if (emu->fx8010.irq_handlers == NULL) { in snd_emu10k1_fx8010_register_irq_handler()
421 emu->fx8010.irq_handlers = irq; in snd_emu10k1_fx8010_register_irq_handler()
422 emu->dsp_interrupt = snd_emu10k1_fx8010_interrupt; in snd_emu10k1_fx8010_register_irq_handler()
423 snd_emu10k1_intr_enable(emu, INTE_FXDSPENABLE); in snd_emu10k1_fx8010_register_irq_handler()
425 irq->next = emu->fx8010.irq_handlers; in snd_emu10k1_fx8010_register_irq_handler()
426 emu->fx8010.irq_handlers = irq; in snd_emu10k1_fx8010_register_irq_handler()
428 spin_unlock_irqrestore(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_register_irq_handler()
432 int snd_emu10k1_fx8010_unregister_irq_handler(struct snd_emu10k1 *emu, in snd_emu10k1_fx8010_unregister_irq_handler() argument
438 spin_lock_irqsave(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_unregister_irq_handler()
439 tmp = emu->fx8010.irq_handlers; in snd_emu10k1_fx8010_unregister_irq_handler()
441 emu->fx8010.irq_handlers = tmp->next; in snd_emu10k1_fx8010_unregister_irq_handler()
442 if (emu->fx8010.irq_handlers == NULL) { in snd_emu10k1_fx8010_unregister_irq_handler()
443 snd_emu10k1_intr_disable(emu, INTE_FXDSPENABLE); in snd_emu10k1_fx8010_unregister_irq_handler()
444 emu->dsp_interrupt = NULL; in snd_emu10k1_fx8010_unregister_irq_handler()
452 spin_unlock_irqrestore(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_unregister_irq_handler()
494 static void snd_emu10k1_efx_write(struct snd_emu10k1 *emu, unsigned int pc, unsigned int data) in snd_emu10k1_efx_write() argument
496 pc += emu->audigy ? A_MICROCODEBASE : MICROCODEBASE; in snd_emu10k1_efx_write()
497 snd_emu10k1_ptr_write(emu, pc, 0, data); in snd_emu10k1_efx_write()
500 unsigned int snd_emu10k1_efx_read(struct snd_emu10k1 *emu, unsigned int pc) in snd_emu10k1_efx_read() argument
502 pc += emu->audigy ? A_MICROCODEBASE : MICROCODEBASE; in snd_emu10k1_efx_read()
503 return snd_emu10k1_ptr_read(emu, pc, 0); in snd_emu10k1_efx_read()
506 static int snd_emu10k1_gpr_poke(struct snd_emu10k1 *emu, in snd_emu10k1_gpr_poke() argument
513 for (gpr = 0; gpr < (emu->audigy ? 0x200 : 0x100); gpr++) { in snd_emu10k1_gpr_poke()
520 snd_emu10k1_ptr_write(emu, emu->gpr_base + gpr, 0, val); in snd_emu10k1_gpr_poke()
525 static int snd_emu10k1_gpr_peek(struct snd_emu10k1 *emu, in snd_emu10k1_gpr_peek() argument
531 for (gpr = 0; gpr < (emu->audigy ? 0x200 : 0x100); gpr++) { in snd_emu10k1_gpr_peek()
533 val = snd_emu10k1_ptr_read(emu, emu->gpr_base + gpr, 0); in snd_emu10k1_gpr_peek()
540 static int snd_emu10k1_tram_poke(struct snd_emu10k1 *emu, in snd_emu10k1_tram_poke() argument
547 for (tram = 0; tram < (emu->audigy ? 0x100 : 0xa0); tram++) { in snd_emu10k1_tram_poke()
558 snd_emu10k1_ptr_write(emu, TANKMEMDATAREGBASE + tram, 0, val); in snd_emu10k1_tram_poke()
559 if (!emu->audigy) { in snd_emu10k1_tram_poke()
560 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, addr); in snd_emu10k1_tram_poke()
562 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, addr << 12); in snd_emu10k1_tram_poke()
563 snd_emu10k1_ptr_write(emu, A_TANKMEMCTLREGBASE + tram, 0, addr >> 20); in snd_emu10k1_tram_poke()
569 static int snd_emu10k1_tram_peek(struct snd_emu10k1 *emu, in snd_emu10k1_tram_peek() argument
576 for (tram = 0; tram < (emu->audigy ? 0x100 : 0xa0); tram++) { in snd_emu10k1_tram_peek()
578 val = snd_emu10k1_ptr_read(emu, TANKMEMDATAREGBASE + tram, 0); in snd_emu10k1_tram_peek()
579 if (!emu->audigy) { in snd_emu10k1_tram_peek()
580 addr = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0); in snd_emu10k1_tram_peek()
582 addr = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0) >> 12; in snd_emu10k1_tram_peek()
583 addr |= snd_emu10k1_ptr_read(emu, A_TANKMEMCTLREGBASE + tram, 0) << 20; in snd_emu10k1_tram_peek()
592 static int snd_emu10k1_code_poke(struct snd_emu10k1 *emu, in snd_emu10k1_code_poke() argument
598 for (pc = 0; pc < (emu->audigy ? 2*1024 : 2*512); pc += 2) { in snd_emu10k1_code_poke()
609 snd_emu10k1_efx_write(emu, pc + 0, lo); in snd_emu10k1_code_poke()
610 snd_emu10k1_efx_write(emu, pc + 1, hi); in snd_emu10k1_code_poke()
615 static int snd_emu10k1_code_peek(struct snd_emu10k1 *emu, in snd_emu10k1_code_peek() argument
621 for (pc = 0; pc < (emu->audigy ? 2*1024 : 2*512); pc += 2) { in snd_emu10k1_code_peek()
623 if (put_user(snd_emu10k1_efx_read(emu, pc + 0), in snd_emu10k1_code_peek()
626 if (put_user(snd_emu10k1_efx_read(emu, pc + 1), in snd_emu10k1_code_peek()
634 snd_emu10k1_look_for_ctl(struct snd_emu10k1 *emu, in snd_emu10k1_look_for_ctl() argument
641 list_for_each_entry(ctl, &emu->fx8010.gpr_ctl, list) { in snd_emu10k1_look_for_ctl()
679 static int copy_gctl(struct snd_emu10k1 *emu, in copy_gctl() argument
689 if (emu->support_tlv) { in copy_gctl()
707 static int copy_gctl_to_user(struct snd_emu10k1 *emu, in copy_gctl_to_user() argument
716 if (emu->support_tlv) in copy_gctl_to_user()
736 static int snd_emu10k1_verify_controls(struct snd_emu10k1 *emu, in snd_emu10k1_verify_controls() argument
751 if (snd_emu10k1_look_for_ctl(emu, &id) == NULL) in snd_emu10k1_verify_controls()
759 if (copy_gctl(emu, gctl, icode->gpr_add_controls, i, in snd_emu10k1_verify_controls()
764 if (snd_emu10k1_look_for_ctl(emu, &gctl->id)) in snd_emu10k1_verify_controls()
767 down_read(&emu->card->controls_rwsem); in snd_emu10k1_verify_controls()
768 if (snd_ctl_find_id(emu->card, gctl_id)) { in snd_emu10k1_verify_controls()
769 up_read(&emu->card->controls_rwsem); in snd_emu10k1_verify_controls()
773 up_read(&emu->card->controls_rwsem); in snd_emu10k1_verify_controls()
782 if (copy_gctl(emu, gctl, icode->gpr_list_controls, i, in snd_emu10k1_verify_controls()
804 static int snd_emu10k1_add_controls(struct snd_emu10k1 *emu, in snd_emu10k1_add_controls() argument
826 if (copy_gctl(emu, gctl, icode->gpr_add_controls, i, in snd_emu10k1_add_controls()
841 ctl = snd_emu10k1_look_for_ctl(emu, &gctl->id); in snd_emu10k1_add_controls()
875 kctl = snd_ctl_new1(&knew, emu); in snd_emu10k1_add_controls()
876 err = snd_ctl_add(emu->card, kctl); in snd_emu10k1_add_controls()
884 list_add_tail(&ctl->list, &emu->fx8010.gpr_ctl); in snd_emu10k1_add_controls()
890 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE | in snd_emu10k1_add_controls()
902 static int snd_emu10k1_del_controls(struct snd_emu10k1 *emu, in snd_emu10k1_del_controls() argument
909 struct snd_card *card = emu->card; in snd_emu10k1_del_controls()
918 ctl = snd_emu10k1_look_for_ctl(emu, &id); in snd_emu10k1_del_controls()
926 static int snd_emu10k1_list_controls(struct snd_emu10k1 *emu, in snd_emu10k1_list_controls() argument
939 list_for_each_entry(ctl, &emu->fx8010.gpr_ctl, list) { in snd_emu10k1_list_controls()
959 if (copy_gctl_to_user(emu, icode->gpr_list_controls, in snd_emu10k1_list_controls()
972 static int snd_emu10k1_icode_poke(struct snd_emu10k1 *emu, in snd_emu10k1_icode_poke() argument
978 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_icode_poke()
979 err = snd_emu10k1_verify_controls(emu, icode, in_kernel); in snd_emu10k1_icode_poke()
982 strscpy(emu->fx8010.name, icode->name, sizeof(emu->fx8010.name)); in snd_emu10k1_icode_poke()
985 if (emu->audigy) in snd_emu10k1_icode_poke()
986 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_SINGLE_STEP); in snd_emu10k1_icode_poke()
988 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_icode_poke()
990 err = snd_emu10k1_del_controls(emu, icode, in_kernel); in snd_emu10k1_icode_poke()
993 err = snd_emu10k1_gpr_poke(emu, icode, in_kernel); in snd_emu10k1_icode_poke()
996 err = snd_emu10k1_tram_poke(emu, icode, in_kernel); in snd_emu10k1_icode_poke()
999 err = snd_emu10k1_code_poke(emu, icode, in_kernel); in snd_emu10k1_icode_poke()
1002 err = snd_emu10k1_add_controls(emu, icode, in_kernel); in snd_emu10k1_icode_poke()
1006 if (emu->audigy) in snd_emu10k1_icode_poke()
1007 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg); in snd_emu10k1_icode_poke()
1009 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg); in snd_emu10k1_icode_poke()
1011 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_icode_poke()
1015 static int snd_emu10k1_icode_peek(struct snd_emu10k1 *emu, in snd_emu10k1_icode_peek() argument
1020 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_icode_peek()
1021 strscpy(icode->name, emu->fx8010.name, sizeof(icode->name)); in snd_emu10k1_icode_peek()
1023 err = snd_emu10k1_gpr_peek(emu, icode); in snd_emu10k1_icode_peek()
1025 err = snd_emu10k1_tram_peek(emu, icode); in snd_emu10k1_icode_peek()
1027 err = snd_emu10k1_code_peek(emu, icode); in snd_emu10k1_icode_peek()
1029 err = snd_emu10k1_list_controls(emu, icode); in snd_emu10k1_icode_peek()
1030 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_icode_peek()
1034 static int snd_emu10k1_ipcm_poke(struct snd_emu10k1 *emu, in snd_emu10k1_ipcm_poke() argument
1047 pcm = &emu->fx8010.pcm[ipcm->substream]; in snd_emu10k1_ipcm_poke()
1048 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_ipcm_poke()
1049 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_poke()
1077 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_poke()
1078 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_ipcm_poke()
1082 static int snd_emu10k1_ipcm_peek(struct snd_emu10k1 *emu, in snd_emu10k1_ipcm_peek() argument
1093 pcm = &emu->fx8010.pcm[ipcm->substream]; in snd_emu10k1_ipcm_peek()
1094 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_ipcm_peek()
1095 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_peek()
1109 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_peek()
1110 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_ipcm_peek()
1214 static int _snd_emu10k1_audigy_init_efx(struct snd_emu10k1 *emu) in _snd_emu10k1_audigy_init_efx() argument
1265 snd_emu10k1_ptr_write(emu, A_DBG, 0, (emu->fx8010.dbg = 0) | A_DBG_SINGLE_STEP); in _snd_emu10k1_audigy_init_efx()
1285 if (emu->card_capabilities->spk71) { in _snd_emu10k1_audigy_init_efx()
1336 if (emu->card_capabilities->emu_model) { in _snd_emu10k1_audigy_init_efx()
1337 if (emu->card_capabilities->ca0108_chip) { in _snd_emu10k1_audigy_init_efx()
1368 emu->card_capabilities->ac97_chip ? "Audigy CD Playback Volume" : "CD Playback Volume", in _snd_emu10k1_audigy_init_efx()
1375 emu->card_capabilities->ac97_chip ? "Audigy CD Capture Volume" : "CD Capture Volume", in _snd_emu10k1_audigy_init_efx()
1394 emu->card_capabilities->ac97_chip ? "Line2 Playback Volume" : "Line Playback Volume", in _snd_emu10k1_audigy_init_efx()
1401 emu->card_capabilities->ac97_chip ? "Line2 Capture Volume" : "Line Capture Volume", in _snd_emu10k1_audigy_init_efx()
1420 emu->card_capabilities->ac97_chip ? "Aux2 Playback Volume" : "Aux Playback Volume", in _snd_emu10k1_audigy_init_efx()
1427 emu->card_capabilities->ac97_chip ? "Aux2 Capture Volume" : "Aux Capture Volume", in _snd_emu10k1_audigy_init_efx()
1455 if (emu->card_capabilities->spk71) { in _snd_emu10k1_audigy_init_efx()
1489 if (emu->card_capabilities->spk71) { in _snd_emu10k1_audigy_init_efx()
1582 if (emu->card_capabilities->spk71) in _snd_emu10k1_audigy_init_efx()
1590 if (emu->card_capabilities->emu_model) { in _snd_emu10k1_audigy_init_efx()
1592 dev_info(emu->card->dev, "EMU outputs on\n"); in _snd_emu10k1_audigy_init_efx()
1594 if (emu->card_capabilities->ca0108_chip) { in _snd_emu10k1_audigy_init_efx()
1614 if ((z==1) && (emu->card_capabilities->spdif_bug)) { in _snd_emu10k1_audigy_init_efx()
1616 dev_info(emu->card->dev, in _snd_emu10k1_audigy_init_efx()
1618 emu->card_capabilities->name); in _snd_emu10k1_audigy_init_efx()
1640 if (emu->card_capabilities->emu_model) { in _snd_emu10k1_audigy_init_efx()
1641 if (emu->card_capabilities->ca0108_chip) { in _snd_emu10k1_audigy_init_efx()
1642 dev_info(emu->card->dev, "EMU2 inputs on\n"); in _snd_emu10k1_audigy_init_efx()
1650 dev_info(emu->card->dev, "EMU inputs on\n"); in _snd_emu10k1_audigy_init_efx()
1787 emu->support_tlv = 1; /* support TLV */ in _snd_emu10k1_audigy_init_efx()
1788 err = snd_emu10k1_icode_poke(emu, icode, true); in _snd_emu10k1_audigy_init_efx()
1789 emu->support_tlv = 0; /* clear again */ in _snd_emu10k1_audigy_init_efx()
1853 static int _snd_emu10k1_init_efx(struct snd_emu10k1 *emu) in _snd_emu10k1_init_efx() argument
1907 snd_emu10k1_ptr_write(emu, DBG, 0, (emu->fx8010.dbg = 0) | EMU10K1_DBG_SINGLE_STEP); in _snd_emu10k1_init_efx()
2089 if (emu->fx8010.extin_mask & ((1<<EXTIN_AC97_L)|(1<<EXTIN_AC97_R))) { in _snd_emu10k1_init_efx()
2100 if (emu->fx8010.extin_mask & ((1<<EXTIN_SPDIF_CD_L)|(1<<EXTIN_SPDIF_CD_R))) { in _snd_emu10k1_init_efx()
2117 if (emu->fx8010.extin_mask & ((1<<EXTIN_ZOOM_L)|(1<<EXTIN_ZOOM_R))) { in _snd_emu10k1_init_efx()
2134 if (emu->fx8010.extin_mask & ((1<<EXTIN_TOSLINK_L)|(1<<EXTIN_TOSLINK_R))) { in _snd_emu10k1_init_efx()
2151 if (emu->fx8010.extin_mask & ((1<<EXTIN_LINE1_L)|(1<<EXTIN_LINE1_R))) { in _snd_emu10k1_init_efx()
2168 if (emu->fx8010.extin_mask & ((1<<EXTIN_COAX_SPDIF_L)|(1<<EXTIN_COAX_SPDIF_R))) { in _snd_emu10k1_init_efx()
2185 if (emu->fx8010.extin_mask & ((1<<EXTIN_LINE2_L)|(1<<EXTIN_LINE2_R))) { in _snd_emu10k1_init_efx()
2290 if (emu->fx8010.extout_mask & ((1<<EXTOUT_AC97_L)|(1<<EXTOUT_AC97_R))) { in _snd_emu10k1_init_efx()
2297 if (emu->fx8010.extout_mask & ((1<<EXTOUT_TOSLINK_L)|(1<<EXTOUT_TOSLINK_R))) { in _snd_emu10k1_init_efx()
2314 if (emu->fx8010.extout_mask & ((1<<EXTOUT_HEADPHONE_L)|(1<<EXTOUT_HEADPHONE_R))) { in _snd_emu10k1_init_efx()
2335 if (emu->fx8010.extout_mask & ((1<<EXTOUT_REAR_L)|(1<<EXTOUT_REAR_R))) in _snd_emu10k1_init_efx()
2339 if (emu->fx8010.extout_mask & ((1<<EXTOUT_AC97_REAR_L)|(1<<EXTOUT_AC97_REAR_R))) in _snd_emu10k1_init_efx()
2343 if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_CENTER)) { in _snd_emu10k1_init_efx()
2353 if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_LFE)) { in _snd_emu10k1_init_efx()
2368 if (emu->fx8010.extout_mask & (1<<EXTOUT_MIC_CAP)) in _snd_emu10k1_init_efx()
2372 if (emu->card_capabilities->sblive51) { in _snd_emu10k1_init_efx()
2409 err = snd_emu10k1_fx8010_tram_setup(emu, ipcm->buffer_size); in _snd_emu10k1_init_efx()
2414 emu->support_tlv = 1; /* support TLV */ in _snd_emu10k1_init_efx()
2415 err = snd_emu10k1_icode_poke(emu, icode, true); in _snd_emu10k1_init_efx()
2416 emu->support_tlv = 0; /* clear again */ in _snd_emu10k1_init_efx()
2418 err = snd_emu10k1_ipcm_poke(emu, ipcm); in _snd_emu10k1_init_efx()
2430 int snd_emu10k1_init_efx(struct snd_emu10k1 *emu) in snd_emu10k1_init_efx() argument
2432 spin_lock_init(&emu->fx8010.irq_lock); in snd_emu10k1_init_efx()
2433 INIT_LIST_HEAD(&emu->fx8010.gpr_ctl); in snd_emu10k1_init_efx()
2434 if (emu->audigy) in snd_emu10k1_init_efx()
2435 return _snd_emu10k1_audigy_init_efx(emu); in snd_emu10k1_init_efx()
2437 return _snd_emu10k1_init_efx(emu); in snd_emu10k1_init_efx()
2440 void snd_emu10k1_free_efx(struct snd_emu10k1 *emu) in snd_emu10k1_free_efx() argument
2443 if (emu->audigy) in snd_emu10k1_free_efx()
2444 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg = A_DBG_SINGLE_STEP); in snd_emu10k1_free_efx()
2446 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg = EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_free_efx()
2450 int snd_emu10k1_fx8010_tone_control_activate(struct snd_emu10k1 *emu, int output)
2454 snd_emu10k1_ptr_write(emu, emu->gpr_base + 0x94 + output, 0, 1);
2458 int snd_emu10k1_fx8010_tone_control_deactivate(struct snd_emu10k1 *emu, int output)
2462 snd_emu10k1_ptr_write(emu, emu->gpr_base + 0x94 + output, 0, 0);
2467 int snd_emu10k1_fx8010_tram_setup(struct snd_emu10k1 *emu, u32 size) in snd_emu10k1_fx8010_tram_setup() argument
2481 if ((emu->fx8010.etram_pages.bytes / 2) == size) in snd_emu10k1_fx8010_tram_setup()
2483 spin_lock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2484 outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG); in snd_emu10k1_fx8010_tram_setup()
2485 spin_unlock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2486 snd_emu10k1_ptr_write(emu, TCB, 0, 0); in snd_emu10k1_fx8010_tram_setup()
2487 snd_emu10k1_ptr_write(emu, TCBS, 0, 0); in snd_emu10k1_fx8010_tram_setup()
2488 if (emu->fx8010.etram_pages.area != NULL) { in snd_emu10k1_fx8010_tram_setup()
2489 snd_dma_free_pages(&emu->fx8010.etram_pages); in snd_emu10k1_fx8010_tram_setup()
2490 emu->fx8010.etram_pages.area = NULL; in snd_emu10k1_fx8010_tram_setup()
2491 emu->fx8010.etram_pages.bytes = 0; in snd_emu10k1_fx8010_tram_setup()
2495 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &emu->pci->dev, in snd_emu10k1_fx8010_tram_setup()
2496 size * 2, &emu->fx8010.etram_pages) < 0) in snd_emu10k1_fx8010_tram_setup()
2498 memset(emu->fx8010.etram_pages.area, 0, size * 2); in snd_emu10k1_fx8010_tram_setup()
2499 snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr); in snd_emu10k1_fx8010_tram_setup()
2500 snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg); in snd_emu10k1_fx8010_tram_setup()
2501 spin_lock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2502 outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); in snd_emu10k1_fx8010_tram_setup()
2503 spin_unlock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2522 static void snd_emu10k1_fx8010_info(struct snd_emu10k1 *emu, in snd_emu10k1_fx8010_info() argument
2529 info->internal_tram_size = emu->fx8010.itram_size; in snd_emu10k1_fx8010_info()
2530 info->external_tram_size = emu->fx8010.etram_pages.bytes / 2; in snd_emu10k1_fx8010_info()
2532 extin = emu->audigy ? audigy_ins : creative_ins; in snd_emu10k1_fx8010_info()
2533 extout = emu->audigy ? audigy_outs : creative_outs; in snd_emu10k1_fx8010_info()
2534 fxbus_mask = emu->fx8010.fxbus_mask; in snd_emu10k1_fx8010_info()
2535 extin_mask = emu->fx8010.extin_mask; in snd_emu10k1_fx8010_info()
2536 extout_mask = emu->fx8010.extout_mask; in snd_emu10k1_fx8010_info()
2544 info->gpr_controls = emu->fx8010.gpr_count; in snd_emu10k1_fx8010_info()
2549 struct snd_emu10k1 *emu = hw->private_data; in snd_emu10k1_fx8010_ioctl() local
2559 emu->support_tlv = 1; in snd_emu10k1_fx8010_ioctl()
2565 snd_emu10k1_fx8010_info(emu, info); in snd_emu10k1_fx8010_ioctl()
2579 res = snd_emu10k1_icode_poke(emu, icode, false); in snd_emu10k1_fx8010_ioctl()
2586 res = snd_emu10k1_icode_peek(emu, icode); in snd_emu10k1_fx8010_ioctl()
2597 res = snd_emu10k1_ipcm_poke(emu, ipcm); in snd_emu10k1_fx8010_ioctl()
2604 res = snd_emu10k1_ipcm_peek(emu, ipcm); in snd_emu10k1_fx8010_ioctl()
2616 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_fx8010_ioctl()
2617 res = snd_emu10k1_fx8010_tram_setup(emu, addr); in snd_emu10k1_fx8010_ioctl()
2618 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_fx8010_ioctl()
2623 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2624 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP); in snd_emu10k1_fx8010_ioctl()
2626 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_fx8010_ioctl()
2631 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2632 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg = 0); in snd_emu10k1_fx8010_ioctl()
2634 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg = 0); in snd_emu10k1_fx8010_ioctl()
2639 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2640 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_ZC); in snd_emu10k1_fx8010_ioctl()
2642 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_ZC); in snd_emu10k1_fx8010_ioctl()
2644 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2645 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg); in snd_emu10k1_fx8010_ioctl()
2647 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg); in snd_emu10k1_fx8010_ioctl()
2656 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2657 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | addr); in snd_emu10k1_fx8010_ioctl()
2659 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | addr); in snd_emu10k1_fx8010_ioctl()
2661 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2662 …snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | A_DBG_STEP_ADDR | addr… in snd_emu10k1_fx8010_ioctl()
2664 …snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | EMU10K1_DBG_STEP |… in snd_emu10k1_fx8010_ioctl()
2667 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2668 addr = snd_emu10k1_ptr_read(emu, A_DBG, 0); in snd_emu10k1_fx8010_ioctl()
2670 addr = snd_emu10k1_ptr_read(emu, DBG, 0); in snd_emu10k1_fx8010_ioctl()
2683 int snd_emu10k1_fx8010_new(struct snd_emu10k1 *emu, int device) in snd_emu10k1_fx8010_new() argument
2688 err = snd_hwdep_new(emu->card, "FX8010", device, &hw); in snd_emu10k1_fx8010_new()
2696 hw->private_data = emu; in snd_emu10k1_fx8010_new()
2701 int snd_emu10k1_efx_alloc_pm_buffer(struct snd_emu10k1 *emu) in snd_emu10k1_efx_alloc_pm_buffer() argument
2705 len = emu->audigy ? 0x200 : 0x100; in snd_emu10k1_efx_alloc_pm_buffer()
2706 emu->saved_gpr = kmalloc_array(len, 4, GFP_KERNEL); in snd_emu10k1_efx_alloc_pm_buffer()
2707 if (! emu->saved_gpr) in snd_emu10k1_efx_alloc_pm_buffer()
2709 len = emu->audigy ? 0x100 : 0xa0; in snd_emu10k1_efx_alloc_pm_buffer()
2710 emu->tram_val_saved = kmalloc_array(len, 4, GFP_KERNEL); in snd_emu10k1_efx_alloc_pm_buffer()
2711 emu->tram_addr_saved = kmalloc_array(len, 4, GFP_KERNEL); in snd_emu10k1_efx_alloc_pm_buffer()
2712 if (! emu->tram_val_saved || ! emu->tram_addr_saved) in snd_emu10k1_efx_alloc_pm_buffer()
2714 len = emu->audigy ? 2 * 1024 : 2 * 512; in snd_emu10k1_efx_alloc_pm_buffer()
2715 emu->saved_icode = vmalloc(array_size(len, 4)); in snd_emu10k1_efx_alloc_pm_buffer()
2716 if (! emu->saved_icode) in snd_emu10k1_efx_alloc_pm_buffer()
2721 void snd_emu10k1_efx_free_pm_buffer(struct snd_emu10k1 *emu) in snd_emu10k1_efx_free_pm_buffer() argument
2723 kfree(emu->saved_gpr); in snd_emu10k1_efx_free_pm_buffer()
2724 kfree(emu->tram_val_saved); in snd_emu10k1_efx_free_pm_buffer()
2725 kfree(emu->tram_addr_saved); in snd_emu10k1_efx_free_pm_buffer()
2726 vfree(emu->saved_icode); in snd_emu10k1_efx_free_pm_buffer()
2732 void snd_emu10k1_efx_suspend(struct snd_emu10k1 *emu) in snd_emu10k1_efx_suspend() argument
2736 len = emu->audigy ? 0x200 : 0x100; in snd_emu10k1_efx_suspend()
2738 emu->saved_gpr[i] = snd_emu10k1_ptr_read(emu, emu->gpr_base + i, 0); in snd_emu10k1_efx_suspend()
2740 len = emu->audigy ? 0x100 : 0xa0; in snd_emu10k1_efx_suspend()
2742 emu->tram_val_saved[i] = snd_emu10k1_ptr_read(emu, TANKMEMDATAREGBASE + i, 0); in snd_emu10k1_efx_suspend()
2743 emu->tram_addr_saved[i] = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + i, 0); in snd_emu10k1_efx_suspend()
2744 if (emu->audigy) { in snd_emu10k1_efx_suspend()
2745 emu->tram_addr_saved[i] >>= 12; in snd_emu10k1_efx_suspend()
2746 emu->tram_addr_saved[i] |= in snd_emu10k1_efx_suspend()
2747 snd_emu10k1_ptr_read(emu, A_TANKMEMCTLREGBASE + i, 0) << 20; in snd_emu10k1_efx_suspend()
2751 len = emu->audigy ? 2 * 1024 : 2 * 512; in snd_emu10k1_efx_suspend()
2753 emu->saved_icode[i] = snd_emu10k1_efx_read(emu, i); in snd_emu10k1_efx_suspend()
2756 void snd_emu10k1_efx_resume(struct snd_emu10k1 *emu) in snd_emu10k1_efx_resume() argument
2761 if (emu->fx8010.etram_pages.bytes > 0) { in snd_emu10k1_efx_resume()
2763 size = emu->fx8010.etram_pages.bytes / 2; in snd_emu10k1_efx_resume()
2769 outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG); in snd_emu10k1_efx_resume()
2770 snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr); in snd_emu10k1_efx_resume()
2771 snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg); in snd_emu10k1_efx_resume()
2772 outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); in snd_emu10k1_efx_resume()
2775 if (emu->audigy) in snd_emu10k1_efx_resume()
2776 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_SINGLE_STEP); in snd_emu10k1_efx_resume()
2778 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_efx_resume()
2780 len = emu->audigy ? 0x200 : 0x100; in snd_emu10k1_efx_resume()
2782 snd_emu10k1_ptr_write(emu, emu->gpr_base + i, 0, emu->saved_gpr[i]); in snd_emu10k1_efx_resume()
2784 len = emu->audigy ? 0x100 : 0xa0; in snd_emu10k1_efx_resume()
2786 snd_emu10k1_ptr_write(emu, TANKMEMDATAREGBASE + i, 0, in snd_emu10k1_efx_resume()
2787 emu->tram_val_saved[i]); in snd_emu10k1_efx_resume()
2788 if (! emu->audigy) in snd_emu10k1_efx_resume()
2789 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + i, 0, in snd_emu10k1_efx_resume()
2790 emu->tram_addr_saved[i]); in snd_emu10k1_efx_resume()
2792 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + i, 0, in snd_emu10k1_efx_resume()
2793 emu->tram_addr_saved[i] << 12); in snd_emu10k1_efx_resume()
2794 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + i, 0, in snd_emu10k1_efx_resume()
2795 emu->tram_addr_saved[i] >> 20); in snd_emu10k1_efx_resume()
2799 len = emu->audigy ? 2 * 1024 : 2 * 512; in snd_emu10k1_efx_resume()
2801 snd_emu10k1_efx_write(emu, i, emu->saved_icode[i]); in snd_emu10k1_efx_resume()
2804 if (emu->audigy) in snd_emu10k1_efx_resume()
2805 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg); in snd_emu10k1_efx_resume()
2807 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg); in snd_emu10k1_efx_resume()