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