PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/WindSLIC_EFI/mem.cpp

https://github.com/untermensch/WindSLIC
C++ | 127 lines | 108 code | 11 blank | 8 comment | 14 complexity | f7d12470b9a390071b5e15941ef1780a MD5 | raw file
  1. #include <efi.h>
  2. #include "libefi.h"
  3. //
  4. VOID
  5. ZeroMem (
  6. IN VOID *Buffer,
  7. IN UINTN Size
  8. )
  9. {
  10. INT8 *pt;
  11. pt = (INT8*)Buffer;
  12. while (Size--) {
  13. *(pt++) = 0;
  14. }
  15. }
  16. //
  17. VOID
  18. SetMem (
  19. IN VOID *Buffer,
  20. IN UINTN Size,
  21. IN UINT8 Value
  22. )
  23. {
  24. INT8 *pt;
  25. pt = (INT8*)Buffer;
  26. while (Size--) {
  27. *(pt++) = Value;
  28. }
  29. }
  30. //
  31. VOID
  32. CopyMem (
  33. IN VOID *Dest,
  34. IN VOID *Src,
  35. IN UINTN len
  36. )
  37. {
  38. CHAR8 *d, *s;
  39. d = (CHAR8*)Dest;
  40. s = (CHAR8*)Src;
  41. while (len--) {
  42. *(d++) = *(s++);
  43. }
  44. }
  45. //
  46. INTN
  47. CompareMem (
  48. IN VOID *Dest,
  49. IN VOID *Src,
  50. IN UINTN len
  51. )
  52. {
  53. CHAR8 *d, *s;
  54. d = (CHAR8*)Dest;
  55. s = (CHAR8*)Src;
  56. while (len--) {
  57. if (*d != *s) {
  58. return *d - *s;
  59. }
  60. d += 1;
  61. s += 1;
  62. }
  63. return 0;
  64. }
  65. //
  66. VOID *
  67. AllocatePool (
  68. IN UINTN Size
  69. )
  70. {
  71. EFI_STATUS Status;
  72. VOID *p;
  73. Status = BS->AllocatePool (EfiBootServicesData, Size, &p);
  74. if (EFI_ERROR(Status)) {
  75. p = NULL;
  76. }
  77. return p;
  78. }
  79. //
  80. VOID *
  81. AllocateZeroPool (
  82. IN UINTN Size
  83. )
  84. {
  85. VOID *p;
  86. p = AllocatePool (Size);
  87. if (p) {
  88. ZeroMem (p, Size);
  89. }
  90. return p;
  91. }
  92. //
  93. VOID *
  94. ScanMem (
  95. UINTN ScanStart,
  96. UINTN ScanEnd,
  97. UINTN Len
  98. )
  99. {
  100. UINTN Address;
  101. UINTN Count = 0;
  102. if (Len < 0x10) {
  103. Len = 0x10;
  104. }
  105. for (Address = ScanStart; Address < (ScanEnd-Len); Address += 0x10) {
  106. Count = 0;
  107. while (*(UINT8 *) (Address + Count) == 0x0) {
  108. Count++;
  109. if (Count == Len) {
  110. return (VOID *) Address;
  111. }
  112. }
  113. }
  114. return NULL;
  115. }
  116. //