| 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.* |