1/*++
2
3Copyright (c) 2004 - 2007, Intel Corporation. All rights reserved.<BR>
4This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution.  The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12Module Name:
13
14  EfiBootScript.h
15
16Abstract:
17
18
19
20--*/
21
22#ifndef _EFI_SCRIPT_H_
23#define _EFI_SCRIPT_H_
24
25#include "EfiSmbus.h"
26
27#define EFI_ACPI_S3_RESUME_SCRIPT_TABLE         0x00
28
29//
30// Boot Script Opcode Definitions
31//
32typedef const UINT16  EFI_BOOT_SCRIPT_OPCODE;
33
34#define EFI_BOOT_SCRIPT_IO_WRITE_OPCODE               0x00
35#define EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE          0x01
36#define EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE              0x02
37#define EFI_BOOT_SCRIPT_MEM_READ_WRITE_OPCODE         0x03
38#define EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE       0x04
39#define EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE  0x05
40#define EFI_BOOT_SCRIPT_SMBUS_EXECUTE_OPCODE          0x06
41#define EFI_BOOT_SCRIPT_STALL_OPCODE                  0x07
42#define EFI_BOOT_SCRIPT_DISPATCH_OPCODE               0x08
43
44//
45// Extensions to boot script definitions
46//
47#define EFI_BOOT_SCRIPT_MEM_POLL_OPCODE               0x09
48#define EFI_BOOT_SCRIPT_INFORMATION_OPCODE            0x0A
49#define EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE      0x0B
50#define EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE 0x0C
51
52#define EFI_BOOT_SCRIPT_TABLE_OPCODE                  0xAA
53#define EFI_BOOT_SCRIPT_TERMINATE_OPCODE              0xFF
54
55#pragma pack(1)
56
57//
58// EFI Boot Script Width
59//
60typedef enum {
61  EfiBootScriptWidthUint8,
62  EfiBootScriptWidthUint16,
63  EfiBootScriptWidthUint32,
64  EfiBootScriptWidthUint64,
65  EfiBootScriptWidthFifoUint8,
66  EfiBootScriptWidthFifoUint16,
67  EfiBootScriptWidthFifoUint32,
68  EfiBootScriptWidthFifoUint64,
69  EfiBootScriptWidthFillUint8,
70  EfiBootScriptWidthFillUint16,
71  EfiBootScriptWidthFillUint32,
72  EfiBootScriptWidthFillUint64,
73  EfiBootScriptWidthMaximum
74} EFI_BOOT_SCRIPT_WIDTH;
75
76typedef struct {
77  UINT16  OpCode;
78  UINT8   Length;
79} EFI_BOOT_SCRIPT_GENERIC_HEADER;
80
81typedef struct {
82  UINT16  OpCode;
83  UINT8   Length;
84  UINT16  Version;
85  UINT32  TableLength;
86  UINT16  Reserved[2];
87} EFI_BOOT_SCRIPT_TABLE_HEADER;
88
89typedef struct {
90  UINT16                OpCode;
91  UINT8                 Length;
92  UINT32                Width;
93} EFI_BOOT_SCRIPT_COMMON_HEADER;
94
95typedef struct {
96  UINT16                OpCode;
97  UINT8                 Length;
98  UINT32                Width;
99  UINT32                Count;
100  UINT64                Address;
101} EFI_BOOT_SCRIPT_IO_WRITE;
102
103typedef struct {
104  UINT16                OpCode;
105  UINT8                 Length;
106  UINT32                Width;
107  UINT64                Address;
108} EFI_BOOT_SCRIPT_IO_READ_WRITE;
109
110typedef struct {
111  UINT16                OpCode;
112  UINT8                 Length;
113  UINT32                Width;
114  UINT32                Count;
115  UINT64                Address;
116} EFI_BOOT_SCRIPT_MEM_WRITE;
117
118typedef struct {
119  UINT16                OpCode;
120  UINT8                 Length;
121  UINT32                Width;
122  UINT64                Address;
123} EFI_BOOT_SCRIPT_MEM_READ_WRITE;
124
125typedef struct {
126  UINT16                OpCode;
127  UINT8                 Length;
128  UINT32                Width;
129  UINT32                Count;
130  UINT64                Address;
131} EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE;
132
133typedef struct {
134  UINT16                OpCode;
135  UINT8                 Length;
136  UINT32                Width;
137  UINT32                Count;
138  UINT64                Address;
139  UINT16                Segment;
140} EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE;
141
142typedef struct {
143  UINT16                OpCode;
144  UINT8                 Length;
145  UINT32                Width;
146  UINT64                Address;
147} EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE;
148
149typedef struct {
150  UINT16                OpCode;
151  UINT8                 Length;
152  UINT32                Width;
153  UINT64                Address;
154  UINT16                Segment;
155} EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE;
156
157
158typedef struct {
159  UINT16                    OpCode;
160  UINT8                     Length;
161  UINT64                    SlaveAddress;
162  UINT64                    Command;
163  UINT32                    Operation;
164  BOOLEAN                   PecCheck;
165  UINT32                    DataSize;
166} EFI_BOOT_SCRIPT_SMBUS_EXECUTE;
167
168typedef struct {
169  UINT16  OpCode;
170  UINT8   Length;
171  UINT64  Duration;
172} EFI_BOOT_SCRIPT_STALL;
173
174typedef struct {
175  UINT16                OpCode;
176  UINT8                 Length;
177  EFI_PHYSICAL_ADDRESS  EntryPoint;
178} EFI_BOOT_SCRIPT_DISPATCH;
179
180typedef struct {
181  UINT16  OpCode;
182  UINT8   Length;
183  UINT32  Width;
184  UINT64  Address;
185  UINT64  BitMask;
186  UINT64  BitValue;
187  UINT64  Duration;
188  UINT64  LoopTimes;
189} EFI_BOOT_SCRIPT_MEM_POLL;
190
191typedef struct {
192  UINT16                OpCode;
193  UINT8                 Length;
194  UINT32                InformationLength;
195  EFI_PHYSICAL_ADDRESS  Information;
196} EFI_BOOT_SCRIPT_INFORMATION;
197
198typedef struct {
199  UINT16  OpCode;
200  UINT8   Length;
201} EFI_BOOT_SCRIPT_TERMINATE;
202
203typedef union {
204  EFI_BOOT_SCRIPT_GENERIC_HEADER        *Header;
205  EFI_BOOT_SCRIPT_TABLE_HEADER          *TableInfo;
206  EFI_BOOT_SCRIPT_IO_WRITE              *IoWrite;
207  EFI_BOOT_SCRIPT_IO_READ_WRITE         *IoReadWrite;
208  EFI_BOOT_SCRIPT_MEM_WRITE             *MemWrite;
209  EFI_BOOT_SCRIPT_MEM_READ_WRITE        *MemReadWrite;
210  EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE      *PciWrite;
211  EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE *PciReadWrite;
212  EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE      *PciWrite2;
213  EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE *PciReadWrite2;
214  EFI_BOOT_SCRIPT_SMBUS_EXECUTE         *SmbusExecute;
215  EFI_BOOT_SCRIPT_STALL                 *Stall;
216  EFI_BOOT_SCRIPT_DISPATCH              *Dispatch;
217  EFI_BOOT_SCRIPT_MEM_POLL              *MemPoll;
218  EFI_BOOT_SCRIPT_INFORMATION           *Information;
219  EFI_BOOT_SCRIPT_TERMINATE             *Terminate;
220  EFI_BOOT_SCRIPT_COMMON_HEADER         *CommonHeader;
221  UINT8                                 *Raw;
222} BOOT_SCRIPT_POINTERS;
223
224#pragma pack()
225
226#endif
227