The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/norma/xmm_obj.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* 
    2  * Mach Operating System
    3  * Copyright (c) 1991 Carnegie Mellon University
    4  * All Rights Reserved.
    5  * 
    6  * Permission to use, copy, modify and distribute this software and its
    7  * documentation is hereby granted, provided that both the copyright
    8  * notice and this permission notice appear in all copies of the
    9  * software, derivative works or modified versions, and any portions
   10  * thereof, and that both notices appear in supporting documentation.
   11  * 
   12  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS 
   13  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
   14  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
   15  * 
   16  * Carnegie Mellon requests users of this software to return to
   17  * 
   18  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
   19  *  School of Computer Science
   20  *  Carnegie Mellon University
   21  *  Pittsburgh PA 15213-3890
   22  * 
   23  * any improvements or extensions that they make and grant Carnegie the
   24  * rights to redistribute these changes.
   25  */
   26 /*
   27  * HISTORY
   28  * $Log:        xmm_obj.h,v $
   29  * Revision 2.5  92/03/10  16:29:25  jsb
   30  *      Merged in norma branch changes as of NORMA_MK7.
   31  *      [92/03/09  12:51:33  jsb]
   32  * 
   33  * Revision 2.4.2.2  92/02/21  11:27:30  jsb
   34  *      Changed mobj field in xmm_reply to kobj, and added kobj_held field.
   35  *      Changed xmm_reply_allocate_send_once macro accordingly.
   36  *      [92/02/16  18:23:36  jsb]
   37  * 
   38  *      Added explicit name paramater to xmm_decl, since not all cpps
   39  *      recoginize arguments inside quotes. Sigh.
   40  *      [92/02/16  14:14:38  jsb]
   41  * 
   42  *      Defined more robust xmm_decl.
   43  *      [92/02/09  12:55:40  jsb]
   44  * 
   45  * Revision 2.4.2.1  92/01/21  21:54:33  jsb
   46  *      Moved IKOT_XMM_* definitions to kern/ipc_kobject.h.
   47  *      [92/01/21  18:21:45  jsb]
   48  * 
   49  *      De-linted. Supports new (dlb) memory object routines.
   50  *      Supports arbitrary reply ports to lock_request, etc.
   51  *      Converted mach_port_t (and port_t) to ipc_port_t.
   52  *      Added XMM_USE_MACROS conditional, off by default,
   53  *      which toggles between macros and functions for invocation
   54  *      routines. (Right now only the functions are provided.)
   55  *      [92/01/20  17:27:35  jsb]
   56  * 
   57  * Revision 2.4  91/07/01  08:26:25  jsb
   58  *      Removed malloc, free definitions.
   59  *      Added xmm_decl macro.
   60  *      Renamed Xobj_allocate to xmm_obj_allocate.
   61  *      Added zone element to xmm_class structure.
   62  *      [91/06/29  14:41:25  jsb]
   63  * 
   64  * Revision 2.3  91/06/18  20:53:00  jsb
   65  *      Removed bogus include.
   66  *      [91/06/18  19:06:29  jsb]
   67  * 
   68  * Revision 2.2  91/06/17  15:48:28  jsb
   69  *      First checkin.
   70  *      [91/06/17  11:03:46  jsb]
   71  * 
   72  */
   73 /*
   74  *      File:   norma/xmm_obj.h
   75  *      Author: Joseph S. Barrera III
   76  *      Date:   1991
   77  *
   78  *      Common definitions for xmm system.
   79  */
   80 
   81 #ifndef _NORMA_XMM_OBJ_H_
   82 #define _NORMA_XMM_OBJ_H_
   83 
   84 #ifdef  KERNEL
   85 #include <mach/std_types.h>     /* For pointer_t */
   86 #include <mach/mach_types.h>
   87 #include <mach/kern_return.h>
   88 #include <mach/boolean.h>
   89 #include <mach/vm_prot.h>
   90 #include <mach/message.h>
   91 #include <kern/zalloc.h>
   92 #include <kern/assert.h>
   93 #else   KERNEL
   94 #include <mach.h>
   95 #include <xmm_hash.h>
   96 #endif  KERNEL
   97 
   98 typedef kern_return_t           (*kern_routine_t)();
   99 typedef void                    (*void_routine_t)();
  100 
  101 typedef struct xmm_class        *xmm_class_t;
  102 typedef struct xmm_obj          *xmm_obj_t;
  103 typedef struct xmm_reply        *xmm_reply_t;
  104 
  105 #define XMM_CLASS_NULL          ((xmm_class_t) 0)
  106 #define XMM_OBJ_NULL            ((xmm_obj_t) 0)
  107 #define XMM_REPLY_NULL          ((xmm_reply_t) 0)
  108 
  109 #define MOBJ                    ((struct mobj *) mobj)
  110 #define KOBJ                    ((struct kobj *) kobj)
  111 
  112 struct xmm_class {
  113         kern_routine_t  m_init;
  114         kern_routine_t  m_terminate;
  115         void_routine_t  m_deallocate;
  116         kern_routine_t  m_copy;
  117         kern_routine_t  m_data_request;
  118         kern_routine_t  m_data_unlock;
  119         kern_routine_t  m_data_write;
  120         kern_routine_t  m_lock_completed;
  121         kern_routine_t  m_supply_completed;
  122         kern_routine_t  m_data_return;
  123         kern_routine_t  m_change_completed;
  124 
  125         kern_routine_t  k_data_unavailable;
  126         kern_routine_t  k_get_attributes;
  127         kern_routine_t  k_lock_request;
  128         kern_routine_t  k_data_error;
  129         kern_routine_t  k_set_ready;
  130         kern_routine_t  k_destroy;
  131         kern_routine_t  k_data_supply;
  132 
  133         char *          c_name;
  134         int             c_size;
  135         zone_t          c_zone;
  136 };
  137 
  138 #if     __STDC__
  139 
  140 #define xmm_decl(class, name, size)                             \
  141 extern kern_return_t m_ ## class ## _init();                    \
  142 extern kern_return_t m_ ## class ## _terminate();               \
  143 extern void          m_ ## class ## _deallocate();              \
  144 extern kern_return_t m_ ## class ## _copy();                    \
  145 extern kern_return_t m_ ## class ## _data_request();            \
  146 extern kern_return_t m_ ## class ## _data_unlock();             \
  147 extern kern_return_t m_ ## class ## _data_write();              \
  148 extern kern_return_t m_ ## class ## _lock_completed();          \
  149 extern kern_return_t m_ ## class ## _supply_completed();        \
  150 extern kern_return_t m_ ## class ## _data_return();             \
  151 extern kern_return_t m_ ## class ## _change_completed();        \
  152 extern kern_return_t k_ ## class ## _data_unavailable();        \
  153 extern kern_return_t k_ ## class ## _get_attributes();          \
  154 extern kern_return_t k_ ## class ## _lock_request();            \
  155 extern kern_return_t k_ ## class ## _data_error();              \
  156 extern kern_return_t k_ ## class ## _set_ready();               \
  157 extern kern_return_t k_ ## class ## _destroy();                 \
  158 extern kern_return_t k_ ## class ## _data_supply();             \
  159                                                                 \
  160 struct xmm_class class ## _class = {                            \
  161         m_ ## class ## _init,                                   \
  162         m_ ## class ## _terminate,                              \
  163         m_ ## class ## _deallocate,                             \
  164         m_ ## class ## _copy,                                   \
  165         m_ ## class ## _data_request,                           \
  166         m_ ## class ## _data_unlock,                            \
  167         m_ ## class ## _data_write,                             \
  168         m_ ## class ## _lock_completed,                         \
  169         m_ ## class ## _supply_completed,                       \
  170         m_ ## class ## _data_return,                            \
  171         m_ ## class ## _change_completed,                       \
  172                                                                 \
  173         k_ ## class ## _data_unavailable,                       \
  174         k_ ## class ## _get_attributes,                         \
  175         k_ ## class ## _lock_request,                           \
  176         k_ ## class ## _data_error,                             \
  177         k_ ## class ## _set_ready,                              \
  178         k_ ## class ## _destroy,                                \
  179         k_ ## class ## _data_supply,                            \
  180                                                                 \
  181         name,                                                   \
  182         size,                                                   \
  183         ZONE_NULL,                                              \
  184 }
  185 
  186 #else   __STDC__
  187 
  188 #define xmm_decl(class, name, size)                             \
  189 extern kern_return_t m_/**/class/**/_init();                    \
  190 extern kern_return_t m_/**/class/**/_terminate();               \
  191 extern void          m_/**/class/**/_deallocate();              \
  192 extern kern_return_t m_/**/class/**/_copy();                    \
  193 extern kern_return_t m_/**/class/**/_data_request();            \
  194 extern kern_return_t m_/**/class/**/_data_unlock();             \
  195 extern kern_return_t m_/**/class/**/_data_write();              \
  196 extern kern_return_t m_/**/class/**/_lock_completed();          \
  197 extern kern_return_t m_/**/class/**/_supply_completed();        \
  198 extern kern_return_t m_/**/class/**/_data_return();             \
  199 extern kern_return_t m_/**/class/**/_change_completed();        \
  200 extern kern_return_t k_/**/class/**/_data_unavailable();        \
  201 extern kern_return_t k_/**/class/**/_get_attributes();          \
  202 extern kern_return_t k_/**/class/**/_lock_request();            \
  203 extern kern_return_t k_/**/class/**/_data_error();              \
  204 extern kern_return_t k_/**/class/**/_set_ready();               \
  205 extern kern_return_t k_/**/class/**/_destroy();                 \
  206 extern kern_return_t k_/**/class/**/_data_supply();             \
  207                                                                 \
  208 struct xmm_class class/**/_class = {                            \
  209         m_/**/class/**/_init,                                   \
  210         m_/**/class/**/_terminate,                              \
  211         m_/**/class/**/_deallocate,                             \
  212         m_/**/class/**/_copy,                                   \
  213         m_/**/class/**/_data_request,                           \
  214         m_/**/class/**/_data_unlock,                            \
  215         m_/**/class/**/_data_write,                             \
  216         m_/**/class/**/_lock_completed,                         \
  217         m_/**/class/**/_supply_completed,                       \
  218         m_/**/class/**/_data_return,                            \
  219         m_/**/class/**/_change_completed,                       \
  220                                                                 \
  221         k_/**/class/**/_data_unavailable,                       \
  222         k_/**/class/**/_get_attributes,                         \
  223         k_/**/class/**/_lock_request,                           \
  224         k_/**/class/**/_data_error,                             \
  225         k_/**/class/**/_set_ready,                              \
  226         k_/**/class/**/_destroy,                                \
  227         k_/**/class/**/_data_supply,                            \
  228                                                                 \
  229         name,                                                   \
  230         size,                                                   \
  231         ZONE_NULL,                                              \
  232 }
  233 
  234 #endif  __STDC__
  235 
  236 struct xmm_obj {
  237         int             refcount;
  238         xmm_class_t     class;
  239         xmm_obj_t       m_mobj;
  240         xmm_obj_t       m_kobj;
  241         xmm_obj_t       k_mobj;
  242         xmm_obj_t       k_kobj;
  243 };
  244 
  245 struct xmm_reply {
  246         ipc_port_t      reply_to;
  247         mach_msg_type_name_t
  248                         reply_to_type;
  249         xmm_obj_t       kobj;
  250         xmm_obj_t       kobj_held;
  251         ipc_port_t      reply_proxy;
  252 };
  253 
  254 xmm_reply_t     xmm_k_reply();
  255 xmm_class_t     xmm_m_reply();
  256 
  257 kern_return_t   m_interpose_init();
  258 kern_return_t   m_interpose_terminate();
  259 kern_return_t   m_interpose_copy();
  260 kern_return_t   m_interpose_data_request();
  261 kern_return_t   m_interpose_data_unlock();
  262 kern_return_t   m_interpose_data_write();
  263 kern_return_t   m_interpose_lock_completed();
  264 kern_return_t   m_interpose_supply_completed();
  265 kern_return_t   m_interpose_data_return();
  266 kern_return_t   m_interpose_change_completed();
  267 kern_return_t   k_interpose_data_unavailable();
  268 kern_return_t   k_interpose_get_attributes();
  269 kern_return_t   k_interpose_lock_request();
  270 kern_return_t   k_interpose_data_error();
  271 kern_return_t   k_interpose_set_ready();
  272 kern_return_t   k_interpose_destroy();
  273 kern_return_t   k_interpose_data_supply();
  274 
  275 kern_return_t   m_invalid_init();
  276 kern_return_t   m_invalid_terminate();
  277 kern_return_t   m_invalid_copy();
  278 kern_return_t   m_invalid_data_request();
  279 kern_return_t   m_invalid_data_unlock();
  280 kern_return_t   m_invalid_data_write();
  281 kern_return_t   m_invalid_lock_completed();
  282 kern_return_t   m_invalid_supply_completed();
  283 kern_return_t   m_invalid_data_return();
  284 kern_return_t   m_invalid_change_completed();
  285 kern_return_t   k_invalid_data_unavailable();
  286 kern_return_t   k_invalid_get_attributes();
  287 kern_return_t   k_invalid_lock_request();
  288 kern_return_t   k_invalid_data_error();
  289 kern_return_t   k_invalid_set_ready();
  290 kern_return_t   k_invalid_destroy();
  291 kern_return_t   k_invalid_data_supply();
  292 
  293 kern_return_t   xmm_obj_allocate();
  294 kern_return_t   xmm_reply_allocate();
  295 xmm_reply_t     convert_port_to_reply();
  296 
  297 extern ipc_port_t remote_host_priv();
  298 
  299 /*
  300  * Central repository of magic reply_to_types uses for non-port reply_tos.
  301  */
  302 #define XMM_SVM_REPLY           (MACH_MSG_TYPE_LAST + 1)
  303 #define XMM_SPLIT_REPLY         (MACH_MSG_TYPE_LAST + 2)
  304 #define XMM_BUFFER_REPLY        (MACH_MSG_TYPE_LAST + 3)
  305 
  306 #define xmm_reply_allocate_send_once(kobj, reply_to, replyp)\
  307 xmm_reply_allocate((kobj), (reply_to), MACH_MSG_TYPE_PORT_SEND_ONCE, (replyp))
  308 
  309 /*
  310  * More meaningful parameter constants for memory_object calls.
  311  */
  312 #define OBJECT_READY_FALSE      FALSE
  313 #define MAY_CACHE_FALSE         FALSE
  314 #define USE_OLD_PAGEOUT_FALSE   FALSE
  315 #define PRECIOUS_FALSE          FALSE
  316 
  317 #define OBJECT_READY_TRUE       TRUE
  318 #define MAY_CACHE_TRUE          TRUE
  319 #define USE_OLD_PAGEOUT_TRUE    TRUE
  320 #define PRECIOUS_TRUE           TRUE
  321 
  322 #ifndef KERNEL
  323 char    *malloc();
  324 int     free();
  325 
  326 /*
  327  * XXX should find or define vm_page_shift
  328  */
  329 #define atop(addr)      ((addr) / vm_page_size)
  330 #define ptoa(page)      ((page) * vm_page_size)
  331 #endif  KERNEL
  332 
  333 #define XMM_USE_MACROS  0
  334 
  335 #ifdef  lint
  336 #undef  XMM_USE_MACROS
  337 #define XMM_USE_MACROS  0
  338 #endif
  339 
  340 #if     XMM_USE_MACROS
  341 
  342 @@@_need_to_rewrite_macros_before_this_option_can_be_enabled_@@@;
  343 
  344 #else   XMM_USE_MACROS
  345 
  346 #endif  XMM_USE_MACROS
  347 
  348 #endif  _NORMA_XMM_OBJ_H_

Cache object: 05a629f913e01fbeb17667d80109b2e5


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.