1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-03 01:32:47 +02:00

arm: smh: Export semihosting functions

This exports semihosting functions for use in other files. The header is
in include/ and not arm/include/asm because I anticipate that RISC-V may
want to add their own implementation at some point.

smh_len_fd has been renamed to smh_flen to more closely match the
semihosting spec.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
This commit is contained in:
Sean Anderson
2022-03-22 16:59:14 -04:00
committed by Tom Rini
parent c8f4cc9590
commit b10f724807
2 changed files with 20 additions and 5 deletions

View File

@@ -15,6 +15,7 @@
#include <command.h> #include <command.h>
#include <env.h> #include <env.h>
#include <log.h> #include <log.h>
#include <semihosting.h>
#define SYSOPEN 0x01 #define SYSOPEN 0x01
#define SYSCLOSE 0x02 #define SYSCLOSE 0x02
@@ -45,7 +46,7 @@ static noinline long smh_trap(unsigned int sysnum, void *addr)
* Open a file on the host. Mode is "r" or "rb" currently. Returns a file * Open a file on the host. Mode is "r" or "rb" currently. Returns a file
* descriptor or -1 on error. * descriptor or -1 on error.
*/ */
static long smh_open(const char *fname, char *modestr) long smh_open(const char *fname, char *modestr)
{ {
long fd; long fd;
unsigned long mode; unsigned long mode;
@@ -84,7 +85,7 @@ static long smh_open(const char *fname, char *modestr)
/* /*
* Read 'len' bytes of file into 'memp'. Returns 0 on success, else failure * Read 'len' bytes of file into 'memp'. Returns 0 on success, else failure
*/ */
static long smh_read(long fd, void *memp, size_t len) long smh_read(long fd, void *memp, size_t len)
{ {
long ret; long ret;
struct smh_read_s { struct smh_read_s {
@@ -118,7 +119,7 @@ static long smh_read(long fd, void *memp, size_t len)
/* /*
* Close the file using the file descriptor * Close the file using the file descriptor
*/ */
static long smh_close(long fd) long smh_close(long fd)
{ {
long ret; long ret;
@@ -134,7 +135,7 @@ static long smh_close(long fd)
/* /*
* Get the file length from the file descriptor * Get the file length from the file descriptor
*/ */
static long smh_len_fd(long fd) long smh_flen(long fd)
{ {
long ret; long ret;
@@ -158,7 +159,7 @@ static int smh_load_file(const char * const name, ulong load_addr,
if (fd == -1) if (fd == -1)
return -1; return -1;
len = smh_len_fd(fd); len = smh_flen(fd);
if (len < 0) { if (len < 0) {
smh_close(fd); smh_close(fd);
return -1; return -1;

14
include/semihosting.h Normal file
View File

@@ -0,0 +1,14 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (C) 2022 Sean Anderson <sean.anderson@seco.com>
*/
#ifndef _SEMIHOSTING_H
#define _SEMIHOSTING_H
long smh_open(const char *fname, char *modestr);
long smh_read(long fd, void *memp, size_t len);
long smh_close(long fd);
long smh_flen(long fd);
#endif /* _SEMIHOSTING_H */