+/**\r
+ Convert EFI_SMM_USB_REGISTER_CONTEXT to SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT.\r
+\r
+ @param UsbContext A pointer to EFI_SMM_USB_REGISTER_CONTEXT\r
+ @param UsbContextSize The size of EFI_SMM_USB_REGISTER_CONTEXT in bytes\r
+ @param SmiHandlerUsbContextSize The size of SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT in bytes\r
+\r
+ @return SmiHandlerUsbContext A pointer to SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT\r
+**/\r
+SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT *\r
+ConvertSmiHandlerUsbContext (\r
+ IN EFI_SMM_USB_REGISTER_CONTEXT *UsbContext,\r
+ IN UINTN UsbContextSize,\r
+ OUT UINTN *SmiHandlerUsbContextSize\r
+ )\r
+{\r
+ UINTN DevicePathSize;\r
+ SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT *SmiHandlerUsbContext;\r
+\r
+ ASSERT (UsbContextSize == sizeof(EFI_SMM_USB_REGISTER_CONTEXT));\r
+\r
+ DevicePathSize = GetDevicePathSize (UsbContext->Device);\r
+ SmiHandlerUsbContext = AllocatePool (sizeof (SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT) + DevicePathSize);\r
+ if (SmiHandlerUsbContext == NULL) {\r
+ *SmiHandlerUsbContextSize = 0;\r
+ return NULL;\r
+ }\r
+ SmiHandlerUsbContext->Type = UsbContext->Type;\r
+ SmiHandlerUsbContext->DevicePathSize = (UINT32)DevicePathSize;\r
+ CopyMem (SmiHandlerUsbContext + 1, UsbContext->Device, DevicePathSize);\r
+ *SmiHandlerUsbContextSize = sizeof (SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT) + DevicePathSize;\r
+ return SmiHandlerUsbContext;\r
+}\r
+\r