//------------------------------------------------------------------------------ void MobiCoreDriverDaemon::processUnmapBulkBuf( Connection *connection ) { do { // Read entire command data mcDrvCmdUnmapBulkMemPayload_t cmdUnmapBulkMemPayload; uint32_t rlen = connection->readData( &cmdUnmapBulkMemPayload, sizeof(cmdUnmapBulkMemPayload)); if (rlen != sizeof(cmdUnmapBulkMemPayload)) { LOG_E("processMapBulkBuf(): UnmapBulkMem length error: %d", rlen); writeResult(connection, MC_DRV_RSP_PAYLOAD_LENGTH_ERROR); break; } // Device required MobiCoreDevice *device = (MobiCoreDevice *) (connection->connectionData); if (NULL == device) { writeResult(connection, MC_DRV_RSP_DEVICE_NOT_OPENED); break; } // Unmap bulk memory from secure world mcDrvRspUnmapBulkMem_t rspUnmpaBulk; device->unmapBulk( connection, &cmdUnmapBulkMemPayload, &(rspUnmpaBulk.payload)); uint32_t mcResult = rspUnmpaBulk.payload.mcResult; if (MC_MCP_RET_OK != mcResult) { LOG_E("processUnmapBulkBuf(): rspUnmpaBulk mcResult %d", mcResult); writeResult(connection, MC_DRV_RSP_FAILED); break; } rspUnmpaBulk.header.responseId = MC_DRV_RSP_OK; connection->writeData( &rspUnmpaBulk, sizeof(rspUnmpaBulk)); } while (false); }
//------------------------------------------------------------------------------ void MobiCoreDriverDaemon::processUnmapBulkBuf(Connection *connection) { MC_DRV_CMD_UNMAP_BULK_BUF_struct cmd; RECV_PAYLOAD_FROM_CLIENT(connection, &cmd) // Device required MobiCoreDevice *device = (MobiCoreDevice *) (connection->connectionData); CHECK_DEVICE(device, connection); // Unmap bulk memory from secure world uint32_t mcResult = device->unmapBulk(connection, cmd.sessionId, cmd.handle, cmd.secureVirtualAdr, cmd.lenBulkMem); if (mcResult != MC_DRV_OK) { LOG_V("MCP UNMAP returned code %d", mcResult); writeResult(connection, mcResult); return; } // TODO-2012-09-06-haenellu: Think about not ignoring the error case. device->unlockWsmL2(cmd.handle); writeResult(connection, MC_DRV_OK); }