[BACK]Return to uvm_pager.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / uvm

Annotation of src/sys/uvm/uvm_pager.h, Revision 1.4

1.4     ! perry       1: /*     $NetBSD: uvm_pager.h,v 1.3 1998/02/07 11:09:29 mrg Exp $        */
1.1       mrg         2:
                      3: /*
                      4:  * XXXCDC: "ROUGH DRAFT" QUALITY UVM PRE-RELEASE FILE!
                      5:  *        >>>USE AT YOUR OWN RISK, WORK IS NOT FINISHED<<<
                      6:  */
                      7: /*
                      8:  *
                      9:  * Copyright (c) 1997 Charles D. Cranor and Washington University.
                     10:  * All rights reserved.
                     11:  *
                     12:  * Redistribution and use in source and binary forms, with or without
                     13:  * modification, are permitted provided that the following conditions
                     14:  * are met:
                     15:  * 1. Redistributions of source code must retain the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer.
                     17:  * 2. Redistributions in binary form must reproduce the above copyright
                     18:  *    notice, this list of conditions and the following disclaimer in the
                     19:  *    documentation and/or other materials provided with the distribution.
                     20:  * 3. All advertising materials mentioning features or use of this software
                     21:  *    must display the following acknowledgement:
                     22:  *      This product includes software developed by Charles D. Cranor and
                     23:  *      Washington University.
                     24:  * 4. The name of the author may not be used to endorse or promote products
                     25:  *    derived from this software without specific prior written permission.
                     26:  *
                     27:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     28:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     29:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     30:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     31:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     32:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     33:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     34:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     35:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     36:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1.3       mrg        37:  *
                     38:  * from: Id: uvm_pager.h,v 1.1.2.14 1998/01/13 19:00:50 chuck Exp
1.1       mrg        39:  */
                     40:
1.4     ! perry      41: #ifndef _UVM_UVM_PAGER_H_
        !            42: #define _UVM_UVM_PAGER_H_
        !            43:
