17b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney/** @file
27b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  SetMem32() implementation.
37b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
42bfb60098f608dc32ff5d22b0fd087c1636b0881lgao  The following BaseMemoryLib instances contain the same copy of this file:
57b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney    BaseMemoryLib
67b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney    BaseMemoryLibMmx
77b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney    BaseMemoryLibSse2
87b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney    BaseMemoryLibRepStr
92bfb60098f608dc32ff5d22b0fd087c1636b0881lgao    BaseMemoryLibOptDxe
102bfb60098f608dc32ff5d22b0fd087c1636b0881lgao    BaseMemoryLibOptPei
117b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney    PeiMemoryLib
121fef058f4b8fefc455bb171e4908c3e835b1b492qhuang    UefiMemoryLib
137b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
1484b5877f028a20f4227a26a7b63dc2e57949fc18hhtian  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
1584b5877f028a20f4227a26a7b63dc2e57949fc18hhtian  This program and the accompanying materials
161fef058f4b8fefc455bb171e4908c3e835b1b492qhuang  are licensed and made available under the terms and conditions of the BSD License
171fef058f4b8fefc455bb171e4908c3e835b1b492qhuang  which accompanies this distribution.  The full text of the license may be found at
182fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter  http://opensource.org/licenses/bsd-license.php.
191efcc4ae46f52e3845923ffbab68426e068709d2vanjeff
201fef058f4b8fefc455bb171e4908c3e835b1b492qhuang  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
211fef058f4b8fefc455bb171e4908c3e835b1b492qhuang  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
227b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
231fef058f4b8fefc455bb171e4908c3e835b1b492qhuang**/
247b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
257b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney#include "MemLibInternals.h"
267b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
277b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney/**
287b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  Fills a target buffer with a 32-bit value, and returns the target buffer.
297b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
307b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  This function fills Length bytes of Buffer with the 32-bit value specified by
317b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  Value, and returns Buffer. Value is repeated every 32-bits in for Length
327b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  bytes of Buffer.
337b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
347b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  If Length > 0 and Buffer is NULL, then ASSERT().
357b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
367b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
377b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  If Length is not aligned on a 32-bit boundary, then ASSERT().
387b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
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.
427b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
437b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  @return Buffer.
447b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
457b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney**/
467b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinneyVOID *
477b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinneyEFIAPI
487b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinneySetMem32 (
497b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  OUT VOID   *Buffer,
507b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  IN UINTN   Length,
517b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  IN UINT32  Value
527b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  )
537b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney{
542bfb60098f608dc32ff5d22b0fd087c1636b0881lgao  if (Length == 0) {
557b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney    return Buffer;
567b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  }
577b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
587b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  ASSERT (Buffer != NULL);
597b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
607b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
617b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
627b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney
637b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney  return InternalMemSetMem32 (Buffer, Length / sizeof (Value), Value);
647b3b4b2992bf89ee5f1aa3df2e2af9c988c49e69mdkinney}
65