openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

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 */