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 pr_debug(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 pr_debug(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()
496 for (i = 0; i < MAX_STREAM_BUFFER && i < chip->rmh.stat_len; in lx_buffer_ask()
499 chip->rmh.stat[i], in lx_buffer_ask()
500 chip->rmh.stat[i] & MASK_DATA_SIZE); in lx_buffer_ask()
515 lx_message_init(&chip->rmh, CMD_09_STOP_PIPE); in lx_pipe_stop()
517 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_stop()
519 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_stop()
531 lx_message_init(&chip->rmh, CMD_0B_TOGGLE_PIPE_STATE); in lx_pipe_toggle_state()
533 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_toggle_state()
535 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_toggle_state()
576 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT); in lx_pipe_sample_count()
578 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_sample_count()
579 chip->rmh.stat_len = 2; /* need all words here! */ in lx_pipe_sample_count()
581 err = lx_message_send_atomic(chip, &chip->rmh); /* don't sleep! */ in lx_pipe_sample_count()
587 *rsample_count = ((u64)(chip->rmh.stat[0] & MASK_SPL_COUNT_HI) in lx_pipe_sample_count()
589 + chip->rmh.stat[1]; /* lo part */ in lx_pipe_sample_count()
602 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT); in lx_pipe_state()
604 chip->rmh.cmd[0] |= pipe_cmd; in lx_pipe_state()
606 err = lx_message_send_atomic(chip, &chip->rmh); in lx_pipe_state()
611 *rstate = (chip->rmh.stat[0] >> PSTATE_OFFSET) & 0x0F; in lx_pipe_state()
658 lx_message_init(&chip->rmh, CMD_13_SET_STREAM_STATE); in lx_stream_set_state()
660 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_set_state()
661 chip->rmh.cmd[0] |= state; in lx_stream_set_state()
663 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_set_state()
677 lx_message_init(&chip->rmh, CMD_0C_DEF_STREAM); in lx_stream_set_format()
679 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_set_format()
683 chip->rmh.cmd[0] |= (STREAM_FMT_16b << STREAM_FMT_OFFSET); in lx_stream_set_format()
687 chip->rmh.cmd[0] |= (STREAM_FMT_intel << STREAM_FMT_OFFSET); in lx_stream_set_format()
689 chip->rmh.cmd[0] |= channels-1; in lx_stream_set_format()
691 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_set_format()
704 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT); in lx_stream_state()
706 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_state()
708 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_state()
710 *rstate = (chip->rmh.stat[0] & SF_START) ? START_STATE : PAUSE_STATE; in lx_stream_state()
723 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT); in lx_stream_sample_position()
725 chip->rmh.cmd[0] |= pipe_cmd; in lx_stream_sample_position()
727 err = lx_message_send_atomic(chip, &chip->rmh); in lx_stream_sample_position()
729 *r_bytepos = ((u64) (chip->rmh.stat[0] & MASK_SPL_COUNT_HI) in lx_stream_sample_position()
731 + chip->rmh.stat[1]; /* lo part */ in lx_stream_sample_position()
746 lx_message_init(&chip->rmh, CMD_0F_UPDATE_BUFFER); in lx_buffer_give()
748 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_give()
749 chip->rmh.cmd[0] |= BF_NOTIFY_EOB; /* request interrupt notification */ in lx_buffer_give()
753 chip->rmh.cmd[1] = buffer_size & MASK_DATA_SIZE; in lx_buffer_give()
754 chip->rmh.cmd[2] = buf_address_lo; in lx_buffer_give()
757 chip->rmh.cmd_len = 4; in lx_buffer_give()
758 chip->rmh.cmd[3] = buf_address_hi; in lx_buffer_give()
759 chip->rmh.cmd[0] |= BF_64BITS_ADR; in lx_buffer_give()
762 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_give()
765 *r_buffer_index = chip->rmh.stat[0]; in lx_buffer_give()
793 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER); in lx_buffer_free()
795 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_free()
796 chip->rmh.cmd[0] |= MASK_BUFFER_ID; /* ask for the current buffer: the in lx_buffer_free()
799 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_free()
802 *r_buffer_size = chip->rmh.stat[0] & MASK_DATA_SIZE; in lx_buffer_free()
815 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER); in lx_buffer_cancel()
817 chip->rmh.cmd[0] |= pipe_cmd; in lx_buffer_cancel()
818 chip->rmh.cmd[0] |= buffer_index; in lx_buffer_cancel()
820 err = lx_message_send_atomic(chip, &chip->rmh); in lx_buffer_cancel()
839 lx_message_init(&chip->rmh, CMD_0D_SET_MUTE); in lx_level_unmute()
841 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, 0); in lx_level_unmute()
843 chip->rmh.cmd[1] = (u32)(mute_mask >> (u64)32); /* hi part */ in lx_level_unmute()
844 chip->rmh.cmd[2] = (u32)(mute_mask & (u64)0xFFFFFFFF); /* lo part */ in lx_level_unmute()
847 "mute %x %x %x\n", chip->rmh.cmd[0], chip->rmh.cmd[1], in lx_level_unmute()
848 chip->rmh.cmd[2]); in lx_level_unmute()
850 err = lx_message_send_atomic(chip, &chip->rmh); in lx_level_unmute()
885 lx_message_init(&chip->rmh, CMD_12_GET_PEAK); in lx_level_peaks()
886 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, i); in lx_level_peaks()
888 err = lx_message_send_atomic(chip, &chip->rmh); in lx_level_peaks()
891 s0 = peak_map[chip->rmh.stat[0] & 0x0F]; in lx_level_peaks()
892 s1 = peak_map[(chip->rmh.stat[0] >> 4) & 0xf]; in lx_level_peaks()
893 s2 = peak_map[(chip->rmh.stat[0] >> 8) & 0xf]; in lx_level_peaks()
894 s3 = peak_map[(chip->rmh.stat[0] >> 12) & 0xf]; in lx_level_peaks()