Adding support for BeagleBoard.
ArmPkg - Supoprt for ARM specific things that can change as the architecture changes. Plus semihosting JTAG drivers. EmbeddedPkg - Generic support for an embeddded platform. Including a light weight command line shell. BeagleBoardPkg - Platform specifics for BeagleBoard. SD Card works, but USB has issues. Looks like a bug in the open source USB stack (Our internal stack works fine). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9518 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
221
ArmPkg/Library/SemihostLib/Arm/SemihostLib.c
Normal file
221
ArmPkg/Library/SemihostLib/Arm/SemihostLib.c
Normal file
@@ -0,0 +1,221 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
#include <Uefi.h>
|
||||
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/SemihostLib.h>
|
||||
|
||||
#include "SemihostPrivate.h"
|
||||
|
||||
BOOLEAN
|
||||
SemihostConnectionSupported (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return SEMIHOST_SUPPORTED;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileOpen (
|
||||
IN CHAR8 *FileName,
|
||||
IN UINT32 Mode,
|
||||
OUT UINT32 *FileHandle
|
||||
)
|
||||
{
|
||||
SEMIHOST_FILE_OPEN_BLOCK OpenBlock;
|
||||
INT32 Result;
|
||||
|
||||
if (FileHandle == NULL)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
OpenBlock.FileName = FileName;
|
||||
OpenBlock.Mode = Mode;
|
||||
OpenBlock.NameLength = AsciiStrLen(FileName);
|
||||
|
||||
Result = Semihost_SYS_OPEN(&OpenBlock);
|
||||
|
||||
if (Result == -1)
|
||||
{
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
else
|
||||
{
|
||||
*FileHandle = Result;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileSeek (
|
||||
IN UINT32 FileHandle,
|
||||
IN UINT32 Offset
|
||||
)
|
||||
{
|
||||
SEMIHOST_FILE_SEEK_BLOCK SeekBlock;
|
||||
INT32 Result;
|
||||
|
||||
SeekBlock.Handle = FileHandle;
|
||||
SeekBlock.Location = Offset;
|
||||
|
||||
Result = Semihost_SYS_SEEK(&SeekBlock);
|
||||
|
||||
if (Result == 0)
|
||||
return EFI_SUCCESS;
|
||||
else
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileRead (
|
||||
IN UINT32 FileHandle,
|
||||
IN OUT UINT32 *Length,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
SEMIHOST_FILE_READ_WRITE_BLOCK ReadBlock;
|
||||
UINT32 Result;
|
||||
|
||||
if ((Length == NULL) || (Buffer == NULL))
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
ReadBlock.Handle = FileHandle;
|
||||
ReadBlock.Buffer = Buffer;
|
||||
ReadBlock.Length = *Length;
|
||||
|
||||
Result = Semihost_SYS_READ(&ReadBlock);
|
||||
|
||||
if (Result == *Length)
|
||||
{
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
else
|
||||
{
|
||||
*Length -= Result;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileWrite (
|
||||
IN UINT32 FileHandle,
|
||||
IN OUT UINT32 *Length,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
SEMIHOST_FILE_READ_WRITE_BLOCK WriteBlock;
|
||||
|
||||
if ((Length == NULL) || (Buffer == NULL))
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
WriteBlock.Handle = FileHandle;
|
||||
WriteBlock.Buffer = Buffer;
|
||||
WriteBlock.Length = *Length;
|
||||
|
||||
*Length = Semihost_SYS_WRITE(&WriteBlock);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileClose (
|
||||
IN UINT32 FileHandle
|
||||
)
|
||||
{
|
||||
INT32 Result = Semihost_SYS_CLOSE(&FileHandle);
|
||||
|
||||
if (Result == -1)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
else
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileLength (
|
||||
IN UINT32 FileHandle,
|
||||
OUT UINT32 *Length
|
||||
)
|
||||
{
|
||||
INT32 Result;
|
||||
|
||||
if (Length == NULL)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
Result = Semihost_SYS_FLEN(&FileHandle);
|
||||
|
||||
if (Result == -1)
|
||||
{
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
else
|
||||
{
|
||||
*Length = Result;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
SemihostFileRemove (
|
||||
IN CHAR8 *FileName
|
||||
)
|
||||
{
|
||||
SEMIHOST_FILE_REMOVE_BLOCK RemoveBlock;
|
||||
UINT32 Result;
|
||||
|
||||
RemoveBlock.FileName = FileName;
|
||||
RemoveBlock.NameLength = AsciiStrLen(FileName);
|
||||
|
||||
Result = Semihost_SYS_REMOVE(&RemoveBlock);
|
||||
|
||||
if (Result == 0)
|
||||
return EFI_SUCCESS;
|
||||
else
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
CHAR8
|
||||
SemihostReadCharacter (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return Semihost_SYS_READC();
|
||||
}
|
||||
|
||||
VOID
|
||||
SemihostWriteCharacter (
|
||||
IN CHAR8 Character
|
||||
)
|
||||
{
|
||||
Semihost_SYS_WRITEC(&Character);
|
||||
}
|
||||
|
||||
VOID
|
||||
SemihostWriteString (
|
||||
IN CHAR8 *String
|
||||
)
|
||||
{
|
||||
Semihost_SYS_WRITE0(String);
|
||||
}
|
||||
|
||||
UINT32
|
||||
SemihostSystem (
|
||||
IN CHAR8 *CommandLine
|
||||
)
|
||||
{
|
||||
SEMIHOST_SYSTEM_BLOCK SystemBlock;
|
||||
|
||||
SystemBlock.CommandLine = CommandLine;
|
||||
SystemBlock.CommandLength = AsciiStrLen(CommandLine);
|
||||
|
||||
return Semihost_SYS_SYSTEM(&SystemBlock);
|
||||
}
|
162
ArmPkg/Library/SemihostLib/Arm/SemihostPrivate.h
Normal file
162
ArmPkg/Library/SemihostLib/Arm/SemihostPrivate.h
Normal file
@@ -0,0 +1,162 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __SEMIHOST_PRIVATE_H__
|
||||
#define __SEMIHOST_PRIVATE_H__
|
||||
|
||||
typedef struct {
|
||||
CHAR8 *FileName;
|
||||
UINT32 Mode;
|
||||
UINT32 NameLength;
|
||||
} SEMIHOST_FILE_OPEN_BLOCK;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Handle;
|
||||
VOID *Buffer;
|
||||
UINT32 Length;
|
||||
} SEMIHOST_FILE_READ_WRITE_BLOCK;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Handle;
|
||||
UINT32 Location;
|
||||
} SEMIHOST_FILE_SEEK_BLOCK;
|
||||
|
||||
typedef struct {
|
||||
CHAR8 *FileName;
|
||||
UINT32 NameLength;
|
||||
} SEMIHOST_FILE_REMOVE_BLOCK;
|
||||
|
||||
typedef struct {
|
||||
CHAR8 *CommandLine;
|
||||
UINT32 CommandLength;
|
||||
} SEMIHOST_SYSTEM_BLOCK;
|
||||
|
||||
#ifdef __CC_ARM
|
||||
|
||||
#if defined(__thumb__)
|
||||
#define SWI 0xAB
|
||||
#else
|
||||
#define SWI 0x123456
|
||||
#endif
|
||||
|
||||
#define SEMIHOST_SUPPORTED TRUE
|
||||
|
||||
__swi(SWI)
|
||||
INT32
|
||||
_Semihost_SYS_OPEN(
|
||||
IN UINTN SWI_0x01,
|
||||
IN SEMIHOST_FILE_OPEN_BLOCK *OpenBlock
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
INT32
|
||||
_Semihost_SYS_CLOSE(
|
||||
IN UINTN SWI_0x02,
|
||||
IN UINT32 *Handle
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
VOID
|
||||
_Semihost_SYS_WRITEC(
|
||||
IN UINTN SWI_0x03,
|
||||
IN CHAR8 *Character
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
VOID
|
||||
_Semihost_SYS_WRITE0(
|
||||
IN UINTN SWI_0x04,
|
||||
IN CHAR8 *String
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
UINT32
|
||||
_Semihost_SYS_WRITE(
|
||||
IN UINTN SWI_0x05,
|
||||
IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *WriteBlock
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
UINT32
|
||||
_Semihost_SYS_READ(
|
||||
IN UINTN SWI_0x06,
|
||||
IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *ReadBlock
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
CHAR8
|
||||
_Semihost_SYS_READC(
|
||||
IN UINTN SWI_0x07,
|
||||
IN UINTN Zero
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
INT32
|
||||
_Semihost_SYS_SEEK(
|
||||
IN UINTN SWI_0x0A,
|
||||
IN SEMIHOST_FILE_SEEK_BLOCK *SeekBlock
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
INT32
|
||||
_Semihost_SYS_FLEN(
|
||||
IN UINTN SWI_0x0C,
|
||||
IN UINT32 *Handle
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
UINT32
|
||||
_Semihost_SYS_REMOVE(
|
||||
IN UINTN SWI_0x0E,
|
||||
IN SEMIHOST_FILE_REMOVE_BLOCK *RemoveBlock
|
||||
);
|
||||
|
||||
__swi(SWI)
|
||||
UINT32
|
||||
_Semihost_SYS_SYSTEM(
|
||||
IN UINTN SWI_0x12,
|
||||
IN SEMIHOST_SYSTEM_BLOCK *SystemBlock
|
||||
);
|
||||
|
||||
#define Semihost_SYS_OPEN(OpenBlock) _Semihost_SYS_OPEN(0x01, OpenBlock)
|
||||
#define Semihost_SYS_CLOSE(Handle) _Semihost_SYS_CLOSE(0x02, Handle)
|
||||
#define Semihost_SYS_WRITE0(String) _Semihost_SYS_WRITE0(0x04, String)
|
||||
#define Semihost_SYS_WRITEC(Character) _Semihost_SYS_WRITEC(0x03, Character)
|
||||
#define Semihost_SYS_WRITE(WriteBlock) _Semihost_SYS_WRITE(0x05, WriteBlock)
|
||||
#define Semihost_SYS_READ(ReadBlock) _Semihost_SYS_READ(0x06, ReadBlock)
|
||||
#define Semihost_SYS_READC() _Semihost_SYS_READC(0x07, 0)
|
||||
#define Semihost_SYS_SEEK(SeekBlock) _Semihost_SYS_SEEK(0x0A, SeekBlock)
|
||||
#define Semihost_SYS_FLEN(Handle) _Semihost_SYS_FLEN(0x0C, Handle)
|
||||
#define Semihost_SYS_REMOVE(RemoveBlock) _Semihost_SYS_REMOVE(0x0E, RemoveBlock)
|
||||
#define Semihost_SYS_SYSTEM(SystemBlock) _Semihost_SYS_SYSTEM(0x12, SystemBlock)
|
||||
|
||||
#else // __CC_ARM
|
||||
|
||||
#define SEMIHOST_SUPPORTED FALSE
|
||||
|
||||
#define Semihost_SYS_OPEN(OpenBlock) (-1)
|
||||
#define Semihost_SYS_CLOSE(Handle) (-1)
|
||||
#define Semihost_SYS_WRITE0(String)
|
||||
#define Semihost_SYS_WRITEC(Character)
|
||||
#define Semihost_SYS_WRITE(WriteBlock) (0)
|
||||
#define Semihost_SYS_READ(ReadBlock) ((ReadBlock)->Length)
|
||||
#define Semihost_SYS_READC() ('x')
|
||||
#define Semihost_SYS_SEEK(SeekBlock) (-1)
|
||||
#define Semihost_SYS_FLEN(Handle) (-1)
|
||||
#define Semihost_SYS_REMOVE(RemoveBlock) (-1)
|
||||
#define Semihost_SYS_SYSTEM(SystemBlock) (-1)
|
||||
|
||||
#endif // __CC_ARM
|
||||
|
||||
#endif //__SEMIHOST_PRIVATE_H__
|
Reference in New Issue
Block a user