• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/sound/isa/sb/

Lines Matching refs:rec

181 static inline int emu8k_get_curpos(struct snd_emu8k_pcm *rec, int ch)
183 int val = EMU8000_CCCA_READ(rec->emu, ch) & 0xfffffff;
184 val -= rec->loop_start[ch] - 1;
195 struct snd_emu8k_pcm *rec = (struct snd_emu8k_pcm *)data;
198 spin_lock(&rec->timer_lock);
200 ptr = emu8k_get_curpos(rec, 0);
201 if (ptr < rec->last_ptr)
202 delta = ptr + rec->buf_size - rec->last_ptr;
204 delta = ptr - rec->last_ptr;
205 rec->period_pos += delta;
206 rec->last_ptr = ptr;
209 rec->timer.expires = jiffies + 1;
210 add_timer(&rec->timer);
213 if (rec->period_pos >= (int)rec->period_size) {
214 rec->period_pos %= rec->period_size;
215 spin_unlock(&rec->timer_lock);
216 snd_pcm_period_elapsed(rec->substream);
219 spin_unlock(&rec->timer_lock);
230 struct snd_emu8k_pcm *rec;
233 rec = kzalloc(sizeof(*rec), GFP_KERNEL);
234 if (! rec)
237 rec->emu = emu;
238 rec->substream = subs;
239 runtime->private_data = rec;
241 spin_lock_init(&rec->timer_lock);
242 init_timer(&rec->timer);
243 rec->timer.function = emu8k_pcm_timer_func;
244 rec->timer.data = (unsigned long)rec;
259 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
260 kfree(rec);
282 static void setup_voice(struct snd_emu8k_pcm *rec, int ch)
284 struct snd_emu8000 *hw = rec->emu;
295 EMU8000_IP_WRITE(hw, ch, rec->pitch);
316 temp = rec->panning[ch];
317 temp = (temp <<24) | ((unsigned int)rec->loop_start[ch] - 1);
321 temp = (temp << 24) | ((unsigned int)rec->loop_start[ch] + rec->buf_size - 1);
325 temp = (temp << 28) | ((unsigned int)rec->loop_start[ch] - 1);
335 static void start_voice(struct snd_emu8k_pcm *rec, int ch)
338 struct snd_emu8000 *hw = rec->emu;
340 int pt = calc_pitch_target(rec->pitch);
350 if (rec->panning[ch] == 0)
353 aux = (-rec->panning[ch]) & 0xff;
359 spin_lock_irqsave(&rec->timer_lock, flags);
360 if (! rec->timer_running) {
361 rec->timer.expires = jiffies + 1;
362 add_timer(&rec->timer);
363 rec->timer_running = 1;
365 spin_unlock_irqrestore(&rec->timer_lock, flags);
371 static void stop_voice(struct snd_emu8k_pcm *rec, int ch)
374 struct snd_emu8000 *hw = rec->emu;
379 spin_lock_irqsave(&rec->timer_lock, flags);
380 if (rec->timer_running) {
381 del_timer(&rec->timer);
382 rec->timer_running = 0;
384 spin_unlock_irqrestore(&rec->timer_lock, flags);
389 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
394 for (ch = 0; ch < rec->voices; ch++)
395 start_voice(rec, ch);
396 rec->running = 1;
399 rec->running = 0;
400 for (ch = 0; ch < rec->voices; ch++)
401 stop_voice(rec, ch);
449 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
450 struct snd_emu8000 *emu = rec->emu;
456 count /= rec->voices;
457 for (i = 0; i < rec->voices; i++) {
458 err = emu8k_transfer_block(emu, pos + rec->loop_start[i], buf, count);
465 return emu8k_transfer_block(emu, pos + rec->loop_start[voice], src, count);
486 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
487 struct snd_emu8000 *emu = rec->emu;
490 if (voice == -1 && rec->voices == 1)
494 err = emu8k_silence_block(emu, pos + rec->loop_start[0], count / 2);
497 return emu8k_silence_block(emu, pos + rec->loop_start[1], count / 2);
499 return emu8k_silence_block(emu, pos + rec->loop_start[voice], count);
515 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
516 struct snd_emu8000 *emu = rec->emu;
520 EMU8000_SMALW_WRITE(emu, pos + rec->loop_start[0]);
521 if (rec->voices > 1)
522 EMU8000_SMARW_WRITE(emu, pos + rec->loop_start[1]);
530 if (rec->voices > 1) {
545 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
546 struct snd_emu8000 *emu = rec->emu;
549 EMU8000_SMALW_WRITE(emu, rec->loop_start[0] + pos);
550 if (rec->voices > 1)
551 EMU8000_SMARW_WRITE(emu, rec->loop_start[1] + pos);
555 if (rec->voices > 1) {
571 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
573 if (rec->block) {
575 snd_util_mem_free(rec->emu->memhdr, rec->block);
576 rec->block = NULL;
579 rec->allocated_bytes = params_buffer_bytes(hw_params) + LOOP_BLANK_SIZE * 4;
580 rec->block = snd_util_mem_alloc(rec->emu->memhdr, rec->allocated_bytes);
581 if (! rec->block)
583 rec->offset = EMU8000_DRAM_OFFSET + (rec->block->offset >> 1); /* in word */
595 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
597 if (rec->block) {
599 for (ch = 0; ch < rec->voices; ch++)
600 stop_voice(rec, ch); // to be sure
601 if (rec->dram_opened)
602 emu8k_close_dram(rec->emu);
603 snd_util_mem_free(rec->emu->memhdr, rec->block);
604 rec->block = NULL;
613 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
615 rec->pitch = 0xe000 + calc_rate_offset(subs->runtime->rate);
616 rec->last_ptr = 0;
617 rec->period_pos = 0;
619 rec->buf_size = subs->runtime->buffer_size;
620 rec->period_size = subs->runtime->period_size;
621 rec->voices = subs->runtime->channels;
622 rec->loop_start[0] = rec->offset + LOOP_BLANK_SIZE;
623 if (rec->voices > 1)
624 rec->loop_start[1] = rec->loop_start[0] + rec->buf_size + LOOP_BLANK_SIZE;
625 if (rec->voices > 1) {
626 rec->panning[0] = 0xff;
627 rec->panning[1] = 0x00;
629 rec->panning[0] = 0x80;
631 if (! rec->dram_opened) {
634 snd_emux_terminate_all(rec->emu->emu);
635 if ((err = emu8k_open_dram_for_pcm(rec->emu, rec->voices)) != 0)
637 rec->dram_opened = 1;
640 snd_emu8000_write_wait(rec->emu, 0);
641 EMU8000_SMALW_WRITE(rec->emu, rec->offset);
643 EMU8000_SMLD_WRITE(rec->emu, 0);
644 for (ch = 0; ch < rec->voices; ch++) {
645 EMU8000_SMALW_WRITE(rec->emu, rec->loop_start[ch] + rec->buf_size);
647 EMU8000_SMLD_WRITE(rec->emu, 0);
651 setup_voice(rec, 0);
652 if (rec->voices > 1)
653 setup_voice(rec, 1);
659 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
660 if (rec->running)
661 return emu8k_get_curpos(rec, 0);