1.1       mrg        44: /*
                     45:  * uvm_pager.h
                     46:  */
                     47:
                     48: UVMHIST_DECL(maphist);
                     49:
                     50:
                     51: /*
                     52:  * async pager i/o descriptor structure
                     53:  */
                     54:
                     55: TAILQ_HEAD(uvm_aiohead, uvm_aiodesc);
                     56:
                     57: struct uvm_aiodesc {
                     58:   void (*aiodone) __P((struct uvm_aiodesc *));
                     59:                                        /* aio done function */
                     60:   vm_offset_t kva;                     /* KVA of mapped page(s) */
                     61:   int npages;                          /* # of pages in I/O req */
                     62:   void *pd_ptr;                                /* pager-dependent pointer */
                     63:   TAILQ_ENTRY(uvm_aiodesc) aioq;       /* linked list of aio's */
                     64: };
                     65:
                     66: /*
                     67:  * pager ops
                     68:  */
                     69:
                     70: struct uvm_pagerops {
                     71:   void                 (*pgo_init) __P((void));        /* init pager */
                     72:   struct uvm_object *  (*pgo_attach)           /* get uvm_object */
                     73:                            __P((void *, vm_prot_t));
                     74:   void                 (*pgo_reference)        /* add reference to obj */
                     75:                            __P((struct uvm_object *));
                     76:   void                 (*pgo_detach)           /* drop reference to obj */
                     77:                            __P((struct uvm_object *));
                     78:   int                  (*pgo_fault)            /* special nonstd fault fn */
                     79:                            __P((struct uvm_faultinfo *, vm_offset_t,
                     80:                                 vm_page_t *, int, int, vm_fault_t,
                     81:                                 vm_prot_t, int));
                     82:   boolean_t            (*pgo_flush)            /* flush pages out of obj */
                     83:                            __P((struct uvm_object *, vm_offset_t,
                     84:                                vm_offset_t, int));
                     85:   int                  (*pgo_get)              /* get/read page */
                     86:                            __P((struct uvm_object *, vm_offset_t,
                     87:                                 vm_page_t *, int *, int, vm_prot_t, int, int));
                     88:   int                  (*pgo_asyncget)         /* start async get */
                     89:                                    __P((struct uvm_object *, vm_offset_t, int));
                     90:   int                  (*pgo_put)              /* put/write page */
                     91:                                    __P((struct uvm_object *, vm_page_t *,
                     92:                                 int, boolean_t));
                     93:   void                 (*pgo_cluster)          /* return range of cluster */
                     94:                             __P((struct uvm_object *, vm_offset_t,
                     95:                                  vm_offset_t *, vm_offset_t *));
                     96:   struct vm_page **    (*pgo_mk_pcluster)      /* make "put" cluster */
                     97:                                    __P((struct uvm_object *, struct vm_page **,
                     98:                                 int *, struct vm_page *, int, vm_offset_t,
                     99:                                 vm_offset_t));
                    100:   void                 (*pgo_shareprot)        /* share protect */
                    101:                            __P((vm_map_entry_t, vm_prot_t));
                    102:   void                 (*pgo_aiodone)          /* async iodone */
                    103:                            __P((struct uvm_aiodesc *));
                    104:   boolean_t            (*pgo_releasepg)        /* release page */
                    105:                            __P((struct vm_page *, struct vm_page **));
                    106: };
                    107:
                    108: /* pager flags [mostly for flush] */
                    109:
                    110: #define PGO_CLEANIT    0x001   /* write dirty pages to backing store */
                    111: #define PGO_SYNCIO     0x002   /* if PGO_CLEAN: use sync I/O? */
                    112: /*
                    113:  * obviously if neither PGO_INVALIDATE or PGO_FREE are set then the pages
                    114:  * stay where they are.
                    115:  */
                    116: #define PGO_DEACTIVATE 0x004   /* deactivate flushed pages */
                    117: #define PGO_FREE       0x008   /* free flushed pages */
                    118:
                    119: #define PGO_ALLPAGES   0x010   /* flush whole object/get all pages */
                    120: #define PGO_DOACTCLUST 0x020   /* flag to mk_pcluster to include active */
                    121: #define PGO_LOCKED     0x040   /* fault data structures are locked [get] */
                    122: #define PGO_PDFREECLUST        0x080   /* daemon's free cluster flag [uvm_pager_put] */
                    123: #define PGO_REALLOCSWAP        0x100   /* reallocate swap area [pager_dropcluster] */
                    124:
                    125: /* page we are not interested in getting */
                    126: #define PGO_DONTCARE ((struct vm_page *) -1)   /* [get only] */
                    127:
                    128: /*
                    129:  * handle inline options
                    130:  */
                    131:
                    132: #ifdef UVM_PAGER_INLINE
                    133: #define PAGER_INLINE static __inline
                    134: #else
                    135: #define PAGER_INLINE /* nothing */
                    136: #endif /* UVM_PAGER_INLINE */
                    137:
                    138: /*
                    139:  * prototypes
                    140:  */
                    141:
                    142: void           uvm_pager_dropcluster __P((struct uvm_object *,
                    143:                                        struct vm_page *, struct vm_page **,
                    144:                                        int *, int, int));
                    145: void           uvm_pager_init __P((void));
                    146: int            uvm_pager_put __P((struct uvm_object *, struct vm_page *,
                    147:                                   struct vm_page ***, int *, int,
                    148:                                   vm_offset_t, vm_offset_t));
                    149:
                    150: PAGER_INLINE struct vm_page *uvm_pageratop __P((vm_offset_t));
                    151:
                    152: vm_offset_t    uvm_pagermapin __P((struct vm_page **, int,
                    153:                                    struct uvm_aiodesc **, int));
                    154: void           uvm_pagermapout __P((vm_offset_t, int));
                    155: struct vm_page **uvm_mk_pcluster  __P((struct uvm_object *, struct vm_page **,
                    156:                                       int *, struct vm_page *, int,
                    157:                                       vm_offset_t, vm_offset_t));
                    158: void           uvm_shareprot __P((vm_map_entry_t, vm_prot_t));
                    159:
1.4     ! perry     160:
        !           161: #endif /* _UVM_UVM_PAGER_H_ */

CVSweb <webmaster@jp.NetBSD.org>