/** @file

  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
  Copyright (c) 2013 - 2021, Arm Limited. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef SEMIHOST_PRIVATE_H_
#define SEMIHOST_PRIVATE_H_

typedef struct {
  CHAR8    *FileName;
  UINTN    Mode;
  UINTN    NameLength;
} SEMIHOST_FILE_OPEN_BLOCK;

typedef struct {
  UINTN    Handle;
  VOID     *Buffer;
  UINTN    Length;
} SEMIHOST_FILE_READ_WRITE_BLOCK;

typedef struct {
  UINTN    Handle;
  UINTN    Location;
} SEMIHOST_FILE_SEEK_BLOCK;

typedef struct {
  VOID     *Buffer;
  UINTN    Identifier;
  UINTN    Length;
} SEMIHOST_FILE_TMPNAME_BLOCK;

typedef struct {
  CHAR8    *FileName;
  UINTN    NameLength;
} SEMIHOST_FILE_REMOVE_BLOCK;

typedef struct {
  CHAR8    *FileName;
  UINTN    FileNameLength;
  CHAR8    *NewFileName;
  UINTN    NewFileNameLength;
} SEMIHOST_FILE_RENAME_BLOCK;

typedef struct {
  CHAR8    *CommandLine;
  UINTN    CommandLength;
} SEMIHOST_SYSTEM_BLOCK;

#if defined (__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_TMPNAME (
  IN UINTN                        SWI_0x0D,
  IN SEMIHOST_FILE_TMPNAME_BLOCK  *TmpNameBlock
  );

__swi (SWI)
UINT32
_Semihost_SYS_REMOVE (
  IN UINTN                       SWI_0x0E,
  IN SEMIHOST_FILE_REMOVE_BLOCK  *RemoveBlock
  );

__swi (SWI)
UINT32
_Semihost_SYS_RENAME (
  IN UINTN                       SWI_0x0F,
  IN SEMIHOST_FILE_RENAME_BLOCK  *RenameBlock
  );

__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_TMPNAME(TmpNameBlock)  _Semihost_SYS_TMPNAME(0x0D, TmpNameBlock)
#define SEMIHOST_SYS_REMOVE(RemoveBlock)    _Semihost_SYS_REMOVE(0x0E, RemoveBlock)
#define SEMIHOST_SYS_RENAME(RenameBlock)    _Semihost_SYS_RENAME(0x0F, RenameBlock)
#define SEMIHOST_SYS_SYSTEM(SystemBlock)    _Semihost_SYS_SYSTEM(0x12, SystemBlock)

#elif defined (__GNUC__) // __CC_ARM

#define SEMIHOST_SUPPORTED  TRUE

UINT32
GccSemihostCall (
  IN UINT32  Operation,
  IN UINTN   SystemBlockAddress
  ); // __attribute__ ((interrupt ("SVC")));

#define SEMIHOST_SYS_OPEN(OpenBlock)        GccSemihostCall(0x01, (UINTN)(OpenBlock))
#define SEMIHOST_SYS_CLOSE(Handle)          GccSemihostCall(0x02, (UINTN)(Handle))
#define SEMIHOST_SYS_WRITE0(String)         GccSemihostCall(0x04, (UINTN)(String))
#define SEMIHOST_SYS_WRITEC(Character)      GccSemihostCall(0x03, (UINTN)(Character))
#define SEMIHOST_SYS_WRITE(WriteBlock)      GccSemihostCall(0x05, (UINTN)(WriteBlock))
#define SEMIHOST_SYS_READ(ReadBlock)        GccSemihostCall(0x06, (UINTN)(ReadBlock))
#define SEMIHOST_SYS_READC()                GccSemihostCall(0x07, (UINTN)(0))
#define SEMIHOST_SYS_SEEK(SeekBlock)        GccSemihostCall(0x0A, (UINTN)(SeekBlock))
#define SEMIHOST_SYS_FLEN(Handle)           GccSemihostCall(0x0C, (UINTN)(Handle))
#define SEMIHOST_SYS_TMPNAME(TmpNameBlock)  GccSemihostCall(0x0D, (UINTN)(TmpNameBlock))
#define SEMIHOST_SYS_REMOVE(RemoveBlock)    GccSemihostCall(0x0E, (UINTN)(RemoveBlock))
#define SEMIHOST_SYS_RENAME(RenameBlock)    GccSemihostCall(0x0F, (UINTN)(RenameBlock))
#define SEMIHOST_SYS_SYSTEM(SystemBlock)    GccSemihostCall(0x12, (UINTN)(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_TMPNAME(TmpNameBlock)  (-1)
#define SEMIHOST_SYS_REMOVE(RemoveBlock)    (-1)
#define SEMIHOST_SYS_RENAME(RenameBlock)    (-1)
#define SEMIHOST_SYS_SYSTEM(SystemBlock)    (-1)

#endif // __CC_ARM

#endif // SEMIHOST_PRIVATE_H_
