Changeset 108401 in vbox
- Timestamp:
- Feb 26, 2025 5:21:24 PM (8 weeks ago)
- svn:sync-xref-src-repo-rev:
- 167768
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/PC/DevQemuFwCfg.cpp
r107459 r108401 88 88 * Defined Constants And Macros * 89 89 *********************************************************************************************************************************/ 90 /** Saved state version for the device. */ 91 #define QEMU_FW_CFG_SAVED_STATE_VERSION 1 90 92 91 93 /** Start of the I/O port region. */ … … 1164 1166 LogFlowFunc((" -> rc=%Rrc\n", rc)); 1165 1167 return rc; 1168 } 1169 1170 1171 1172 /* -=-=-=-=-=-=-=-=- Saved State -=-=-=-=-=-=-=-=- */ 1173 1174 /** 1175 * @callback_method_impl{FNSSMDEVLIVEEXEC} 1176 */ 1177 static DECLCALLBACK(int) qemuFwCfgR3LiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass) 1178 { 1179 PDEVQEMUFWCFG pThis = PDMDEVINS_2_DATA(pDevIns, PDEVQEMUFWCFG); 1180 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 1181 RT_NOREF(uPass); 1182 1183 pHlp->pfnSSMPutBool(pSSM, pThis->fRamfbSupported); 1184 return VINF_SSM_DONT_CALL_AGAIN; 1185 } 1186 1187 1188 /** 1189 * @callback_method_impl{FNSSMDEVSAVEEXEC} 1190 */ 1191 static DECLCALLBACK(int) qemuFwCfgR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM) 1192 { 1193 PDEVQEMUFWCFG pThis = PDMDEVINS_2_DATA(pDevIns, PDEVQEMUFWCFG); 1194 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 1195 1196 /* The config. */ 1197 qemuFwCfgR3LiveExec(pDevIns, pSSM, SSM_PASS_FINAL); 1198 1199 /* The state. */ 1200 pHlp->pfnSSMPutGCPhys(pSSM, pThis->RamfbCfg.GCPhysRamfbBase); 1201 pHlp->pfnSSMPutU32( pSSM, pThis->RamfbCfg.cbStride); 1202 pHlp->pfnSSMPutU32( pSSM, pThis->RamfbCfg.cWidth); 1203 pHlp->pfnSSMPutU32( pSSM, pThis->RamfbCfg.cHeight); 1204 pHlp->pfnSSMPutU32( pSSM, pThis->RamfbCfg.u32FourCC); 1205 pHlp->pfnSSMPutU32( pSSM, pThis->RamfbCfg.u32Flags); 1206 1207 return pHlp->pfnSSMPutU32(pSSM, UINT32_MAX); /* sanity/terminator */ 1208 } 1209 1210 1211 /** 1212 * @callback_method_impl{FNSSMDEVLOADEXEC} 1213 */ 1214 static DECLCALLBACK(int) qemuFwCfgR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass) 1215 { 1216 PDEVQEMUFWCFG pThis = PDMDEVINS_2_DATA(pDevIns, PDEVQEMUFWCFG); 1217 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 1218 int rc; 1219 1220 if (uVersion != QEMU_FW_CFG_SAVED_STATE_VERSION) 1221 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 1222 1223 /* The config. */ 1224 bool fRamfbSupported; 1225 rc = pHlp->pfnSSMGetBool(pSSM, &fRamfbSupported); 1226 AssertRCReturn(rc, rc); 1227 if (fRamfbSupported != pThis->fRamfbSupported) 1228 return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("Config mismatch - fRamfbSupported: saved=%RTbool config=%RTbool"), 1229 fRamfbSupported, pThis->fRamfbSupported); 1230 1231 if (uPass != SSM_PASS_FINAL) 1232 return VINF_SUCCESS; 1233 1234 pHlp->pfnSSMGetGCPhys(pSSM, &pThis->RamfbCfg.GCPhysRamfbBase); 1235 pHlp->pfnSSMGetU32( pSSM, &pThis->RamfbCfg.cbStride); 1236 pHlp->pfnSSMGetU32( pSSM, &pThis->RamfbCfg.cWidth); 1237 pHlp->pfnSSMGetU32( pSSM, &pThis->RamfbCfg.cHeight); 1238 pHlp->pfnSSMGetU32( pSSM, &pThis->RamfbCfg.u32FourCC); 1239 pHlp->pfnSSMGetU32( pSSM, &pThis->RamfbCfg.u32Flags); 1240 1241 /* The marker. */ 1242 uint32_t u32; 1243 rc = pHlp->pfnSSMGetU32(pSSM, &u32); 1244 AssertRCReturn(rc, rc); 1245 AssertMsgReturn(u32 == UINT32_MAX, ("%#x\n", u32), VERR_SSM_DATA_UNIT_FORMAT_CHANGED); 1246 1247 return VINF_SUCCESS; 1248 } 1249 1250 1251 /** 1252 * @callback_method_impl{FNSSMDEVLOADDONE} 1253 */ 1254 static DECLCALLBACK(int) qemuFwCfgR3LoadDone(PPDMDEVINS pDevIns, PSSMHANDLE pSSM) 1255 { 1256 PDEVQEMUFWCFG pThis = PDMDEVINS_2_DATA(pDevIns, PDEVQEMUFWCFG); 1257 RT_NOREF(pSSM); 1258 1259 if ( pThis->pDrvL0 1260 && pThis->RamfbCfg.GCPhysRamfbBase) 1261 { 1262 int rc = pThis->pDrvL0->pfnResize(pThis->pDrvL0, QEMU_RAMFB_CFG_BPP * 8, NULL /*pvVRAM*/, 1263 pThis->RamfbCfg.cbStride, 1264 pThis->RamfbCfg.cWidth, 1265 pThis->RamfbCfg.cHeight); 1266 AssertRC(rc); 1267 } 1268 1269 return VINF_SUCCESS; 1166 1270 } 1167 1271 … … 2117 2221 AssertRCReturn(rc, rc); 2118 2222 } 2223 2224 /* 2225 * Register saved state callbacks. 2226 */ 2227 rc = PDMDevHlpSSMRegisterEx(pDevIns, QEMU_FW_CFG_SAVED_STATE_VERSION, 0 /*cbGuess*/, NULL, 2228 NULL, qemuFwCfgR3LiveExec, NULL, 2229 NULL, qemuFwCfgR3SaveExec, NULL, 2230 NULL, qemuFwCfgR3LoadExec, qemuFwCfgR3LoadDone); 2231 AssertRCReturn(rc, rc); 2119 2232 2120 2233 rc = qemuFwCfgInitrdMaybeCreate(pThis);
Note:
See TracChangeset
for help on using the changeset viewer.