1e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/** @file
2e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Base Library CPU Functions for all architectures.
3e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
4127010dd965de70796f468fc0e2ab5510732048amyronporter  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
5bb817c56c51fabe92915fe30b168b4833cb2aed9hhtian  This program and the accompanying materials
6e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  are licensed and made available under the terms and conditions of the BSD License
7e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  which accompanies this distribution.  The full text of the license may be found at
8127010dd965de70796f468fc0e2ab5510732048amyronporter  http://opensource.org/licenses/bsd-license.php.
9e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
10e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
13e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
14e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
1547fc17d8a96970bc36dd7b9d4567c2c2ac102c78qhuang#include "BaseLibInternals.h"
16f734a10ab104f1072f94cab66a5489e0fd8fce8aAJFISH
17e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
18e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/**
19e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Disables CPU interrupts and returns the interrupt state prior to the disable
20e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  operation.
21e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
22e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  @retval TRUE  CPU interrupts were enabled on entry to this call.
23e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  @retval FALSE CPU interrupts were disabled on entry to this call.
24e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
25e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
26e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffBOOLEAN
27e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffEFIAPI
28e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffSaveAndDisableInterrupts (
29e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  VOID
30e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  )
31e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff{
32e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  BOOLEAN                           InterruptState;
33e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
34e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  InterruptState = GetInterruptState ();
35e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  DisableInterrupts ();
36e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  return InterruptState;
37e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff}
38e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
39e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/**
40e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Set the current CPU interrupt state.
41e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
42e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Sets the current CPU interrupt state to the state specified by
43e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  InterruptState. If InterruptState is TRUE, then interrupts are enabled. If
44e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  InterruptState is FALSE, then interrupts are disabled. InterruptState is
45e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  returned.
46e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
47127010dd965de70796f468fc0e2ab5510732048amyronporter  @param  InterruptState  TRUE if interrupts should be enabled. FALSE if
48e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff                          interrupts should be disabled.
49e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
509aa049d9717f1260426918eab2d5986e838a8754gikidy  @return InterruptState
51e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
52e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
53e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffBOOLEAN
54e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffEFIAPI
55e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffSetInterruptState (
56e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  IN      BOOLEAN                   InterruptState
57e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  )
58e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff{
59e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  if (InterruptState) {
60e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    EnableInterrupts ();
61e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  } else {
62e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    DisableInterrupts ();
63e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  }
64e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  return InterruptState;
65e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff}
66