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