io.h (6333B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: io.h 8 * Purpose: SAL I/O definitions 9 */ 10 11 #ifndef _SAL_IO_H 12 #define _SAL_IO_H 13 14 #include <sal/core/libc.h> 15 16 /* Allow global override of console I/O */ 17 18 #include <sdk_config.h> 19 20 #ifdef SDK_CONFIG_SAL_VPRINTF 21 #define sal_vprintf SDK_CONFIG_SAL_VPRINTF 22 #endif 23 24 #ifdef SDK_CONFIG_SAL_READLINE 25 #define sal_readline SDK_CONFIG_SAL_READLINE 26 #endif 27 28 29 #ifdef NO_SAL_APPL 30 31 /* You must specify a stdarg */ 32 #include <stdarg.h> 33 34 /* 35 * The only things exported or required are console read/write 36 * These must be provided by the target environment. 37 */ 38 extern int sal_portable_vprintf(const char* fmt, va_list vargs) 39 COMPILER_ATTRIBUTE ((format (printf, 1, 0))); 40 extern char* sal_portable_readline(char *prompt, char *buf, int bufsize); 41 42 #define sal_vprintf sal_portable_vprintf 43 44 45 /* These are provided internally using the above */ 46 extern int sal_portable_printf(const char* fmt, ...) 47 COMPILER_ATTRIBUTE ((format (printf, 1, 2))); 48 extern char* sal_portable_readline_internal(char* prompt, char* buf, int bufsize, char* defl); 49 50 #define sal_readline sal_portable_readline_internal 51 #define sal_printf sal_portable_printf 52 53 #define SAL_VT100_SO "\033[7m" /* Stand-out begin */ 54 #define SAL_VT100_SE "\033[m" /* Stand-out end */ 55 #define SAL_VT100_CE "\033[K" /* Kill to end of line */ 56 57 #else 58 59 #ifdef __KERNEL__ /* Take care of the kernel mode */ 60 typedef void* FILE; /* Dummy for declarations. Never used. */ 61 #define EOF (-1) 62 #else 63 #include <stdio.h> 64 #endif 65 66 #include <stdarg.h> 67 68 #ifdef VA_COPY_ARRAY 69 # define va_copy(to, from) ((to)[0] = (from)[0]) 70 #endif 71 72 #ifdef VA_COPY_PTR 73 # define va_copy(to, from) ((to) = (from)) 74 #endif 75 76 #ifndef va_copy 77 # if defined(MOUSSE) || defined(BMW) || defined(NEGEV) || defined(GTO) || defined(__DCC__) 78 # define va_copy(to, from) ((to)[0] = (from)[0]) 79 # elif defined(UNIX) || defined(IDTRP334) || defined(__BORLAND__) || \ 80 defined(linux) || defined(MBZ) || defined(IDT438) || defined(NSX) || \ 81 defined(METROCORE) || \ 82 defined(KEYSTONE) 83 # define va_copy(to, from) ((to) = (from)) 84 # else 85 # error va_copy? 86 # endif 87 #endif 88 89 #include <sal/types.h> 90 91 #define SAL_NAME_MAX 512 92 93 #define SAL_VT100_SO "\033[7m" /* Stand-out begin */ 94 #define SAL_VT100_SE "\033[m" /* Stand-out end */ 95 #define SAL_VT100_CE "\033[K" /* Kill to end of line */ 96 97 typedef struct sal_console_info_s { 98 int cols; /* characters per row */ 99 int rows; /* number of rows */ 100 } sal_console_info_t; 101 102 extern int sal_console_init(void); 103 extern int sal_console_info_get(sal_console_info_t *info); 104 extern int sal_console_write(const void *buf, int count); 105 extern int sal_console_read(void *buf, int count); 106 extern char *sal_console_gets(char *buf, int size); 107 extern int sal_printf(const char *fmt, ...) 108 COMPILER_ATTRIBUTE ((format (printf, 1, 2))); 109 extern int sal_vprintf(const char *fmt, va_list varg) 110 COMPILER_ATTRIBUTE ((format (printf, 1, 0))); 111 112 extern int sal_open(char *name, int oflag, ...); 113 extern int sal_close(int fd); 114 115 extern FILE *sal_fopen(char *name, char *mode); 116 117 extern int sal_fclose(FILE *fp); 118 119 extern int sal_fread(void *buf, int size, int num, FILE *fp); 120 extern int sal_feof(FILE *fp); 121 extern int sal_ferror(FILE *fp); 122 extern int sal_fsize(FILE *fp); 123 124 extern int sal_homedir_set(char *dir); 125 extern char *sal_homedir_get(char *buf, size_t size); 126 127 extern int sal_umask(int mask); 128 extern char *sal_getcwd(char *buf, size_t size); 129 extern int sal_ls(char *filename, char *flags); 130 extern int sal_cd(char *filename); 131 extern int sal_remove(char *filename); 132 extern int sal_rename(char *file_old, char *file_new); 133 extern int sal_mkdir(char *path); 134 extern int sal_rmdir(char *path); 135 extern char *sal_dirname(char *path, char *dest); 136 extern char *sal_basename(char *path, char *dest); 137 138 #if defined(UNIX) || defined(LINUX) 139 #define sal_fgets fgets 140 #define sal_fwrite fwrite 141 #define sal_fprintf fprintf 142 #define sal_fgetc fgetc 143 #define sal_ftell ftell 144 #define sal_fseek fseek 145 #define sal_fputc fputc 146 #define sal_fputs fputs 147 #define sal_isatty isatty 148 #define sal_fflush fflush 149 #define sal_vfprintf vfprintf 150 #else 151 extern size_t sal_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 152 extern char* sal_fgets(char *s, int size, FILE *fp); 153 extern int sal_fprintf(FILE *fp, const char *fmt, ...) 154 COMPILER_ATTRIBUTE ((format (printf, 2, 3))); 155 extern int sal_vfprintf(FILE *fp, const char *fmt, va_list varg) 156 COMPILER_ATTRIBUTE ((format (printf, 2, 0))); 157 extern int sal_fgetc(FILE *fp); 158 extern int sal_fputc(int c, FILE *fp); 159 extern int sal_fputs(const char *s, FILE *fp); 160 extern int sal_isatty (int ); 161 extern int sal_fflush(FILE *fp); 162 #endif 163 164 165 /* 166 * Directory I/O 167 */ 168 169 struct sal_dirent { 170 char d_name[SAL_NAME_MAX]; 171 }; 172 173 typedef struct { 174 int is_netio; 175 void *dirp; /* NETIO_DIR or DIR pointer */ 176 struct sal_dirent de; 177 } SAL_DIR; 178 179 extern SAL_DIR *sal_opendir(char *dirName); 180 extern int sal_closedir(SAL_DIR *pDir); 181 extern struct sal_dirent *sal_readdir(SAL_DIR *pDir); 182 extern void sal_rewinddir(SAL_DIR *pDir); 183 184 /* 185 * Command line editor I/O 186 */ 187 188 extern char* sal_readline(char *prompt, char *buf, int bufsize, char *defl); 189 extern void sal_readline_config(char *(*complete)(char *pathname, int *unique), 190 int (*list_possib)(char *pathname, char ***avp)); 191 extern int sal_readchar(const char *prompt); 192 193 extern int sal_flash_init(int format); 194 extern int sal_flash_boot(char *file); 195 extern int sal_flash_sync(void); 196 197 /* 198 * Some of our BSPs have routines have a sysSerialPrintf routine that 199 * allows the console serial port to be written directly in polled mode 200 * with interrupts turned off. When this is available, it is preferred 201 * over logMsg. 202 */ 203 204 #if defined(MOUSSE) || defined(BMW) || defined(MBZ) || \ 205 defined(IDTRP334) || defined(IDT438) || defined(NSX) || \ 206 defined(METROCORE) || \ 207 defined(KEYSTONE) 208 #define HAVE_DIRECT_SERIAL 209 #endif 210 211 #ifdef HAVE_DIRECT_SERIAL 212 extern void sysSerialPutc(int c); 213 extern int sysSerialGetc(void); 214 extern void sysSerialPrintString(char *s); 215 extern void sysSerialPrintHex(uint32 value, int cr); 216 #endif /* HAVE_DIRECT_SERIAL */ 217 218 #endif /* NO_SAL_APPL */ 219 220 #endif /* !_SAL_IO_H */