1
0
Files
irix-657m-src/stand/arcs/include/libsc.h
2022-09-29 17:59:04 +03:00

341 lines
9.7 KiB
C

/*
* libsc.h - Standalone support library definitions and prototypes
*
* Where routines in libsc have POSIX or Standard C counterparts,
* the standard syntax and semantics should be used. An exception
* to this are the buffered I/O routines.
*
* $Revision: 1.48 $
*/
#ifndef _LIBSC_H
#define _LIBSC_H
#include <sys/types.h>
#include <arcs/types.h>
#include <arcs/hinv.h>
#include <arcs/io.h>
#include <arcs/dirent.h>
struct RestartBlock;
struct buf;
struct cmd_table;
struct dmamap;
struct gui_obj;
struct htp_state;
struct pcbm;
struct range;
struct string_list;
struct volume_header;
struct in_addr;
#ifndef EOF
#define EOF (-1)
#endif
#ifndef NULL
#define NULL 0
#endif
/*
* Memory reference widths
*/
#define SW_BYTE 1
#define SW_HALFWORD 2
#define SW_WORD 4
#define SW_DOUBLEWORD 8
/* Misc prototypes */
int _argvize(char *, struct string_list *); /* lib/parser.c */
char *expand(char *, int); /* lib/expand.c */
char *makepath(void); /* lib/path.c */
int autoboot(int, char *, char *); /* lib/auto.c */
void backtrace(int); /* ml/btrace.s */
int token(char *, char *); /* cmd/menu_cmd.c */
int efs_install(void); /* fs/efs.c */
int xfs_install(void); /* fs/xfs.c */
void updatetv(void); /* lib/arcs_stubs.c */
extern int sgivers(void); /* lib/privstub.c */
/* Restart Block -- lib/rb.c */
void rbsetbs(int);
void rbclrbs(int);
/* lib/scsaio.c */
void __close_fds(void);
void getack_andexit(void);
void panic(char *msg, ...);
int isgraphic(ULONG);
void close_noncons(void);
unsigned long get_tod(void);
void prcuroff(ULONG);
/* lib/dummyfunc.s (these routines do nothing) */
int preemptchk(void);
int dma_mapbp(struct dmamap *, struct buf *, int);
void splx(int);
int untimeout(toid_t);
/* lib/malloc.c */
void _init_malloc (void);
void *malloc(size_t);
void free(void *);
void *realloc (void *, size_t);
void *calloc(size_t, size_t);
void *kern_calloc(size_t, size_t);
void *dmabuf_malloc(size_t);
void dmabuf_free(void *);
void align_free(void *);
void *align_malloc(size_t, uint_t);
/* lib/mp.c */
int _get_numcpus(void);
void _init_libsc_private(void);
/* lib/libasm.s */
void debug(char *);
long get_sp(void);
long getpc(void);
/* lib/inetaddr.c */
struct in_addr inet_makeaddr(int, int);
unsigned int inet_network(char *);
unsigned int inet_lnaof(struct in_addr);
struct in_addr inet_addr(char *);
int inet_netof(struct in_addr);
char *inet_ntoa(struct in_addr);
/* lib/perror.c */
char *arcs_strerror(long);
void perror(long, char *);
/* lib/invfind.c */
char *inv_findcpu(void);
char *fixupname(COMPONENT *);
char *inv_findtape(void);
COMPONENT *find_type(COMPONENT *, CONFIGTYPE);
int count_type(COMPONENT *, CONFIGTYPE);
/* Standard I/O */
void _init_ttyputc(void (*)());
extern int getchar(void);
extern int getc(ULONG);
extern char *fgets(char *, int, ULONG);
extern char *gets(char *);
extern int putchar(int);
extern int putc(int, int);
extern int puts(const char *);
extern int printf(const char *, ...);
extern int vprintf(const char *, /* va_list */ char *);
extern int sprintf(char *, const char *, ...);
extern void sprintn(char *, __scunsigned_t, int);
extern int vsprintf(char *, const char *, /* va_list */ char *);
extern int ttyprintf(const char *, ...);
extern int vttyprintf(const char *, /* va_list */ char *);
extern void cmn_err(int, char *, ...);
extern void panic(char *, ...);
/* Cute routines for waiting spinner */
extern void start_spinner(int);
extern void spinner(void);
extern void end_spinner(void);
/* Conversion */
extern char * atob(const char *, int *);
extern char * atob_ptr(const char *, __psint_t *);
extern char * atob_L(const char *, long long *);
extern int atoi(const char *);
extern void atohex(const char *, int *);
extern void atohex_L(const char *, long long *);
extern void atohex_ptr(const char *, __psunsigned_t *);
extern char * atobu(const char *, unsigned *);
extern char * atobu_ptr(const char *, __psunsigned_t *);
extern char * atobu_L(const char *, unsigned long long *);
extern char * btoa(int);
/* Environment */
extern int setenv(char *, char *);
extern int _setenv(char *, char *, int);
extern int syssetenv(char *, char *);
extern char * getenv(const char *);
extern char * getpath(COMPONENT *);
extern char * getargv(char *);
/* String functions */
extern int strcasecmp(const char *, const char *);
extern char * strcat(char *, const char *);
extern int strcmp(const char *, const char *);
extern char * strcpy(char *, const char *);
extern size_t strlen(const char *);
extern char * strdup (const char *);
extern char * strstr(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);
extern int strncmp(const char *, const char *, size_t);
extern char * strncpy(char *, const char *, size_t);
extern char * strncat(char *, const char *, size_t);
extern char * index(const char *, int c);
extern char * rindex(const char *, int c);
extern unsigned long long int strtoull(const char *, char **, int);
/* Memory functions */
extern void bcopy(const void *, void *, size_t);
extern int bcmp(const void *, const void *, size_t);
extern void bzero(void *, size_t);
extern unsigned _cksum1(void *, unsigned, unsigned);
extern unsigned nuxi_s(unsigned short);
extern unsigned nuxi_l(unsigned);
extern void swapl(void *,unsigned);
extern void swaps(void *,unsigned);
/* Display Functions */
extern void p_offset(int);
extern void p_indent(void);
extern void p_clear(void);
extern void p_cursoff(void);
extern void p_curson(void);
extern void p_panelmode(void);
extern void p_textmode(void);
extern void p_printf(const char *,...);
extern void p_center(void);
extern void p_ljust(void);
extern void p_puts(char *);
/* EnterInteractiveMode() is used a lot w/o including restart.h */
extern void EnterInteractiveMode(void);
/* Miscellaneous */
extern LONG ioctl(ULONG,LONG,LONG);
extern int isatty(ULONG);
extern int _min(int,int);
extern int _max(int,int);
extern int getcpuid(void);
#undef cpuid
extern int cpuid(void);
/* for SN0 */
#undef splockspl
#undef spunlockspl
int splockspl(lock_t, int (*)(void));
void spunlockspl(lock_t, int);
/* Misc commands */
int go_cmd(int, char **, char **, struct cmd_table *); /* cmd/go_cmd.c */
int boot(int, char **, char **, struct cmd_table *); /* cmd/boot_cmd.c */
int cat(int, char **, char **, struct cmd_table *); /* cmd/cat_cmd.c */
int copy(int, char **, char **, struct cmd_table *); /* cmd/copy_cmd.c */
int hinv(int, char **, char **, struct cmd_table *); /* cmd/hinv_cmd.c */
int klhinv(int, char **, char **, struct cmd_table *); /* cmd/sn0hinv_cmd.c */
int mfind(int, char **, char **, struct cmd_table *); /* cmd/memdb_cmd.c */
int ls(int, char **, char **, struct cmd_table *); /* cmd/ls_cmd.c */
/* cmd/mrboot_cmd.c */
int mrboot(int, char **, char **, struct cmd_table *);
int do_custom_boot(int, char**);
/* cmd/env.c */
int printenv_cmd(int, char **, char **, struct cmd_table *);
int setenv_cmd(int, char **, char **, struct cmd_table *);
int unsetenv_cmd(int, char **, char **, struct cmd_table *);
/* cmd/menu_cmd.c */
extern int token(char *, char *);
/* Hardware graph/SN0 private vectors */
char *kl_inv_find(void);
int kl_hinv(int, char **);
int kl_get_num_cpus(void);
int sn0_getcpuid(void);
/* lib/stdio.c */
extern void showchar(int);
extern void setscalable(int);
extern int getscalable(void);
/* Global variables */
extern char ** environ;
extern int Debug;
extern int Verbose;
/* Structure definitions */
/*
* bit field descriptions for printf %r and %R formats
*
* printf("%r %R", val, reg_descp);
* struct reg_desc *reg_descp;
*
* the %r and %R formats allow formatted print of bit fields. individual
* bit fields are described by a struct reg_desc, multiple bit fields within
* a single word can be described by multiple reg_desc structures.
* %r outputs a string of the format "<bit field descriptions>"
* %R outputs a string of the format "0x%x<bit field descriptions>"
*
* The fields in a reg_desc are:
* unsigned rd_mask; An appropriate mask to isolate the bit field
* within a word, and'ed with val
*
* int rd_shift; A shift amount to be done to the isolated
* bit field. done before printing the isolate
* bit field with rd_format and before searching
* for symbolic value names in rd_values
*
* char *rd_name; If non-null, a bit field name to label any
* out from rd_format or searching rd_values.
* if neither rd_format or rd_values is non-null
* rd_name is printed only if the isolated
* bit field is non-null.
*
* char *rd_format; If non-null, the shifted bit field value
* is printed using this format.
*
* struct reg_values *rd_values; If non-null, a pointer to a table
* matching numeric values with symbolic names.
* rd_values are searched and the symbolic
* value is printed if a match is found, if no
* match is found "???" is printed.
*
*/
/*
* register values
* map between numeric values and symbolic values
*/
struct reg_values {
__scunsigned_t rv_value;
char *rv_name;
};
/*
* register descriptors are used for formatted prints of register values
* rd_mask and rd_shift must be defined, other entries may be null
*/
struct reg_desc {
k_machreg_t rd_mask; /* mask to extract field */
int rd_shift; /* shift for extracted value, - >>, + << */
char *rd_name; /* field name */
char *rd_format; /* format to print field */
struct reg_values *rd_values; /* symbolic names of values */
};
/*
* libsc's per-processor data.
*/
typedef union libsc_private_u {
struct privdata_s {
/* pointers used for buffering in stdio support */
char *fputbp;
char *fputbb;
int fputbs;
int fputcn;
int column;
char *sprintf_cp;
} privdata;
char pad[128]; /* any reasonable power of 2 */
} libsc_private_t;
extern int stdio_init;
extern libsc_private_t *_libsc_private;
#define LIBSC_PRIVATE(x) \
(_libsc_private[(stdio_init ? cpuid() : 0)].privdata.x)
#endif