• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/sound/isa/sb/

Lines Matching refs:rec

182 static inline int emu8k_get_curpos(struct snd_emu8k_pcm *rec, int ch)
184 int val = EMU8000_CCCA_READ(rec->emu, ch) & 0xfffffff;
185 val -= rec->loop_start[ch] - 1;
196 struct snd_emu8k_pcm *rec = (struct snd_emu8k_pcm *)data;
199 spin_lock(&rec->timer_lock);
201 ptr = emu8k_get_curpos(rec, 0);
202 if (ptr < rec->last_ptr)
203 delta = ptr + rec->buf_size - rec->last_ptr;
205 delta = ptr - rec->last_ptr;
206 rec->period_pos += delta;
207 rec->last_ptr = ptr;
210 rec->timer.expires = jiffies + 1;
211 add_timer(&rec->timer);
214 if (rec->period_pos >= (int)rec->period_size) {
215 rec->period_pos %= rec->period_size;
216 spin_unlock(&rec->timer_lock);
217 snd_pcm_period_elapsed(rec->substream);
220 spin_unlock(&rec->timer_lock);
231 struct snd_emu8k_pcm *rec;
234 rec = kzalloc(sizeof(*rec), GFP_KERNEL);
235 if (! rec)
238 rec->emu = emu;
239 rec->substream = subs;
240 runtime->private_data = rec;
242 spin_lock_init(&rec->timer_lock);
243 init_timer(&rec->timer);
244 rec->timer.function = emu8k_pcm_timer_func;
245 rec->timer.data = (unsigned long)rec;
260 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
261 kfree(rec);
283 static void setup_voice(struct snd_emu8k_pcm *rec, int ch)
285 struct snd_emu8000 *hw = rec->emu;
296 EMU8000_IP_WRITE(hw, ch, rec->pitch);
317 temp = rec->panning[ch];
318 temp = (temp <<24) | ((unsigned int)rec->loop_start[ch] - 1);
322 temp = (temp << 24) | ((unsigned int)rec->loop_start[ch] + rec->buf_size - 1);
326 temp = (temp << 28) | ((unsigned int)rec->loop_start[ch] - 1);
336 static void start_voice(struct snd_emu8k_pcm *rec, int ch)
339 struct snd_emu8000 *hw = rec->emu;
341 int pt = calc_pitch_target(rec->pitch);
351 if (rec->panning[ch] == 0)
354 aux = (-rec->panning[ch]) & 0xff;
360 spin_lock_irqsave(&rec->timer_lock, flags);
361 if (! rec->timer_running) {
362 rec->timer.expires = jiffies + 1;
363 add_timer(&rec->timer);
364 rec->timer_running = 1;
366 spin_unlock_irqrestore(&rec->timer_lock, flags);
372 static void stop_voice(struct snd_emu8k_pcm *rec, int ch)
375 struct snd_emu8000 *hw = rec->emu;
380 spin_lock_irqsave(&rec->timer_lock, flags);
381 if (rec->timer_running) {
382 del_timer(&rec->timer);
383 rec->timer_running = 0;
385 spin_unlock_irqrestore(&rec->timer_lock, flags);
390 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
395 for (ch = 0; ch < rec->voices; ch++)
396 start_voice(rec, ch);
397 rec->running = 1;
400 rec->running = 0;
401 for (ch = 0; ch < rec->voices; ch++)
402 stop_voice(rec, ch);
451 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
452 struct snd_emu8000 *emu = rec->emu;
458 count /= rec->voices;
459 for (i = 0; i < rec->voices; i++) {
460 err = emu8k_transfer_block(emu, pos + rec->loop_start[i], buf, count);
467 return emu8k_transfer_block(emu, pos + rec->loop_start[voice], src, count);
488 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
489 struct snd_emu8000 *emu = rec->emu;
492 if (voice == -1 && rec->voices == 1)
496 err = emu8k_silence_block(emu, pos + rec->loop_start[0], count / 2);
499 return emu8k_silence_block(emu, pos + rec->loop_start[1], count / 2);
501 return emu8k_silence_block(emu, pos + rec->loop_start[voice], count);
517 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
518 struct snd_emu8000 *emu = rec->emu;
522 EMU8000_SMALW_WRITE(emu, pos + rec->loop_start[0]);
523 if (rec->voices > 1)
524 EMU8000_SMARW_WRITE(emu, pos + rec->loop_start[1]);
533 if (rec->voices > 1) {
549 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
550 struct snd_emu8000 *emu = rec->emu;
553 EMU8000_SMALW_WRITE(emu, rec->loop_start[0] + pos);
554 if (rec->voices > 1)
555 EMU8000_SMARW_WRITE(emu, rec->loop_start[1] + pos);
559 if (rec->voices > 1) {
575 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
577 if (rec->block) {
579 snd_util_mem_free(rec->emu->memhdr, rec->block);
580 rec->block = NULL;
583 rec->allocated_bytes = params_buffer_bytes(hw_params) + LOOP_BLANK_SIZE * 4;
584 rec->block = snd_util_mem_alloc(rec->emu->memhdr, rec->allocated_bytes);
585 if (! rec->block)
587 rec->offset = EMU8000_DRAM_OFFSET + (rec->block->offset >> 1); /* in word */
599 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
601 if (rec->block) {
603 for (ch = 0; ch < rec->voices; ch++)
604 stop_voice(rec, ch); // to be sure
605 if (rec->dram_opened)
606 emu8k_close_dram(rec->emu);
607 snd_util_mem_free(rec->emu->memhdr, rec->block);
608 rec->block = NULL;
617 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
619 rec->pitch = 0xe000 + calc_rate_offset(subs->runtime->rate);
620 rec->last_ptr = 0;
621 rec->period_pos = 0;
623 rec->buf_size = subs->runtime->buffer_size;
624 rec->period_size = subs->runtime->period_size;
625 rec->voices = subs->runtime->channels;
626 rec->loop_start[0] = rec->offset + LOOP_BLANK_SIZE;
627 if (rec->voices > 1)
628 rec->loop_start[1] = rec->loop_start[0] + rec->buf_size + LOOP_BLANK_SIZE;
629 if (rec->voices > 1) {
630 rec->panning[0] = 0xff;
631 rec->panning[1] = 0x00;
633 rec->panning[0] = 0x80;
635 if (! rec->dram_opened) {
638 snd_emux_terminate_all(rec->emu->emu);
639 if ((err = emu8k_open_dram_for_pcm(rec->emu, rec->voices)) != 0)
641 rec->dram_opened = 1;
644 snd_emu8000_write_wait(rec->emu, 0);
645 EMU8000_SMALW_WRITE(rec->emu, rec->offset);
647 EMU8000_SMLD_WRITE(rec->emu, 0);
648 for (ch = 0; ch < rec->voices; ch++) {
649 EMU8000_SMALW_WRITE(rec->emu, rec->loop_start[ch] + rec->buf_size);
651 EMU8000_SMLD_WRITE(rec->emu, 0);
655 setup_voice(rec, 0);
656 if (rec->voices > 1)
657 setup_voice(rec, 1);
663 struct snd_emu8k_pcm *rec = subs->runtime->private_data;
664 if (rec->running)
665 return emu8k_get_curpos(rec, 0);