1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/** @file
Header file definitions for SC reset.
Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SC_RESET_RT_H_
#define _SC_RESET_RT_H_
#include <PiDxe.h>
#include <Guid/EventGroup.h>
#include <Private/Guid/ScPolicyHobGuid.h>
#include <Protocol/Reset.h>
#include <Protocol/ScExtendedReset.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
#include <Library/HobLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeLib.h>
#include "ScAccess.h"
#include <Library/BaseLib.h>
//
// Driver private data
//
#define RESET_SIGNATURE SIGNATURE_32 ('I', 'E', 'R', 'S')
typedef struct {
UINT32 Signature;
EFI_HANDLE Handle;
EFI_SC_EXTENDED_RESET_PROTOCOL ScExtendedResetProtocol;
#if ((TIANO_RELEASE_VERSION != 0) && (EFI_SPECIFICATION_VERSION < 0x00020000))
CHAR16 *CapsuleVariableName;
#endif
UINTN PmcBase;
UINTN AcpiBar;
UINT8 ResetSelect;
} SC_RESET_INSTANCE;
#define RESET_INSTANCE_FROM_THIS(a) \
CR ( \
a, \
SC_RESET_INSTANCE, \
ScExtendedResetProtocol, \
RESET_SIGNATURE \
)
/**
Install and initialize reset protocols.
@param[in] ImageHandle Image handle of the loaded driver
@param[in] SystemTable Pointer to the System Table
@retval EFI_SUCCESS Thread can be successfully created
@retval EFI_OUT_OF_RESOURCES Cannot allocate protocol data structure
@retval EFI_DEVICE_ERROR Cannot create the timer service
**/
EFI_STATUS
EFIAPI
InitializeScReset (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
Generate system reset by Reset Control Register (IO Cf9h)
@param[in] ResetType Warm or cold
@param[in] ResetStatus Possible cause of reset
@param[in] DataSize Size of ResetData in bytes
@param[in] ResetData Optional Unicode string
**/
VOID
EFIAPI
IntelScResetSystem (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
);
#if ((TIANO_RELEASE_VERSION != 0) && (EFI_SPECIFICATION_VERSION < 0x00020000))
/**
If need be, do any special reset required for capsules. For this
implementation where we're called from the ResetSystem() api,
just set our capsule variable and return to let the caller
do a soft reset.
@param[in] CapsuleDataPtr Pointer to the capsule block descriptors
**/
VOID
CapsuleReset (
IN UINTN CapsuleDataPtr
);
#endif
/**
Execute SC Extended Reset from the host controller.
@param[in] This Pointer to the EFI_SC_EXTENDED_RESET_PROTOCOL instance.
@param[in] ScExtendedResetTypes SC Extended Reset Types which includes PowerCycle, Globalreset.
@retval EFI_SUCCESS Successfully completed.
@retval EFI_INVALID_PARAMETER If ResetType is invalid.
**/
EFI_STATUS
EFIAPI
ScExtendedReset (
IN EFI_SC_EXTENDED_RESET_PROTOCOL *This,
IN SC_EXTENDED_RESET_TYPES ScExtendedResetTypes
);
/**
Fixup internal data pointers so that the services can be called in virtual mode.
@param[in] Event The event registered.
@param[in] Context Event context. Not used in this event handler.
**/
VOID
EFIAPI
ScResetVirtualddressChangeEvent (
IN EFI_EVENT Event,
IN VOID *Context
);
#endif
|