if (ImageStruct->Header.Signature == SMM_CORE_IMAGE_DATABASE_SIGNATURE) {\r
NameString = GetDriverNameString (ImageStruct);\r
Print(L" <Image Name=\"%a\"", NameString);\r
- Print(L" Base=\"0x%x\" Size=\"0x%x\"", ImageStruct->ImageBase, ImageStruct->ImageSize);\r
+ Print(L" Base=\"0x%lx\" Size=\"0x%lx\"", ImageStruct->ImageBase, ImageStruct->ImageSize);\r
if (ImageStruct->EntryPoint != 0) {\r
- Print(L" EntryPoint=\"0x%x\"", ImageStruct->EntryPoint);\r
+ Print(L" EntryPoint=\"0x%lx\"", ImageStruct->EntryPoint);\r
}\r
Print(L" FvFile=\"%g\"", &ImageStruct->FileGuid);\r
Print(L" RefId=\"0x%x\"", ImageStruct->ImageRef);\r
CHAR16 *Str;\r
\r
if (CompareGuid (HandlerType, &gEfiSmmSwDispatch2ProtocolGuid)) {\r
- Print(L" SwSmi=\"0x%x\"", ((EFI_SMM_SW_REGISTER_CONTEXT *)Context)->SwSmiInputValue);\r
+ Print(L" SwSmi=\"0x%lx\"", ((SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT *)Context)->SwSmiInputValue);\r
} else if (CompareGuid (HandlerType, &gEfiSmmSxDispatch2ProtocolGuid)) {\r
Print(L" SxType=\"%a\"", SxTypeToString(((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Type));\r
Print(L" SxPhase=\"%a\"", SxPhaseToString(((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Phase));\r
Print(L" <Pdb>%a</Pdb>\n", (UINT8 *)ImageStruct + ImageStruct->PdbStringOffset);\r
}\r
Print(L" </Module>\n");\r
- Print(L" <Handler Address=\"0x%x\">\n", SmiHandlerStruct->Handler);\r
+ Print(L" <Handler Address=\"0x%lx\">\n", SmiHandlerStruct->Handler);\r
if (ImageStruct != NULL) {\r
- Print(L" <RVA>0x%x</RVA>\n", SmiHandlerStruct->Handler - ImageStruct->ImageBase);\r
+ Print(L" <RVA>0x%x</RVA>\n", (UINTN) (SmiHandlerStruct->Handler - ImageStruct->ImageBase));\r
}\r
Print(L" </Handler>\n", SmiHandlerStruct->Handler);\r
- Print(L" <Caller Address=\"0x%x\">\n", SmiHandlerStruct->CallerAddr);\r
+ Print(L" <Caller Address=\"0x%lx\">\n", SmiHandlerStruct->CallerAddr);\r
if (ImageStruct != NULL) {\r
- Print(L" <RVA>0x%x</RVA>\n", SmiHandlerStruct->CallerAddr - ImageStruct->ImageBase);\r
+ Print(L" <RVA>0x%x</RVA>\n", (UINTN) (SmiHandlerStruct->CallerAddr - ImageStruct->ImageBase));\r
}\r
Print(L" </Caller>\n", SmiHandlerStruct->Handler);\r
SmiHandlerStruct = (VOID *)((UINTN)SmiHandlerStruct + SmiHandlerStruct->Length);\r
\r
#include "PiSmmCore.h"\r
\r
+#define GET_OCCUPIED_SIZE(ActualSize, Alignment) \\r
+ ((ActualSize) + (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1)))\r
+\r
typedef struct {\r
- EFI_GUID FileGuid;\r
- UINTN ImageRef;\r
- UINTN EntryPoint;\r
- UINTN ImageBase;\r
- UINTN ImageSize;\r
- UINTN PdbStringSize;\r
- CHAR8 *PdbString;\r
+ EFI_GUID FileGuid;\r
+ PHYSICAL_ADDRESS EntryPoint;\r
+ PHYSICAL_ADDRESS ImageBase;\r
+ UINT64 ImageSize;\r
+ UINT32 ImageRef;\r
+ UINT16 PdbStringSize;\r
+ CHAR8 *PdbString;\r
} IMAGE_STRUCT;\r
\r
/**\r
GLOBAL_REMOVE_IF_UNREFERENCED LIST_ENTRY *mSmmCoreHardwareSmiEntryList = &mHardwareSmiEntryList;\r
\r
GLOBAL_REMOVE_IF_UNREFERENCED IMAGE_STRUCT *mImageStruct;\r
-GLOBAL_REMOVE_IF_UNREFERENCED UINTN mImageStructCountMax;\r
-GLOBAL_REMOVE_IF_UNREFERENCED UINTN mImageStructCount;\r
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mImageStructCountMax;\r
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mImageStructCount;\r
\r
GLOBAL_REMOVE_IF_UNREFERENCED VOID *mSmiHandlerProfileDatabase;\r
GLOBAL_REMOVE_IF_UNREFERENCED UINTN mSmiHandlerProfileDatabaseSize;\r
**/\r
VOID\r
AddImageStruct(\r
- IN UINTN ImageBase,\r
- IN UINTN ImageSize,\r
- IN UINTN EntryPoint,\r
- IN EFI_GUID *Guid,\r
- IN CHAR8 *PdbString\r
+ IN PHYSICAL_ADDRESS ImageBase,\r
+ IN UINT64 ImageSize,\r
+ IN PHYSICAL_ADDRESS EntryPoint,\r
+ IN EFI_GUID *Guid,\r
+ IN CHAR8 *PdbString\r
)\r
{\r
UINTN PdbStringSize;\r
PdbStringSize = AsciiStrSize(PdbString);\r
mImageStruct[mImageStructCount].PdbString = AllocateCopyPool (PdbStringSize, PdbString);\r
if (mImageStruct[mImageStructCount].PdbString != NULL) {\r
- mImageStruct[mImageStructCount].PdbStringSize = PdbStringSize;\r
+ mImageStruct[mImageStructCount].PdbStringSize = (UINT16) PdbStringSize;\r
}\r
}\r
\r
\r
@return image reference index\r
**/\r
-UINTN\r
+UINT32\r
AddressToImageRef(\r
IN UINTN Address\r
)\r
if (ImageStruct != NULL) {\r
return ImageStruct->ImageRef;\r
}\r
- return (UINTN)-1;\r
+ return (UINT32)-1;\r
}\r
\r
/**\r
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
CHAR16 *PathStr;\r
EFI_SMM_DRIVER_ENTRY *LoadedImagePrivate;\r
- UINTN EntryPoint;\r
+ PHYSICAL_ADDRESS EntryPoint;\r
VOID *EntryPointInImage;\r
EFI_GUID Guid;\r
CHAR8 *PdbString;\r
- UINTN RealImageBase;\r
+ PHYSICAL_ADDRESS RealImageBase;\r
\r
HandleBufferSize = 0;\r
HandleBuffer = NULL;\r
}\r
\r
NoHandles = HandleBufferSize/sizeof(EFI_HANDLE);\r
- mImageStructCountMax = NoHandles;\r
+ mImageStructCountMax = (UINT32) NoHandles;\r
mImageStruct = AllocateZeroPool(mImageStructCountMax * sizeof(IMAGE_STRUCT));\r
if (mImageStruct == NULL) {\r
goto Done;\r
LoadedImagePrivate = BASE_CR(LoadedImage, EFI_SMM_DRIVER_ENTRY, SmmLoadedImage);\r
RealImageBase = (UINTN)LoadedImage->ImageBase;\r
if (LoadedImagePrivate->Signature == EFI_SMM_DRIVER_ENTRY_SIGNATURE) {\r
- EntryPoint = (UINTN)LoadedImagePrivate->ImageEntryPoint;\r
- if ((EntryPoint != 0) && ((EntryPoint < (UINTN)LoadedImage->ImageBase) || (EntryPoint >= ((UINTN)LoadedImage->ImageBase + (UINTN)LoadedImage->ImageSize)))) {\r
+ EntryPoint = LoadedImagePrivate->ImageEntryPoint;\r
+ if ((EntryPoint != 0) && ((EntryPoint < (UINTN)LoadedImage->ImageBase) || (EntryPoint >= ((UINTN)LoadedImage->ImageBase + LoadedImage->ImageSize)))) {\r
//\r
// If the EntryPoint is not in the range of image buffer, it should come from emulation environment.\r
// So patch ImageBuffer here to align the EntryPoint.\r
RealImageBase = (UINTN)LoadedImage->ImageBase + EntryPoint - (UINTN)EntryPointInImage;\r
}\r
}\r
- DEBUG ((DEBUG_INFO, "(0x%x - 0x%x", RealImageBase, (UINTN)LoadedImage->ImageSize));\r
+ DEBUG ((DEBUG_INFO, "(0x%lx - 0x%lx", RealImageBase, LoadedImage->ImageSize));\r
if (EntryPoint != 0) {\r
- DEBUG ((DEBUG_INFO, ", EntryPoint:0x%x", EntryPoint));\r
+ DEBUG ((DEBUG_INFO, ", EntryPoint:0x%lx", EntryPoint));\r
}\r
DEBUG ((DEBUG_INFO, ")\n"));\r
\r
}\r
DEBUG ((DEBUG_INFO, " (%s)\n", PathStr));\r
\r
- AddImageStruct((UINTN)RealImageBase, (UINTN)LoadedImage->ImageSize, EntryPoint, &Guid, PdbString);\r
+ AddImageStruct(RealImageBase, LoadedImage->ImageSize, EntryPoint, &Guid, PdbString);\r
}\r
\r
Done:\r
CHAR16 *Str;\r
\r
if (CompareGuid (HandlerType, &gEfiSmmSwDispatch2ProtocolGuid)) {\r
- DEBUG ((DEBUG_INFO, " SwSmi - 0x%x\n", ((EFI_SMM_SW_REGISTER_CONTEXT *)Context)->SwSmiInputValue));\r
+ DEBUG ((DEBUG_INFO, " SwSmi - 0x%lx\n", ((SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT *)Context)->SwSmiInputValue));\r
} else if (CompareGuid (HandlerType, &gEfiSmmSxDispatch2ProtocolGuid)) {\r
DEBUG ((DEBUG_INFO, " SxType - 0x%x\n", ((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Type));\r
DEBUG ((DEBUG_INFO, " SxPhase - 0x%x\n", ((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Phase));\r
}\r
DEBUG ((DEBUG_INFO, " Handler - 0x%x", SmiHandler->Handler));\r
if (ImageStruct != NULL) {\r
- DEBUG ((DEBUG_INFO, " <== RVA - 0x%x", (UINTN)SmiHandler->Handler - ImageStruct->ImageBase));\r
+ DEBUG ((DEBUG_INFO, " <== RVA - 0x%x", (UINTN)SmiHandler->Handler - (UINTN) ImageStruct->ImageBase));\r
}\r
DEBUG ((DEBUG_INFO, "\n"));\r
DEBUG ((DEBUG_INFO, " CallerAddr - 0x%x", SmiHandler->CallerAddr));\r
if (ImageStruct != NULL) {\r
- DEBUG ((DEBUG_INFO, " <== RVA - 0x%x", SmiHandler->CallerAddr - ImageStruct->ImageBase));\r
+ DEBUG ((DEBUG_INFO, " <== RVA - 0x%x", SmiHandler->CallerAddr - (UINTN) ImageStruct->ImageBase));\r
}\r
DEBUG ((DEBUG_INFO, "\n"));\r
}\r
)\r
{\r
UINTN Size;\r
- UINTN Index;\r
+ UINT32 Index;\r
\r
- Size = (sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE)) * mImageStructCount;\r
+ Size = 0;\r
for (Index = 0; Index < mImageStructCount; Index++) {\r
- Size += mImageStruct[Index].PdbStringSize;\r
+ Size += sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + GET_OCCUPIED_SIZE (mImageStruct[Index].PdbStringSize, sizeof (UINT64));\r
}\r
return Size;\r
}\r
ListEntry != &SmiEntry->SmiHandlers;\r
ListEntry = ListEntry->ForwardLink) {\r
SmiHandler = CR(ListEntry, SMI_HANDLER, Link, SMI_HANDLER_SIGNATURE);\r
- Size += sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + SmiHandler->ContextSize;\r
+ Size += sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + GET_OCCUPIED_SIZE (SmiHandler->ContextSize, sizeof (UINT64));\r
}\r
\r
return Size;\r
if (Size >= ExpectedSize) {\r
return 0;\r
}\r
- if (sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + mImageStruct[Index].PdbStringSize > ExpectedSize - Size) {\r
+ if (sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + GET_OCCUPIED_SIZE (mImageStruct[Index].PdbStringSize, sizeof (UINT64)) > ExpectedSize - Size) {\r
return 0;\r
}\r
ImageStruct->Header.Signature = SMM_CORE_IMAGE_DATABASE_SIGNATURE;\r
- ImageStruct->Header.Length = (UINT32)(sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + mImageStruct[Index].PdbStringSize);\r
+ ImageStruct->Header.Length = (UINT32)(sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + GET_OCCUPIED_SIZE (mImageStruct[Index].PdbStringSize, sizeof (UINT64)));\r
ImageStruct->Header.Revision = SMM_CORE_IMAGE_DATABASE_REVISION;\r
CopyGuid(&ImageStruct->FileGuid, &mImageStruct[Index].FileGuid);\r
ImageStruct->ImageRef = mImageStruct[Index].ImageRef;\r
ImageStruct->PdbStringOffset = 0;\r
}\r
ImageStruct = (SMM_CORE_IMAGE_DATABASE_STRUCTURE *)((UINTN)ImageStruct + ImageStruct->Header.Length);\r
- Size += sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + mImageStruct[Index].PdbStringSize;\r
+ Size += sizeof(SMM_CORE_IMAGE_DATABASE_STRUCTURE) + GET_OCCUPIED_SIZE (mImageStruct[Index].PdbStringSize, sizeof (UINT64));\r
}\r
\r
if (ExpectedSize != Size) {\r
IN SMI_ENTRY *SmiEntry,\r
IN OUT VOID *Data,\r
IN UINTN MaxSize,\r
- OUT UINTN *Count\r
+ OUT UINT32 *Count\r
)\r
{\r
SMM_CORE_SMI_HANDLER_STRUCTURE *SmiHandlerStruct;\r
*Count = 0;\r
return 0;\r
}\r
- if (sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + SmiHandler->ContextSize > MaxSize - Size) {\r
+ if (sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + GET_OCCUPIED_SIZE (SmiHandler->ContextSize, sizeof (UINT64)) > MaxSize - Size) {\r
*Count = 0;\r
return 0;\r
}\r
- SmiHandlerStruct->Length = (UINT32)(sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + SmiHandler->ContextSize);\r
+ SmiHandlerStruct->Length = (UINT32)(sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + GET_OCCUPIED_SIZE (SmiHandler->ContextSize, sizeof (UINT64)));\r
SmiHandlerStruct->CallerAddr = (UINTN)SmiHandler->CallerAddr;\r
SmiHandlerStruct->Handler = (UINTN)SmiHandler->Handler;\r
SmiHandlerStruct->ImageRef = AddressToImageRef((UINTN)SmiHandler->Handler);\r
} else {\r
SmiHandlerStruct->ContextBufferOffset = 0;\r
}\r
- Size += sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + SmiHandler->ContextSize;\r
+ Size += sizeof(SMM_CORE_SMI_HANDLER_STRUCTURE) + GET_OCCUPIED_SIZE (SmiHandler->ContextSize, sizeof (UINT64));\r
SmiHandlerStruct = (SMM_CORE_SMI_HANDLER_STRUCTURE *)((UINTN)SmiHandlerStruct + SmiHandlerStruct->Length);\r
*Count = *Count + 1;\r
}\r
SMI_ENTRY *SmiEntry;\r
UINTN Size;\r
UINTN SmiHandlerSize;\r
- UINTN SmiHandlerCount;\r
+ UINT32 SmiHandlerCount;\r
\r
SmiStruct = Data;\r
Size = 0;\r
return SmiHandlerUsbContext;\r
}\r
\r
+/**\r
+ Convert EFI_SMM_SW_REGISTER_CONTEXT to SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT.\r
+\r
+ @param SwContext A pointer to EFI_SMM_SW_REGISTER_CONTEXT\r
+ @param SwContextSize The size of EFI_SMM_SW_REGISTER_CONTEXT in bytes\r
+ @param SmiHandlerSwContextSize The size of SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT in bytes\r
+\r
+ @return SmiHandlerSwContext A pointer to SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT\r
+**/\r
+SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT *\r
+ConvertSmiHandlerSwContext (\r
+ IN EFI_SMM_SW_REGISTER_CONTEXT *SwContext,\r
+ IN UINTN SwContextSize,\r
+ OUT UINTN *SmiHandlerSwContextSize\r
+ )\r
+{\r
+ SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT *SmiHandlerSwContext;\r
+\r
+ ASSERT (SwContextSize == sizeof(EFI_SMM_SW_REGISTER_CONTEXT));\r
+\r
+ SmiHandlerSwContext = AllocatePool (sizeof (SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT));\r
+ if (SmiHandlerSwContext == NULL) {\r
+ *SmiHandlerSwContextSize = 0;\r
+ return NULL;\r
+ }\r
+ SmiHandlerSwContext->SwSmiInputValue = SwContext->SwSmiInputValue;\r
+ *SmiHandlerSwContextSize = sizeof (SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT);\r
+ return SmiHandlerSwContext;\r
+}\r
+\r
/**\r
This function is called by SmmChildDispatcher module to report\r
a new SMI handler is registered, to SmmCore.\r
if (Context != NULL) {\r
if (CompareGuid (HandlerGuid, &gEfiSmmUsbDispatch2ProtocolGuid)) {\r
SmiHandler->Context = ConvertSmiHandlerUsbContext (Context, ContextSize, &SmiHandler->ContextSize);\r
+ } else if (CompareGuid (HandlerGuid, &gEfiSmmSwDispatch2ProtocolGuid)) {\r
+ SmiHandler->Context = ConvertSmiHandlerSwContext (Context, ContextSize, &SmiHandler->ContextSize);\r
} else {\r
SmiHandler->Context = AllocateCopyPool (ContextSize, Context);\r
}\r
if (Context != NULL) {\r
if (CompareGuid (HandlerGuid, &gEfiSmmUsbDispatch2ProtocolGuid)) {\r
SearchContext = ConvertSmiHandlerUsbContext (Context, ContextSize, &SearchContextSize);\r
+ } else if (CompareGuid (HandlerGuid, &gEfiSmmSwDispatch2ProtocolGuid)) {\r
+ SearchContext = ConvertSmiHandlerSwContext (Context, ContextSize, &SearchContextSize);\r
}\r
}\r
\r
#include <Protocol/SmmSxDispatch2.h>\r
#include <Protocol/SmmUsbDispatch2.h>\r
\r
-#pragma pack(1)\r
-\r
typedef struct {\r
UINT32 Signature;\r
UINT32 Length;\r
UINT32 Revision;\r
+ UINT8 Reserved[4];\r
} SMM_CORE_DATABASE_COMMON_HEADER;\r
\r
#define SMM_CORE_IMAGE_DATABASE_SIGNATURE SIGNATURE_32 ('S','C','I','D')\r
typedef struct {\r
SMM_CORE_DATABASE_COMMON_HEADER Header;\r
EFI_GUID FileGuid;\r
- UINTN ImageRef;\r
- UINTN EntryPoint;\r
- UINTN ImageBase;\r
- UINTN ImageSize;\r
+ PHYSICAL_ADDRESS EntryPoint;\r
+ PHYSICAL_ADDRESS ImageBase;\r
+ UINT64 ImageSize;\r
+ UINT32 ImageRef;\r
UINT16 PdbStringOffset;\r
- UINT8 Reserved2[6];\r
+ UINT8 Reserved[2];\r
//CHAR8 PdbString[];\r
} SMM_CORE_IMAGE_DATABASE_STRUCTURE;\r
\r
// NULL\r
// Context for SmmCoreSmiHandlerCategoryHardwareHandler:\r
// (NOTE: The context field should NOT include any data pointer.)\r
-// gEfiSmmSwDispatch2ProtocolGuid: EFI_SMM_SW_REGISTER_CONTEXT\r
+// gEfiSmmSwDispatch2ProtocolGuid: (EFI_SMM_SW_REGISTER_CONTEXT => SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT)\r
// gEfiSmmSxDispatch2ProtocolGuid: EFI_SMM_SX_REGISTER_CONTEXT\r
// gEfiSmmPowerButtonDispatch2ProtocolGuid: EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT\r
// gEfiSmmStandbyButtonDispatch2ProtocolGuid: EFI_SMM_STANDBY_BUTTON_REGISTER_CONTEXT\r
} SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT;\r
\r
typedef struct {\r
- UINT32 Length;\r
- UINTN CallerAddr;\r
- UINTN Handler;\r
- UINTN ImageRef;\r
- UINT16 ContextBufferOffset;\r
- UINT8 Reserved2[2];\r
- UINT32 ContextBufferSize;\r
-//UINT8 ContextBuffer[];\r
+ UINT64 SwSmiInputValue;\r
+} SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT;\r
+\r
+typedef struct {\r
+ UINT32 Length;\r
+ UINT32 ImageRef;\r
+ PHYSICAL_ADDRESS CallerAddr;\r
+ PHYSICAL_ADDRESS Handler;\r
+ UINT16 ContextBufferOffset;\r
+ UINT8 Reserved[2];\r
+ UINT32 ContextBufferSize;\r
+//UINT8 ContextBuffer[];\r
} SMM_CORE_SMI_HANDLER_STRUCTURE;\r
\r
typedef struct {\r
SMM_CORE_DATABASE_COMMON_HEADER Header;\r
- UINT32 HandlerCategory;\r
EFI_GUID HandlerType;\r
- UINTN HandlerCount;\r
+ UINT32 HandlerCategory;\r
+ UINT32 HandlerCount;\r
//SMM_CORE_SMI_HANDLER_STRUCTURE Handler[HandlerCount];\r
} SMM_CORE_SMI_DATABASE_STRUCTURE;\r
\r
\r
#define SMI_HANDLER_PROFILE_GUID {0x49174342, 0x7108, 0x409b, {0x8b, 0xbe, 0x65, 0xfd, 0xa8, 0x53, 0x89, 0xf5}}\r
\r
-#pragma pack()\r
-\r
extern EFI_GUID gSmiHandlerProfileGuid;\r
\r
typedef struct _SMI_HANDLER_PROFILE_PROTOCOL SMI_HANDLER_PROFILE_PROTOCOL;\r