Lines Matching refs:rmh

130 /* rmh */
208 static void lx_message_init(struct lx_rmh *rmh, enum cmd_mb_opcodes cmd)
212 rmh->cmd[0] = dsp_commands[cmd].dcCodeOp;
213 rmh->cmd_len = dsp_commands[cmd].dcCmdLength;
214 rmh->stat_len = dsp_commands[cmd].dcStatusLength;
215 rmh->dsp_stat = dsp_commands[cmd].dcStatusType;
216 rmh->cmd_idx = cmd;
217 memset(&rmh->cmd[1], 0, (REG_CRM_NUMBER - 1) * sizeof(u32));
220 memset(rmh->stat, 0, REG_CRM_NUMBER * sizeof(u32));
223 rmh->cmd_idx = cmd;
228 #define LXRMH "lx6464es rmh: "
229 static void lx_message_dump(struct lx_rmh *rmh)
231 u8 idx = rmh->cmd_idx;
236 for (i = 0; i != rmh->cmd_len; ++i)
237 snd_printk(LXRMH "\tcmd[%d] %08x\n", i, rmh->cmd[i]);
239 for (i = 0; i != rmh->stat_len; ++i)
240 snd_printk(LXRMH "\tstat[%d]: %08x\n", i, rmh->stat[i]);
244 static inline void lx_message_dump(struct lx_rmh *rmh)
256 static int lx_message_send_atomic(struct lx6464es *chip, struct lx_rmh *rmh)
267 lx_dsp_reg_writebuf(chip, eReg_CRM1, rmh->cmd, rmh->cmd_len);
275 if (rmh->dsp_stat == 0)
289 if (rmh->stat_len) {
290 snd_BUG_ON(rmh->stat_len >= (REG_CRM_NUMBER-1));
291 lx_dsp_reg_readbuf(chip, eReg_CRM2, rmh->stat,
292 rmh->stat_len);
295 dev_err(chip->card->dev, "rmh error: %08x\n", reg);
310 lx_message_dump(rmh);
323 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG);
324 ret = lx_message_send_atomic(chip, &chip->rmh);
326 *rdsp_version = chip->rmh.stat[1];
340 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG);
341 ret = lx_message_send_atomic(chip, &chip->rmh);
344 freq_raw = chip->rmh.stat[0] >> FREQ_FIELD_OFFSET;
388 lx_message_init(&chip->rmh, CMD_02_SET_GRANULARITY);
389 chip->rmh.cmd[0] |= gran;
391 ret = lx_message_send_atomic(chip, &chip->rmh);
402 lx_message_init(&chip->rmh, CMD_04_GET_EVENT);
403 chip->rmh.stat_len = 9; /* we don't necessarily need the full length */
405 ret = lx_message_send_atomic(chip, &chip->rmh);
408 memcpy(data, chip->rmh.stat, chip->rmh.stat_len * sizeof(u32));
427 lx_message_init(&chip->rmh, CMD_06_ALLOCATE_PIPE);
429 chip->rmh.cmd[0] |= pipe_cmd;
430 chip->rmh.cmd[0] |= channels;
432 err = lx_message_send_atomic(chip, &chip->rmh);
447 lx_message_init(&chip->rmh, CMD_07_RELEASE_PIPE);
449 chip->rmh.cmd[0] |= pipe_cmd;
451 err = lx_message_send_atomic(chip, &chip->rmh);
472 lx_message_init(&chip->rmh, CMD_08_ASK_BUFFERS);
474 chip->rmh.cmd[0] |= pipe_cmd;
476 err = lx_message_send_atomic(chip, &chip->rmh);
481 u32 stat = chip->rmh.stat[i];
496 for (i = 0; i < MAX_STREAM_BUFFER && i < chip->rmh.stat_len;
499 chip->rmh.stat[i],
500 chip->rmh.stat[i] & MASK_DATA_SIZE);
515 lx_message_init(&chip->rmh, CMD_09_STOP_PIPE);
517 chip->rmh.cmd[0] |= pipe_cmd;
519 err = lx_message_send_atomic(chip, &chip->rmh);
531 lx_message_init(&chip->rmh, CMD_0B_TOGGLE_PIPE_STATE);
533 chip->rmh.cmd[0] |= pipe_cmd;
535 err = lx_message_send_atomic(chip, &chip->rmh);
576 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT);
578 chip->rmh.cmd[0] |= pipe_cmd;
579 chip->rmh.stat_len = 2; /* need all words here! */
581 err = lx_message_send_atomic(chip, &chip->rmh); /* don't sleep! */
587 *rsample_count = ((u64)(chip->rmh.stat[0] & MASK_SPL_COUNT_HI)
589 + chip->rmh.stat[1]; /* lo part */
602 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT);
604 chip->rmh.cmd[0] |= pipe_cmd;
606 err = lx_message_send_atomic(chip, &chip->rmh);
611 *rstate = (chip->rmh.stat[0] >> PSTATE_OFFSET) & 0x0F;
658 lx_message_init(&chip->rmh, CMD_13_SET_STREAM_STATE);
660 chip->rmh.cmd[0] |= pipe_cmd;
661 chip->rmh.cmd[0] |= state;
663 err = lx_message_send_atomic(chip, &chip->rmh);
677 lx_message_init(&chip->rmh, CMD_0C_DEF_STREAM);
679 chip->rmh.cmd[0] |= pipe_cmd;
683 chip->rmh.cmd[0] |= (STREAM_FMT_16b << STREAM_FMT_OFFSET);
687 chip->rmh.cmd[0] |= (STREAM_FMT_intel << STREAM_FMT_OFFSET);
689 chip->rmh.cmd[0] |= channels-1;
691 err = lx_message_send_atomic(chip, &chip->rmh);
704 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT);
706 chip->rmh.cmd[0] |= pipe_cmd;
708 err = lx_message_send_atomic(chip, &chip->rmh);
710 *rstate = (chip->rmh.stat[0] & SF_START) ? START_STATE : PAUSE_STATE;
723 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT);
725 chip->rmh.cmd[0] |= pipe_cmd;
727 err = lx_message_send_atomic(chip, &chip->rmh);
729 *r_bytepos = ((u64) (chip->rmh.stat[0] & MASK_SPL_COUNT_HI)
731 + chip->rmh.stat[1]; /* lo part */
746 lx_message_init(&chip->rmh, CMD_0F_UPDATE_BUFFER);
748 chip->rmh.cmd[0] |= pipe_cmd;
749 chip->rmh.cmd[0] |= BF_NOTIFY_EOB; /* request interrupt notification */
753 chip->rmh.cmd[1] = buffer_size & MASK_DATA_SIZE;
754 chip->rmh.cmd[2] = buf_address_lo;
757 chip->rmh.cmd_len = 4;
758 chip->rmh.cmd[3] = buf_address_hi;
759 chip->rmh.cmd[0] |= BF_64BITS_ADR;
762 err = lx_message_send_atomic(chip, &chip->rmh);
765 *r_buffer_index = chip->rmh.stat[0];
793 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER);
795 chip->rmh.cmd[0] |= pipe_cmd;
796 chip->rmh.cmd[0] |= MASK_BUFFER_ID; /* ask for the current buffer: the
799 err = lx_message_send_atomic(chip, &chip->rmh);
802 *r_buffer_size = chip->rmh.stat[0] & MASK_DATA_SIZE;
815 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER);
817 chip->rmh.cmd[0] |= pipe_cmd;
818 chip->rmh.cmd[0] |= buffer_index;
820 err = lx_message_send_atomic(chip, &chip->rmh);
839 lx_message_init(&chip->rmh, CMD_0D_SET_MUTE);
841 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, 0);
843 chip->rmh.cmd[1] = (u32)(mute_mask >> (u64)32); /* hi part */
844 chip->rmh.cmd[2] = (u32)(mute_mask & (u64)0xFFFFFFFF); /* lo part */
847 "mute %x %x %x\n", chip->rmh.cmd[0], chip->rmh.cmd[1],
848 chip->rmh.cmd[2]);
850 err = lx_message_send_atomic(chip, &chip->rmh);
885 lx_message_init(&chip->rmh, CMD_12_GET_PEAK);
886 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, i);
888 err = lx_message_send_atomic(chip, &chip->rmh);
891 s0 = peak_map[chip->rmh.stat[0] & 0x0F];
892 s1 = peak_map[(chip->rmh.stat[0] >> 4) & 0xf];
893 s2 = peak_map[(chip->rmh.stat[0] >> 8) & 0xf];
894 s3 = peak_map[(chip->rmh.stat[0] >> 12) & 0xf];