iwm: Fix S:N reporting in ifconfig(8)
[dragonfly.git] / sys / sys / file.h
CommitLineData
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
64struct stat;
65struct proc;
dadab5e9 66struct thread;
984263bc
MD
67struct uio;
68struct knote;
f53ede20
MD
69struct file;
70struct ucred;
351b7b6d 71struct vnode;
f53ede20 72struct lwkt_port;
21739618 73struct namecache;
87baaf0c 74struct sysmsg;
f53ede20
MD
75
76struct 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 */
99struct 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
133LIST_HEAD(filelist, file);
134
135#endif
136
137#ifdef _KERNEL
138
b5516a55
SW
139void fhold(struct file *);
140int fdrop(struct file *);
141int checkfdclosed(thread_t, struct filedesc *, int, struct file *, int);
142int fp_open(const char *, int, int, struct file **);
143int fp_vpopen(struct vnode *, int, struct file **);
144int fp_pread(struct file *, void *, size_t, off_t, ssize_t *, enum uio_seg);
145int fp_pwrite(struct file *, void *, size_t, off_t, ssize_t *, enum uio_seg);
146int fp_read(struct file *, void *, size_t, ssize_t *, int, enum uio_seg);
147int fp_write(struct file *, void *, size_t, ssize_t *, enum uio_seg);
148int fp_stat(struct file *, struct stat *);
149int fp_mmap(void *, size_t, int, int, struct file *, off_t, void **);
150
151int nofo_shutdown(struct file *, int);
152
153int fp_close(struct file *);
154int fp_shutdown(struct file *, int);
39f91578 155
fad57d0e
MD
156extern struct fileops vnode_fileops;
157extern struct fileops specvnode_fileops;
984263bc
MD
158extern struct fileops badfileops;
159extern int maxfiles; /* kernel limit on number of open files */
60ee93b9 160extern int maxfilesrootres; /* descriptors reserved for root use */
d37c8f7f 161extern int minfilesperproc; /* minimum (safety) open files per proc */
984263bc 162extern int maxfilesperproc; /* per process limit on number of open files */
d37c8f7f 163extern int maxfilesperuser; /* per user limit on number of open files */
984263bc 164
a724d72b
SK
165/* Commonly used fileops */
166int badfo_readwrite(struct file *fp, struct uio *uio,
167 struct ucred *cred, int flags);
168int badfo_ioctl(struct file *fp, u_long com, caddr_t data,
169 struct ucred *cred, struct sysmsg *msg);
a724d72b
SK
170int badfo_kqfilter(struct file *fp, struct knote *kn);
171int badfo_stat(struct file *fp, struct stat *sb, struct ucred *cred);
172int badfo_close(struct file *fp);
173int badfo_shutdown(struct file *fp, int how);
174
984263bc
MD
175#endif /* _KERNEL */
176
177#endif /* !SYS_FILE_H */