Lines Matching refs:rmh

223 static void lx_message_init(struct lx_rmh *rmh, enum cmd_mb_opcodes cmd)  in lx_message_init()  argument
227 rmh->cmd[0] = dsp_commands[cmd].dcCodeOp; in lx_message_init()
228 rmh->cmd_len = dsp_commands[cmd].dcCmdLength; in lx_message_init()
229 rmh->stat_len = dsp_commands[cmd].dcStatusLength; in lx_message_init()
230 rmh->dsp_stat = dsp_commands[cmd].dcStatusType; in lx_message_init()
231 rmh->cmd_idx = cmd; in lx_message_init()
232 memset(&rmh->cmd[1], 0, (REG_CRM_NUMBER - 1) * sizeof(u32)); in lx_message_init()
235 memset(rmh->stat, 0, REG_CRM_NUMBER * sizeof(u32)); in lx_message_init()
238 rmh->cmd_idx = cmd; in lx_message_init()
244 static void lx_message_dump(struct lx_rmh *rmh) in lx_message_dump() argument
246 u8 idx = rmh->cmd_idx; in lx_message_dump()
251 for (i = 0; i != rmh->cmd_len; ++i) in lx_message_dump()
252 snd_printk(LXRMH "\tcmd[%d] %08x\n", i, rmh->cmd[i]); in lx_message_dump()
254 for (i = 0; i != rmh->stat_len; ++i) in lx_message_dump()
255 snd_printk(LXRMH "\tstat[%d]: %08x\n", i, rmh->stat[i]); in lx_message_dump()
259 static inline void lx_message_dump(struct lx_rmh *rmh) in lx_message_dump() argument
271 static int lx_message_send_atomic(struct lx6464es *chip, struct lx_rmh *rmh) in lx_message_send_atomic() argument
282 lx_dsp_reg_writebuf(chip, eReg_CRM1, rmh->cmd, rmh->cmd_len); in lx_message_send_atomic()
290 if (rmh->dsp_stat == 0) in lx_message_send_atomic()
304 if (rmh->stat_len) { in lx_message_send_atomic()
305 snd_BUG_ON(rmh->stat_len >= (REG_CRM_NUMBER-1)); in lx_message_send_atomic()
306 lx_dsp_reg_readbuf(chip, eReg_CRM2, rmh->stat, in lx_message_send_atomic()
307 rmh->stat_len); in lx_message_send_atomic()
325 lx_message_dump(rmh); in lx_message_send_atomic()
338 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG); in lx_dsp_get_version()
339 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_get_version()
341 *rdsp_version = chip->rmh.stat[1]; in lx_dsp_get_version()
355 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG); in lx_dsp_get_clock_frequency()
356 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_get_clock_frequency()
359 freq_raw = chip->rmh.stat[0] >> FREQ_FIELD_OFFSET; in lx_dsp_get_clock_frequency()
403 lx_message_init(&chip->rmh, CMD_02_SET_GRANULARITY); in lx_dsp_set_granularity()
404 chip->rmh.cmd[0] |= gran; in lx_dsp_set_granularity()
406 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_set_granularity()
417 lx_message_init(&chip->rmh, CMD_04_GET_EVENT); in lx_dsp_read_async_events()
418 chip->rmh.stat_len = 9; /* we don't necessarily need the full length */ in lx_dsp_read_async_events()
420 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_read_async_events()
423 memcpy(data, chip->rmh.stat, chip->rmh.stat_len * sizeof(u32)); in lx_dsp_read_async_events()
442 lx_message_init(&chip->rmh, CMD_06_ALLOCATE_PIPE); in lx_pipe_allocate()
444 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_allocate()
445 chip->rmh.cmd[0] |= channels; in lx_pipe_allocate()
447 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_allocate()
462 lx_message_init(&chip->rmh, CMD_07_RELEASE_PIPE); in lx_pipe_release()
464 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_release()
466 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_release()
487 lx_message_init(&chip->rmh, CMD_08_ASK_BUFFERS); in lx_buffer_ask()
489 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_ask()
491 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_ask()
496 u32 stat = chip->rmh.stat[i]; in lx_buffer_ask()
512 for (i = 0; i != chip->rmh.stat_len; ++i) in lx_buffer_ask()
515 chip->rmh.stat[i], in lx_buffer_ask()
516 chip->rmh.stat[i] & MASK_DATA_SIZE); in lx_buffer_ask()
531 lx_message_init(&chip->rmh, CMD_09_STOP_PIPE); in lx_pipe_stop()
533 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_stop()
535 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_stop()
547 lx_message_init(&chip->rmh, CMD_0B_TOGGLE_PIPE_STATE); in lx_pipe_toggle_state()
549 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_toggle_state()
551 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_toggle_state()
592 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT); in lx_pipe_sample_count()
594 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_sample_count()
595 chip->rmh.stat_len = 2; /* need all words here! */ in lx_pipe_sample_count()
597 err = lx_message_send_atomic(chip, &chip->rmh); /* don't sleep! */ in lx_pipe_sample_count()
603 *rsample_count = ((u64)(chip->rmh.stat[0] & MASK_SPL_COUNT_HI) in lx_pipe_sample_count()
605 + chip->rmh.stat[1]; /* lo part */ in lx_pipe_sample_count()
618 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT); in lx_pipe_state()
620 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_state()
622 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_state()
627 *rstate = (chip->rmh.stat[0] >> PSTATE_OFFSET) & 0x0F; in lx_pipe_state()
674 lx_message_init(&chip->rmh, CMD_13_SET_STREAM_STATE); in lx_stream_set_state()
676 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_set_state()
677 chip->rmh.cmd[0] |= state; in lx_stream_set_state()
679 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_set_state()
697 lx_message_init(&chip->rmh, CMD_0C_DEF_STREAM); in lx_stream_set_format()
699 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_set_format()
703 chip->rmh.cmd[0] |= (STREAM_FMT_16b << STREAM_FMT_OFFSET); in lx_stream_set_format()
707 chip->rmh.cmd[0] |= (STREAM_FMT_intel << STREAM_FMT_OFFSET); in lx_stream_set_format()
709 chip->rmh.cmd[0] |= channels-1; in lx_stream_set_format()
711 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_set_format()
724 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT); in lx_stream_state()
726 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_state()
728 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_state()
730 *rstate = (chip->rmh.stat[0] & SF_START) ? START_STATE : PAUSE_STATE; in lx_stream_state()
743 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT); in lx_stream_sample_position()
745 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_sample_position()
747 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_sample_position()
749 *r_bytepos = ((u64) (chip->rmh.stat[0] & MASK_SPL_COUNT_HI) in lx_stream_sample_position()
751 + chip->rmh.stat[1]; /* lo part */ in lx_stream_sample_position()
766 lx_message_init(&chip->rmh, CMD_0F_UPDATE_BUFFER); in lx_buffer_give()
768 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_give()
769 chip->rmh.cmd[0] |= BF_NOTIFY_EOB; /* request interrupt notification */ in lx_buffer_give()
773 chip->rmh.cmd[1] = buffer_size & MASK_DATA_SIZE; in lx_buffer_give()
774 chip->rmh.cmd[2] = buf_address_lo; in lx_buffer_give()
777 chip->rmh.cmd_len = 4; in lx_buffer_give()
778 chip->rmh.cmd[3] = buf_address_hi; in lx_buffer_give()
779 chip->rmh.cmd[0] |= BF_64BITS_ADR; in lx_buffer_give()
782 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_give()
785 *r_buffer_index = chip->rmh.stat[0]; in lx_buffer_give()
813 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER); in lx_buffer_free()
815 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_free()
816 chip->rmh.cmd[0] |= MASK_BUFFER_ID; /* ask for the current buffer: the in lx_buffer_free()
819 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_free()
822 *r_buffer_size = chip->rmh.stat[0] & MASK_DATA_SIZE; in lx_buffer_free()
835 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER); in lx_buffer_cancel()
837 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_cancel()
838 chip->rmh.cmd[0] |= buffer_index; in lx_buffer_cancel()
840 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_cancel()
859 lx_message_init(&chip->rmh, CMD_0D_SET_MUTE); in lx_level_unmute()
861 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, 0); in lx_level_unmute()
863 chip->rmh.cmd[1] = (u32)(mute_mask >> (u64)32); /* hi part */ in lx_level_unmute()
864 chip->rmh.cmd[2] = (u32)(mute_mask & (u64)0xFFFFFFFF); /* lo part */ in lx_level_unmute()
867 "mute %x %x %x\n", chip->rmh.cmd[0], chip->rmh.cmd[1], in lx_level_unmute()
868 chip->rmh.cmd[2]); in lx_level_unmute()
870 err = lx_message_send_atomic(chip, &chip->rmh); in lx_level_unmute()
905 lx_message_init(&chip->rmh, CMD_12_GET_PEAK); in lx_level_peaks()
906 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, i); in lx_level_peaks()
908 err = lx_message_send_atomic(chip, &chip->rmh); in lx_level_peaks()
911 s0 = peak_map[chip->rmh.stat[0] & 0x0F]; in lx_level_peaks()
912 s1 = peak_map[(chip->rmh.stat[0] >> 4) & 0xf]; in lx_level_peaks()
913 s2 = peak_map[(chip->rmh.stat[0] >> 8) & 0xf]; in lx_level_peaks()
914 s3 = peak_map[(chip->rmh.stat[0] >> 12) & 0xf]; in lx_level_peaks()