Lines Matching refs:rmh

208 static void lx_message_init(struct lx_rmh *rmh, enum cmd_mb_opcodes cmd)  in lx_message_init()  argument
212 rmh->cmd[0] = dsp_commands[cmd].dcCodeOp; in lx_message_init()
213 rmh->cmd_len = dsp_commands[cmd].dcCmdLength; in lx_message_init()
214 rmh->stat_len = dsp_commands[cmd].dcStatusLength; in lx_message_init()
215 rmh->dsp_stat = dsp_commands[cmd].dcStatusType; in lx_message_init()
216 rmh->cmd_idx = cmd; in lx_message_init()
217 memset(&rmh->cmd[1], 0, (REG_CRM_NUMBER - 1) * sizeof(u32)); in lx_message_init()
220 memset(rmh->stat, 0, REG_CRM_NUMBER * sizeof(u32)); in lx_message_init()
223 rmh->cmd_idx = cmd; in lx_message_init()
229 static void lx_message_dump(struct lx_rmh *rmh) in lx_message_dump() argument
231 u8 idx = rmh->cmd_idx; in lx_message_dump()
236 for (i = 0; i != rmh->cmd_len; ++i) in lx_message_dump()
237 snd_printk(LXRMH "\tcmd[%d] %08x\n", i, rmh->cmd[i]); in lx_message_dump()
239 for (i = 0; i != rmh->stat_len; ++i) in lx_message_dump()
240 snd_printk(LXRMH "\tstat[%d]: %08x\n", i, rmh->stat[i]); in lx_message_dump()
244 static inline void lx_message_dump(struct lx_rmh *rmh) in lx_message_dump() argument
256 static int lx_message_send_atomic(struct lx6464es *chip, struct lx_rmh *rmh) in lx_message_send_atomic() argument
267 lx_dsp_reg_writebuf(chip, eReg_CRM1, rmh->cmd, rmh->cmd_len); in lx_message_send_atomic()
275 if (rmh->dsp_stat == 0) in lx_message_send_atomic()
289 if (rmh->stat_len) { in lx_message_send_atomic()
290 snd_BUG_ON(rmh->stat_len >= (REG_CRM_NUMBER-1)); in lx_message_send_atomic()
291 lx_dsp_reg_readbuf(chip, eReg_CRM2, rmh->stat, in lx_message_send_atomic()
292 rmh->stat_len); in lx_message_send_atomic()
310 lx_message_dump(rmh); in lx_message_send_atomic()
323 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG); in lx_dsp_get_version()
324 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_get_version()
326 *rdsp_version = chip->rmh.stat[1]; in lx_dsp_get_version()
340 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG); in lx_dsp_get_clock_frequency()
341 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_get_clock_frequency()
344 freq_raw = chip->rmh.stat[0] >> FREQ_FIELD_OFFSET; in lx_dsp_get_clock_frequency()
388 lx_message_init(&chip->rmh, CMD_02_SET_GRANULARITY); in lx_dsp_set_granularity()
389 chip->rmh.cmd[0] |= gran; in lx_dsp_set_granularity()
391 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_set_granularity()
402 lx_message_init(&chip->rmh, CMD_04_GET_EVENT); in lx_dsp_read_async_events()
403 chip->rmh.stat_len = 9; /* we don't necessarily need the full length */ in lx_dsp_read_async_events()
405 ret = lx_message_send_atomic(chip, &chip->rmh); in lx_dsp_read_async_events()
408 memcpy(data, chip->rmh.stat, chip->rmh.stat_len * sizeof(u32)); in lx_dsp_read_async_events()
427 lx_message_init(&chip->rmh, CMD_06_ALLOCATE_PIPE); in lx_pipe_allocate()
429 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_allocate()
430 chip->rmh.cmd[0] |= channels; in lx_pipe_allocate()
432 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_allocate()
447 lx_message_init(&chip->rmh, CMD_07_RELEASE_PIPE); in lx_pipe_release()
449 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_release()
451 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_release()
472 lx_message_init(&chip->rmh, CMD_08_ASK_BUFFERS); in lx_buffer_ask()
474 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_ask()
476 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_ask()
481 u32 stat = chip->rmh.stat[i]; in lx_buffer_ask()
497 for (i = 0; i != chip->rmh.stat_len; ++i) in lx_buffer_ask()
500 chip->rmh.stat[i], in lx_buffer_ask()
501 chip->rmh.stat[i] & MASK_DATA_SIZE); in lx_buffer_ask()
516 lx_message_init(&chip->rmh, CMD_09_STOP_PIPE); in lx_pipe_stop()
518 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_stop()
520 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_stop()
532 lx_message_init(&chip->rmh, CMD_0B_TOGGLE_PIPE_STATE); in lx_pipe_toggle_state()
534 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_toggle_state()
536 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_toggle_state()
577 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT); in lx_pipe_sample_count()
579 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_sample_count()
580 chip->rmh.stat_len = 2; /* need all words here! */ in lx_pipe_sample_count()
582 err = lx_message_send_atomic(chip, &chip->rmh); /* don't sleep! */ in lx_pipe_sample_count()
588 *rsample_count = ((u64)(chip->rmh.stat[0] & MASK_SPL_COUNT_HI) in lx_pipe_sample_count()
590 + chip->rmh.stat[1]; /* lo part */ in lx_pipe_sample_count()
603 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT); in lx_pipe_state()
605 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_state()
607 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_state()
612 *rstate = (chip->rmh.stat[0] >> PSTATE_OFFSET) & 0x0F; in lx_pipe_state()
659 lx_message_init(&chip->rmh, CMD_13_SET_STREAM_STATE); in lx_stream_set_state()
661 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_set_state()
662 chip->rmh.cmd[0] |= state; in lx_stream_set_state()
664 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_set_state()
678 lx_message_init(&chip->rmh, CMD_0C_DEF_STREAM); in lx_stream_set_format()
680 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_set_format()
684 chip->rmh.cmd[0] |= (STREAM_FMT_16b << STREAM_FMT_OFFSET); in lx_stream_set_format()
688 chip->rmh.cmd[0] |= (STREAM_FMT_intel << STREAM_FMT_OFFSET); in lx_stream_set_format()
690 chip->rmh.cmd[0] |= channels-1; in lx_stream_set_format()
692 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_set_format()
705 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT); in lx_stream_state()
707 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_state()
709 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_state()
711 *rstate = (chip->rmh.stat[0] & SF_START) ? START_STATE : PAUSE_STATE; in lx_stream_state()
724 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT); in lx_stream_sample_position()
726 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_sample_position()
728 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_sample_position()
730 *r_bytepos = ((u64) (chip->rmh.stat[0] & MASK_SPL_COUNT_HI) in lx_stream_sample_position()
732 + chip->rmh.stat[1]; /* lo part */ in lx_stream_sample_position()
747 lx_message_init(&chip->rmh, CMD_0F_UPDATE_BUFFER); in lx_buffer_give()
749 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_give()
750 chip->rmh.cmd[0] |= BF_NOTIFY_EOB; /* request interrupt notification */ in lx_buffer_give()
754 chip->rmh.cmd[1] = buffer_size & MASK_DATA_SIZE; in lx_buffer_give()
755 chip->rmh.cmd[2] = buf_address_lo; in lx_buffer_give()
758 chip->rmh.cmd_len = 4; in lx_buffer_give()
759 chip->rmh.cmd[3] = buf_address_hi; in lx_buffer_give()
760 chip->rmh.cmd[0] |= BF_64BITS_ADR; in lx_buffer_give()
763 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_give()
766 *r_buffer_index = chip->rmh.stat[0]; in lx_buffer_give()
794 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER); in lx_buffer_free()
796 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_free()
797 chip->rmh.cmd[0] |= MASK_BUFFER_ID; /* ask for the current buffer: the in lx_buffer_free()
800 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_free()
803 *r_buffer_size = chip->rmh.stat[0] & MASK_DATA_SIZE; in lx_buffer_free()
816 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER); in lx_buffer_cancel()
818 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_cancel()
819 chip->rmh.cmd[0] |= buffer_index; in lx_buffer_cancel()
821 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_cancel()
840 lx_message_init(&chip->rmh, CMD_0D_SET_MUTE); in lx_level_unmute()
842 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, 0); in lx_level_unmute()
844 chip->rmh.cmd[1] = (u32)(mute_mask >> (u64)32); /* hi part */ in lx_level_unmute()
845 chip->rmh.cmd[2] = (u32)(mute_mask & (u64)0xFFFFFFFF); /* lo part */ in lx_level_unmute()
848 "mute %x %x %x\n", chip->rmh.cmd[0], chip->rmh.cmd[1], in lx_level_unmute()
849 chip->rmh.cmd[2]); in lx_level_unmute()
851 err = lx_message_send_atomic(chip, &chip->rmh); in lx_level_unmute()
886 lx_message_init(&chip->rmh, CMD_12_GET_PEAK); in lx_level_peaks()
887 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, i); in lx_level_peaks()
889 err = lx_message_send_atomic(chip, &chip->rmh); in lx_level_peaks()
892 s0 = peak_map[chip->rmh.stat[0] & 0x0F]; in lx_level_peaks()
893 s1 = peak_map[(chip->rmh.stat[0] >> 4) & 0xf]; in lx_level_peaks()
894 s2 = peak_map[(chip->rmh.stat[0] >> 8) & 0xf]; in lx_level_peaks()
895 s3 = peak_map[(chip->rmh.stat[0] >> 12) & 0xf]; in lx_level_peaks()