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