home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / fs / proc / prdata.h
Encoding:
C/C++ Source or Header  |  1990-12-08  |  4.7 KB  |  194 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 _PROC_PRDATA_H
  11. #define _PROC_PRDATA_H
  12.  
  13. #ident    "@(#)/usr/include/fs/proc/prdata.h.sl 1.1 4.0 12/08/90 33414 AT&T-USL"
  14.  
  15. #define    min(a,b)    ((a) <= (b) ? (a) : (b))
  16. #define    max(a,b)    ((a) >= (b) ? (a) : (b))
  17. #define    round(r)    (((r)+sizeof(int)-1)&(~(sizeof(int)-1)))
  18.  
  19. #define    PNSIZ    5            /* size of /proc name entries */
  20.  
  21. /*
  22.  * Macros for mapping between i-numbers and pids.
  23.  */
  24. #define    PRBIAS    64
  25. #define    itop(n)    ((int)((n)-PRBIAS))    /* i-number to pid */
  26. #define    ptoi(n)    ((int)((n)+PRBIAS))    /* pid to i-number */
  27.  
  28. typedef struct prnode {
  29.     struct prnode    *pr_free;    /* freelist pointer */
  30.     struct vnode    *pr_vnext;    /* linked list of invalid vnodes */
  31.     struct vnode    pr_vnode;    /* associated vnode */
  32.     struct proc    *pr_proc;    /* process being traced */
  33.     short        pr_mode;    /* file mode bits */
  34.     short        pr_opens;    /* count of opens */
  35.     short        pr_writers;    /* count of opens for writing */
  36.     short        pr_flags;    /* private flags */
  37. } prnode_t;
  38.  
  39. /*
  40.  * Conversion macros.
  41.  */
  42. #define    VTOP(vp)    ((struct prnode *)(vp)->v_data)
  43. #define    PTOV(pnp)    ((struct vnode *)&(pnp)->pr_vnode)
  44.  
  45. /*
  46.  * Flags for pr_flags.
  47.  */
  48. #define    PREXCL        0x01    /* Exclusive-use (disallow opens for write) */
  49. #define    PRINVAL        0x02    /* vnode is invalid (security provision) */
  50.  
  51. /*
  52.  * Flags to prlock().
  53.  */
  54. #define    ZNO    0    /* Fail on encountering a zombie process. */
  55. #define    ZYES    1    /* Allow zombies. */
  56.  
  57. /*
  58.  * Assign one set to another (possible different sizes).
  59.  *
  60.  * Assigning to a smaller set causes members to be lost.
  61.  * Assigning to a larger set causes extra members to be cleared.
  62.  */
  63. #define    prassignset(ap, sp)                    \
  64. {                                \
  65.     register int _i_ = sizeof(*(ap))/sizeof(u_long);    \
  66.     while (--_i_ >= 0)                    \
  67.         ((u_long*)(ap))[_i_] =                \
  68.           (_i_ >= sizeof(*(sp))/sizeof(u_long)) ?    \
  69.           0L : ((u_long*)(sp))[_i_];            \
  70. }
  71.  
  72. /*
  73.  * Determine whether or not a set (of arbitrary size) is empty.
  74.  */
  75. #define prisempty(sp) setisempty((u_long *)(sp), sizeof(*(sp))/sizeof(u_long))
  76.  
  77. #ifdef _KERNEL
  78.  
  79. #include "sys/types.h"
  80. #include "sys/proc.h"
  81. #include "sys/uio.h"
  82. #include "vm/seg.h"
  83.  
  84. #if defined(__STDC__)
  85.  
  86. int        prusrio(proc_t *, enum uio_rw, struct uio *);
  87. int        prisreadable(proc_t *, cred_t *);
  88. int        prlock(struct prnode *, int, int);
  89. void        prunlock(struct prnode *);
  90. int        prgetstatus(proc_t *, prstatus_t *);
  91. void        prgetaction(proc_t *, user_t *, u_int, struct sigaction *);
  92. int        prnsegs(proc_t *);
  93. void        prgetmap(proc_t *, prmap_t *);
  94. vnode_t        *prvnode(proc_t *, struct seg *, caddr_t);
  95. int        prgetpsinfo(proc_t *, struct prpsinfo *);
  96. int        setisempty(u_long *, unsigned);
  97.  
  98. #else
  99.  
  100. int        prusrio();
  101. int        prisreadable();
  102. int        prlock();
  103. void        prunlock();
  104. int        prgetstatus();
  105. void        prgetaction();
  106. int        prnsegs();
  107. void        prgetmap();
  108. vnode_t        *prvnode();
  109. int        prgetpsinfo();
  110. int        setisempty();
  111.  
  112. #endif
  113.  
  114. /*
  115.  * Machine-dependent routines (defined in prmachdep.c).
  116.  */
  117.  
  118. #if defined(__STDC__)
  119.  
  120. user_t        *prumap(proc_t *);
  121. void        prunmap(proc_t *);
  122. void        prgetregs(user_t *, gregset_t);
  123. void        prsetregs(user_t *, gregset_t);
  124. greg_t        prgetpc(gregset_t);
  125. int        prhasfp(void);
  126. int        prgetfpregs(proc_t *, fpregset_t *);
  127. int        prsetfpregs(proc_t *, fpregset_t *);
  128. int        prgetdbregs(proc_t *, dbregset_t *);
  129. int        prsetdbregs(proc_t *, dbregset_t *);
  130. caddr_t        prgetpsaddr(proc_t *);
  131. void        prstep(proc_t *, user_t *);
  132. void        prsvaddr(proc_t *, user_t *, caddr_t);
  133. caddr_t        prmapin(proc_t *, caddr_t, int);
  134. void        prmapout(proc_t *, caddr_t, caddr_t, int);
  135. caddr_t        prfastmapin(proc_t *, caddr_t, int);
  136. void        prfastmapout(proc_t *, caddr_t, caddr_t, int);
  137.  
  138. #else
  139.  
  140. user_t        *prumap();
  141. void        prunmap();
  142. void        prgetregs();
  143. void        prsetregs();
  144. greg_t        prgetpc();
  145. int        prhasfp();
  146. int        prgetfpregs();
  147. int        prsetfpregs();
  148. int        prgetdbregs();
  149. int        prsetdbregs();
  150. caddr_t        prgetpsaddr();
  151. void        prstep();
  152. void        prsvaddr();
  153. caddr_t        prmapin();
  154. void        prmapout();
  155. caddr_t        prfastmapin();
  156. void        prfastmapout();
  157.  
  158. #endif
  159.  
  160. extern int procfstype;
  161. extern int prmounted;        /* Set to 1 if /proc is mounted. */
  162. extern struct vfs *procvfs;    /* Points to /proc vfs entry. */
  163. extern dev_t procdev;
  164. extern struct vnodeops prvnodeops;
  165. extern struct vfsops prvfsops;
  166. extern struct prnode prrootnode;
  167.  
  168. /*
  169.  * Prototypes for other external functions; these should appear elsewhere
  170.  * but don't.
  171.  */
  172. #if defined(__STDC__)
  173.  
  174. int    donice(proc_t *, cred_t *, int, int *);
  175. int    fsig(proc_t *);
  176. int    getudev(void);
  177. void    setrun(proc_t *);    
  178. int    suser(cred_t *);
  179.  
  180. #else
  181.  
  182. int    donice();
  183. int    fsig();
  184. int    getudev();
  185. void    setrun();
  186. int    stop();
  187. int    suser();
  188.  
  189. #endif
  190.  
  191. #endif    /* _KERNEL */
  192.  
  193. #endif    /* _PROC_PRDATA_H */
  194.