1 /** @file 2 3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> 4 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef __UNCACHED_MEMORY_ALLOCATION_LIB_H__ 16 #define __UNCACHED_MEMORY_ALLOCATION_LIB_H__ 17 18 /** 19 Converts a cached or uncached address to a physical address suitable for use in SoC registers. 20 21 @param VirtualAddress The pointer to convert. 22 23 @return The physical address of the supplied virtual pointer. 24 25 **/ 26 EFI_PHYSICAL_ADDRESS 27 ConvertToPhysicalAddress ( 28 IN VOID *VirtualAddress 29 ); 30 31 /** 32 Converts a cached or uncached address to a cached address. 33 34 @param Address The pointer to convert. 35 36 @return The address of the cached memory location corresponding to the input address. 37 38 **/ 39 VOID * 40 ConvertToCachedAddress ( 41 IN VOID *Address 42 ); 43 44 /** 45 Converts a cached or uncached address to an uncached address. 46 47 @param Address The pointer to convert. 48 49 @return The address of the uncached memory location corresponding to the input address. 50 51 **/ 52 VOID * 53 ConvertToUncachedAddress ( 54 IN VOID *Address 55 ); 56 57 /** 58 Allocates one or more 4KB pages of type EfiBootServicesData. 59 60 Allocates the number of 4KB pages of type EfiBootServicesData and returns a pointer to the 61 allocated buffer. The buffer returned is aligned on a 4KB boundary. If Pages is 0, then NULL 62 is returned. If there is not enough memory remaining to satisfy the request, then NULL is 63 returned. 64 65 @param Pages The number of 4 KB pages to allocate. 66 67 @return A pointer to the allocated buffer or NULL if allocation fails. 68 69 **/ 70 VOID * 71 EFIAPI 72 UncachedAllocatePages ( 73 IN UINTN Pages 74 ); 75 76 /** 77 Allocates one or more 4KB pages of type EfiRuntimeServicesData. 78 79 Allocates the number of 4KB pages of type EfiRuntimeServicesData and returns a pointer to the 80 allocated buffer. The buffer returned is aligned on a 4KB boundary. If Pages is 0, then NULL 81 is returned. If there is not enough memory remaining to satisfy the request, then NULL is 82 returned. 83 84 @param Pages The number of 4 KB pages to allocate. 85 86 @return A pointer to the allocated buffer or NULL if allocation fails. 87 88 **/ 89 VOID * 90 EFIAPI 91 UncachedAllocateRuntimePages ( 92 IN UINTN Pages 93 ); 94 95 /** 96 Allocates one or more 4KB pages of type EfiReservedMemoryType. 97 98 Allocates the number of 4KB pages of type EfiReservedMemoryType and returns a pointer to the 99 allocated buffer. The buffer returned is aligned on a 4KB boundary. If Pages is 0, then NULL 100 is returned. If there is not enough memory remaining to satisfy the request, then NULL is 101 returned. 102 103 @param Pages The number of 4 KB pages to allocate. 104 105 @return A pointer to the allocated buffer or NULL if allocation fails. 106 107 **/ 108 VOID * 109 EFIAPI 110 UncachedAllocateReservedPages ( 111 IN UINTN Pages 112 ); 113 114 /** 115 Frees one or more 4KB pages that were previously allocated with one of the page allocation 116 functions in the Memory Allocation Library. 117 118 Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer 119 must have been allocated on a previous call to the page allocation services of the Memory 120 Allocation Library. 121 If Buffer was not allocated with a page allocation function in the Memory Allocation Library, 122 then ASSERT(). 123 If Pages is zero, then ASSERT(). 124 125 @param Buffer Pointer to the buffer of pages to free. 126 @param Pages The number of 4 KB pages to free. 127 128 **/ 129 VOID 130 EFIAPI 131 UncachedFreePages ( 132 IN VOID *Buffer, 133 IN UINTN Pages 134 ); 135 136 /** 137 Allocates one or more 4KB pages of type EfiBootServicesData at a specified alignment. 138 139 Allocates the number of 4KB pages specified by Pages of type EfiBootServicesData with an 140 alignment specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is 141 returned. If there is not enough memory at the specified alignment remaining to satisfy the 142 request, then NULL is returned. 143 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 144 145 @param Pages The number of 4 KB pages to allocate. 146 @param Alignment The requested alignment of the allocation. Must be a power of two. 147 If Alignment is zero, then byte alignment is used. 148 149 @return A pointer to the allocated buffer or NULL if allocation fails. 150 151 **/ 152 VOID * 153 EFIAPI 154 UncachedAllocateAlignedPages ( 155 IN UINTN Pages, 156 IN UINTN Alignment 157 ); 158 159 /** 160 Allocates one or more 4KB pages of type EfiRuntimeServicesData at a specified alignment. 161 162 Allocates the number of 4KB pages specified by Pages of type EfiRuntimeServicesData with an 163 alignment specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is 164 returned. If there is not enough memory at the specified alignment remaining to satisfy the 165 request, then NULL is returned. 166 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 167 168 @param Pages The number of 4 KB pages to allocate. 169 @param Alignment The requested alignment of the allocation. Must be a power of two. 170 If Alignment is zero, then byte alignment is used. 171 172 @return A pointer to the allocated buffer or NULL if allocation fails. 173 174 **/ 175 VOID * 176 EFIAPI 177 UncachedAllocateAlignedRuntimePages ( 178 IN UINTN Pages, 179 IN UINTN Alignment 180 ); 181 182 /** 183 Allocates one or more 4KB pages of type EfiReservedMemoryType at a specified alignment. 184 185 Allocates the number of 4KB pages specified by Pages of type EfiReservedMemoryType with an 186 alignment specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is 187 returned. If there is not enough memory at the specified alignment remaining to satisfy the 188 request, then NULL is returned. 189 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 190 191 @param Pages The number of 4 KB pages to allocate. 192 @param Alignment The requested alignment of the allocation. Must be a power of two. 193 If Alignment is zero, then byte alignment is used. 194 195 @return A pointer to the allocated buffer or NULL if allocation fails. 196 197 **/ 198 VOID * 199 EFIAPI 200 UncachedAllocateAlignedReservedPages ( 201 IN UINTN Pages, 202 IN UINTN Alignment 203 ); 204 205 /** 206 Frees one or more 4KB pages that were previously allocated with one of the aligned page 207 allocation functions in the Memory Allocation Library. 208 209 Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer 210 must have been allocated on a previous call to the aligned page allocation services of the Memory 211 Allocation Library. 212 If Buffer was not allocated with an aligned page allocation function in the Memory Allocation 213 Library, then ASSERT(). 214 If Pages is zero, then ASSERT(). 215 216 @param Buffer Pointer to the buffer of pages to free. 217 @param Pages The number of 4 KB pages to free. 218 219 **/ 220 VOID 221 EFIAPI 222 UncachedFreeAlignedPages ( 223 IN VOID *Buffer, 224 IN UINTN Pages 225 ); 226 227 /** 228 Allocates a buffer of type EfiBootServicesData. 229 230 Allocates the number bytes specified by AllocationSize of type EfiBootServicesData and returns a 231 pointer to the allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is 232 returned. If there is not enough memory remaining to satisfy the request, then NULL is returned. 233 234 @param AllocationSize The number of bytes to allocate. 235 236 @return A pointer to the allocated buffer or NULL if allocation fails. 237 238 **/ 239 VOID * 240 EFIAPI 241 UncachedAllocatePool ( 242 IN UINTN AllocationSize 243 ); 244 245 /** 246 Allocates a buffer of type EfiRuntimeServicesData. 247 248 Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData and returns 249 a pointer to the allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is 250 returned. If there is not enough memory remaining to satisfy the request, then NULL is returned. 251 252 @param AllocationSize The number of bytes to allocate. 253 254 @return A pointer to the allocated buffer or NULL if allocation fails. 255 256 **/ 257 VOID * 258 EFIAPI 259 UncachedAllocateRuntimePool ( 260 IN UINTN AllocationSize 261 ); 262 263 /** 264 Allocates a buffer of type EfieservedMemoryType. 265 266 Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType and returns 267 a pointer to the allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is 268 returned. If there is not enough memory remaining to satisfy the request, then NULL is returned. 269 270 @param AllocationSize The number of bytes to allocate. 271 272 @return A pointer to the allocated buffer or NULL if allocation fails. 273 274 **/ 275 VOID * 276 EFIAPI 277 UncachedAllocateReservedPool ( 278 IN UINTN AllocationSize 279 ); 280 281 /** 282 Allocates and zeros a buffer of type EfiBootServicesData. 283 284 Allocates the number bytes specified by AllocationSize of type EfiBootServicesData, clears the 285 buffer with zeros, and returns a pointer to the allocated buffer. If AllocationSize is 0, then a 286 valid buffer of 0 size is returned. If there is not enough memory remaining to satisfy the 287 request, then NULL is returned. 288 289 @param AllocationSize The number of bytes to allocate and zero. 290 291 @return A pointer to the allocated buffer or NULL if allocation fails. 292 293 **/ 294 VOID * 295 EFIAPI 296 UncachedAllocateZeroPool ( 297 IN UINTN AllocationSize 298 ); 299 300 /** 301 Allocates and zeros a buffer of type EfiRuntimeServicesData. 302 303 Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData, clears the 304 buffer with zeros, and returns a pointer to the allocated buffer. If AllocationSize is 0, then a 305 valid buffer of 0 size is returned. If there is not enough memory remaining to satisfy the 306 request, then NULL is returned. 307 308 @param AllocationSize The number of bytes to allocate and zero. 309 310 @return A pointer to the allocated buffer or NULL if allocation fails. 311 312 **/ 313 VOID * 314 EFIAPI 315 UncachedAllocateRuntimeZeroPool ( 316 IN UINTN AllocationSize 317 ); 318 319 /** 320 Allocates and zeros a buffer of type EfiReservedMemoryType. 321 322 Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType, clears the 323 buffer with zeros, and returns a pointer to the allocated buffer. If AllocationSize is 0, then a 324 valid buffer of 0 size is returned. If there is not enough memory remaining to satisfy the 325 request, then NULL is returned. 326 327 @param AllocationSize The number of bytes to allocate and zero. 328 329 @return A pointer to the allocated buffer or NULL if allocation fails. 330 331 **/ 332 VOID * 333 EFIAPI 334 UncachedAllocateReservedZeroPool ( 335 IN UINTN AllocationSize 336 ); 337 338 /** 339 Copies a buffer to an allocated buffer of type EfiBootServicesData. 340 341 Allocates the number bytes specified by AllocationSize of type EfiBootServicesData, copies 342 AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the 343 allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there 344 is not enough memory remaining to satisfy the request, then NULL is returned. 345 If Buffer is NULL, then ASSERT(). 346 If AllocationSize is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT(). 347 348 @param AllocationSize The number of bytes to allocate and zero. 349 @param Buffer The buffer to copy to the allocated buffer. 350 351 @return A pointer to the allocated buffer or NULL if allocation fails. 352 353 **/ 354 VOID * 355 EFIAPI 356 UncachedAllocateCopyPool ( 357 IN UINTN AllocationSize, 358 IN CONST VOID *Buffer 359 ); 360 361 /** 362 Copies a buffer to an allocated buffer of type EfiRuntimeServicesData. 363 364 Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData, copies 365 AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the 366 allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there 367 is not enough memory remaining to satisfy the request, then NULL is returned. 368 If Buffer is NULL, then ASSERT(). 369 If AllocationSize is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT(). 370 371 @param AllocationSize The number of bytes to allocate and zero. 372 @param Buffer The buffer to copy to the allocated buffer. 373 374 @return A pointer to the allocated buffer or NULL if allocation fails. 375 376 **/ 377 VOID * 378 EFIAPI 379 UncachedAllocateRuntimeCopyPool ( 380 IN UINTN AllocationSize, 381 IN CONST VOID *Buffer 382 ); 383 384 /** 385 Copies a buffer to an allocated buffer of type EfiReservedMemoryType. 386 387 Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType, copies 388 AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the 389 allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there 390 is not enough memory remaining to satisfy the request, then NULL is returned. 391 If Buffer is NULL, then ASSERT(). 392 If AllocationSize is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT(). 393 394 @param AllocationSize The number of bytes to allocate and zero. 395 @param Buffer The buffer to copy to the allocated buffer. 396 397 @return A pointer to the allocated buffer or NULL if allocation fails. 398 399 **/ 400 VOID * 401 EFIAPI 402 UncachedAllocateReservedCopyPool ( 403 IN UINTN AllocationSize, 404 IN CONST VOID *Buffer 405 ); 406 407 /** 408 Frees a buffer that was previously allocated with one of the pool allocation functions in the 409 Memory Allocation Library. 410 411 Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the 412 pool allocation services of the Memory Allocation Library. 413 If Buffer was not allocated with a pool allocation function in the Memory Allocation Library, 414 then ASSERT(). 415 416 @param Buffer Pointer to the buffer to free. 417 418 **/ 419 VOID 420 EFIAPI 421 UncachedFreePool ( 422 IN VOID *Buffer 423 ); 424 425 /** 426 Allocates a buffer of type EfiBootServicesData at a specified alignment. 427 428 Allocates the number bytes specified by AllocationSize of type EfiBootServicesData with an 429 alignment specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, 430 then a valid buffer of 0 size is returned. If there is not enough memory at the specified 431 alignment remaining to satisfy the request, then NULL is returned. 432 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 433 434 @param AllocationSize The number of bytes to allocate. 435 @param Alignment The requested alignment of the allocation. Must be a power of two. 436 If Alignment is zero, then byte alignment is used. 437 438 @return A pointer to the allocated buffer or NULL if allocation fails. 439 440 **/ 441 VOID * 442 EFIAPI 443 UncachedAllocateAlignedPool ( 444 IN UINTN AllocationSize, 445 IN UINTN Alignment 446 ); 447 448 /** 449 Allocates a buffer of type EfiRuntimeServicesData at a specified alignment. 450 451 Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData with an 452 alignment specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, 453 then a valid buffer of 0 size is returned. If there is not enough memory at the specified 454 alignment remaining to satisfy the request, then NULL is returned. 455 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 456 457 @param AllocationSize The number of bytes to allocate. 458 @param Alignment The requested alignment of the allocation. Must be a power of two. 459 If Alignment is zero, then byte alignment is used. 460 461 @return A pointer to the allocated buffer or NULL if allocation fails. 462 463 **/ 464 VOID * 465 EFIAPI 466 UncachedAllocateAlignedRuntimePool ( 467 IN UINTN AllocationSize, 468 IN UINTN Alignment 469 ); 470 471 /** 472 Allocates a buffer of type EfieservedMemoryType at a specified alignment. 473 474 Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType with an 475 alignment specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, 476 then a valid buffer of 0 size is returned. If there is not enough memory at the specified 477 alignment remaining to satisfy the request, then NULL is returned. 478 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 479 480 @param AllocationSize The number of bytes to allocate. 481 @param Alignment The requested alignment of the allocation. Must be a power of two. 482 If Alignment is zero, then byte alignment is used. 483 484 @return A pointer to the allocated buffer or NULL if allocation fails. 485 486 **/ 487 VOID * 488 EFIAPI 489 UncachedAllocateAlignedReservedPool ( 490 IN UINTN AllocationSize, 491 IN UINTN Alignment 492 ); 493 494 /** 495 Allocates and zeros a buffer of type EfiBootServicesData at a specified alignment. 496 497 Allocates the number bytes specified by AllocationSize of type EfiBootServicesData with an 498 alignment specified by Alignment, clears the buffer with zeros, and returns a pointer to the 499 allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there 500 is not enough memory at the specified alignment remaining to satisfy the request, then NULL is 501 returned. 502 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 503 504 @param AllocationSize The number of bytes to allocate. 505 @param Alignment The requested alignment of the allocation. Must be a power of two. 506 If Alignment is zero, then byte alignment is used. 507 508 @return A pointer to the allocated buffer or NULL if allocation fails. 509 510 **/ 511 VOID * 512 EFIAPI 513 UncachedAllocateAlignedZeroPool ( 514 IN UINTN AllocationSize, 515 IN UINTN Alignment 516 ); 517 518 /** 519 Allocates and zeros a buffer of type EfiRuntimeServicesData at a specified alignment. 520 521 Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData with an 522 alignment specified by Alignment, clears the buffer with zeros, and returns a pointer to the 523 allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there 524 is not enough memory at the specified alignment remaining to satisfy the request, then NULL is 525 returned. 526 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 527 528 @param AllocationSize The number of bytes to allocate. 529 @param Alignment The requested alignment of the allocation. Must be a power of two. 530 If Alignment is zero, then byte alignment is used. 531 532 @return A pointer to the allocated buffer or NULL if allocation fails. 533 534 **/ 535 VOID * 536 EFIAPI 537 UncachedAllocateAlignedRuntimeZeroPool ( 538 IN UINTN AllocationSize, 539 IN UINTN Alignment 540 ); 541 542 /** 543 Allocates and zeros a buffer of type EfieservedMemoryType at a specified alignment. 544 545 Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType with an 546 alignment specified by Alignment, clears the buffer with zeros, and returns a pointer to the 547 allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there 548 is not enough memory at the specified alignment remaining to satisfy the request, then NULL is 549 returned. 550 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 551 552 @param AllocationSize The number of bytes to allocate. 553 @param Alignment The requested alignment of the allocation. Must be a power of two. 554 If Alignment is zero, then byte alignment is used. 555 556 @return A pointer to the allocated buffer or NULL if allocation fails. 557 558 **/ 559 VOID * 560 EFIAPI 561 UncachedAllocateAlignedReservedZeroPool ( 562 IN UINTN AllocationSize, 563 IN UINTN Alignment 564 ); 565 566 /** 567 Copies a buffer to an allocated buffer of type EfiBootServicesData at a specified alignment. 568 569 Allocates the number bytes specified by AllocationSize of type EfiBootServicesData type with an 570 alignment specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, 571 then a valid buffer of 0 size is returned. If there is not enough memory at the specified 572 alignment remaining to satisfy the request, then NULL is returned. 573 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 574 575 @param AllocationSize The number of bytes to allocate. 576 @param Buffer The buffer to copy to the allocated buffer. 577 @param Alignment The requested alignment of the allocation. Must be a power of two. 578 If Alignment is zero, then byte alignment is used. 579 580 @return A pointer to the allocated buffer or NULL if allocation fails. 581 582 **/ 583 VOID * 584 EFIAPI 585 UncachedAllocateAlignedCopyPool ( 586 IN UINTN AllocationSize, 587 IN CONST VOID *Buffer, 588 IN UINTN Alignment 589 ); 590 591 /** 592 Copies a buffer to an allocated buffer of type EfiRuntimeServicesData at a specified alignment. 593 594 Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData type with an 595 alignment specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, 596 then a valid buffer of 0 size is returned. If there is not enough memory at the specified 597 alignment remaining to satisfy the request, then NULL is returned. 598 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 599 600 @param AllocationSize The number of bytes to allocate. 601 @param Buffer The buffer to copy to the allocated buffer. 602 @param Alignment The requested alignment of the allocation. Must be a power of two. 603 If Alignment is zero, then byte alignment is used. 604 605 @return A pointer to the allocated buffer or NULL if allocation fails. 606 607 **/ 608 VOID * 609 EFIAPI 610 UncachedAllocateAlignedRuntimeCopyPool ( 611 IN UINTN AllocationSize, 612 IN CONST VOID *Buffer, 613 IN UINTN Alignment 614 ); 615 616 /** 617 Copies a buffer to an allocated buffer of type EfiReservedMemoryType at a specified alignment. 618 619 Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType type with an 620 alignment specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, 621 then a valid buffer of 0 size is returned. If there is not enough memory at the specified 622 alignment remaining to satisfy the request, then NULL is returned. 623 If Alignment is not a power of two and Alignment is not zero, then ASSERT(). 624 625 @param AllocationSize The number of bytes to allocate. 626 @param Buffer The buffer to copy to the allocated buffer. 627 @param Alignment The requested alignment of the allocation. Must be a power of two. 628 If Alignment is zero, then byte alignment is used. 629 630 @return A pointer to the allocated buffer or NULL if allocation fails. 631 632 **/ 633 VOID * 634 EFIAPI 635 UncachedAllocateAlignedReservedCopyPool ( 636 IN UINTN AllocationSize, 637 IN CONST VOID *Buffer, 638 IN UINTN Alignment 639 ); 640 641 /** 642 Frees a buffer that was previously allocated with one of the aligned pool allocation functions 643 in the Memory Allocation Library. 644 645 Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the 646 aligned pool allocation services of the Memory Allocation Library. 647 If Buffer was not allocated with an aligned pool allocation function in the Memory Allocation 648 Library, then ASSERT(). 649 650 @param Buffer Pointer to the buffer to free. 651 652 **/ 653 VOID 654 EFIAPI 655 UncachedFreeAlignedPool ( 656 IN VOID *Buffer 657 ); 658 659 VOID 660 EFIAPI 661 UncachedSafeFreePool ( 662 IN VOID *Buffer 663 ); 664 665 #endif // __UNCACHED_MEMORY_ALLOCATION_LIB_H__ 666