root/include/linux/proc_fs.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. proc_net_register
  2. proc_net_unregister
  3. proc_scsi_register
  4. proc_scsi_unregister

   1 #ifndef _LINUX_PROC_FS_H
   2 #define _LINUX_PROC_FS_H
   3 
   4 #include <linux/fs.h>
   5 #include <linux/malloc.h>
   6 
   7 /*
   8  * The proc filesystem constants/structures
   9  */
  10 
  11 /*
  12  * We always define these enumerators
  13  */
  14 
  15 enum root_directory_inos {
  16         PROC_ROOT_INO = 1,
  17         PROC_LOADAVG,
  18         PROC_UPTIME,
  19         PROC_MEMINFO,
  20         PROC_KMSG,
  21         PROC_VERSION,
  22         PROC_CPUINFO,
  23         PROC_PCI,
  24         PROC_SELF,      /* will change inode # */
  25         PROC_NET,
  26         PROC_SCSI,
  27         PROC_MALLOC,
  28         PROC_KCORE,
  29         PROC_MODULES,
  30         PROC_STAT,
  31         PROC_DEVICES,
  32         PROC_INTERRUPTS,
  33         PROC_FILESYSTEMS,
  34         PROC_KSYMS,
  35         PROC_DMA,       
  36         PROC_IOPORTS,
  37 #ifdef __SMP_PROF__
  38         PROC_SMP_PROF,
  39 #endif
  40         PROC_PROFILE, /* whether enabled or not */
  41         PROC_CMDLINE,
  42         PROC_SYS,
  43         PROC_MTAB,
  44         PROC_MD,
  45         PROC_RTC,
  46         PROC_LOCKS
  47 };
  48 
  49 enum pid_directory_inos {
  50         PROC_PID_INO = 2,
  51         PROC_PID_STATUS,
  52         PROC_PID_MEM,
  53         PROC_PID_CWD,
  54         PROC_PID_ROOT,
  55         PROC_PID_EXE,
  56         PROC_PID_FD,
  57         PROC_PID_ENVIRON,
  58         PROC_PID_CMDLINE,
  59         PROC_PID_STAT,
  60         PROC_PID_STATM,
  61         PROC_PID_MAPS
  62 };
  63 
  64 enum pid_subdirectory_inos {
  65         PROC_PID_FD_DIR = 1
  66 };
  67 
  68 enum net_directory_inos {
  69         PROC_NET_UNIX = 128,
  70         PROC_NET_ARP,
  71         PROC_NET_ROUTE,
  72         PROC_NET_DEV,
  73         PROC_NET_RAW,
  74         PROC_NET_TCP,
  75         PROC_NET_UDP,
  76         PROC_NET_SNMP,
  77         PROC_NET_RARP,
  78         PROC_NET_IGMP,
  79         PROC_NET_IPMR_VIF,
  80         PROC_NET_IPMR_MFC,
  81         PROC_NET_IPFWFWD,
  82         PROC_NET_IPFWIN,
  83         PROC_NET_IPFWOUT,
  84         PROC_NET_IPACCT,
  85         PROC_NET_IPMSQHST,
  86         PROC_NET_WAVELAN,
  87         PROC_NET_IPX_INTERFACE,
  88         PROC_NET_IPX_ROUTE,
  89         PROC_NET_IPX,
  90         PROC_NET_ATALK,
  91         PROC_NET_AT_ROUTE,
  92         PROC_NET_ATIF,
  93         PROC_NET_AX25_ROUTE,
  94         PROC_NET_AX25,
  95         PROC_NET_AX25_CALLS,
  96         PROC_NET_NR_NODES,
  97         PROC_NET_NR_NEIGH,
  98         PROC_NET_NR,
  99         PROC_NET_SOCKSTAT,
 100         PROC_NET_RTCACHE,
 101         PROC_NET_AX25_BPQETHER,
 102         PROC_NET_ALIAS_TYPES,
 103         PROC_NET_ALIASES,
 104         PROC_NET_IP_MASQ_APP,
 105         PROC_NET_LAST
 106 };
 107 
 108 enum scsi_directory_inos {
 109         PROC_SCSI_SCSI = 256,
 110         PROC_SCSI_ADVANSYS,
 111         PROC_SCSI_EATA,
 112         PROC_SCSI_EATA_PIO,
 113         PROC_SCSI_AHA152X,
 114         PROC_SCSI_AHA1542,
 115         PROC_SCSI_AHA1740,
 116         PROC_SCSI_AIC7XXX,
 117         PROC_SCSI_BUSLOGIC,
 118         PROC_SCSI_U14_34F,
 119         PROC_SCSI_FDOMAIN,
 120         PROC_SCSI_GENERIC_NCR5380,
 121         PROC_SCSI_IN2000,
 122         PROC_SCSI_PAS16,
 123         PROC_SCSI_QLOGIC,
 124         PROC_SCSI_SEAGATE,
 125         PROC_SCSI_T128,
 126         PROC_SCSI_NCR53C7xx,
 127         PROC_SCSI_ULTRASTOR,
 128         PROC_SCSI_7000FASST,
 129         PROC_SCSI_EATA2X,
 130         PROC_SCSI_AM53C974,
 131         PROC_SCSI_SSC,
 132         PROC_SCSI_NCR53C406A,
 133         PROC_SCSI_PPA,
 134         PROC_SCSI_ESP,
 135         PROC_SCSI_A3000,
 136         PROC_SCSI_A2091,
 137         PROC_SCSI_GVP11,
 138         PROC_SCSI_ATARI,
 139         PROC_SCSI_SCSI_DEBUG,   
 140         PROC_SCSI_NOT_PRESENT,
 141         PROC_SCSI_FILE,                        /* I'm assuming here that we */
 142         PROC_SCSI_LAST = (PROC_SCSI_FILE + 16) /* won't ever see more than */
 143 };                                             /* 16 HBAs in one machine   */
 144 
 145 /* Finally, the dynamically allocatable proc entries are reserved: */
 146 
 147 #define PROC_DYNAMIC_FIRST 4096
 148 #define PROC_NDYNAMIC      4096
 149 
 150 #define PROC_SUPER_MAGIC 0x9fa0
 151 
 152 /*
 153  * This is not completely implemented yet. The idea is to
 154  * create a in-memory tree (like the actual /proc filesystem
 155  * tree) of these proc_dir_entries, so that we can dynamically
 156  * add new files to /proc.
 157  *
 158  * The "next" pointer creates a linked list of one /proc directory,
 159  * while parent/subdir create the directory structure (every
 160  * /proc file has a parent, but "subdir" is NULL for all
 161  * non-directory entries).
 162  *
 163  * "get_info" is called at "read", while "fill_inode" is used to
 164  * fill in file type/protection/owner information specific to the
 165  * particular /proc file.
 166  */
 167 struct proc_dir_entry {
 168         unsigned short low_ino;
 169         unsigned short namelen;
 170         const char *name;
 171         mode_t mode;
 172         nlink_t nlink;
 173         uid_t uid;
 174         gid_t gid;
 175         unsigned long size;
 176         struct inode_operations * ops;
 177         int (*get_info)(char *, char **, off_t, int, int);
 178         void (*fill_inode)(struct inode *);
 179         struct proc_dir_entry *next, *parent, *subdir;
 180         void *data;
 181 };
 182 
 183 extern int (* dispatch_scsi_info_ptr) (int ino, char *buffer, char **start,
 184                                 off_t offset, int length, int inout);
 185 
 186 extern struct proc_dir_entry proc_root;
 187 extern struct proc_dir_entry proc_net;
 188 extern struct proc_dir_entry proc_scsi;
 189 extern struct proc_dir_entry proc_sys;
 190 extern struct proc_dir_entry proc_pid;
 191 extern struct proc_dir_entry proc_pid_fd;
 192 
 193 extern struct inode_operations proc_scsi_inode_operations;
 194 
 195 extern void proc_root_init(void);
 196 extern void proc_base_init(void);
 197 extern void proc_net_init(void);
 198 
 199 extern int proc_register(struct proc_dir_entry *, struct proc_dir_entry *);
 200 extern int proc_register_dynamic(struct proc_dir_entry *, 
 201                                  struct proc_dir_entry *);
 202 extern int proc_unregister(struct proc_dir_entry *, int);
 203 
 204 static inline int proc_net_register(struct proc_dir_entry * x)
     /* [previous][next][first][last][top][bottom][index][help] */
 205 {
 206         return proc_register(&proc_net, x);
 207 }
 208 
 209 static inline int proc_net_unregister(int x)
     /* [previous][next][first][last][top][bottom][index][help] */
 210 {
 211         return proc_unregister(&proc_net, x);
 212 }
 213 
 214 static inline int proc_scsi_register(struct proc_dir_entry *driver, 
     /* [previous][next][first][last][top][bottom][index][help] */
 215                                      struct proc_dir_entry *x)
 216 {
 217     x->ops = &proc_scsi_inode_operations;
 218     if(x->low_ino < PROC_SCSI_FILE){
 219         return(proc_register(&proc_scsi, x));
 220     }else{
 221         return(proc_register(driver, x));
 222     }
 223 }
 224 
 225 static inline int proc_scsi_unregister(struct proc_dir_entry *driver, int x)
     /* [previous][next][first][last][top][bottom][index][help] */
 226 {
 227     extern void scsi_init_free(char *ptr, unsigned int size);
 228 
 229     if(x <= PROC_SCSI_FILE)
 230         return(proc_unregister(&proc_scsi, x));
 231     else {
 232         struct proc_dir_entry **p = &driver->subdir, *dp;
 233         int ret;
 234 
 235         while ((dp = *p) != NULL) {
 236                 if (dp->low_ino == x) 
 237                     break;
 238                 p = &dp->next;
 239         }
 240         ret = proc_unregister(driver, x);
 241         scsi_init_free((char *) dp, sizeof(struct proc_dir_entry) + 4);
 242         return(ret);
 243     }
 244 }
 245 
 246 extern struct super_block *proc_read_super(struct super_block *,void *,int);
 247 extern int init_proc_fs(void);
 248 extern struct inode * proc_get_inode(struct super_block *, int, struct proc_dir_entry *);
 249 extern void proc_statfs(struct super_block *, struct statfs *, int);
 250 extern void proc_read_inode(struct inode *);
 251 extern void proc_write_inode(struct inode *);
 252 extern int proc_match(int, const char *, struct proc_dir_entry *);
 253 
 254 /*
 255  * These are generic /proc routines that use the internal
 256  * "struct proc_dir_entry" tree to traverse the filesystem.
 257  *
 258  * The /proc root directory has extended versions to take care
 259  * of the /proc/<pid> subdirectories.
 260  */
 261 extern int proc_readdir(struct inode *, struct file *, void *, filldir_t);
 262 extern int proc_lookup(struct inode *, const char *, int, struct inode **);
 263 
 264 extern struct inode_operations proc_dir_inode_operations;
 265 extern struct inode_operations proc_net_inode_operations;
 266 extern struct inode_operations proc_netdir_inode_operations;
 267 extern struct inode_operations proc_scsi_inode_operations;
 268 extern struct inode_operations proc_mem_inode_operations;
 269 extern struct inode_operations proc_sys_inode_operations;
 270 extern struct inode_operations proc_array_inode_operations;
 271 extern struct inode_operations proc_arraylong_inode_operations;
 272 extern struct inode_operations proc_kcore_inode_operations;
 273 extern struct inode_operations proc_profile_inode_operations;
 274 extern struct inode_operations proc_kmsg_inode_operations;
 275 extern struct inode_operations proc_link_inode_operations;
 276 extern struct inode_operations proc_fd_inode_operations;
 277 
 278 #endif

/* [previous][next][first][last][top][bottom][index][help] */