Commit | Line | Data |
---|---|---|
984263bc MD |
1 | /* |
2 | * Copyright (c) 1982, 1986, 1989, 1993 | |
3 | * The Regents of the University of California. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions | |
7 | * are met: | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * 2. Redistributions in binary form must reproduce the above copyright | |
11 | * notice, this list of conditions and the following disclaimer in the | |
12 | * documentation and/or other materials provided with the distribution. | |
2c64e990 | 13 | * 3. Neither the name of the University nor the names of its contributors |
984263bc MD |
14 | * may be used to endorse or promote products derived from this software |
15 | * without specific prior written permission. | |
16 | * | |
17 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
18 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
23 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
27 | * SUCH DAMAGE. | |
28 | * | |
29 | * @(#)file.h 8.3 (Berkeley) 1/9/95 | |
30 | * $FreeBSD: src/sys/sys/file.h,v 1.22.2.7 2002/11/21 23:39:24 sam Exp $ | |
31 | */ | |
32 | ||
33 | #ifndef _SYS_FILE_H_ | |
34 | #define _SYS_FILE_H_ | |
35 | ||
1bd40720 MD |
36 | #ifndef _SYS_TYPES_H_ |
37 | #include <sys/types.h> | |
38 | #endif | |
39 | #ifndef _SYS_FCNTL_H_ | |
984263bc | 40 | #include <sys/fcntl.h> |
1bd40720 MD |
41 | #endif |
42 | #ifndef _SYS_UNISTD_H_ | |
984263bc MD |
43 | #include <sys/unistd.h> |
44 | #endif | |
45 | ||
ec12abe0 MD |
46 | #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES) |
47 | ||
442e7c76 MD |
48 | #ifndef _SYS_EVENT_H_ |
49 | #include <sys/event.h> | |
50 | #endif | |
1bd40720 | 51 | #ifndef _SYS_QUEUE_H_ |
984263bc | 52 | #include <sys/queue.h> |
1bd40720 | 53 | #endif |
85fceac1 MD |
54 | #ifndef _SYS_SPINLOCK_H_ |
55 | #include <sys/spinlock.h> | |
56 | #endif | |
28623bf9 MD |
57 | #ifndef _SYS_NAMECACHE_H_ |
58 | #include <sys/namecache.h> | |
59 | #endif | |
13dd34d8 | 60 | #ifndef _SYS__UIO_H_ |
61 | #include <sys/_uio.h> | |
e7440b28 | 62 | #endif |
984263bc MD |
63 | |
64 | struct stat; | |
65 | struct proc; | |
dadab5e9 | 66 | struct thread; |
984263bc MD |
67 | struct uio; |
68 | struct knote; | |
f53ede20 MD |
69 | struct file; |
70 | struct ucred; | |
351b7b6d | 71 | struct vnode; |
f53ede20 | 72 | struct lwkt_port; |
21739618 | 73 | struct namecache; |
87baaf0c | 74 | struct sysmsg; |
f53ede20 MD |
75 | |
76 | struct fileops { | |
b2d248cb MD |
77 | int (*fo_read) (struct file *fp, struct uio *uio, |
78 | struct ucred *cred, int flags); | |
79 | int (*fo_write) (struct file *fp, struct uio *uio, | |
80 | struct ucred *cred, int flags); | |
81 | int (*fo_ioctl) (struct file *fp, u_long com, caddr_t data, | |
87baaf0c | 82 | struct ucred *cred, struct sysmsg *msg); |
b2d248cb MD |
83 | int (*fo_kqfilter)(struct file *fp, struct knote *kn); |
84 | int (*fo_stat) (struct file *fp, struct stat *sb, | |
85 | struct ucred *cred); | |
86 | int (*fo_close) (struct file *fp); | |
87 | int (*fo_shutdown)(struct file *fp, int how); | |
f53ede20 MD |
88 | }; |
89 | ||
984263bc | 90 | /* |
2dd63755 MD |
91 | * Kernel descriptor table - One entry for each open kernel vnode and socket. |
92 | * | |
93 | * (A) - (filehead_spin) - descriptor subsystems only (kern/kern_descrip.c) | |
94 | * (U) - (unp_spin) - uipc subsystems only (kern/uipc_usrreq.c) | |
95 | * (ro)- these fields may be read without holding a spinlock as long as you | |
96 | * have (or know) that the reference to the fp is going to stay put. | |
97 | * ? - remaining fields have to be spinlocked | |
984263bc MD |
98 | */ |
99 | struct file { | |
2dd63755 MD |
100 | LIST_ENTRY(file) f_list;/* (A) list of active files */ |
101 | short f_FILLER3; | |
102 | short f_type; /* (ro) descriptor type */ | |
984263bc | 103 | u_int f_flag; /* see fcntl.h */ |
2dd63755 MD |
104 | struct ucred *f_cred; /* (ro) creds associated with descriptor */ |
105 | struct fileops *f_ops; /* (ro) operations vector */ | |
984263bc MD |
106 | int f_seqcount; /* |
107 | * count of sequential accesses -- cleared | |
108 | * by most seek operations. | |
109 | */ | |
110 | off_t f_nextoff; /* | |
111 | * offset of next expected read or write | |
112 | */ | |
113 | off_t f_offset; | |
fbb4eeab | 114 | void *f_data; /* vnode, pipe, socket, or kqueue */ |
91c397b9 | 115 | void *f_data1; /* devfs per-file data */ |
984263bc | 116 | int f_count; /* reference count */ |
2dd63755 | 117 | int f_msgcount; /* (U) reference count from message queue */ |
28623bf9 | 118 | struct nchandle f_nchandle; /* namecache reference */ |
b8477cda | 119 | struct spinlock f_spin; /* NOT USED */ |
ccafe911 | 120 | struct klist f_klist;/* knotes attached to fp/kq */ |
9a4d587b | 121 | void *private_data; /* Linux (drm) per-file data */ |
984263bc MD |
122 | }; |
123 | ||
2dd63755 MD |
124 | #define DTYPE_VNODE 1 /* file */ |
125 | #define DTYPE_SOCKET 2 /* communications endpoint */ | |
126 | #define DTYPE_PIPE 3 /* pipe */ | |
127 | #define DTYPE_FIFO 4 /* fifo (named pipe) */ | |
128 | #define DTYPE_KQUEUE 5 /* event queue */ | |
129 | #define DTYPE_CRYPTO 6 /* crypto */ | |
a1282e19 | 130 | #define DTYPE_MQUEUE 7 /* message queue */ |
269e9b1e | 131 | #define DTYPE_DMABUF 8 /* DRM DMA buffer */ |
2dd63755 | 132 | |
ec12abe0 MD |
133 | LIST_HEAD(filelist, file); |
134 | ||
135 | #endif | |
136 | ||
137 | #ifdef _KERNEL | |
138 | ||
b5516a55 SW |
139 | void fhold(struct file *); |
140 | int fdrop(struct file *); | |
141 | int checkfdclosed(thread_t, struct filedesc *, int, struct file *, int); | |
142 | int fp_open(const char *, int, int, struct file **); | |
143 | int fp_vpopen(struct vnode *, int, struct file **); | |
144 | int fp_pread(struct file *, void *, size_t, off_t, ssize_t *, enum uio_seg); | |
145 | int fp_pwrite(struct file *, void *, size_t, off_t, ssize_t *, enum uio_seg); | |
146 | int fp_read(struct file *, void *, size_t, ssize_t *, int, enum uio_seg); | |
147 | int fp_write(struct file *, void *, size_t, ssize_t *, enum uio_seg); | |
148 | int fp_stat(struct file *, struct stat *); | |
149 | int fp_mmap(void *, size_t, int, int, struct file *, off_t, void **); | |
150 | ||
151 | int nofo_shutdown(struct file *, int); | |
152 | ||
153 | int fp_close(struct file *); | |
154 | int fp_shutdown(struct file *, int); | |
39f91578 | 155 | |
fad57d0e MD |
156 | extern struct fileops vnode_fileops; |
157 | extern struct fileops specvnode_fileops; | |
984263bc MD |
158 | extern struct fileops badfileops; |
159 | extern int maxfiles; /* kernel limit on number of open files */ | |
60ee93b9 | 160 | extern int maxfilesrootres; /* descriptors reserved for root use */ |
d37c8f7f | 161 | extern int minfilesperproc; /* minimum (safety) open files per proc */ |
984263bc | 162 | extern int maxfilesperproc; /* per process limit on number of open files */ |
d37c8f7f | 163 | extern int maxfilesperuser; /* per user limit on number of open files */ |
984263bc | 164 | |
a724d72b SK |
165 | /* Commonly used fileops */ |
166 | int badfo_readwrite(struct file *fp, struct uio *uio, | |
167 | struct ucred *cred, int flags); | |
168 | int badfo_ioctl(struct file *fp, u_long com, caddr_t data, | |
169 | struct ucred *cred, struct sysmsg *msg); | |
a724d72b SK |
170 | int badfo_kqfilter(struct file *fp, struct knote *kn); |
171 | int badfo_stat(struct file *fp, struct stat *sb, struct ucred *cred); | |
172 | int badfo_close(struct file *fp); | |
173 | int badfo_shutdown(struct file *fp, int how); | |
174 | ||
984263bc MD |
175 | #endif /* _KERNEL */ |
176 | ||
177 | #endif /* !SYS_FILE_H */ |