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