1e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/** @file
2e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  SetMem32() implementation.
3e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
42bfb60098f608dc32ff5d22b0fd087c1636b0881lgao  The following BaseMemoryLib instances contain the same copy of this file:
5e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    BaseMemoryLib
6e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    BaseMemoryLibMmx
7e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    BaseMemoryLibSse2
8e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    BaseMemoryLibRepStr
92bfb60098f608dc32ff5d22b0fd087c1636b0881lgao    BaseMemoryLibOptDxe
102bfb60098f608dc32ff5d22b0fd087c1636b0881lgao    BaseMemoryLibOptPei
11e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    PeiMemoryLib
121fef058f4b8fefc455bb171e4908c3e835b1b492qhuang    UefiMemoryLib
13e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
142fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
15c33c6476ca8156ddf3c32dbf95048c32f30dc84ahhtian  This program and the accompanying materials
16d531bfee01a957038d7ac1a16748558a62165fb2eric_tian  are licensed and made available under the terms and conditions of the BSD License
17d531bfee01a957038d7ac1a16748558a62165fb2eric_tian  which accompanies this distribution.  The full text of the license may be found at
182fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter  http://opensource.org/licenses/bsd-license.php.
19d531bfee01a957038d7ac1a16748558a62165fb2eric_tian
20d531bfee01a957038d7ac1a16748558a62165fb2eric_tian  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
21d531bfee01a957038d7ac1a16748558a62165fb2eric_tian  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
22d531bfee01a957038d7ac1a16748558a62165fb2eric_tian
23e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
24e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
25e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff#include "MemLibInternals.h"
26e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
27e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/**
28e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Fills a target buffer with a 32-bit value, and returns the target buffer.
29e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
30e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  This function fills Length bytes of Buffer with the 32-bit value specified by
31e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Value, and returns Buffer. Value is repeated every 32-bits in for Length
32e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  bytes of Buffer.
33e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
34e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  If Length > 0 and Buffer is NULL, then ASSERT().
35e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
36e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
37e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  If Length is not aligned on a 32-bit boundary, then ASSERT().
38e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
392fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter  @param  Buffer  The pointer to the target buffer to fill.
402fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter  @param  Length  The number of bytes in Buffer to fill.
412fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter  @param  Value   The value with which to fill Length bytes of Buffer.
42e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
43e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  @return Buffer.
44e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
45e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
46e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffVOID *
47e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffEFIAPI
48e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffSetMem32 (
49e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  OUT VOID   *Buffer,
50e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  IN UINTN   Length,
51e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  IN UINT32  Value
52e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  )
53e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff{
542bfb60098f608dc32ff5d22b0fd087c1636b0881lgao  if (Length == 0) {
55e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    return Buffer;
56e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  }
57e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
58e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  ASSERT (Buffer != NULL);
59e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
60e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
61e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
62e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
63e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  return InternalMemSetMem32 (Buffer, Length / sizeof (Value), Value);
64e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff}
65