+ EndPages = Alloc->NumPages - (Pages + StartPages);\r
+\r
+ if (StartPages != 0) {\r
+ AllocHead = AllocatePool (sizeof *AllocHead);\r
+ if (AllocHead == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ AllocHead->HostAddress = Alloc->HostAddress;\r
+\r
+ AllocHead->NumPages = StartPages;\r
+ AllocHead->Attributes = Alloc->Attributes;\r
+ }\r
+\r
+ if (EndPages != 0) {\r
+ AllocTail = AllocatePool (sizeof *AllocTail);\r
+ if (AllocTail == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ AllocTail->HostAddress = (UINT8 *)Alloc->HostAddress +\r
+ EFI_PAGES_TO_SIZE (Pages + StartPages);\r
+\r
+ AllocTail->NumPages = EndPages;\r
+ AllocTail->Attributes = Alloc->Attributes;\r
+ }\r
+\r