xref: /aosp_15_r20/external/arm-trusted-firmware/include/lib/debugfs.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2019, Arm Limited. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef DEBUGFS_H
8*54fd6939SJiyong Park #define DEBUGFS_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #define NAMELEN   13 /* Maximum length of a file name */
11*54fd6939SJiyong Park #define PATHLEN   41 /* Maximum length of a path */
12*54fd6939SJiyong Park #define STATLEN   41 /* Size of static part of dir format */
13*54fd6939SJiyong Park #define ROOTLEN   (2 + 4) /* Size needed to encode root string */
14*54fd6939SJiyong Park #define FILNAMLEN (2 + NAMELEN) /* Size needed to encode filename */
15*54fd6939SJiyong Park #define DIRLEN    (STATLEN + FILNAMLEN + 3*ROOTLEN) /* Size of dir entry */
16*54fd6939SJiyong Park 
17*54fd6939SJiyong Park #define KSEEK_SET 0
18*54fd6939SJiyong Park #define KSEEK_CUR 1
19*54fd6939SJiyong Park #define KSEEK_END 2
20*54fd6939SJiyong Park 
21*54fd6939SJiyong Park #define NELEM(tab) (sizeof(tab) / sizeof((tab)[0]))
22*54fd6939SJiyong Park 
23*54fd6939SJiyong Park typedef unsigned short qid_t; /* FIXME: short type not recommended? */
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park /*******************************************************************************
26*54fd6939SJiyong Park  * This structure contains the necessary information to represent a 9p
27*54fd6939SJiyong Park  * directory.
28*54fd6939SJiyong Park  ******************************************************************************/
29*54fd6939SJiyong Park typedef struct {
30*54fd6939SJiyong Park 	char		name[NAMELEN];
31*54fd6939SJiyong Park 	long		length;
32*54fd6939SJiyong Park 	unsigned char	mode;
33*54fd6939SJiyong Park 	unsigned char	index;
34*54fd6939SJiyong Park 	unsigned char	dev;
35*54fd6939SJiyong Park 	qid_t		qid;
36*54fd6939SJiyong Park } dir_t;
37*54fd6939SJiyong Park 
38*54fd6939SJiyong Park /* Permission definitions used as flags */
39*54fd6939SJiyong Park #define O_READ		(1 << 0)
40*54fd6939SJiyong Park #define O_WRITE		(1 << 1)
41*54fd6939SJiyong Park #define O_RDWR		(1 << 2)
42*54fd6939SJiyong Park #define O_BIND		(1 << 3)
43*54fd6939SJiyong Park #define O_DIR		(1 << 4)
44*54fd6939SJiyong Park #define O_STAT		(1 << 5)
45*54fd6939SJiyong Park 
46*54fd6939SJiyong Park /* 9p interface */
47*54fd6939SJiyong Park int mount(const char *srv, const char *mnt, const char *spec);
48*54fd6939SJiyong Park int create(const char *name, int flags);
49*54fd6939SJiyong Park int open(const char *name, int flags);
50*54fd6939SJiyong Park int close(int fd);
51*54fd6939SJiyong Park int read(int fd, void *buf, int n);
52*54fd6939SJiyong Park int write(int fd, void *buf, int n);
53*54fd6939SJiyong Park int seek(int fd, long off, int whence);
54*54fd6939SJiyong Park int bind(const char *path, const char *where);
55*54fd6939SJiyong Park int stat(const char *path, dir_t *dir);
56*54fd6939SJiyong Park 
57*54fd6939SJiyong Park /* DebugFS initialization */
58*54fd6939SJiyong Park void debugfs_init(void);
59*54fd6939SJiyong Park int debugfs_smc_setup(void);
60*54fd6939SJiyong Park 
61*54fd6939SJiyong Park /* Debugfs version returned through SMC interface */
62*54fd6939SJiyong Park #define DEBUGFS_VERSION		(0x000000001U)
63*54fd6939SJiyong Park 
64*54fd6939SJiyong Park /* Function ID for accessing the debugfs interface */
65*54fd6939SJiyong Park #define DEBUGFS_FID_VALUE	(0x30U)
66*54fd6939SJiyong Park 
67*54fd6939SJiyong Park #define is_debugfs_fid(_fid)	\
68*54fd6939SJiyong Park 	(((_fid) & FUNCID_NUM_MASK) == DEBUGFS_FID_VALUE)
69*54fd6939SJiyong Park 
70*54fd6939SJiyong Park /* Error code for debugfs SMC interface failures */
71*54fd6939SJiyong Park #define DEBUGFS_E_INVALID_PARAMS	(-2)
72*54fd6939SJiyong Park #define DEBUGFS_E_DENIED		(-3)
73*54fd6939SJiyong Park 
74*54fd6939SJiyong Park uintptr_t debugfs_smc_handler(unsigned int smc_fid,
75*54fd6939SJiyong Park 			      u_register_t cmd,
76*54fd6939SJiyong Park 			      u_register_t arg2,
77*54fd6939SJiyong Park 			      u_register_t arg3,
78*54fd6939SJiyong Park 			      u_register_t arg4,
79*54fd6939SJiyong Park 			      void *cookie,
80*54fd6939SJiyong Park 			      void *handle,
81*54fd6939SJiyong Park 			      uintptr_t flags);
82*54fd6939SJiyong Park 
83*54fd6939SJiyong Park #endif /* DEBUGFS_H */
84