^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Driver for Digigram VX soundcards
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Definitions of DSP commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef __VX_CMD_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define __VX_CMD_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) CMD_VERSION,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) CMD_SUPPORTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) CMD_TEST_IT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) CMD_SEND_IRQA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) CMD_IBL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) CMD_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) CMD_RES_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) CMD_FREE_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) CMD_CONF_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) CMD_ABORT_CONF_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) CMD_PARAM_OUTPUT_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) CMD_STOP_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) CMD_PIPE_STATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) CMD_PIPE_SPL_COUNT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) CMD_CAN_START_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) CMD_SIZE_HBUFFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) CMD_START_STREAM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) CMD_START_ONE_STREAM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) CMD_PAUSE_STREAM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) CMD_PAUSE_ONE_STREAM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) CMD_STREAM_OUT_LEVEL_ADJUST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) CMD_STOP_STREAM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) CMD_FORMAT_STREAM_OUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) CMD_FORMAT_STREAM_IN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) CMD_GET_STREAM_STATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) CMD_DROP_BYTES_AWAY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) CMD_GET_REMAINING_BYTES,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) CMD_CONNECT_AUDIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) CMD_AUDIO_LEVEL_ADJUST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) CMD_AUDIO_VU_PIC_METER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) CMD_GET_AUDIO_LEVELS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) CMD_GET_NOTIFY_EVENT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) CMD_INFO_NOTIFIED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) CMD_ACCESS_IO_FCT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) CMD_STATUS_R_BUFFERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) CMD_UPDATE_R_BUFFERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) CMD_LOAD_EFFECT_CONTEXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) CMD_EFFECT_ONE_PIPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) CMD_MODIFY_CLOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) CMD_STREAM1_OUT_SET_N_LEVELS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) CMD_PURGE_STREAM_DCMDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) CMD_NOTIFY_PIPE_TIME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) CMD_LOAD_EFFECT_CONTEXT_PACKET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) CMD_RELIC_R_BUFFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) CMD_RESYNC_AUDIO_INPUTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) CMD_NOTIFY_STREAM_TIME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) CMD_STREAM_SAMPLE_COUNT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) CMD_CONFIG_TIME_CODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) CMD_GET_TIME_CODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) CMD_MANAGE_SIGNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) CMD_PARAMETER_STREAM_OUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) CMD_READ_BOARD_FREQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) CMD_GET_STREAM_LEVELS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) CMD_PURGE_PIPE_DCMDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) // CMD_SET_STREAM_OUT_EFFECTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) // CMD_GET_STREAM_OUT_EFFECTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) CMD_CONNECT_MONITORING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) CMD_STREAM2_OUT_SET_N_LEVELS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) CMD_CANCEL_R_BUFFERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) CMD_NOTIFY_END_OF_BUFFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) CMD_GET_STREAM_VU_METER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) CMD_LAST_INDEX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) struct vx_cmd_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) unsigned int opcode; /* command word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) int length; /* command length (in words) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) int st_type; /* status type (RMH_SSIZE_XXX) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) int st_length; /* fixed length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /* Family and code op of some DSP requests. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define CODE_OP_PIPE_TIME 0x004e0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define CODE_OP_START_STREAM 0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define CODE_OP_PAUSE_STREAM 0x00810000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define CODE_OP_OUT_STREAM_LEVEL 0x00820000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define CODE_OP_UPDATE_R_BUFFERS 0x00840000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define CODE_OP_OUT_STREAM1_LEVEL_CURVE 0x00850000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define CODE_OP_OUT_STREAM2_LEVEL_CURVE 0x00930000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define CODE_OP_OUT_STREAM_FORMAT 0x00860000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define CODE_OP_STREAM_TIME 0x008f0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define CODE_OP_OUT_STREAM_EXTRAPARAMETER 0x00910000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define CODE_OP_OUT_AUDIO_LEVEL 0x00c20000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define NOTIFY_LAST_COMMAND 0x00400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /* Values for a user delay */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define DC_DIFFERED_DELAY (1<<BIT_DIFFERED_COMMAND)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define DC_NOTIFY_DELAY (1<<BIT_NOTIFIED_COMMAND)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define DC_HBUFFER_DELAY (1<<BIT_TIME_RELATIVE_TO_BUFFER)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define DC_MULTIPLE_DELAY (1<<BIT_RESERVED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define DC_STREAM_TIME_DELAY (1<<BIT_STREAM_TIME)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define DC_CANCELLED_DELAY (1<<BIT_CANCELLED_COMMAND)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) /* Values for tiDelayed field in TIME_INFO structure,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * and for pbPause field in PLAY_BUFFER_INFO structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define BIT_DIFFERED_COMMAND 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define BIT_NOTIFIED_COMMAND 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define BIT_TIME_RELATIVE_TO_BUFFER 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define BIT_RESERVED 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define BIT_STREAM_TIME 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define BIT_CANCELLED_COMMAND 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) /* Access to the "Size" field of the response of the CMD_GET_NOTIFY_EVENT request. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define GET_NOTIFY_EVENT_SIZE_FIELD_MASK 0x000000ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* DSP commands general masks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define OPCODE_MASK 0x00ff0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define DSP_DIFFERED_COMMAND_MASK 0x0000C000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* Notifications (NOTIFY_INFO) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define ALL_CMDS_NOTIFIED 0x0000 // reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define START_STREAM_NOTIFIED 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define PAUSE_STREAM_NOTIFIED 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define OUT_STREAM_LEVEL_NOTIFIED 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define OUT_STREAM_PARAMETER_NOTIFIED 0x0004 // left for backward compatibility
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define OUT_STREAM_FORMAT_NOTIFIED 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define PIPE_TIME_NOTIFIED 0x0005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define OUT_AUDIO_LEVEL_NOTIFIED 0x0006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define OUT_STREAM_LEVEL_CURVE_NOTIFIED 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define STREAM_TIME_NOTIFIED 0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define OUT_STREAM_EXTRAPARAMETER_NOTIFIED 0x0009
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define UNKNOWN_COMMAND_NOTIFIED 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) /* Output pipe parameters setting */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define MASK_VALID_PIPE_MPEG_PARAM 0x000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define MASK_VALID_PIPE_BACKWARD_PARAM 0x000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define MASK_SET_PIPE_MPEG_PARAM 0x000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define MASK_SET_PIPE_BACKWARD_PARAM 0x000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define MASK_DSP_WORD 0x00FFFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define MASK_ALL_STREAM 0x00FFFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define MASK_DSP_WORD_LEVEL 0x000001FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define MASK_FIRST_FIELD 0x0000001F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define FIELD_SIZE 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define COMMAND_RECORD_MASK 0x000800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* PipeManagement definition bits (PIPE_DECL_INFO) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define P_UNDERRUN_SKIP_SOUND_MASK 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define P_PREPARE_FOR_MPEG3_MASK 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define P_DO_NOT_RESET_ANALOG_LEVELS 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define P_ALLOW_UNDER_ALLOCATION_MASK 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define P_DATA_MODE_MASK 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define P_ASIO_BUFFER_MANAGEMENT_MASK 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define BIT_SKIP_SOUND 0x08 // bit 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define BIT_DATA_MODE 0x10 // bit 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /* Bits in the CMD_MODIFY_CLOCK request. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define CMD_MODIFY_CLOCK_FD_BIT 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define CMD_MODIFY_CLOCK_T_BIT 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define CMD_MODIFY_CLOCK_S_BIT 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) /* Access to the results of the CMD_GET_TIME_CODE RMH. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define TIME_CODE_V_MASK 0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define TIME_CODE_N_MASK 0x00400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define TIME_CODE_B_MASK 0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define TIME_CODE_W_MASK 0x00100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) /* Values for the CMD_MANAGE_SIGNAL RMH. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define MANAGE_SIGNAL_TIME_CODE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define MANAGE_SIGNAL_MIDI 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) /* Values for the CMD_CONFIG_TIME_CODE RMH. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define CONFIG_TIME_CODE_CANCEL 0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /* Mask to get only the effective time from the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) * high word out of the 2 returned by the DSP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define PCX_TIME_HI_MASK 0x000fffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /* Values for setting a H-Buffer time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define HBUFFER_TIME_HIGH 0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define HBUFFER_TIME_LOW 0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define NOTIFY_MASK_TIME_HIGH 0x00400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define MULTIPLE_MASK_TIME_HIGH 0x00100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define STREAM_MASK_TIME_HIGH 0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) void vx_init_rmh(struct vx_rmh *rmh, unsigned int cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) * vx_send_pipe_cmd_params - fill first command word for pipe commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) * @rmh: the rmh to be modified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) * @is_capture: 0 = playback, 1 = capture operation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) * @param1: first pipe-parameter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) * @param2: second pipe-parameter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) static inline void vx_set_pipe_cmd_params(struct vx_rmh *rmh, int is_capture,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) int param1, int param2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) if (is_capture)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) rmh->Cmd[0] |= COMMAND_RECORD_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) rmh->Cmd[0] |= (((u32)param1 & MASK_FIRST_FIELD) << FIELD_SIZE) & MASK_DSP_WORD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) if (param2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) rmh->Cmd[0] |= ((u32)param2 & MASK_FIRST_FIELD) & MASK_DSP_WORD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) * vx_set_stream_cmd_params - fill first command word for stream commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) * @rmh: the rmh to be modified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) * @is_capture: 0 = playback, 1 = capture operation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) * @pipe: the pipe index (zero-based)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) static inline void vx_set_stream_cmd_params(struct vx_rmh *rmh, int is_capture, int pipe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) if (is_capture)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) rmh->Cmd[0] |= COMMAND_RECORD_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) rmh->Cmd[0] |= (((u32)pipe & MASK_FIRST_FIELD) << FIELD_SIZE) & MASK_DSP_WORD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #endif /* __VX_CMD_H */