- Timestamp:
- Jul 9, 2021 12:47:32 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 145624
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevHdaCodec.cpp
r90121 r90122 932 932 933 933 /** 934 * @interface_method_impl{CODECVERB, 935 */ 936 static DECLCALLBACK(int) vrbProcUnimplemented(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)937 { 938 RT_NOREF(pThis, pThisCC, cmd);939 LogFlowFunc((" cmd(raw:%x: cad:%x, d:%c, nid:%x, verb:%x)\n", cmd,940 CODEC_CAD( cmd), CODEC_DIRECT(cmd) ? 'N' : 'Y', CODEC_NID(cmd), CODEC_VERBDATA(cmd)));941 *p Resp = 0;942 return VINF_SUCCESS; 943 } 944 945 946 /** 947 * @interface_method_impl{CODECVERB, 948 */ 949 static DECLCALLBACK(int) vrbProcBreak(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)934 * @interface_method_impl{CODECVERB,pfn, Unimplemented} 935 */ 936 static DECLCALLBACK(int) vrbProcUnimplemented(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 937 { 938 RT_NOREF(pThis, pThisCC, uCmd); 939 LogFlowFunc(("uCmd(raw:%x: cad:%x, d:%c, nid:%x, verb:%x)\n", uCmd, 940 CODEC_CAD(uCmd), CODEC_DIRECT(uCmd) ? 'N' : 'Y', CODEC_NID(uCmd), CODEC_VERBDATA(uCmd))); 941 *puResp = 0; 942 return VINF_SUCCESS; 943 } 944 945 946 /** 947 * @interface_method_impl{CODECVERB,pfn, ???} 948 */ 949 static DECLCALLBACK(int) vrbProcBreak(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 950 950 { 951 951 int rc; 952 rc = vrbProcUnimplemented(pThis, pThisCC, cmd, pResp);953 *p Resp |= CODEC_RESPONSE_UNSOLICITED;952 rc = vrbProcUnimplemented(pThis, pThisCC, uCmd, puResp); 953 *puResp |= CODEC_RESPONSE_UNSOLICITED; 954 954 return rc; 955 955 } … … 958 958 959 959 /** 960 * @interface_method_impl{CODECVERB, 961 */ 962 static DECLCALLBACK(int) vrbProcGetAmplifier(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)963 { 964 RT_NOREF(pThisCC); 965 *p Resp = 0;960 * @interface_method_impl{CODECVERB,pfn, b--} 961 */ 962 static DECLCALLBACK(int) vrbProcGetAmplifier(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 963 { 964 RT_NOREF(pThisCC); 965 *puResp = 0; 966 966 967 967 /* HDA spec 7.3.3.7 Note A */ 968 968 /** @todo If index out of range response should be 0. */ 969 uint8_t u8Index = CODEC_GET_AMP_DIRECTION( cmd) == AMPLIFIER_OUT ? 0 : CODEC_GET_AMP_INDEX(cmd);970 971 PCODECNODE pNode = &pThis->aNodes[CODEC_NID( cmd)];972 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))973 *p Resp = AMPLIFIER_REGISTER(pNode->dac.B_params,974 CODEC_GET_AMP_DIRECTION(cmd),975 CODEC_GET_AMP_SIDE(cmd),976 u8Index);977 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID( cmd)))978 *p Resp = AMPLIFIER_REGISTER(pNode->adcvol.B_params,979 CODEC_GET_AMP_DIRECTION(cmd),980 CODEC_GET_AMP_SIDE(cmd),981 u8Index);982 else if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID( cmd)))983 *p Resp = AMPLIFIER_REGISTER(pNode->adcmux.B_params,984 CODEC_GET_AMP_DIRECTION(cmd),985 CODEC_GET_AMP_SIDE(cmd),986 u8Index);987 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID( cmd)))988 *p Resp = AMPLIFIER_REGISTER(pNode->pcbeep.B_params,989 CODEC_GET_AMP_DIRECTION(cmd),990 CODEC_GET_AMP_SIDE(cmd),991 u8Index);992 else if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))993 *p Resp = AMPLIFIER_REGISTER(pNode->port.B_params,994 CODEC_GET_AMP_DIRECTION(cmd),995 CODEC_GET_AMP_SIDE(cmd),996 u8Index);997 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))998 *p Resp = AMPLIFIER_REGISTER(pNode->adc.B_params,999 CODEC_GET_AMP_DIRECTION(cmd),1000 CODEC_GET_AMP_SIDE(cmd),1001 u8Index);1002 else 1003 LogRel2(("HDA: Warning: Unhandled get amplifier command: 0x%x (NID=0x%x [%RU8])\n", cmd, CODEC_NID(cmd), CODEC_NID(cmd)));1004 1005 return VINF_SUCCESS; 1006 } 1007 1008 1009 /** 1010 * @interface_method_impl{CODECVERB, 1011 */ 1012 static DECLCALLBACK(int) vrbProcGetParameter(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1013 { 1014 RT_NOREF(pThisCC); 1015 Assert(( cmd & CODEC_VERB_8BIT_DATA) < CODECNODE_F00_PARAM_LENGTH);1016 if (( cmd & CODEC_VERB_8BIT_DATA) >= CODECNODE_F00_PARAM_LENGTH)1017 { 1018 *p Resp = 0;1019 1020 LogFlowFunc(("invalid F00 parameter %d\n", ( cmd & CODEC_VERB_8BIT_DATA)));969 uint8_t u8Index = CODEC_GET_AMP_DIRECTION(uCmd) == AMPLIFIER_OUT ? 0 : CODEC_GET_AMP_INDEX(uCmd); 970 971 PCODECNODE pNode = &pThis->aNodes[CODEC_NID(uCmd)]; 972 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 973 *puResp = AMPLIFIER_REGISTER(pNode->dac.B_params, 974 CODEC_GET_AMP_DIRECTION(uCmd), 975 CODEC_GET_AMP_SIDE(uCmd), 976 u8Index); 977 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID(uCmd))) 978 *puResp = AMPLIFIER_REGISTER(pNode->adcvol.B_params, 979 CODEC_GET_AMP_DIRECTION(uCmd), 980 CODEC_GET_AMP_SIDE(uCmd), 981 u8Index); 982 else if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID(uCmd))) 983 *puResp = AMPLIFIER_REGISTER(pNode->adcmux.B_params, 984 CODEC_GET_AMP_DIRECTION(uCmd), 985 CODEC_GET_AMP_SIDE(uCmd), 986 u8Index); 987 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID(uCmd))) 988 *puResp = AMPLIFIER_REGISTER(pNode->pcbeep.B_params, 989 CODEC_GET_AMP_DIRECTION(uCmd), 990 CODEC_GET_AMP_SIDE(uCmd), 991 u8Index); 992 else if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 993 *puResp = AMPLIFIER_REGISTER(pNode->port.B_params, 994 CODEC_GET_AMP_DIRECTION(uCmd), 995 CODEC_GET_AMP_SIDE(uCmd), 996 u8Index); 997 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 998 *puResp = AMPLIFIER_REGISTER(pNode->adc.B_params, 999 CODEC_GET_AMP_DIRECTION(uCmd), 1000 CODEC_GET_AMP_SIDE(uCmd), 1001 u8Index); 1002 else 1003 LogRel2(("HDA: Warning: Unhandled get amplifier command: 0x%x (NID=0x%x [%RU8])\n", uCmd, CODEC_NID(uCmd), CODEC_NID(uCmd))); 1004 1005 return VINF_SUCCESS; 1006 } 1007 1008 1009 /** 1010 * @interface_method_impl{CODECVERB,pfn, ???} 1011 */ 1012 static DECLCALLBACK(int) vrbProcGetParameter(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1013 { 1014 RT_NOREF(pThisCC); 1015 Assert((uCmd & CODEC_VERB_8BIT_DATA) < CODECNODE_F00_PARAM_LENGTH); 1016 if ((uCmd & CODEC_VERB_8BIT_DATA) >= CODECNODE_F00_PARAM_LENGTH) 1017 { 1018 *puResp = 0; 1019 1020 LogFlowFunc(("invalid F00 parameter %d\n", (uCmd & CODEC_VERB_8BIT_DATA))); 1021 1021 return VINF_SUCCESS; 1022 1022 } 1023 1023 1024 *p Resp = pThis->aNodes[CODEC_NID(cmd)].node.au32F00_param[cmd & CODEC_VERB_8BIT_DATA];1025 return VINF_SUCCESS; 1026 } 1027 1028 1029 /** 1030 * @interface_method_impl{CODECVERB, 1031 */ 1032 static DECLCALLBACK(int) vrbProcGetConSelectCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1033 { 1034 RT_NOREF(pThisCC); 1035 *p Resp = 0;1036 1037 if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID( cmd)))1038 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adcmux.u32F01_param;1039 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1040 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digout.u32F01_param;1041 else if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1042 *p Resp = pThis->aNodes[CODEC_NID(cmd)].port.u32F01_param;1043 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1044 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adc.u32F01_param;1045 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID( cmd)))1046 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adcvol.u32F01_param;1047 else 1048 LogRel2(("HDA: Warning: Unhandled get connection select control command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1049 1050 return VINF_SUCCESS; 1051 } 1052 1053 1054 /** 1055 * @interface_method_impl{CODECVERB, 1056 */ 1057 static DECLCALLBACK(int) vrbProcSetConSelectCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1058 { 1059 RT_NOREF(pThisCC); 1060 *p Resp = 0;1024 *puResp = pThis->aNodes[CODEC_NID(uCmd)].node.au32F00_param[uCmd & CODEC_VERB_8BIT_DATA]; 1025 return VINF_SUCCESS; 1026 } 1027 1028 1029 /** 1030 * @interface_method_impl{CODECVERB,pfn, f01} 1031 */ 1032 static DECLCALLBACK(int) vrbProcGetConSelectCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1033 { 1034 RT_NOREF(pThisCC); 1035 *puResp = 0; 1036 1037 if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID(uCmd))) 1038 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adcmux.u32F01_param; 1039 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1040 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digout.u32F01_param; 1041 else if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1042 *puResp = pThis->aNodes[CODEC_NID(uCmd)].port.u32F01_param; 1043 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1044 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adc.u32F01_param; 1045 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID(uCmd))) 1046 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adcvol.u32F01_param; 1047 else 1048 LogRel2(("HDA: Warning: Unhandled get connection select control command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1049 1050 return VINF_SUCCESS; 1051 } 1052 1053 1054 /** 1055 * @interface_method_impl{CODECVERB,pfn, 701} 1056 */ 1057 static DECLCALLBACK(int) vrbProcSetConSelectCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1058 { 1059 RT_NOREF(pThisCC); 1060 *puResp = 0; 1061 1061 1062 1062 uint32_t *pu32Reg = NULL; 1063 if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID( cmd)))1064 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].adcmux.u32F01_param;1065 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1066 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digout.u32F01_param;1067 else if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1068 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].port.u32F01_param;1069 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1070 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].adc.u32F01_param;1071 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID( cmd)))1072 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].adcvol.u32F01_param;1073 else 1074 LogRel2(("HDA: Warning: Unhandled set connection select control command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1063 if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID(uCmd))) 1064 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].adcmux.u32F01_param; 1065 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1066 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digout.u32F01_param; 1067 else if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1068 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].port.u32F01_param; 1069 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1070 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].adc.u32F01_param; 1071 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID(uCmd))) 1072 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].adcvol.u32F01_param; 1073 else 1074 LogRel2(("HDA: Warning: Unhandled set connection select control command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1075 1075 1076 1076 if (pu32Reg) 1077 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1078 1079 return VINF_SUCCESS; 1080 } 1081 1082 1083 /** 1084 * @interface_method_impl{CODECVERB, 1085 */ 1086 static DECLCALLBACK(int) vrbProcGetPinCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1087 { 1088 RT_NOREF(pThisCC); 1089 *p Resp = 0;1090 1091 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1092 *p Resp = pThis->aNodes[CODEC_NID(cmd)].port.u32F07_param;1093 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1094 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digout.u32F07_param;1095 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1096 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F07_param;1097 else if (hdaCodecIsCdNode(pThis, CODEC_NID( cmd)))1098 *p Resp = pThis->aNodes[CODEC_NID(cmd)].cdnode.u32F07_param;1099 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID( cmd)))1100 *p Resp = pThis->aNodes[CODEC_NID(cmd)].pcbeep.u32F07_param;1101 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1102 *p Resp = pThis->aNodes[CODEC_NID(cmd)].reserved.u32F07_param;1103 else 1104 LogRel2(("HDA: Warning: Unhandled get pin control command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1105 1106 return VINF_SUCCESS; 1107 } 1108 1109 1110 /** 1111 * @interface_method_impl{CODECVERB, 1112 */ 1113 static DECLCALLBACK(int) vrbProcSetPinCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1114 { 1115 RT_NOREF(pThisCC); 1116 *p Resp = 0;1077 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1078 1079 return VINF_SUCCESS; 1080 } 1081 1082 1083 /** 1084 * @interface_method_impl{CODECVERB,pfn, f07} 1085 */ 1086 static DECLCALLBACK(int) vrbProcGetPinCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1087 { 1088 RT_NOREF(pThisCC); 1089 *puResp = 0; 1090 1091 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1092 *puResp = pThis->aNodes[CODEC_NID(uCmd)].port.u32F07_param; 1093 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1094 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digout.u32F07_param; 1095 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1096 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F07_param; 1097 else if (hdaCodecIsCdNode(pThis, CODEC_NID(uCmd))) 1098 *puResp = pThis->aNodes[CODEC_NID(uCmd)].cdnode.u32F07_param; 1099 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID(uCmd))) 1100 *puResp = pThis->aNodes[CODEC_NID(uCmd)].pcbeep.u32F07_param; 1101 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1102 *puResp = pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F07_param; 1103 else 1104 LogRel2(("HDA: Warning: Unhandled get pin control command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1105 1106 return VINF_SUCCESS; 1107 } 1108 1109 1110 /** 1111 * @interface_method_impl{CODECVERB,pfn, 707} 1112 */ 1113 static DECLCALLBACK(int) vrbProcSetPinCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1114 { 1115 RT_NOREF(pThisCC); 1116 *puResp = 0; 1117 1117 1118 1118 uint32_t *pu32Reg = NULL; 1119 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1120 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].port.u32F07_param;1121 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1122 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F07_param;1123 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1124 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digout.u32F07_param;1125 else if (hdaCodecIsCdNode(pThis, CODEC_NID( cmd)))1126 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].cdnode.u32F07_param;1127 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID( cmd)))1128 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].pcbeep.u32F07_param;1129 else if ( hdaCodecIsReservedNode(pThis, CODEC_NID( cmd))1130 && CODEC_NID( cmd) == 0x1b)1131 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].reserved.u32F07_param;1132 else 1133 LogRel2(("HDA: Warning: Unhandled set pin control command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1119 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1120 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].port.u32F07_param; 1121 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1122 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F07_param; 1123 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1124 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digout.u32F07_param; 1125 else if (hdaCodecIsCdNode(pThis, CODEC_NID(uCmd))) 1126 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].cdnode.u32F07_param; 1127 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID(uCmd))) 1128 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].pcbeep.u32F07_param; 1129 else if ( hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd)) 1130 && CODEC_NID(uCmd) == 0x1b) 1131 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F07_param; 1132 else 1133 LogRel2(("HDA: Warning: Unhandled set pin control command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1134 1134 1135 1135 if (pu32Reg) 1136 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1137 1138 return VINF_SUCCESS; 1139 } 1140 1141 1142 /** 1143 * @interface_method_impl{CODECVERB, 1144 */ 1145 static DECLCALLBACK(int) vrbProcGetUnsolicitedEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1146 { 1147 RT_NOREF(pThisCC); 1148 *p Resp = 0;1149 1150 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1151 *p Resp = pThis->aNodes[CODEC_NID(cmd)].port.u32F08_param;1152 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1153 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F08_param;1154 else if (( cmd) == STAC9220_NID_AFG)1155 *p Resp = pThis->aNodes[CODEC_NID(cmd)].afg.u32F08_param;1156 else if (hdaCodecIsVolKnobNode(pThis, CODEC_NID( cmd)))1157 *p Resp = pThis->aNodes[CODEC_NID(cmd)].volumeKnob.u32F08_param;1158 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1159 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digout.u32F08_param;1160 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1161 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F08_param;1162 else 1163 LogRel2(("HDA: Warning: Unhandled get unsolicited enabled command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1164 1165 return VINF_SUCCESS; 1166 } 1167 1168 1169 /** 1170 * @interface_method_impl{CODECVERB, 1171 */ 1172 static DECLCALLBACK(int) vrbProcSetUnsolicitedEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1173 { 1174 RT_NOREF(pThisCC); 1175 *p Resp = 0;1136 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1137 1138 return VINF_SUCCESS; 1139 } 1140 1141 1142 /** 1143 * @interface_method_impl{CODECVERB,pfn, f08} 1144 */ 1145 static DECLCALLBACK(int) vrbProcGetUnsolicitedEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1146 { 1147 RT_NOREF(pThisCC); 1148 *puResp = 0; 1149 1150 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1151 *puResp = pThis->aNodes[CODEC_NID(uCmd)].port.u32F08_param; 1152 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1153 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F08_param; 1154 else if ((uCmd) == STAC9220_NID_AFG) 1155 *puResp = pThis->aNodes[CODEC_NID(uCmd)].afg.u32F08_param; 1156 else if (hdaCodecIsVolKnobNode(pThis, CODEC_NID(uCmd))) 1157 *puResp = pThis->aNodes[CODEC_NID(uCmd)].volumeKnob.u32F08_param; 1158 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1159 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digout.u32F08_param; 1160 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1161 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F08_param; 1162 else 1163 LogRel2(("HDA: Warning: Unhandled get unsolicited enabled command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1164 1165 return VINF_SUCCESS; 1166 } 1167 1168 1169 /** 1170 * @interface_method_impl{CODECVERB,pfn, 708} 1171 */ 1172 static DECLCALLBACK(int) vrbProcSetUnsolicitedEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1173 { 1174 RT_NOREF(pThisCC); 1175 *puResp = 0; 1176 1176 1177 1177 uint32_t *pu32Reg = NULL; 1178 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1179 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].port.u32F08_param;1180 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1181 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F08_param;1182 else if (CODEC_NID( cmd) == STAC9220_NID_AFG)1183 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].afg.u32F08_param;1184 else if (hdaCodecIsVolKnobNode(pThis, CODEC_NID( cmd)))1185 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].volumeKnob.u32F08_param;1186 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1187 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F08_param;1188 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1189 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digout.u32F08_param;1190 else 1191 LogRel2(("HDA: Warning: Unhandled set unsolicited enabled command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1178 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1179 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].port.u32F08_param; 1180 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1181 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F08_param; 1182 else if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1183 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].afg.u32F08_param; 1184 else if (hdaCodecIsVolKnobNode(pThis, CODEC_NID(uCmd))) 1185 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].volumeKnob.u32F08_param; 1186 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1187 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F08_param; 1188 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1189 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digout.u32F08_param; 1190 else 1191 LogRel2(("HDA: Warning: Unhandled set unsolicited enabled command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1192 1192 1193 1193 if (pu32Reg) 1194 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1195 1196 return VINF_SUCCESS; 1197 } 1198 1199 1200 /** 1201 * @interface_method_impl{CODECVERB, 1202 */ 1203 static DECLCALLBACK(int) vrbProcGetPinSense(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1204 { 1205 RT_NOREF(pThisCC); 1206 *p Resp = 0;1207 1208 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1209 *p Resp = pThis->aNodes[CODEC_NID(cmd)].port.u32F09_param;1210 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1211 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F09_param;1194 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1195 1196 return VINF_SUCCESS; 1197 } 1198 1199 1200 /** 1201 * @interface_method_impl{CODECVERB,pfn, f09} 1202 */ 1203 static DECLCALLBACK(int) vrbProcGetPinSense(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1204 { 1205 RT_NOREF(pThisCC); 1206 *puResp = 0; 1207 1208 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1209 *puResp = pThis->aNodes[CODEC_NID(uCmd)].port.u32F09_param; 1210 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1211 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F09_param; 1212 1212 else 1213 1213 { 1214 1214 AssertFailed(); 1215 LogRel2(("HDA: Warning: Unhandled get pin sense command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1216 } 1217 1218 return VINF_SUCCESS; 1219 } 1220 1221 1222 /** 1223 * @interface_method_impl{CODECVERB, 1224 */ 1225 static DECLCALLBACK(int) vrbProcSetPinSense(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1226 { 1227 RT_NOREF(pThisCC); 1228 *p Resp = 0;1215 LogRel2(("HDA: Warning: Unhandled get pin sense command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1216 } 1217 1218 return VINF_SUCCESS; 1219 } 1220 1221 1222 /** 1223 * @interface_method_impl{CODECVERB,pfn, 709} 1224 */ 1225 static DECLCALLBACK(int) vrbProcSetPinSense(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1226 { 1227 RT_NOREF(pThisCC); 1228 *puResp = 0; 1229 1229 1230 1230 uint32_t *pu32Reg = NULL; 1231 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1232 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].port.u32F09_param;1233 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1234 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F09_param;1235 else 1236 LogRel2(("HDA: Warning: Unhandled set pin sense command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1231 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1232 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].port.u32F09_param; 1233 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1234 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F09_param; 1235 else 1236 LogRel2(("HDA: Warning: Unhandled set pin sense command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1237 1237 1238 1238 if (pu32Reg) 1239 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1240 1241 return VINF_SUCCESS; 1242 } 1243 1244 1245 /** 1246 * @interface_method_impl{CODECVERB, 1247 */ 1248 static DECLCALLBACK(int) vrbProcGetConnectionListEntry(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1249 { 1250 RT_NOREF(pThisCC); 1251 *p Resp = 0;1252 1253 Assert(( cmd & CODEC_VERB_8BIT_DATA) < CODECNODE_F02_PARAM_LENGTH);1254 if (( cmd & CODEC_VERB_8BIT_DATA) >= CODECNODE_F02_PARAM_LENGTH)1255 { 1256 LogFlowFunc(("access to invalid F02 index %d\n", ( cmd & CODEC_VERB_8BIT_DATA)));1239 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1240 1241 return VINF_SUCCESS; 1242 } 1243 1244 1245 /** 1246 * @interface_method_impl{CODECVERB,pfn, ???} 1247 */ 1248 static DECLCALLBACK(int) vrbProcGetConnectionListEntry(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1249 { 1250 RT_NOREF(pThisCC); 1251 *puResp = 0; 1252 1253 Assert((uCmd & CODEC_VERB_8BIT_DATA) < CODECNODE_F02_PARAM_LENGTH); 1254 if ((uCmd & CODEC_VERB_8BIT_DATA) >= CODECNODE_F02_PARAM_LENGTH) 1255 { 1256 LogFlowFunc(("access to invalid F02 index %d\n", (uCmd & CODEC_VERB_8BIT_DATA))); 1257 1257 return VINF_SUCCESS; 1258 1258 } 1259 *pResp = pThis->aNodes[CODEC_NID(cmd)].node.au32F02_param[cmd & CODEC_VERB_8BIT_DATA]; 1260 return VINF_SUCCESS; 1261 } 1262 1263 1264 /** 1265 * @interface_method_impl{CODECVERB, pfn, f03} 1266 */ 1267 static DECLCALLBACK(int) vrbProcGetProcessingState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp) 1268 { 1269 RT_NOREF(pThisCC); 1270 *pResp = 0; 1271 1272 if (hdaCodecIsAdcNode(pThis, CODEC_NID(cmd))) 1273 *pResp = pThis->aNodes[CODEC_NID(cmd)].adc.u32F03_param; 1274 1275 return VINF_SUCCESS; 1276 } 1277 1278 1279 /** 1280 * @interface_method_impl{CODECVERB, pfn, 703} 1281 */ 1282 static DECLCALLBACK(int) vrbProcSetProcessingState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp) 1283 { 1284 RT_NOREF(pThisCC); 1285 *pResp = 0; 1286 1287 if (hdaCodecIsAdcNode(pThis, CODEC_NID(cmd))) 1288 hdaCodecSetRegisterU8(&pThis->aNodes[CODEC_NID(cmd)].adc.u32F03_param, cmd, 0); 1289 return VINF_SUCCESS; 1290 } 1291 1292 1293 /** 1294 * @interface_method_impl{CODECVERB, pfn, f0d} 1295 */ 1296 static DECLCALLBACK(int) vrbProcGetDigitalConverter(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp) 1297 { 1298 RT_NOREF(pThisCC); 1299 *pResp = 0; 1300 1301 if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(cmd))) 1302 *pResp = pThis->aNodes[CODEC_NID(cmd)].spdifout.u32F0d_param; 1303 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(cmd))) 1304 *pResp = pThis->aNodes[CODEC_NID(cmd)].spdifin.u32F0d_param; 1305 1306 return VINF_SUCCESS; 1307 } 1308 1309 1310 static int codecSetDigitalConverter(PHDACODEC pThis, uint32_t cmd, uint8_t u8Offset, uint64_t *pResp) 1311 { 1312 *pResp = 0; 1313 1314 if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(cmd))) 1315 hdaCodecSetRegisterU8(&pThis->aNodes[CODEC_NID(cmd)].spdifout.u32F0d_param, cmd, u8Offset); 1316 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(cmd))) 1317 hdaCodecSetRegisterU8(&pThis->aNodes[CODEC_NID(cmd)].spdifin.u32F0d_param, cmd, u8Offset); 1318 return VINF_SUCCESS; 1319 } 1320 1321 1322 /** 1323 * @interface_method_impl{CODECVERB, pfn, 70d} 1324 */ 1325 static DECLCALLBACK(int) vrbProcSetDigitalConverter1(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp) 1326 { 1327 RT_NOREF(pThisCC); 1328 return codecSetDigitalConverter(pThis, cmd, 0, pResp); 1329 } 1330 1331 1332 /** 1333 * @interface_method_impl{CODECVERB, pfn, 70e} 1334 */ 1335 static DECLCALLBACK(int) vrbProcSetDigitalConverter2(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp) 1336 { 1337 RT_NOREF(pThisCC); 1338 return codecSetDigitalConverter(pThis, cmd, 8, pResp); 1339 } 1340 1341 1342 /** 1343 * @interface_method_impl{CODECVERB, pfn, f20} 1344 */ 1345 static DECLCALLBACK(int) vrbProcGetSubId(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp) 1346 { 1347 RT_NOREF(pThisCC); 1348 Assert(CODEC_CAD(cmd) == pThis->id); 1259 *puResp = pThis->aNodes[CODEC_NID(uCmd)].node.au32F02_param[uCmd & CODEC_VERB_8BIT_DATA]; 1260 return VINF_SUCCESS; 1261 } 1262 1263 1264 /** 1265 * @interface_method_impl{CODECVERB,pfn, f03} 1266 */ 1267 static DECLCALLBACK(int) vrbProcGetProcessingState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1268 { 1269 RT_NOREF(pThisCC); 1270 *puResp = 0; 1271 1272 if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1273 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adc.u32F03_param; 1274 1275 return VINF_SUCCESS; 1276 } 1277 1278 1279 /** 1280 * @interface_method_impl{CODECVERB,pfn, 703} 1281 */ 1282 static DECLCALLBACK(int) vrbProcSetProcessingState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1283 { 1284 RT_NOREF(pThisCC); 1285 *puResp = 0; 1286 1287 if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1288 hdaCodecSetRegisterU8(&pThis->aNodes[CODEC_NID(uCmd)].adc.u32F03_param, uCmd, 0); 1289 return VINF_SUCCESS; 1290 } 1291 1292 1293 /** 1294 * @interface_method_impl{CODECVERB,pfn, f0d} 1295 */ 1296 static DECLCALLBACK(int) vrbProcGetDigitalConverter(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1297 { 1298 RT_NOREF(pThisCC); 1299 *puResp = 0; 1300 1301 if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1302 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F0d_param; 1303 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1304 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F0d_param; 1305 return VINF_SUCCESS; 1306 } 1307 1308 1309 static int codecSetDigitalConverter(PHDACODEC pThis, uint32_t uCmd, uint8_t u8Offset, uint64_t *puResp) 1310 { 1311 *puResp = 0; 1312 1313 if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1314 hdaCodecSetRegisterU8(&pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F0d_param, uCmd, u8Offset); 1315 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1316 hdaCodecSetRegisterU8(&pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F0d_param, uCmd, u8Offset); 1317 return VINF_SUCCESS; 1318 } 1319 1320 1321 /** 1322 * @interface_method_impl{CODECVERB,pfn, 70d} 1323 */ 1324 static DECLCALLBACK(int) vrbProcSetDigitalConverter1(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1325 { 1326 RT_NOREF(pThisCC); 1327 return codecSetDigitalConverter(pThis, uCmd, 0, puResp); 1328 } 1329 1330 1331 /** 1332 * @interface_method_impl{CODECVERB,pfn, 70e} 1333 */ 1334 static DECLCALLBACK(int) vrbProcSetDigitalConverter2(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1335 { 1336 RT_NOREF(pThisCC); 1337 return codecSetDigitalConverter(pThis, uCmd, 8, puResp); 1338 } 1339 1340 1341 /** 1342 * @interface_method_impl{CODECVERB,pfn, f20} 1343 */ 1344 static DECLCALLBACK(int) vrbProcGetSubId(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1345 { 1346 RT_NOREF(pThisCC); 1347 Assert(CODEC_CAD(uCmd) == pThis->id); 1349 1348 uint8_t const cTotalNodes = (uint8_t)RT_MIN(pThis->cTotalNodes, RT_ELEMENTS(pThis->aNodes)); 1350 Assert(CODEC_NID( cmd) < cTotalNodes);1351 if (CODEC_NID( cmd) >= cTotalNodes)1352 { 1353 LogFlowFunc(("invalid node address %d\n", CODEC_NID( cmd)));1354 *p Resp = 0;1349 Assert(CODEC_NID(uCmd) < cTotalNodes); 1350 if (CODEC_NID(uCmd) >= cTotalNodes) 1351 { 1352 LogFlowFunc(("invalid node address %d\n", CODEC_NID(uCmd))); 1353 *puResp = 0; 1355 1354 return VINF_SUCCESS; 1356 1355 } 1357 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1358 *p Resp = pThis->aNodes[CODEC_NID(cmd)].afg.u32F20_param;1359 else 1360 *p Resp = 0;1361 return VINF_SUCCESS; 1362 } 1363 1364 1365 static int codecSetSubIdX(PHDACODEC pThis, uint32_t cmd, uint8_t u8Offset)1366 { 1367 Assert(CODEC_CAD( cmd) == pThis->id);1356 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1357 *puResp = pThis->aNodes[CODEC_NID(uCmd)].afg.u32F20_param; 1358 else 1359 *puResp = 0; 1360 return VINF_SUCCESS; 1361 } 1362 1363 1364 static int codecSetSubIdX(PHDACODEC pThis, uint32_t uCmd, uint8_t u8Offset) 1365 { 1366 Assert(CODEC_CAD(uCmd) == pThis->id); 1368 1367 uint8_t const cTotalNodes = (uint8_t)RT_MIN(pThis->cTotalNodes, RT_ELEMENTS(pThis->aNodes)); 1369 Assert(CODEC_NID( cmd) < cTotalNodes);1370 if (CODEC_NID( cmd) >= cTotalNodes)1371 { 1372 LogFlowFunc(("invalid node address %d\n", CODEC_NID( cmd)));1368 Assert(CODEC_NID(uCmd) < cTotalNodes); 1369 if (CODEC_NID(uCmd) >= cTotalNodes) 1370 { 1371 LogFlowFunc(("invalid node address %d\n", CODEC_NID(uCmd))); 1373 1372 return VINF_SUCCESS; 1374 1373 } 1375 1374 uint32_t *pu32Reg; 1376 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1377 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].afg.u32F20_param;1375 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1376 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].afg.u32F20_param; 1378 1377 else 1379 1378 AssertFailedReturn(VINF_SUCCESS); 1380 hdaCodecSetRegisterU8(pu32Reg, cmd, u8Offset);1381 return VINF_SUCCESS; 1382 } 1383 1384 1385 /** 1386 * @interface_method_impl{CODECVERB, 1387 */ 1388 static DECLCALLBACK(int) vrbProcSetSubId0(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1389 { 1390 RT_NOREF(pThisCC); 1391 *p Resp = 0;1392 return codecSetSubIdX(pThis, cmd, 0);1393 } 1394 1395 1396 /** 1397 * @interface_method_impl{CODECVERB, 1398 */ 1399 static DECLCALLBACK(int) vrbProcSetSubId1(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1400 { 1401 RT_NOREF(pThisCC); 1402 *p Resp = 0;1403 return codecSetSubIdX(pThis, cmd, 8);1404 } 1405 1406 1407 /** 1408 * @interface_method_impl{CODECVERB, 1409 */ 1410 static DECLCALLBACK(int) vrbProcSetSubId2(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1411 { 1412 RT_NOREF(pThisCC); 1413 *p Resp = 0;1414 return codecSetSubIdX(pThis, cmd, 16);1415 } 1416 1417 1418 /** 1419 * @interface_method_impl{CODECVERB, 1420 */ 1421 static DECLCALLBACK(int) vrbProcSetSubId3(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1422 { 1423 RT_NOREF(pThisCC); 1424 *p Resp = 0;1425 return codecSetSubIdX(pThis, cmd, 24);1426 } 1427 1428 1429 /** 1430 * @interface_method_impl{CODECVERB, 1431 */ 1432 static DECLCALLBACK(int) vrbProcReset(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1433 { 1434 RT_NOREF(pThisCC); 1435 Assert(CODEC_CAD( cmd) == pThis->id);1379 hdaCodecSetRegisterU8(pu32Reg, uCmd, u8Offset); 1380 return VINF_SUCCESS; 1381 } 1382 1383 1384 /** 1385 * @interface_method_impl{CODECVERB,pfn, 720} 1386 */ 1387 static DECLCALLBACK(int) vrbProcSetSubId0(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1388 { 1389 RT_NOREF(pThisCC); 1390 *puResp = 0; 1391 return codecSetSubIdX(pThis, uCmd, 0); 1392 } 1393 1394 1395 /** 1396 * @interface_method_impl{CODECVERB,pfn, 721} 1397 */ 1398 static DECLCALLBACK(int) vrbProcSetSubId1(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1399 { 1400 RT_NOREF(pThisCC); 1401 *puResp = 0; 1402 return codecSetSubIdX(pThis, uCmd, 8); 1403 } 1404 1405 1406 /** 1407 * @interface_method_impl{CODECVERB,pfn, 722} 1408 */ 1409 static DECLCALLBACK(int) vrbProcSetSubId2(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1410 { 1411 RT_NOREF(pThisCC); 1412 *puResp = 0; 1413 return codecSetSubIdX(pThis, uCmd, 16); 1414 } 1415 1416 1417 /** 1418 * @interface_method_impl{CODECVERB,pfn, 723} 1419 */ 1420 static DECLCALLBACK(int) vrbProcSetSubId3(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1421 { 1422 RT_NOREF(pThisCC); 1423 *puResp = 0; 1424 return codecSetSubIdX(pThis, uCmd, 24); 1425 } 1426 1427 1428 /** 1429 * @interface_method_impl{CODECVERB,pfn, ???} 1430 */ 1431 static DECLCALLBACK(int) vrbProcReset(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1432 { 1433 RT_NOREF(pThisCC); 1434 Assert(CODEC_CAD(uCmd) == pThis->id); 1436 1435 1437 1436 if (pThis->enmType == CODEC_TYPE_STAC9220) 1438 1437 { 1439 Assert(CODEC_NID( cmd) == STAC9220_NID_AFG);1440 1441 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1438 Assert(CODEC_NID(uCmd) == STAC9220_NID_AFG); 1439 1440 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1442 1441 stac9220Reset(pThis); 1443 1442 } … … 1445 1444 AssertFailedReturn(VERR_NOT_IMPLEMENTED); 1446 1445 1447 *p Resp = 0;1448 return VINF_SUCCESS; 1449 } 1450 1451 1452 /** 1453 * @interface_method_impl{CODECVERB, 1454 */ 1455 static DECLCALLBACK(int) vrbProcGetPowerState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1456 { 1457 RT_NOREF(pThisCC); 1458 *p Resp = 0;1459 1460 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1461 *p Resp = pThis->aNodes[CODEC_NID(cmd)].afg.u32F05_param;1462 else if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1463 *p Resp = pThis->aNodes[CODEC_NID(cmd)].dac.u32F05_param;1464 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1465 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adc.u32F05_param;1466 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1467 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F05_param;1468 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1469 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digout.u32F05_param;1470 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))1471 *p Resp = pThis->aNodes[CODEC_NID(cmd)].spdifout.u32F05_param;1472 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))1473 *p Resp = pThis->aNodes[CODEC_NID(cmd)].spdifin.u32F05_param;1474 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1475 *p Resp = pThis->aNodes[CODEC_NID(cmd)].reserved.u32F05_param;1476 else 1477 LogRel2(("HDA: Warning: Unhandled get power state command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1446 *puResp = 0; 1447 return VINF_SUCCESS; 1448 } 1449 1450 1451 /** 1452 * @interface_method_impl{CODECVERB,pfn, f05} 1453 */ 1454 static DECLCALLBACK(int) vrbProcGetPowerState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1455 { 1456 RT_NOREF(pThisCC); 1457 *puResp = 0; 1458 1459 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1460 *puResp = pThis->aNodes[CODEC_NID(uCmd)].afg.u32F05_param; 1461 else if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1462 *puResp = pThis->aNodes[CODEC_NID(uCmd)].dac.u32F05_param; 1463 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1464 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adc.u32F05_param; 1465 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1466 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F05_param; 1467 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1468 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digout.u32F05_param; 1469 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1470 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F05_param; 1471 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1472 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F05_param; 1473 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1474 *puResp = pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F05_param; 1475 else 1476 LogRel2(("HDA: Warning: Unhandled get power state command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1478 1477 1479 1478 LogFunc(("[NID0x%02x]: fReset=%RTbool, fStopOk=%RTbool, Act=D%RU8, Set=D%RU8\n", 1480 CODEC_NID( cmd), CODEC_F05_IS_RESET(*pResp), CODEC_F05_IS_STOPOK(*pResp), CODEC_F05_ACT(*pResp), CODEC_F05_SET(*pResp)));1479 CODEC_NID(uCmd), CODEC_F05_IS_RESET(*puResp), CODEC_F05_IS_STOPOK(*puResp), CODEC_F05_ACT(*puResp), CODEC_F05_SET(*puResp))); 1481 1480 return VINF_SUCCESS; 1482 1481 } … … 1485 1484 1486 1485 /** 1487 * @interface_method_impl{CODECVERB, 1488 */ 1489 static DECLCALLBACK(int) vrbProcSetPowerState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1490 { 1491 RT_NOREF(pThisCC); 1492 *p Resp = 0;1486 * @interface_method_impl{CODECVERB,pfn, 705} 1487 */ 1488 static DECLCALLBACK(int) vrbProcSetPowerState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1489 { 1490 RT_NOREF(pThisCC); 1491 *puResp = 0; 1493 1492 1494 1493 uint32_t *pu32Reg = NULL; 1495 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1496 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].afg.u32F05_param;1497 else if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1498 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].dac.u32F05_param;1499 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1500 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F05_param;1501 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1502 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digout.u32F05_param;1503 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1504 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].adc.u32F05_param;1505 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))1506 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].spdifout.u32F05_param;1507 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))1508 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].spdifin.u32F05_param;1509 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1510 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].reserved.u32F05_param;1511 else 1512 { 1513 LogRel2(("HDA: Warning: Unhandled set power state command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1494 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1495 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].afg.u32F05_param; 1496 else if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1497 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].dac.u32F05_param; 1498 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1499 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F05_param; 1500 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1501 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digout.u32F05_param; 1502 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1503 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].adc.u32F05_param; 1504 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1505 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F05_param; 1506 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1507 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F05_param; 1508 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1509 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F05_param; 1510 else 1511 { 1512 LogRel2(("HDA: Warning: Unhandled set power state command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1514 1513 } 1515 1514 … … 1517 1516 return VINF_SUCCESS; 1518 1517 1519 uint8_t uPwrCmd = CODEC_F05_SET ( cmd);1518 uint8_t uPwrCmd = CODEC_F05_SET (uCmd); 1520 1519 bool fReset = CODEC_F05_IS_RESET (*pu32Reg); 1521 1520 bool fStopOk = CODEC_F05_IS_STOPOK(*pu32Reg); … … 1525 1524 uint8_t uPwrSet = CODEC_F05_SET (*pu32Reg); 1526 1525 LogFunc(("[NID0x%02x] Cmd=D%RU8, fReset=%RTbool, fStopOk=%RTbool, fError=%RTbool, uPwrAct=D%RU8, uPwrSet=D%RU8\n", 1527 CODEC_NID( cmd), uPwrCmd, fReset, fStopOk, fError, uPwrAct, uPwrSet));1526 CODEC_NID(uCmd), uPwrCmd, fReset, fStopOk, fError, uPwrAct, uPwrSet)); 1528 1527 LogFunc(("AFG: Act=D%RU8, Set=D%RU8\n", 1529 1528 CODEC_F05_ACT(pThis->aNodes[STAC9220_NID_AFG].afg.u32F05_param), … … 1531 1530 #endif 1532 1531 1533 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1532 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1534 1533 *pu32Reg = CODEC_MAKE_F05(fReset, fStopOk, 0, uPwrCmd /* PS-Act */, uPwrCmd /* PS-Set */); 1535 1534 … … 1577 1576 1578 1577 LogFunc(("[NID0x%02x] fReset=%RTbool, fStopOk=%RTbool, Act=D%RU8, Set=D%RU8\n", 1579 CODEC_NID( cmd),1578 CODEC_NID(uCmd), 1580 1579 CODEC_F05_IS_RESET(*pu32Reg), CODEC_F05_IS_STOPOK(*pu32Reg), CODEC_F05_ACT(*pu32Reg), CODEC_F05_SET(*pu32Reg))); 1581 1580 … … 1598 1597 1599 1598 /** 1600 * @interface_method_impl{CODECVERB, 1601 */ 1602 static DECLCALLBACK(int) vrbProcSetPowerState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1603 { 1604 RT_NOREF(pThisCC); 1605 Assert(CODEC_CAD( cmd) == pThis->id);1599 * @interface_method_impl{CODECVERB,pfn, 705} 1600 */ 1601 static DECLCALLBACK(int) vrbProcSetPowerState(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1602 { 1603 RT_NOREF(pThisCC); 1604 Assert(CODEC_CAD(uCmd) == pThis->id); 1606 1605 uint8_t const cTotalNodes = (uint8_t)RT_MIN(pThis->cTotalNodes, RT_ELEMENTS(pThis->aNodes)); 1607 Assert(CODEC_NID( cmd) < cTotalNodes);1608 if (CODEC_NID( cmd) >= cTotalNodes)1609 { 1610 *p Resp = 0;1611 LogFlowFunc(("invalid node address %d\n", CODEC_NID( cmd)));1606 Assert(CODEC_NID(uCmd) < cTotalNodes); 1607 if (CODEC_NID(uCmd) >= cTotalNodes) 1608 { 1609 *puResp = 0; 1610 LogFlowFunc(("invalid node address %d\n", CODEC_NID(uCmd))); 1612 1611 return VINF_SUCCESS; 1613 1612 } 1614 *p Resp = 0;1613 *puResp = 0; 1615 1614 uint32_t *pu32Reg; 1616 if (CODEC_NID( cmd) == 1 /* AFG */)1617 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].afg.u32F05_param;1618 else if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1619 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].dac.u32F05_param;1620 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1621 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F05_param;1622 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1623 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].adc.u32F05_param;1624 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))1625 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].spdifout.u32F05_param;1626 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))1627 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].spdifin.u32F05_param;1628 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1629 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].reserved.u32F05_param;1615 if (CODEC_NID(uCmd) == 1 /* AFG */) 1616 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].afg.u32F05_param; 1617 else if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1618 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].dac.u32F05_param; 1619 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1620 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F05_param; 1621 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1622 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].adc.u32F05_param; 1623 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1624 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F05_param; 1625 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1626 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F05_param; 1627 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1628 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F05_param; 1630 1629 else 1631 1630 AssertFailedReturn(VINF_SUCCESS); … … 1634 1633 bool fStopOk = CODEC_F05_IS_STOPOK(*pu32Reg); 1635 1634 1636 if (CODEC_NID( cmd) != 1 /* AFG */)1635 if (CODEC_NID(uCmd) != 1 /* AFG */) 1637 1636 { 1638 1637 /* … … 1641 1640 *pu32Reg = CODEC_MAKE_F05(fReset, fStopOk, 0, 1642 1641 CODEC_F05_ACT(pThis->aNodes[1].afg.u32F05_param), 1643 CODEC_F05_SET( cmd));1642 CODEC_F05_SET(uCmd)); 1644 1643 } 1645 1644 1646 1645 /* Propagate next power state only if AFG is on or verb modifies AFG power state */ 1647 if ( CODEC_NID( cmd) == 1 /* AFG */1646 if ( CODEC_NID(uCmd) == 1 /* AFG */ 1648 1647 || !CODEC_F05_ACT(pThis->aNodes[1].afg.u32F05_param)) 1649 1648 { 1650 *pu32Reg = CODEC_MAKE_F05(fReset, fStopOk, 0, CODEC_F05_SET( cmd), CODEC_F05_SET(cmd));1651 if ( CODEC_NID( cmd) == 1 /* AFG */1652 && (CODEC_F05_SET( cmd)) == CODEC_F05_D0)1649 *pu32Reg = CODEC_MAKE_F05(fReset, fStopOk, 0, CODEC_F05_SET(uCmd), CODEC_F05_SET(uCmd)); 1650 if ( CODEC_NID(uCmd) == 1 /* AFG */ 1651 && (CODEC_F05_SET(uCmd)) == CODEC_F05_D0) 1653 1652 { 1654 1653 /* now we're powered on AFG and may propogate power states on nodes */ … … 1672 1671 1673 1672 /** 1674 * @interface_method_impl{CODECVERB, 1675 */ 1676 static DECLCALLBACK(int) vrbProcGetStreamId(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1677 { 1678 RT_NOREF(pThisCC); 1679 *p Resp = 0;1680 1681 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1682 *p Resp = pThis->aNodes[CODEC_NID(cmd)].dac.u32F06_param;1683 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1684 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adc.u32F06_param;1685 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))1686 *p Resp = pThis->aNodes[CODEC_NID(cmd)].spdifin.u32F06_param;1687 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))1688 *p Resp = pThis->aNodes[CODEC_NID(cmd)].spdifout.u32F06_param;1689 else if (CODEC_NID( cmd) == STAC9221_NID_I2S_OUT)1690 *p Resp = pThis->aNodes[CODEC_NID(cmd)].reserved.u32F06_param;1691 else 1692 LogRel2(("HDA: Warning: Unhandled get stream ID command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1673 * @interface_method_impl{CODECVERB,pfn, f06} 1674 */ 1675 static DECLCALLBACK(int) vrbProcGetStreamId(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1676 { 1677 RT_NOREF(pThisCC); 1678 *puResp = 0; 1679 1680 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1681 *puResp = pThis->aNodes[CODEC_NID(uCmd)].dac.u32F06_param; 1682 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1683 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adc.u32F06_param; 1684 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1685 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F06_param; 1686 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1687 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F06_param; 1688 else if (CODEC_NID(uCmd) == STAC9221_NID_I2S_OUT) 1689 *puResp = pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F06_param; 1690 else 1691 LogRel2(("HDA: Warning: Unhandled get stream ID command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1693 1692 1694 1693 LogFlowFunc(("[NID0x%02x] Stream ID=%RU8, channel=%RU8\n", 1695 CODEC_NID( cmd), CODEC_F00_06_GET_STREAM_ID(cmd), CODEC_F00_06_GET_CHANNEL_ID(cmd)));1696 1697 return VINF_SUCCESS; 1698 } 1699 1700 1701 /** 1702 * @interface_method_impl{CODECVERB, 1703 */ 1704 static DECLCALLBACK(int) vrbProcGetConverterFormat(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1705 { 1706 RT_NOREF(pThisCC); 1707 *p Resp = 0;1708 1709 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1710 *p Resp = pThis->aNodes[CODEC_NID(cmd)].dac.u32A_param;1711 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1712 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adc.u32A_param;1713 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))1714 *p Resp = pThis->aNodes[CODEC_NID(cmd)].spdifout.u32A_param;1715 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))1716 *p Resp = pThis->aNodes[CODEC_NID(cmd)].spdifin.u32A_param;1717 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1718 *p Resp = pThis->aNodes[CODEC_NID(cmd)].reserved.u32A_param;1719 else 1720 LogRel2(("HDA: Warning: Unhandled get converter format command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1721 1722 return VINF_SUCCESS; 1723 } 1724 1725 1726 /** 1727 * @interface_method_impl{CODECVERB, 1728 */ 1729 static DECLCALLBACK(int) vrbProcSetConverterFormat(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1730 { 1731 RT_NOREF(pThisCC); 1732 *p Resp = 0;1733 1734 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1735 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID( cmd)].dac.u32A_param, cmd, 0);1736 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))1737 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID( cmd)].adc.u32A_param, cmd, 0);1738 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))1739 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID( cmd)].spdifout.u32A_param, cmd, 0);1740 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))1741 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID( cmd)].spdifin.u32A_param, cmd, 0);1742 else 1743 LogRel2(("HDA: Warning: Unhandled set converter format command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1744 1745 return VINF_SUCCESS; 1746 } 1747 1748 1749 /** 1750 * @interface_method_impl{CODECVERB, 1751 */ 1752 static DECLCALLBACK(int) vrbProcGetEAPD_BTLEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1753 { 1754 RT_NOREF(pThisCC); 1755 *p Resp = 0;1756 1757 if (hdaCodecIsAdcVolNode(pThis, CODEC_NID( cmd)))1758 *p Resp = pThis->aNodes[CODEC_NID(cmd)].adcvol.u32F0c_param;1759 else if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1760 *p Resp = pThis->aNodes[CODEC_NID(cmd)].dac.u32F0c_param;1761 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1762 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F0c_param;1763 else 1764 LogRel2(("HDA: Warning: Unhandled get EAPD/BTL enabled command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1765 1766 return VINF_SUCCESS; 1767 } 1768 1769 1770 /** 1771 * @interface_method_impl{CODECVERB, 1772 */ 1773 static DECLCALLBACK(int) vrbProcSetEAPD_BTLEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1774 { 1775 RT_NOREF(pThisCC); 1776 *p Resp = 0;1694 CODEC_NID(uCmd), CODEC_F00_06_GET_STREAM_ID(uCmd), CODEC_F00_06_GET_CHANNEL_ID(uCmd))); 1695 1696 return VINF_SUCCESS; 1697 } 1698 1699 1700 /** 1701 * @interface_method_impl{CODECVERB,pfn, a0} 1702 */ 1703 static DECLCALLBACK(int) vrbProcGetConverterFormat(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1704 { 1705 RT_NOREF(pThisCC); 1706 *puResp = 0; 1707 1708 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1709 *puResp = pThis->aNodes[CODEC_NID(uCmd)].dac.u32A_param; 1710 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1711 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adc.u32A_param; 1712 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1713 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32A_param; 1714 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1715 *puResp = pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32A_param; 1716 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1717 *puResp = pThis->aNodes[CODEC_NID(uCmd)].reserved.u32A_param; 1718 else 1719 LogRel2(("HDA: Warning: Unhandled get converter format command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1720 1721 return VINF_SUCCESS; 1722 } 1723 1724 1725 /** 1726 * @interface_method_impl{CODECVERB,pfn, ??? - Also see section 3.7.1.} 1727 */ 1728 static DECLCALLBACK(int) vrbProcSetConverterFormat(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1729 { 1730 RT_NOREF(pThisCC); 1731 *puResp = 0; 1732 1733 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1734 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID(uCmd)].dac.u32A_param, uCmd, 0); 1735 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 1736 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID(uCmd)].adc.u32A_param, uCmd, 0); 1737 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 1738 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32A_param, uCmd, 0); 1739 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 1740 hdaCodecSetRegisterU16(&pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32A_param, uCmd, 0); 1741 else 1742 LogRel2(("HDA: Warning: Unhandled set converter format command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1743 1744 return VINF_SUCCESS; 1745 } 1746 1747 1748 /** 1749 * @interface_method_impl{CODECVERB,pfn, f0c} 1750 */ 1751 static DECLCALLBACK(int) vrbProcGetEAPD_BTLEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1752 { 1753 RT_NOREF(pThisCC); 1754 *puResp = 0; 1755 1756 if (hdaCodecIsAdcVolNode(pThis, CODEC_NID(uCmd))) 1757 *puResp = pThis->aNodes[CODEC_NID(uCmd)].adcvol.u32F0c_param; 1758 else if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1759 *puResp = pThis->aNodes[CODEC_NID(uCmd)].dac.u32F0c_param; 1760 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1761 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F0c_param; 1762 else 1763 LogRel2(("HDA: Warning: Unhandled get EAPD/BTL enabled command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1764 1765 return VINF_SUCCESS; 1766 } 1767 1768 1769 /** 1770 * @interface_method_impl{CODECVERB,pfn, 70c} 1771 */ 1772 static DECLCALLBACK(int) vrbProcSetEAPD_BTLEnabled(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1773 { 1774 RT_NOREF(pThisCC); 1775 *puResp = 0; 1777 1776 1778 1777 uint32_t *pu32Reg = NULL; 1779 if (hdaCodecIsAdcVolNode(pThis, CODEC_NID( cmd)))1780 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].adcvol.u32F0c_param;1781 else if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))1782 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].dac.u32F0c_param;1783 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1784 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F0c_param;1785 else 1786 LogRel2(("HDA: Warning: Unhandled set EAPD/BTL enabled command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1778 if (hdaCodecIsAdcVolNode(pThis, CODEC_NID(uCmd))) 1779 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].adcvol.u32F0c_param; 1780 else if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 1781 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].dac.u32F0c_param; 1782 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1783 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F0c_param; 1784 else 1785 LogRel2(("HDA: Warning: Unhandled set EAPD/BTL enabled command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1787 1786 1788 1787 if (pu32Reg) 1789 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1790 1791 return VINF_SUCCESS; 1792 } 1793 1794 1795 /** 1796 * @interface_method_impl{CODECVERB, 1797 */ 1798 static DECLCALLBACK(int) vrbProcGetVolumeKnobCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1799 { 1800 RT_NOREF(pThisCC); 1801 *p Resp = 0;1802 1803 if (hdaCodecIsVolKnobNode(pThis, CODEC_NID( cmd)))1804 *p Resp = pThis->aNodes[CODEC_NID(cmd)].volumeKnob.u32F0f_param;1805 else 1806 LogRel2(("HDA: Warning: Unhandled get volume knob control command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1807 1808 return VINF_SUCCESS; 1809 } 1810 1811 1812 /** 1813 * @interface_method_impl{CODECVERB, 1814 */ 1815 static DECLCALLBACK(int) vrbProcSetVolumeKnobCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1816 { 1817 RT_NOREF(pThisCC); 1818 *p Resp = 0;1788 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1789 1790 return VINF_SUCCESS; 1791 } 1792 1793 1794 /** 1795 * @interface_method_impl{CODECVERB,pfn, f0f} 1796 */ 1797 static DECLCALLBACK(int) vrbProcGetVolumeKnobCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1798 { 1799 RT_NOREF(pThisCC); 1800 *puResp = 0; 1801 1802 if (hdaCodecIsVolKnobNode(pThis, CODEC_NID(uCmd))) 1803 *puResp = pThis->aNodes[CODEC_NID(uCmd)].volumeKnob.u32F0f_param; 1804 else 1805 LogRel2(("HDA: Warning: Unhandled get volume knob control command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1806 1807 return VINF_SUCCESS; 1808 } 1809 1810 1811 /** 1812 * @interface_method_impl{CODECVERB,pfn, 70f} 1813 */ 1814 static DECLCALLBACK(int) vrbProcSetVolumeKnobCtrl(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1815 { 1816 RT_NOREF(pThisCC); 1817 *puResp = 0; 1819 1818 1820 1819 uint32_t *pu32Reg = NULL; 1821 if (hdaCodecIsVolKnobNode(pThis, CODEC_NID( cmd)))1822 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].volumeKnob.u32F0f_param;1823 else 1824 LogRel2(("HDA: Warning: Unhandled set volume knob control command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1820 if (hdaCodecIsVolKnobNode(pThis, CODEC_NID(uCmd))) 1821 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].volumeKnob.u32F0f_param; 1822 else 1823 LogRel2(("HDA: Warning: Unhandled set volume knob control command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1825 1824 1826 1825 if (pu32Reg) 1827 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1828 1829 return VINF_SUCCESS; 1830 } 1831 1832 1833 /** 1834 * @interface_method_impl{CODECVERB, 1835 */ 1836 static DECLCALLBACK(int) vrbProcGetGPIOData(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1837 { 1838 RT_NOREF(pThis, pThisCC, cmd);1839 *p Resp = 0;1840 return VINF_SUCCESS; 1841 } 1842 1843 1844 /** 1845 * @interface_method_impl{CODECVERB, 1846 */ 1847 static DECLCALLBACK(int) vrbProcSetGPIOData(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1848 { 1849 RT_NOREF(pThis, pThisCC, cmd);1850 *p Resp = 0;1851 return VINF_SUCCESS; 1852 } 1853 1854 1855 /** 1856 * @interface_method_impl{CODECVERB, 1857 */ 1858 static DECLCALLBACK(int) vrbProcGetGPIOEnableMask(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1859 { 1860 RT_NOREF(pThis, pThisCC, cmd);1861 *p Resp = 0;1862 return VINF_SUCCESS; 1863 } 1864 1865 1866 /** 1867 * @interface_method_impl{CODECVERB, 1868 */ 1869 static DECLCALLBACK(int) vrbProcSetGPIOEnableMask(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1870 { 1871 RT_NOREF(pThis, pThisCC, cmd);1872 *p Resp = 0;1873 return VINF_SUCCESS; 1874 } 1875 1876 1877 /** 1878 * @interface_method_impl{CODECVERB, 1879 */ 1880 static DECLCALLBACK(int) vrbProcGetGPIODirection(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1881 { 1882 RT_NOREF(pThisCC); 1883 *p Resp = 0;1826 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1827 1828 return VINF_SUCCESS; 1829 } 1830 1831 1832 /** 1833 * @interface_method_impl{CODECVERB,pfn, f15} 1834 */ 1835 static DECLCALLBACK(int) vrbProcGetGPIOData(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1836 { 1837 RT_NOREF(pThis, pThisCC, uCmd); 1838 *puResp = 0; 1839 return VINF_SUCCESS; 1840 } 1841 1842 1843 /** 1844 * @interface_method_impl{CODECVERB,pfn, 715} 1845 */ 1846 static DECLCALLBACK(int) vrbProcSetGPIOData(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1847 { 1848 RT_NOREF(pThis, pThisCC, uCmd); 1849 *puResp = 0; 1850 return VINF_SUCCESS; 1851 } 1852 1853 1854 /** 1855 * @interface_method_impl{CODECVERB,pfn, f16} 1856 */ 1857 static DECLCALLBACK(int) vrbProcGetGPIOEnableMask(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1858 { 1859 RT_NOREF(pThis, pThisCC, uCmd); 1860 *puResp = 0; 1861 return VINF_SUCCESS; 1862 } 1863 1864 1865 /** 1866 * @interface_method_impl{CODECVERB,pfn, 716} 1867 */ 1868 static DECLCALLBACK(int) vrbProcSetGPIOEnableMask(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1869 { 1870 RT_NOREF(pThis, pThisCC, uCmd); 1871 *puResp = 0; 1872 return VINF_SUCCESS; 1873 } 1874 1875 1876 /** 1877 * @interface_method_impl{CODECVERB,pfn, f17} 1878 */ 1879 static DECLCALLBACK(int) vrbProcGetGPIODirection(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1880 { 1881 RT_NOREF(pThisCC); 1882 *puResp = 0; 1884 1883 1885 1884 /* Note: this is true for ALC885. */ 1886 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1887 *p Resp = pThis->aNodes[1].afg.u32F17_param;1888 else 1889 LogRel2(("HDA: Warning: Unhandled get GPIO direction command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1890 1891 return VINF_SUCCESS; 1892 } 1893 1894 1895 /** 1896 * @interface_method_impl{CODECVERB, 1897 */ 1898 static DECLCALLBACK(int) vrbProcSetGPIODirection(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1899 { 1900 RT_NOREF(pThisCC); 1901 *p Resp = 0;1885 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1886 *puResp = pThis->aNodes[1].afg.u32F17_param; 1887 else 1888 LogRel2(("HDA: Warning: Unhandled get GPIO direction command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1889 1890 return VINF_SUCCESS; 1891 } 1892 1893 1894 /** 1895 * @interface_method_impl{CODECVERB,pfn, 717} 1896 */ 1897 static DECLCALLBACK(int) vrbProcSetGPIODirection(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1898 { 1899 RT_NOREF(pThisCC); 1900 *puResp = 0; 1902 1901 1903 1902 uint32_t *pu32Reg = NULL; 1904 if (CODEC_NID( cmd) == STAC9220_NID_AFG)1903 if (CODEC_NID(uCmd) == STAC9220_NID_AFG) 1905 1904 pu32Reg = &pThis->aNodes[1].afg.u32F17_param; 1906 1905 else 1907 LogRel2(("HDA: Warning: Unhandled set GPIO direction command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1906 LogRel2(("HDA: Warning: Unhandled set GPIO direction command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1908 1907 1909 1908 if (pu32Reg) 1910 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);1911 1912 return VINF_SUCCESS; 1913 } 1914 1915 1916 /** 1917 * @interface_method_impl{CODECVERB, 1918 */ 1919 static DECLCALLBACK(int) vrbProcGetConfig(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1920 { 1921 RT_NOREF(pThisCC); 1922 *p Resp = 0;1923 1924 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1925 *p Resp = pThis->aNodes[CODEC_NID(cmd)].port.u32F1c_param;1926 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1927 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digout.u32F1c_param;1928 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1929 *p Resp = pThis->aNodes[CODEC_NID(cmd)].digin.u32F1c_param;1930 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID( cmd)))1931 *p Resp = pThis->aNodes[CODEC_NID(cmd)].pcbeep.u32F1c_param;1932 else if (hdaCodecIsCdNode(pThis, CODEC_NID( cmd)))1933 *p Resp = pThis->aNodes[CODEC_NID(cmd)].cdnode.u32F1c_param;1934 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1935 *p Resp = pThis->aNodes[CODEC_NID(cmd)].reserved.u32F1c_param;1936 else 1937 LogRel2(("HDA: Warning: Unhandled get config command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));1938 1939 return VINF_SUCCESS; 1940 } 1941 1942 static int codecSetConfigX(PHDACODEC pThis, uint32_t cmd, uint8_t u8Offset)1909 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 1910 1911 return VINF_SUCCESS; 1912 } 1913 1914 1915 /** 1916 * @interface_method_impl{CODECVERB,pfn, f1c} 1917 */ 1918 static DECLCALLBACK(int) vrbProcGetConfig(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1919 { 1920 RT_NOREF(pThisCC); 1921 *puResp = 0; 1922 1923 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1924 *puResp = pThis->aNodes[CODEC_NID(uCmd)].port.u32F1c_param; 1925 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1926 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digout.u32F1c_param; 1927 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1928 *puResp = pThis->aNodes[CODEC_NID(uCmd)].digin.u32F1c_param; 1929 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID(uCmd))) 1930 *puResp = pThis->aNodes[CODEC_NID(uCmd)].pcbeep.u32F1c_param; 1931 else if (hdaCodecIsCdNode(pThis, CODEC_NID(uCmd))) 1932 *puResp = pThis->aNodes[CODEC_NID(uCmd)].cdnode.u32F1c_param; 1933 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1934 *puResp = pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F1c_param; 1935 else 1936 LogRel2(("HDA: Warning: Unhandled get config command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 1937 1938 return VINF_SUCCESS; 1939 } 1940 1941 static int codecSetConfigX(PHDACODEC pThis, uint32_t uCmd, uint8_t u8Offset) 1943 1942 { 1944 1943 uint32_t *pu32Reg = NULL; 1945 if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))1946 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].port.u32F1c_param;1947 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID( cmd)))1948 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digin.u32F1c_param;1949 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID( cmd)))1950 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].digout.u32F1c_param;1951 else if (hdaCodecIsCdNode(pThis, CODEC_NID( cmd)))1952 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].cdnode.u32F1c_param;1953 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID( cmd)))1954 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].pcbeep.u32F1c_param;1955 else if (hdaCodecIsReservedNode(pThis, CODEC_NID( cmd)))1956 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].reserved.u32F1c_param;1957 else 1958 LogRel2(("HDA: Warning: Unhandled set config command (%RU8) for NID0x%02x: 0x%x\n", u8Offset, CODEC_NID( cmd), cmd));1944 if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 1945 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].port.u32F1c_param; 1946 else if (hdaCodecIsDigInPinNode(pThis, CODEC_NID(uCmd))) 1947 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digin.u32F1c_param; 1948 else if (hdaCodecIsDigOutPinNode(pThis, CODEC_NID(uCmd))) 1949 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].digout.u32F1c_param; 1950 else if (hdaCodecIsCdNode(pThis, CODEC_NID(uCmd))) 1951 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].cdnode.u32F1c_param; 1952 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID(uCmd))) 1953 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].pcbeep.u32F1c_param; 1954 else if (hdaCodecIsReservedNode(pThis, CODEC_NID(uCmd))) 1955 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].reserved.u32F1c_param; 1956 else 1957 LogRel2(("HDA: Warning: Unhandled set config command (%RU8) for NID0x%02x: 0x%x\n", u8Offset, CODEC_NID(uCmd), uCmd)); 1959 1958 1960 1959 if (pu32Reg) 1961 hdaCodecSetRegisterU8(pu32Reg, cmd, u8Offset);1962 1963 return VINF_SUCCESS; 1964 } 1965 1966 1967 /** 1968 * @interface_method_impl{CODECVERB, 1969 */ 1970 static DECLCALLBACK(int) vrbProcSetConfig0(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1971 { 1972 RT_NOREF(pThisCC); 1973 *p Resp = 0;1974 return codecSetConfigX(pThis, cmd, 0);1975 } 1976 1977 1978 /** 1979 * @interface_method_impl{CODECVERB, 1980 */ 1981 static DECLCALLBACK(int) vrbProcSetConfig1(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1982 { 1983 RT_NOREF(pThisCC); 1984 *p Resp = 0;1985 return codecSetConfigX(pThis, cmd, 8);1986 } 1987 1988 1989 /** 1990 * @interface_method_impl{CODECVERB, 1991 */ 1992 static DECLCALLBACK(int) vrbProcSetConfig2(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)1993 { 1994 RT_NOREF(pThisCC); 1995 *p Resp = 0;1996 return codecSetConfigX(pThis, cmd, 16);1997 } 1998 1999 2000 /** 2001 * @interface_method_impl{CODECVERB, 2002 */ 2003 static DECLCALLBACK(int) vrbProcSetConfig3(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)2004 { 2005 RT_NOREF(pThisCC); 2006 *p Resp = 0;2007 return codecSetConfigX(pThis, cmd, 24);2008 } 2009 2010 2011 /** 2012 * @interface_method_impl{CODECVERB, 2013 */ 2014 static DECLCALLBACK(int) vrbProcGetSDISelect(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)2015 { 2016 RT_NOREF(pThisCC); 2017 *p Resp = 0;2018 2019 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))2020 *p Resp = pThis->aNodes[CODEC_NID(cmd)].dac.u32F04_param;2021 else 2022 LogRel2(("HDA: Warning: Unhandled get SDI select command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));2023 2024 return VINF_SUCCESS; 2025 } 2026 2027 2028 /** 2029 * @interface_method_impl{CODECVERB, 2030 */ 2031 static DECLCALLBACK(int) vrbProcSetSDISelect(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)2032 { 2033 RT_NOREF(pThisCC); 2034 *p Resp = 0;1960 hdaCodecSetRegisterU8(pu32Reg, uCmd, u8Offset); 1961 1962 return VINF_SUCCESS; 1963 } 1964 1965 1966 /** 1967 * @interface_method_impl{CODECVERB,pfn, 71c} 1968 */ 1969 static DECLCALLBACK(int) vrbProcSetConfig0(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1970 { 1971 RT_NOREF(pThisCC); 1972 *puResp = 0; 1973 return codecSetConfigX(pThis, uCmd, 0); 1974 } 1975 1976 1977 /** 1978 * @interface_method_impl{CODECVERB,pfn, 71d} 1979 */ 1980 static DECLCALLBACK(int) vrbProcSetConfig1(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1981 { 1982 RT_NOREF(pThisCC); 1983 *puResp = 0; 1984 return codecSetConfigX(pThis, uCmd, 8); 1985 } 1986 1987 1988 /** 1989 * @interface_method_impl{CODECVERB,pfn, 71e} 1990 */ 1991 static DECLCALLBACK(int) vrbProcSetConfig2(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 1992 { 1993 RT_NOREF(pThisCC); 1994 *puResp = 0; 1995 return codecSetConfigX(pThis, uCmd, 16); 1996 } 1997 1998 1999 /** 2000 * @interface_method_impl{CODECVERB,pfn, 71e} 2001 */ 2002 static DECLCALLBACK(int) vrbProcSetConfig3(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 2003 { 2004 RT_NOREF(pThisCC); 2005 *puResp = 0; 2006 return codecSetConfigX(pThis, uCmd, 24); 2007 } 2008 2009 2010 /** 2011 * @interface_method_impl{CODECVERB,pfn, f04} 2012 */ 2013 static DECLCALLBACK(int) vrbProcGetSDISelect(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 2014 { 2015 RT_NOREF(pThisCC); 2016 *puResp = 0; 2017 2018 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 2019 *puResp = pThis->aNodes[CODEC_NID(uCmd)].dac.u32F04_param; 2020 else 2021 LogRel2(("HDA: Warning: Unhandled get SDI select command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 2022 2023 return VINF_SUCCESS; 2024 } 2025 2026 2027 /** 2028 * @interface_method_impl{CODECVERB,pfn, 704} 2029 */ 2030 static DECLCALLBACK(int) vrbProcSetSDISelect(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 2031 { 2032 RT_NOREF(pThisCC); 2033 *puResp = 0; 2035 2034 2036 2035 uint32_t *pu32Reg = NULL; 2037 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))2038 pu32Reg = &pThis->aNodes[CODEC_NID( cmd)].dac.u32F04_param;2039 else 2040 LogRel2(("HDA: Warning: Unhandled set SDI select command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));2036 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 2037 pu32Reg = &pThis->aNodes[CODEC_NID(uCmd)].dac.u32F04_param; 2038 else 2039 LogRel2(("HDA: Warning: Unhandled set SDI select command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 2041 2040 2042 2041 if (pu32Reg) 2043 hdaCodecSetRegisterU8(pu32Reg, cmd, 0);2042 hdaCodecSetRegisterU8(pu32Reg, uCmd, 0); 2044 2043 2045 2044 return VINF_SUCCESS; … … 2049 2048 2050 2049 /** 2051 * @interface_method_impl{CODECVERB, 2052 */ 2053 static DECLCALLBACK(int) vrbProcR3SetAmplifier(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)2054 { 2055 *p Resp = 0;2056 2057 PCODECNODE pNode = &pThis->aNodes[CODEC_NID( cmd)];2050 * @interface_method_impl{CODECVERB,pfn, 3--} 2051 */ 2052 static DECLCALLBACK(int) vrbProcR3SetAmplifier(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 2053 { 2054 *puResp = 0; 2055 2056 PCODECNODE pNode = &pThis->aNodes[CODEC_NID(uCmd)]; 2058 2057 AMPLIFIER *pAmplifier = NULL; 2059 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))2058 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 2060 2059 pAmplifier = &pNode->dac.B_params; 2061 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID( cmd)))2060 else if (hdaCodecIsAdcVolNode(pThis, CODEC_NID(uCmd))) 2062 2061 pAmplifier = &pNode->adcvol.B_params; 2063 else if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID( cmd)))2062 else if (hdaCodecIsAdcMuxNode(pThis, CODEC_NID(uCmd))) 2064 2063 pAmplifier = &pNode->adcmux.B_params; 2065 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID( cmd)))2064 else if (hdaCodecIsPcbeepNode(pThis, CODEC_NID(uCmd))) 2066 2065 pAmplifier = &pNode->pcbeep.B_params; 2067 else if (hdaCodecIsPortNode(pThis, CODEC_NID( cmd)))2066 else if (hdaCodecIsPortNode(pThis, CODEC_NID(uCmd))) 2068 2067 pAmplifier = &pNode->port.B_params; 2069 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))2068 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 2070 2069 pAmplifier = &pNode->adc.B_params; 2071 2070 else 2072 2071 LogRel2(("HDA: Warning: Unhandled set amplifier command: 0x%x (Payload=%RU16, NID=0x%x [%RU8])\n", 2073 cmd, CODEC_VERB_PAYLOAD16(cmd), CODEC_NID(cmd), CODEC_NID(cmd)));2072 uCmd, CODEC_VERB_PAYLOAD16(uCmd), CODEC_NID(uCmd), CODEC_NID(uCmd))); 2074 2073 2075 2074 if (!pAmplifier) 2076 2075 return VINF_SUCCESS; 2077 2076 2078 bool fIsOut = CODEC_SET_AMP_IS_OUT_DIRECTION( cmd);2079 bool fIsIn = CODEC_SET_AMP_IS_IN_DIRECTION( cmd);2080 bool fIsLeft = CODEC_SET_AMP_IS_LEFT_SIDE( cmd);2081 bool fIsRight = CODEC_SET_AMP_IS_RIGHT_SIDE( cmd);2082 uint8_t u8Index = CODEC_SET_AMP_INDEX( cmd);2077 bool fIsOut = CODEC_SET_AMP_IS_OUT_DIRECTION(uCmd); 2078 bool fIsIn = CODEC_SET_AMP_IS_IN_DIRECTION(uCmd); 2079 bool fIsLeft = CODEC_SET_AMP_IS_LEFT_SIDE(uCmd); 2080 bool fIsRight = CODEC_SET_AMP_IS_RIGHT_SIDE(uCmd); 2081 uint8_t u8Index = CODEC_SET_AMP_INDEX(uCmd); 2083 2082 2084 2083 if ( (!fIsLeft && !fIsRight) … … 2087 2086 2088 2087 LogFunc(("[NID0x%02x] fIsOut=%RTbool, fIsIn=%RTbool, fIsLeft=%RTbool, fIsRight=%RTbool, Idx=%RU8\n", 2089 CODEC_NID( cmd), fIsOut, fIsIn, fIsLeft, fIsRight, u8Index));2088 CODEC_NID(uCmd), fIsOut, fIsIn, fIsLeft, fIsRight, u8Index)); 2090 2089 2091 2090 if (fIsIn) 2092 2091 { 2093 2092 if (fIsLeft) 2094 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_IN, AMPLIFIER_LEFT, u8Index), cmd, 0);2093 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_IN, AMPLIFIER_LEFT, u8Index), uCmd, 0); 2095 2094 if (fIsRight) 2096 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_IN, AMPLIFIER_RIGHT, u8Index), cmd, 0);2097 2098 // if (CODEC_NID( cmd) == pThis->u8AdcVolsLineIn)2095 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_IN, AMPLIFIER_RIGHT, u8Index), uCmd, 0); 2096 2097 // if (CODEC_NID(uCmd) == pThis->u8AdcVolsLineIn) 2099 2098 // { 2100 2099 hdaR3CodecToAudVolume(pThisCC, pNode, pAmplifier, PDMAUDIOMIXERCTL_LINE_IN); … … 2104 2103 { 2105 2104 if (fIsLeft) 2106 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_OUT, AMPLIFIER_LEFT, u8Index), cmd, 0);2105 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_OUT, AMPLIFIER_LEFT, u8Index), uCmd, 0); 2107 2106 if (fIsRight) 2108 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_OUT, AMPLIFIER_RIGHT, u8Index), cmd, 0);2109 2110 if (CODEC_NID( cmd) == pThis->u8DacLineOut)2107 hdaCodecSetRegisterU8(&LIFIER_REGISTER(*pAmplifier, AMPLIFIER_OUT, AMPLIFIER_RIGHT, u8Index), uCmd, 0); 2108 2109 if (CODEC_NID(uCmd) == pThis->u8DacLineOut) 2111 2110 hdaR3CodecToAudVolume(pThisCC, pNode, pAmplifier, PDMAUDIOMIXERCTL_FRONT); 2112 2111 } … … 2117 2116 2118 2117 /** 2119 * @interface_method_impl{CODECVERB, 2120 */ 2121 static DECLCALLBACK(int) vrbProcR3SetStreamId(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t cmd, uint64_t *pResp)2122 { 2123 *p Resp = 0;2124 2125 uint8_t uSD = CODEC_F00_06_GET_STREAM_ID( cmd);2126 uint8_t uChannel = CODEC_F00_06_GET_CHANNEL_ID( cmd);2118 * @interface_method_impl{CODECVERB,pfn, 706} 2119 */ 2120 static DECLCALLBACK(int) vrbProcR3SetStreamId(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) 2121 { 2122 *puResp = 0; 2123 2124 uint8_t uSD = CODEC_F00_06_GET_STREAM_ID(uCmd); 2125 uint8_t uChannel = CODEC_F00_06_GET_CHANNEL_ID(uCmd); 2127 2126 2128 2127 LogFlowFunc(("[NID0x%02x] Setting to stream ID=%RU8, channel=%RU8\n", 2129 CODEC_NID( cmd), uSD, uChannel));2128 CODEC_NID(uCmd), uSD, uChannel)); 2130 2129 2131 2130 ASSERT_GUEST_LOGREL_MSG_RETURN(uSD < HDA_MAX_STREAMS, … … 2134 2133 PDMAUDIODIR enmDir; 2135 2134 uint32_t *pu32Addr; 2136 if (hdaCodecIsDacNode(pThis, CODEC_NID( cmd)))2137 { 2138 pu32Addr = &pThis->aNodes[CODEC_NID( cmd)].dac.u32F06_param;2135 if (hdaCodecIsDacNode(pThis, CODEC_NID(uCmd))) 2136 { 2137 pu32Addr = &pThis->aNodes[CODEC_NID(uCmd)].dac.u32F06_param; 2139 2138 enmDir = PDMAUDIODIR_OUT; 2140 2139 } 2141 else if (hdaCodecIsAdcNode(pThis, CODEC_NID( cmd)))2142 { 2143 pu32Addr = &pThis->aNodes[CODEC_NID( cmd)].adc.u32F06_param;2140 else if (hdaCodecIsAdcNode(pThis, CODEC_NID(uCmd))) 2141 { 2142 pu32Addr = &pThis->aNodes[CODEC_NID(uCmd)].adc.u32F06_param; 2144 2143 enmDir = PDMAUDIODIR_IN; 2145 2144 } 2146 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID( cmd)))2147 { 2148 pu32Addr = &pThis->aNodes[CODEC_NID( cmd)].spdifout.u32F06_param;2145 else if (hdaCodecIsSpdifOutNode(pThis, CODEC_NID(uCmd))) 2146 { 2147 pu32Addr = &pThis->aNodes[CODEC_NID(uCmd)].spdifout.u32F06_param; 2149 2148 enmDir = PDMAUDIODIR_OUT; 2150 2149 } 2151 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID( cmd)))2152 { 2153 pu32Addr = &pThis->aNodes[CODEC_NID( cmd)].spdifin.u32F06_param;2150 else if (hdaCodecIsSpdifInNode(pThis, CODEC_NID(uCmd))) 2151 { 2152 pu32Addr = &pThis->aNodes[CODEC_NID(uCmd)].spdifin.u32F06_param; 2154 2153 enmDir = PDMAUDIODIR_IN; 2155 2154 } … … 2157 2156 { 2158 2157 enmDir = PDMAUDIODIR_UNKNOWN; 2159 LogRel2(("HDA: Warning: Unhandled set stream ID command for NID0x%02x: 0x%x\n", CODEC_NID( cmd), cmd));2158 LogRel2(("HDA: Warning: Unhandled set stream ID command for NID0x%02x: 0x%x\n", CODEC_NID(uCmd), uCmd)); 2160 2159 return VINF_SUCCESS; 2161 2160 } 2162 2161 2163 2162 /* Do we (re-)assign our input/output SDn (SDI/SDO) IDs? */ 2164 pThis->aNodes[CODEC_NID( cmd)].node.uSD = uSD;2165 pThis->aNodes[CODEC_NID( cmd)].node.uChannel = uChannel;2163 pThis->aNodes[CODEC_NID(uCmd)].node.uSD = uSD; 2164 pThis->aNodes[CODEC_NID(uCmd)].node.uChannel = uChannel; 2166 2165 2167 2166 if (enmDir == PDMAUDIODIR_OUT) … … 2184 2183 } 2185 2184 2186 hdaCodecSetRegisterU8(pu32Addr, cmd, 0);2185 hdaCodecSetRegisterU8(pu32Addr, uCmd, 0); 2187 2186 2188 2187 return VINF_SUCCESS; … … 2252 2251 2253 2252 /** 2254 * Implements 2253 * Implements codec lookup and will call the handler on the verb it finds, 2254 * returning the handler response. 2255 * 2256 * @returns VBox status code (not strict). 2255 2257 */ 2256 2258 static DECLCALLBACK(int) codecLookup(PHDACODEC pThis, PHDACODECCC pThisCC, uint32_t uCmd, uint64_t *puResp) -
trunk/src/VBox/Devices/Audio/DevHdaCodec.h
r90121 r90122 571 571 * Function pointer for implementation callback. 572 572 * 573 * This is always a valid 573 * This is always a valid pointer in ring-3, while elsewhere a NULL indicates 574 574 * that we must return to ring-3 to process it. 575 575 */
Note:
See TracChangeset
for help on using the changeset viewer.