home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 9.ddi / usr / include / sys / systm.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  8.5 KB  |  298 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_SYSTM_H
  11. #define _SYS_SYSTM_H
  12.  
  13. #ident    "@(#)/usr/include/sys/systm.h.sl 1.1 4.0 12/08/90 20992 AT&T-USL"
  14. /*
  15.  * Random set of variables used by more than one routine.
  16.  */
  17.  
  18. #ifdef _KERNEL
  19. extern struct vnode *rootdir;    /* pointer to vnode of root directory */
  20. extern short cputype;        /* type of cpu = 40, 45, 70, 780, 0x3b15 */
  21. extern clock_t lbolt;        /* time in HZ since last boot */
  22. extern int Dstflag;     /* configurable timezone */
  23. extern int Timezone;        /* configurable DST flag */
  24. extern int Hz;          /* Ticks/second of the clock */
  25.  
  26.  
  27. extern char runin;        /* scheduling flag */
  28. extern char runout;        /* scheduling flag */
  29.  
  30. extern int    maxmem;        /* max available memory (clicks) */
  31. extern int    physmem;    /* physical memory (clicks) on this CPU */
  32. extern int    maxclick;    /* Highest physical click + 1.        */
  33. extern int    nswap;        /* size of swap space in blocks*/
  34. extern dev_t    rootdev;    /* device of the root */
  35. extern dev_t    swapdev;    /* swapping device */
  36. extern dev_t    dumpdev;    /* dump device */
  37. extern char    *panicstr;    /* panic string pointer */
  38. extern int    blkacty;    /* active block devices */
  39. extern int    pwr_cnt, pwr_act;
  40. extern int     (*pwr_clr[])();
  41.  
  42. extern    int    rstchown;    /* 1 ==> restrictive chown(2) semantics */
  43.  
  44. #if defined(__STDC__)
  45. extern void iomove(caddr_t, int, int);
  46. extern int is32b(void);
  47. extern void wakeprocs(caddr_t, int);
  48. extern void wakeup(caddr_t);
  49. extern int sleep(caddr_t, int);
  50. extern void trap_ret(void);
  51. extern int grow(int *);
  52. extern int timeout(void (*)(), caddr_t, long);
  53. extern int untimeout(int);
  54. extern int nodev(void);
  55. extern int nulldev(void);
  56. extern int getudev(void);
  57. extern int bcmp(char *, char *, size_t);
  58. extern int memlow(void);
  59. extern int stoi(char **);
  60. extern void numtos(u_long, char *);
  61. extern char *strncpy(char *, char *, size_t);
  62. extern char *strcat(char *, char *);
  63. extern char *strncat(char *, char *, size_t);
  64. extern int strcmp(char *, char *);
  65. extern int strncmp(char *, char *, size_t);
  66. extern int ucopyin(caddr_t, caddr_t, size_t, u_int);
  67. extern int copyin(caddr_t, caddr_t, size_t);
  68. extern int ucopyout(caddr_t, caddr_t, size_t, u_int);
  69. extern int copyout(caddr_t, caddr_t, size_t);
  70. extern int copyinstr(char *, char *, size_t, size_t *);
  71. extern int copystr(char *, char *, size_t, size_t *);
  72. extern void bcopy(caddr_t, caddr_t, size_t);
  73. extern void ovbcopy(char *, char *, size_t);
  74. extern void fbcopy(int *, int *, size_t);
  75. extern void bzero(caddr_t, size_t);
  76. extern void bzeroa(caddr_t, size_t);
  77. extern void bzeroba(caddr_t, size_t);
  78. extern int kzero(caddr_t, size_t);
  79. extern int upath(caddr_t, caddr_t, size_t);
  80. extern int spath(caddr_t, caddr_t, size_t);
  81. extern int fubyte(caddr_t);
  82. extern int lfubyte(caddr_t);
  83. extern int fuword(int *);
  84. extern int lfuword(int *);
  85. extern int subyte(caddr_t, char);
  86. extern int suword(int *, int);
  87. extern int setjmp(label_t *);
  88. extern void longjmp(label_t *);
  89. extern void xrele(struct vnode *);
  90. extern int arglistsz(caddr_t *, int *, int *, int);
  91. extern int copyarglist(int, caddr_t *, int, caddr_t *, caddr_t, int);
  92. extern int userstrlen(caddr_t);
  93. #else
  94. extern void iomove();
  95. extern int is32b();
  96. extern void wakeprocs();
  97. extern void wakeup();
  98. extern int sleep();
  99. extern void trap_ret();
  100. extern int grow();
  101. extern int timeout();
  102. extern int untimeout();
  103. extern int nodev();
  104. extern int nulldev();
  105. extern int getudev();
  106. extern int bcmp();
  107. extern int memlow();
  108. extern int stoi();
  109. extern void numtos();
  110. extern char *strncpy();
  111. extern char *strcat();
  112. extern char *strncat();
  113. extern int strcmp();
  114. extern int strncmp();
  115. extern int ucopyin();
  116. extern int copyin();
  117. extern int ucopyout();
  118. extern int copyout();
  119. extern int copyinstr();
  120. extern int copystr();
  121. extern void bcopy();
  122. extern void ovbcopy();
  123. extern void fbcopy();
  124. extern void bzero();
  125. extern void bzeroa();
  126. extern void bzeroba();
  127. extern int kzero();
  128. extern int upath();
  129. extern int spath();
  130. extern int fubyte();
  131. extern int lfubyte();
  132. extern int fuword();
  133. extern int lfuword();
  134. extern int subyte();
  135. extern int suword();
  136. extern int setjmp();
  137. extern void longjmp();
  138. extern void xrele();
  139. extern int arglistsz();
  140. extern int copyarglist();
  141. extern int userstrlen();
  142.  
  143. #endif
  144.  
  145. /*
  146.  * Arguments to wakeprocs() to specify preemptive vs.
  147.  * non-preemptive wakeup
  148.  */
  149. #define    NOPRMPT    0
  150. #define    PRMPT    1
  151.  
  152. extern struct proc *old_curproc;    /* previous curproc */
  153. extern struct proc *oldproc;        /* previous proc that exited */
  154.  
  155. #endif /* _KERNEL */
  156.  
  157. /*
  158.  * Structure of the system-entry table.
  159.  */
  160. extern struct sysent {
  161.     char    sy_narg;        /* total number of arguments */
  162.     char    sy_flags;        /* various flags as defined below */
  163.     int    (*sy_call)();        /* handler */
  164. } sysent[];
  165.  
  166. extern unsigned    sysentsize;
  167.  
  168. /* Various flags in sy_flags */
  169.  
  170. #define    SETJUMP    0x01            /* when set, indicate that systrap */
  171.                     /* should do a setjmp()           */
  172. #define    ASYNC    0x02            /* async extension is allowed       */
  173. #define IOSYS    0x04            /* an I/O system call, the first   */
  174.                     /* arg. passed is file descriptor  */
  175.  
  176. /*
  177.  * Structure of the return-value parameter passed by reference to
  178.  * system entries.
  179.  */
  180. union rval {
  181.     struct    {
  182.         int    r_v1;
  183.         int    r_v2;
  184.     } r_v;
  185.     off_t    r_off;
  186.     time_t    r_time;
  187. };
  188. #define r_val1    r_v.r_v1
  189. #define r_val2    r_v.r_v2
  190.     
  191. typedef union rval rval_t;
  192.  
  193. extern int Dstflag;
  194. extern int Timezone;
  195.  
  196. #ifdef    KPERF
  197.  
  198. /*    This is the structure for the  kernel performance        */ 
  199. /*    measurement code.                                              */
  200. /*                                                              */
  201. #define NUMRC 512
  202. #define NUMPHASE 64
  203. #define PFCHAR 10
  204.  
  205. #define KPFCHILDSLP 35
  206. #define KPFTRON    36
  207. #define KPFTRON2    37
  208. #define KPFTROFF    38
  209.  
  210. /*    The following structure describes the records written
  211. **    by the kernel performance measurement code.
  212. **
  213. **    Not all fields of the structure have meaningful values for
  214. **    records types.
  215. */
  216. typedef struct kernperf {
  217.     unsigned char    kp_type;    /* the record type as defined below */
  218.     unsigned char    kp_level;    /* A priority level.        */
  219.     pid_t         kp_pid;        /* A process id.    */
  220.     clock_t     kp_time;    /* A relative time in 10     */
  221.                     /* microseconds units        */
  222.     unsigned long    kp_pc;        /* A pc (kernel address).    */
  223. } kernperf_t;
  224.  
  225. /* the possible record types are as follows.
  226. */
  227.  
  228. #define KPT_SYSCALL    0    /* System call - pc determines which    */
  229.                 /* one.                    */
  230. #define KPT_INTR    1    /* An interrupt - pc determines which     */
  231.                 /* one.                    */
  232. #define KPT_TRAP_RET    2    /* Return from trap to user level    */
  233.  
  234. #define KPT_INT_KRET    3    /* Return from interrupt to kernel    */
  235.                 /* level.                */
  236. #define    KPT_INT_URET    4    /* Return from interrupt to user level    */
  237.  
  238. #define    KPT_SLEEP    5    /* Call to "sleep" - pc is caller. The  */
  239.                 /* pid is that of the caller        */
  240. #define    KPT_WAKEUP    6    /* Call of "wakeup" - pc is caller. The    */
  241.                 /* pid is that of process being        */
  242.                 /* awakened.                */ 
  243. #define    KPT_PSWTCH    7    /* Process switch.  The pid is the new    */
  244.                 /* process about to be run        */
  245. #define    KPT_SPL        8    /* Change of priority level.  The pc is    */
  246.                 /* that of the caller.  The level is     */
  247.                 /* the new priority level.        */
  248. #define    KPT_CSERVE    9    /* Call of a streams service procedure.    */
  249.                 /* the pc tells which one.        */
  250. #define    KPT_RSERVE    10    /* Return from a streams service     */
  251.                 /* procedure.  the pc tells which one.    */
  252. #define KPT_UXMEMF    11    /* memory fault because of paging    */
  253.                 /* or stack exception.            */
  254. #define KPT_SWTCH    12    /* call to swtch            */
  255. #define KPT_QSWTCH    13    /* call to qswtch            */
  256. #define KPT_STKBX    14    /* stack boundary exceptions        */
  257. #define KPT_END        15    /* end of trace                */
  258. #define KPT_IDLE    16    /* in scheduler sitting idle        */
  259. #define KPT_PREEMPT    17    /* hit a preemption point        */
  260.                 /* however preemption did not occur    */
  261. #define KPT_P_QSWTCH    18    /* reached a preemption point, and will */
  262.                 /* Qswtch                */
  263. #define KPT_LAST    19    /* last record of a proc                */
  264.  
  265. #define swtch() \
  266. {\
  267.     if (kpftraceflg) {\
  268.         asm(" MOVAW 0(%pc),Kpc"); \
  269.         kperf_write(KPT_SWTCH,Kpc,curproc); \
  270.     } \
  271.     if (kpftraceflg && exitflg) {\
  272.         kperf_write(KPT_LAST,Kpc,curproc); \
  273.         exitflg = 0; \
  274.     } \
  275.     KPswtch(); \
  276. }
  277. extern int kpchildslp;
  278. extern int pre_trace;
  279. extern int kpftraceflg;
  280. extern int takephase;
  281. extern int putphase;
  282. extern int outbuf;
  283. /* extern int out_of_tbuf; */
  284. extern int numrc;
  285. extern int numrccount;
  286. extern int Kpc;
  287. extern int KPF_opsw;
  288. extern kernperf_t kpft[];
  289. extern int exitflg;
  290.  
  291. #else
  292.  
  293. extern void swtch();
  294.  
  295. #endif    /* KPERF */
  296.  
  297. #endif    /* _SYS_SYSTM_H */
  298.