You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
343 lines
8.8 KiB
343 lines
8.8 KiB
DebugFS interface
|
|
=================
|
|
|
|
The optional DebugFS interface is accessed through a Vendor specific EL3 service. Refer
|
|
to the component documentation for details.
|
|
|
|
String parameters are passed through a shared buffer using a specific union:
|
|
|
|
.. code:: c
|
|
|
|
union debugfs_parms {
|
|
struct {
|
|
char fname[MAX_PATH_LEN];
|
|
} open;
|
|
|
|
struct mount {
|
|
char srv[MAX_PATH_LEN];
|
|
char where[MAX_PATH_LEN];
|
|
char spec[MAX_PATH_LEN];
|
|
} mount;
|
|
|
|
struct {
|
|
char path[MAX_PATH_LEN];
|
|
dir_t dir;
|
|
} stat;
|
|
|
|
struct {
|
|
char oldpath[MAX_PATH_LEN];
|
|
char newpath[MAX_PATH_LEN];
|
|
} bind;
|
|
};
|
|
|
|
Format of the dir_t structure as such:
|
|
|
|
.. code:: c
|
|
|
|
typedef struct {
|
|
char name[NAMELEN];
|
|
long length;
|
|
unsigned char mode;
|
|
unsigned char index;
|
|
unsigned char dev;
|
|
qid_t qid;
|
|
} dir_t;
|
|
|
|
|
|
* Identifiers
|
|
|
|
======================== =============================================
|
|
SMC_OK 0
|
|
SMC_UNK -1
|
|
DEBUGFS_E_INVALID_PARAMS -2
|
|
======================== =============================================
|
|
|
|
======================== =============================================
|
|
MOUNT 0
|
|
CREATE 1
|
|
OPEN 2
|
|
CLOSE 3
|
|
READ 4
|
|
WRITE 5
|
|
SEEK 6
|
|
BIND 7
|
|
STAT 8
|
|
INIT 10
|
|
VERSION 11
|
|
======================== =============================================
|
|
|
|
MOUNT
|
|
~~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
This operation mounts a blob of data pointed to by path stored in `src`, at
|
|
filesystem location pointed to by path stored in `where`, using driver pointed
|
|
to by path in `spec`.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``MOUNT``
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if mount operation failed
|
|
=============== ==========================================================
|
|
|
|
OPEN
|
|
~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
This operation opens the file path pointed to by `fname`.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``OPEN``
|
|
uint32_t mode
|
|
======== ============================================================
|
|
|
|
mode can be one of:
|
|
|
|
.. code:: c
|
|
|
|
enum mode {
|
|
O_READ = 1 << 0,
|
|
O_WRITE = 1 << 1,
|
|
O_RDWR = 1 << 2,
|
|
O_BIND = 1 << 3,
|
|
O_DIR = 1 << 4,
|
|
O_STAT = 1 << 5
|
|
};
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if open operation failed
|
|
|
|
uint32_t w1: file descriptor id on success.
|
|
=============== ==========================================================
|
|
|
|
CLOSE
|
|
~~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
|
|
This operation closes a file described by a file descriptor obtained by a
|
|
previous call to OPEN.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``CLOSE``
|
|
uint32_t File descriptor id returned by OPEN
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if close operation failed
|
|
=============== ==========================================================
|
|
|
|
READ
|
|
~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
|
|
This operation reads a number of bytes from a file descriptor obtained by
|
|
a previous call to OPEN.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``READ``
|
|
uint32_t File descriptor id returned by OPEN
|
|
uint32_t Number of bytes to read
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
On success, the read data is retrieved from the shared buffer after the
|
|
operation.
|
|
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if read operation failed
|
|
|
|
uint32_t w1: number of bytes read on success.
|
|
=============== ==========================================================
|
|
|
|
SEEK
|
|
~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
|
|
Move file pointer for file described by given `file descriptor` of given
|
|
`offset` related to `whence`.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``SEEK``
|
|
uint32_t File descriptor id returned by OPEN
|
|
sint32_t offset in the file relative to whence
|
|
uint32_t whence
|
|
======== ============================================================
|
|
|
|
whence can be one of:
|
|
|
|
========= ============================================================
|
|
KSEEK_SET 0
|
|
KSEEK_CUR 1
|
|
KSEEK_END 2
|
|
========= ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if seek operation failed
|
|
=============== ==========================================================
|
|
|
|
BIND
|
|
~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
|
|
Create a link from `oldpath` to `newpath`.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``BIND``
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if bind operation failed
|
|
=============== ==========================================================
|
|
|
|
STAT
|
|
~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
|
|
Perform a stat operation on provided file `name` and returns the directory
|
|
entry statistics into `dir`.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``STAT``
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ==========================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if stat operation failed
|
|
=============== ==========================================================
|
|
|
|
INIT
|
|
~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
Initial call to setup the shared exchange buffer. Notice if successful once,
|
|
subsequent calls fail after a first initialization. The caller maps the same
|
|
page frame in its virtual space and uses this buffer to exchange string
|
|
parameters with filesystem primitives.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``INIT``
|
|
uint64_t Physical address of the shared buffer.
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ======================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == DEBUGFS_E_INVALID_PARAMS if already initialized,
|
|
or internal error occurred.
|
|
=============== ======================================================
|
|
|
|
VERSION
|
|
~~~~~~~
|
|
|
|
Description
|
|
^^^^^^^^^^^
|
|
Returns the debugfs interface version if implemented in TF-A.
|
|
|
|
Parameters
|
|
^^^^^^^^^^
|
|
|
|
======== ============================================================
|
|
uint32_t FunctionID (0x87000010 / 0xC7000010)
|
|
uint32_t ``VERSION``
|
|
======== ============================================================
|
|
|
|
Return values
|
|
^^^^^^^^^^^^^
|
|
|
|
=============== ======================================================
|
|
int32_t w0 == SMC_OK on success
|
|
|
|
w0 == SMC_UNK if interface is not implemented
|
|
|
|
uint32_t w1: On success, debugfs interface version, 32 bits
|
|
value with major version number in upper 16 bits and
|
|
minor version in lower 16 bits.
|
|
=============== ======================================================
|
|
|
|
* CREATE(1) and WRITE (5) command identifiers are unimplemented and
|
|
return `SMC_UNK`.
|
|
|
|
--------------
|
|
|
|
*Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.*
|
|
|