Changeset 906 in vbox
- Timestamp:
- Feb 14, 2007 2:27:46 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18628
- Location:
- trunk/src/VBox/Main
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/VMMDevInterface.cpp
r1 r906 317 317 } 318 318 319 /** 320 * Execute state save operation. 321 * 322 * @returns VBox status code. 323 * @param pDrvIns Driver instance of the driver which registered the data unit. 324 * @param pSSM SSM operation handle. 325 */ 326 static DECLCALLBACK(int) iface_hgcmSave(PPDMDRVINS pDrvIns, PSSMHANDLE pSSM) 327 { 328 PDRVMAINVMMDEV pDrv = PDMINS2DATA(pDrvIns, PDRVMAINVMMDEV); 329 330 return hgcmSaveStateInternal (pDrv->pHGCMPort, pDrv->pVMMDev->mSharedFolderClientId, pSSM); 331 } 332 333 334 /** 335 * Execute state load operation. 336 * 337 * @returns VBox status code. 338 * @param pDrvIns Driver instance of the driver which registered the data unit. 339 * @param pSSM SSM operation handle. 340 * @param u32Version Data layout version. 341 */ 342 static DECLCALLBACK(int) iface_hgcmLoad(PPDMDRVINS pDrvIns, PSSMHANDLE pSSM, uint32_t u32Version) 343 { 344 PDRVMAINVMMDEV pDrv = PDMINS2DATA(pDrvIns, PDRVMAINVMMDEV); 345 346 if (u32Version != HGCM_SSM_VERSION) 347 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 348 349 return hgcmLoadStateInternal (pDrv->pHGCMPort, pDrv->pVMMDev->mSharedFolderClientId, pSSM); 350 } 351 319 352 int VMMDev::hgcmLoadService (const char *pszServiceName, const char *pszServiceLibrary) 320 353 { … … 542 575 pData->pVMMDev->mSharedFolderClientId = 0; 543 576 } 577 #if 0 /* enable later */ 578 pDrvIns->pDrvHlp->pfnSSMRegister(pDrvIns, "HGCM", 0, HGCM_SSM_VERSION, 4096/* bad guess */, NULL, iface_hgcmSave, NULL, NULL, iface_hgcmLoad, NULL); 579 #endif 544 580 #endif 545 581 -
trunk/src/VBox/Main/hgcm/HGCM.cpp
r222 r906 272 272 #define HGCMMSGID_DISCONNECT (11) 273 273 #define HGCMMSGID_LOAD (12) 274 275 274 #define HGCMMSGID_HOSTCALL (13) 275 #define HGCMMSGID_LOADSTATE (14) 276 #define HGCMMSGID_SAVESTATE (15) 276 277 277 278 class HGCMMsgConnect: public HGCMMsgHeader … … 291 292 /* client identifier */ 292 293 uint32_t u32ClientID; 294 }; 295 296 class HGCMMsgLoadSaveState: public HGCMMsgHeader 297 { 298 public: 299 /* client identifier */ 300 uint32_t u32ClientID; 301 PSSMHANDLE pSSM; 293 302 }; 294 303 … … 388 397 case HGCMMSGID_LOAD: return new HGCMMsgLoad (); 389 398 case HGCMMSGID_HOSTCALL: return new HGCMMsgHostCall (); 399 case HGCMMSGID_LOADSTATE: 400 case HGCMMSGID_SAVESTATE: return new HGCMMsgLoadSaveState (); 390 401 default: 391 402 Log(("hgcmMessageAlloc::Unsupported message number %08X\n", u32MsgId)); … … 520 531 rc = VINF_SUCCESS; 521 532 } break; 533 534 case HGCMMSGID_LOADSTATE: 535 { 536 LogFlow(("HGCMMSGID_LOADSTATE\n")); 537 538 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)pMsgCore; 539 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID); 540 541 rc = VINF_SUCCESS; 542 if (pClient && pSvc->m_fntable.pfnLoadState) 543 { 544 rc = pSvc->m_fntable.pfnLoadState (pMsg->u32ClientID, HGCM_CLIENT_DATA(pSvc, pClient), pMsg->pSSM); 545 hgcmObjDereference (pClient); 546 } 547 break; 548 } 549 550 case HGCMMSGID_SAVESTATE: 551 { 552 LogFlow(("HGCMMSGID_SAVESTATE\n")); 553 554 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)pMsgCore; 555 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID); 556 557 rc = VINF_SUCCESS; 558 if (pClient && pSvc->m_fntable.pfnSaveState) 559 { 560 rc = pSvc->m_fntable.pfnSaveState (pMsg->u32ClientID, HGCM_CLIENT_DATA(pSvc, pClient), pMsg->pSSM); 561 hgcmObjDereference (pClient); 562 } 563 break; 564 } 522 565 523 566 default: … … 1275 1318 } 1276 1319 1320 int hgcmSaveStateInternal (PPDMIHGCMPORT pHGCMPort, uint32_t u32ClientID, PSSMHANDLE pSSM) 1321 { 1322 int rc = VINF_SUCCESS; 1323 1324 LogFlow(("MAIN::hgcmSaveStateInternal: pHGCMPort = %p, u32ClientID = %d\n", 1325 pHGCMPort, u32ClientID)); 1326 1327 if (!pHGCMPort) 1328 { 1329 return VERR_INVALID_PARAMETER; 1330 } 1331 1332 HGCMMSGHANDLE hMsg = 0; 1333 1334 rc = hgcmMsgAlloc (g_hgcmThread, &hMsg, HGCMMSGID_SAVESTATE, sizeof (HGCMMsgLoadSaveState), hgcmMessageAlloc); 1335 1336 if (VBOX_SUCCESS(rc)) 1337 { 1338 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)hgcmObjReference (hMsg); 1339 1340 AssertRelease(pMsg); 1341 1342 pMsg->pHGCMPort = pHGCMPort; 1343 pMsg->u32ClientID = u32ClientID; 1344 pMsg->pSSM = pSSM; 1345 1346 rc = hgcmMsgSend (hMsg); 1347 1348 hgcmObjDereference (pMsg); 1349 } 1350 else 1351 { 1352 Log(("MAIN::hgcmSaveStateInternal: Message allocation failed: %Vrc\n", rc)); 1353 } 1354 1355 return rc; 1356 } 1357 1358 int hgcmLoadStateInternal (PPDMIHGCMPORT pHGCMPort, uint32_t u32ClientID, PSSMHANDLE pSSM) 1359 { 1360 int rc = VINF_SUCCESS; 1361 1362 LogFlow(("MAIN::hgcmLoadStateInternal: pHGCMPort = %p, u32ClientID = %d\n", 1363 pHGCMPort, u32ClientID)); 1364 1365 if (!pHGCMPort) 1366 { 1367 return VERR_INVALID_PARAMETER; 1368 } 1369 1370 HGCMMSGHANDLE hMsg = 0; 1371 1372 rc = hgcmMsgAlloc (g_hgcmThread, &hMsg, HGCMMSGID_LOADSTATE, sizeof (HGCMMsgLoadSaveState), hgcmMessageAlloc); 1373 1374 if (VBOX_SUCCESS(rc)) 1375 { 1376 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)hgcmObjReference (hMsg); 1377 1378 AssertRelease(pMsg); 1379 1380 pMsg->pHGCMPort = pHGCMPort; 1381 pMsg->u32ClientID = u32ClientID; 1382 pMsg->pSSM = pSSM; 1383 1384 rc = hgcmMsgSend (hMsg); 1385 1386 hgcmObjDereference (pMsg); 1387 } 1388 else 1389 { 1390 Log(("MAIN::hgcmLoadStateInternal: Message allocation failed: %Vrc\n", rc)); 1391 } 1392 1393 return rc; 1394 } 1395 1277 1396 int hgcmLoadInternal (const char *pszServiceName, const char *pszServiceLibrary) 1278 1397 { -
trunk/src/VBox/Main/include/hgcm/HGCM.h
r1 r906 30 30 #include <VBox/hgcmsvc.h> 31 31 32 /* HGCM saved state version */ 33 #define HGCM_SSM_VERSION 1 34 32 35 __BEGIN_DECLS 33 36 int hgcmInit (void); … … 39 42 int hgcmGuestCallInternal (PPDMIHGCMPORT pHGCMPort, PVBOXHGCMCMD pCmdPtr, uint32_t clientID, uint32_t function, uint32_t cParms, VBOXHGCMSVCPARM aParms[], bool fBlock); 40 43 int hgcmHostCallInternal (const char *pszServiceName, uint32_t function, uint32_t cParms, VBOXHGCMSVCPARM aParms[]); 44 45 int hgcmSaveStateInternal (PPDMIHGCMPORT pHGCMPort, uint32_t clientID, PSSMHANDLE pSSM); 46 int hgcmLoadStateInternal (PPDMIHGCMPORT pHGCMPort, uint32_t clientID, PSSMHANDLE pSSM); 47 41 48 __END_DECLS 42 49
Note:
See TracChangeset
for help on using the changeset viewer.