diff mbox series

[1/8] semihosting: Change semihosting file operation functions into global symbols

Message ID 20200430173630.15608-2-sughosh.ganu@linaro.org
State Superseded
Headers show
Series qemu: arm64: Add support for uefi firmware management protocol routines | expand

Commit Message

Sughosh Ganu April 30, 2020, 5:36 p.m. UTC
Change the semihosting file operation functions into external symbols
so that they can be called from outside the file. These functions
would be required to be called for implementing firmware update
functionality for the qemu arm64 platform.

Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
---
 arch/arm/lib/semihosting.c |  7 ++++---
 include/semihosting.h      | 13 +++++++++++++
 2 files changed, 17 insertions(+), 3 deletions(-)
 create mode 100644 include/semihosting.h

Comments

AKASHI Takahiro May 11, 2020, 3:05 a.m. UTC | #1
On Thu, Apr 30, 2020 at 11:06:23PM +0530, Sughosh Ganu wrote:
> Change the semihosting file operation functions into external symbols
> so that they can be called from outside the file. These functions
> would be required to be called for implementing firmware update
> functionality for the qemu arm64 platform.
> 
> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> ---
>  arch/arm/lib/semihosting.c |  7 ++++---
>  include/semihosting.h      | 13 +++++++++++++
>  2 files changed, 17 insertions(+), 3 deletions(-)
>  create mode 100644 include/semihosting.h
> 
> diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
> index 2658026cf4..3aeda1303a 100644
> --- a/arch/arm/lib/semihosting.c
> +++ b/arch/arm/lib/semihosting.c
> @@ -13,6 +13,7 @@
>   */
>  #include <common.h>
>  #include <command.h>
> +#include <semihosting.h>

Do we need this file here?

-Takahiro Akashi

>  #define SYSOPEN		0x01
>  #define SYSCLOSE	0x02
> @@ -43,7 +44,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
>   * descriptor or -1 on error.
>   */
> -static long smh_open(const char *fname, char *modestr)
> +long smh_open(const char *fname, char *modestr)
>  {
>  	long fd;
>  	unsigned long mode;
> @@ -82,7 +83,7 @@ static long smh_open(const char *fname, char *modestr)
>  /*
>   * 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;
>  	struct smh_read_s {
> @@ -116,7 +117,7 @@ static long smh_read(long fd, void *memp, size_t len)
>  /*
>   * Close the file using the file descriptor
>   */
> -static long smh_close(long fd)
> +long smh_close(long fd)
>  {
>  	long ret;
>  
> diff --git a/include/semihosting.h b/include/semihosting.h
> new file mode 100644
> index 0000000000..f1bf419275
> --- /dev/null
> +++ b/include/semihosting.h
> @@ -0,0 +1,13 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (c) 2020, Linaro Limited
> + */
> +
> +#if !defined _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);
> +
> +#endif /* _SEMIHOSTING_H_ */
> -- 
> 2.17.1
>
Heinrich Schuchardt May 18, 2020, 4:34 p.m. UTC | #2
On 5/11/20 5:05 AM, Akashi Takahiro wrote:
> On Thu, Apr 30, 2020 at 11:06:23PM +0530, Sughosh Ganu wrote:
>> Change the semihosting file operation functions into external symbols
>> so that they can be called from outside the file. These functions
>> would be required to be called for implementing firmware update
>> functionality for the qemu arm64 platform.
>>
>> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
>> ---
>>  arch/arm/lib/semihosting.c |  7 ++++---
>>  include/semihosting.h      | 13 +++++++++++++
>>  2 files changed, 17 insertions(+), 3 deletions(-)
>>  create mode 100644 include/semihosting.h
>>
>> diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
>> index 2658026cf4..3aeda1303a 100644
>> --- a/arch/arm/lib/semihosting.c
>> +++ b/arch/arm/lib/semihosting.c

Semihosting in QEMU is not ARM specific but exists also for the M68K,
Xtensa, MIPS, and NIOS2 architecture. arch/arm/lib/ is the wrong place
for this file. This file should be moved to lib/.

The smhload command should be moved to cmd/smhload.c

>> @@ -13,6 +13,7 @@
>>   */
>>  #include <common.h>
>>  #include <command.h>
>> +#include <semihosting.h>
>
> Do we need this file here?

This patch is about turning the functions defined in semihosting.h into
global functions. In patch 3/8 the functions are called from other parts
of the U-Boot code. We need the include here to ensure that the
definitions match.

>
> -Takahiro Akashi
>
>>  #define SYSOPEN		0x01
>>  #define SYSCLOSE	0x02
>> @@ -43,7 +44,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
>>   * descriptor or -1 on error.
>>   */
>> -static long smh_open(const char *fname, char *modestr)
>> +long smh_open(const char *fname, char *modestr)
>>  {
>>  	long fd;
>>  	unsigned long mode;
>> @@ -82,7 +83,7 @@ static long smh_open(const char *fname, char *modestr)
>>  /*
>>   * 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;
>>  	struct smh_read_s {
>> @@ -116,7 +117,7 @@ static long smh_read(long fd, void *memp, size_t len)
>>  /*
>>   * Close the file using the file descriptor
>>   */
>> -static long smh_close(long fd)
>> +long smh_close(long fd)
>>  {
>>  	long ret;
>>
>> diff --git a/include/semihosting.h b/include/semihosting.h
>> new file mode 100644
>> index 0000000000..f1bf419275
>> --- /dev/null
>> +++ b/include/semihosting.h
>> @@ -0,0 +1,13 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright (c) 2020, Linaro Limited
>> + */
>> +
>> +#if !defined _SEMIHOSTING_H_
>> +#define _SEMIHOSTING_H_
>> +

If these functions become global symbols, we should provide a function
description according to

https://www.kernel.org/doc/html/latest/doc-guide/kernel-doc.html#function-documentation

and merge this file into doc/api/index.rst to produce HTML documentation
with 'make htmldoc'.

Cf. https://u-boot.readthedocs.io/en/latest/api/index.html

Best regards

Heinrich

>> +long smh_open(const char *fname, char *modestr);
>> +long smh_read(long fd, void *memp, size_t len);
>> +long smh_close(long fd);
>> +
>> +#endif /* _SEMIHOSTING_H_ */
>> --
>> 2.17.1
>>
diff mbox series

Patch

diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
index 2658026cf4..3aeda1303a 100644
--- a/arch/arm/lib/semihosting.c
+++ b/arch/arm/lib/semihosting.c
@@ -13,6 +13,7 @@ 
  */
 #include <common.h>
 #include <command.h>
+#include <semihosting.h>
 
 #define SYSOPEN		0x01
 #define SYSCLOSE	0x02
@@ -43,7 +44,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
  * descriptor or -1 on error.
  */
-static long smh_open(const char *fname, char *modestr)
+long smh_open(const char *fname, char *modestr)
 {
 	long fd;
 	unsigned long mode;
@@ -82,7 +83,7 @@  static long smh_open(const char *fname, char *modestr)
 /*
  * 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;
 	struct smh_read_s {
@@ -116,7 +117,7 @@  static long smh_read(long fd, void *memp, size_t len)
 /*
  * Close the file using the file descriptor
  */
-static long smh_close(long fd)
+long smh_close(long fd)
 {
 	long ret;
 
diff --git a/include/semihosting.h b/include/semihosting.h
new file mode 100644
index 0000000000..f1bf419275
--- /dev/null
+++ b/include/semihosting.h
@@ -0,0 +1,13 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2020, Linaro Limited
+ */
+
+#if !defined _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);
+
+#endif /* _SEMIHOSTING_H_ */