mirror of https://github.com/acidanthera/audk.git
113 lines
2.5 KiB
C
113 lines
2.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2004, Intel Corporation
|
||
|
All rights reserved. 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.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
EfiJump.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This is the Setjump/Longjump pair for an IA32 processor.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _EFI_JUMP_H_
|
||
|
#define _EFI_JUMP_H_
|
||
|
|
||
|
#include EFI_GUID_DEFINITION (PeiTransferControl)
|
||
|
|
||
|
//
|
||
|
// NOTE:Set/LongJump needs to have this buffer start
|
||
|
// at 16 byte boundary. Either fix the structure
|
||
|
// which call this buffer or fix inside SetJump/LongJump
|
||
|
// Choosing 1K buffer storage for now
|
||
|
//
|
||
|
typedef struct {
|
||
|
CHAR8 Buffer[1024];
|
||
|
} EFI_JUMP_BUFFER;
|
||
|
|
||
|
EFI_STATUS
|
||
|
SetJump (
|
||
|
IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,
|
||
|
IN EFI_JUMP_BUFFER *Jump
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
SetJump stores the current register set in the area pointed to
|
||
|
by "save". It returns zero. Subsequent calls to "LongJump" will
|
||
|
restore the registers and return non-zero to the same location.
|
||
|
On entry, r32 contains the pointer to the jmp_buffer
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
This - Calling context
|
||
|
Jump - Jump buffer
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
Status code
|
||
|
|
||
|
--*/
|
||
|
;
|
||
|
|
||
|
EFI_STATUS
|
||
|
LongJump (
|
||
|
IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,
|
||
|
IN EFI_JUMP_BUFFER *Jump
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
LongJump initializes the register set to the values saved by a
|
||
|
previous 'SetJump' and jumps to the return location saved by that
|
||
|
'SetJump'. This has the effect of unwinding the stack and returning
|
||
|
for a second time to the 'SetJump'.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
This - Calling context
|
||
|
Jump - Jump buffer
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
Status code
|
||
|
|
||
|
--*/
|
||
|
;
|
||
|
|
||
|
VOID
|
||
|
RtPioICacheFlush (
|
||
|
IN VOID *StartAddress,
|
||
|
IN UINTN SizeInBytes
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Flushing the CPU instruction cache.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
StartAddress - Start address to flush
|
||
|
SizeInBytes - Length in bytes to flush
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
;
|
||
|
|
||
|
#endif
|