1. Remove a rather strangely gratuitous bit of profanity
[unix-history] / sys / vm / vm_pager.h
CommitLineData
15637ed4
RG
1/*
2 * Copyright (c) 1990 University of Utah.
3 * Copyright (c) 1991 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed by the University of
21 * California, Berkeley and its contributors.
22 * 4. Neither the name of the University nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
1284e777 38 * from: @(#)vm_pager.h 7.2 (Berkeley) 4/20/91
22c84afa 39 * $Id: vm_pager.h,v 1.6 1994/01/31 04:21:50 davidg Exp $
15637ed4
RG
40 */
41
42/*
43 * Pager routine interface definition.
44 * For BSD we use a cleaner version of the internal pager interface.
45 */
46
47#ifndef _VM_PAGER_
48#define _VM_PAGER_
49
50struct pager_struct {
51 queue_head_t pg_list; /* links for list management */
52 caddr_t pg_handle; /* external handle (vp, dev, fp) */
53 int pg_type; /* type of pager */
54 struct pagerops *pg_ops; /* pager operations */
55 caddr_t pg_data; /* private pager data */
56};
57typedef struct pager_struct *vm_pager_t;
58
59/* pager types */
60#define PG_DFLT -1
61#define PG_SWAP 0
62#define PG_VNODE 1
63#define PG_DEVICE 2
64
65struct pagerops {
66 void (*pgo_init)(); /* initialize pager */
a200ca2b 67 vm_pager_t (*pgo_alloc)(caddr_t, vm_size_t, vm_prot_t, vm_offset_t); /* allocate pager */
15637ed4
RG
68 void (*pgo_dealloc)(); /* disassociate */
69 int (*pgo_getpage)(); /* get (read) page */
55768178 70 int (*pgo_getmulti)(); /* get (read) multiple pages */
15637ed4 71 int (*pgo_putpage)(); /* put (write) page */
22c84afa 72 int (*pgo_putmulti)(); /* get (read) multiple pages */
15637ed4
RG
73 boolean_t (*pgo_haspage)(); /* does pager have page? */
74};
75
76/*
77 * get/put return values
78 * OK operation was successful
79 * BAD specified data was out of the accepted range
80 * FAIL specified data was in range, but doesn't exist
81 * PEND operations was initiated but not completed
55768178 82 * TRYAGAIN operation will be successful in the future
15637ed4
RG
83 */
84#define VM_PAGER_OK 0
85#define VM_PAGER_BAD 1
86#define VM_PAGER_FAIL 2
87#define VM_PAGER_PEND 3
55768178 88#define VM_PAGER_TRYAGAIN 4
15637ed4 89
a200ca2b 90#define VM_PAGER_ALLOC(h, s, p, o) (*(pg)->pg_ops->pgo_alloc)(h, s, p, o)
15637ed4
RG
91#define VM_PAGER_DEALLOC(pg) (*(pg)->pg_ops->pgo_dealloc)(pg)
92#define VM_PAGER_GET(pg, m, s) (*(pg)->pg_ops->pgo_getpage)(pg, m, s)
55768178 93#define VM_PAGER_GET_MULTI(pg, m, c, r, s) (*(pg)->pg_ops->pgo_getmulti)(pg, m, c, r, s)
15637ed4 94#define VM_PAGER_PUT(pg, m, s) (*(pg)->pg_ops->pgo_putpage)(pg, m, s)
22c84afa 95#define VM_PAGER_PUT_MULTI(pg, m, c, s, rtval) (*(pg)->pg_ops->pgo_putmulti)(pg, m, c, s, rtval)
15637ed4
RG
96#define VM_PAGER_HASPAGE(pg, o) (*(pg)->pg_ops->pgo_haspage)(pg, o)
97
98#ifdef KERNEL
fde1aeb2 99extern void vm_pager_init(void);
a200ca2b 100extern vm_pager_t vm_pager_allocate(int, caddr_t, vm_size_t, vm_prot_t, vm_offset_t);
fde1aeb2
GW
101extern void vm_pager_deallocate(vm_pager_t);
102struct vm_page;
103extern int vm_pager_get(vm_pager_t, struct vm_page *, boolean_t);
104extern int vm_pager_put(vm_pager_t, struct vm_page *, boolean_t);
105extern boolean_t vm_pager_has_page(vm_pager_t, vm_offset_t);
106extern void vm_pager_sync(void);
107extern vm_offset_t vm_pager_map_page(struct vm_page *);
108extern void vm_pager_unmap_page(vm_offset_t);
109extern vm_pager_t vm_pager_lookup(queue_head_t *, caddr_t);
15637ed4
RG
110
111extern struct pagerops *dfltpagerops;
112#endif
113
114#endif /* _VM_PAGER_ */