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/dev/vmware/vmci/vmci_kernel_if.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  * Copyright (c) 2018 VMware, Inc.
    3  *
    4  * SPDX-License-Identifier: (BSD-2-Clause OR GPL-2.0)
    5  *
    6  * $FreeBSD$
    7  */
    8 
    9 /* This file defines helper functions */
   10 
   11 #ifndef _VMCI_KERNEL_IF_H_
   12 #define _VMCI_KERNEL_IF_H_
   13 
   14 #include <sys/param.h>
   15 #include <sys/lock.h>
   16 #include <sys/mutex.h>
   17 #include <sys/queue.h>
   18 #include <sys/sema.h>
   19 
   20 #include "vmci_defs.h"
   21 
   22 #define VMCI_MEMORY_NORMAL              0x0
   23 #define VMCI_MEMORY_ATOMIC              0x1
   24 
   25 #define vmci_list(_l)                   LIST_HEAD(, _l)
   26 #define vmci_list_item(_l)              LIST_ENTRY(_l)
   27 #define vmci_list_init(_l)              LIST_INIT(_l)
   28 #define vmci_list_empty(_l)             LIST_EMPTY(_l)
   29 #define vmci_list_first(_l)             LIST_FIRST(_l)
   30 #define vmci_list_next(e, f)            LIST_NEXT(e, f)
   31 #define vmci_list_insert(_l, _e, n)     LIST_INSERT_HEAD(_l, _e, n)
   32 #define vmci_list_remove(_e, n)         LIST_REMOVE(_e, n)
   33 #define vmci_list_scan(v, _l, n)        LIST_FOREACH(v, _l, n)
   34 #define vmci_list_scan_safe(_e, _l, n, t)                               \
   35         LIST_FOREACH_SAFE(_e, _l, n, t)
   36 #define vmci_list_swap(_l1, _l2, t, f)  LIST_SWAP(_l1, _l2, t, f)
   37 
   38 typedef unsigned short int vmci_io_port;
   39 typedef int vmci_io_handle;
   40 
   41 void    vmci_read_port_bytes(vmci_io_handle handle, vmci_io_port port,
   42             uint8_t *buffer, size_t buffer_length);
   43 
   44 typedef struct mtx vmci_lock;
   45 int     vmci_init_lock(vmci_lock *lock, char *name);
   46 void    vmci_cleanup_lock(vmci_lock *lock);
   47 void    vmci_grab_lock(vmci_lock *lock);
   48 void    vmci_release_lock(vmci_lock *lock);
   49 void    vmci_grab_lock_bh(vmci_lock *lock);
   50 void    vmci_release_lock_bh(vmci_lock *lock);
   51 int     vmci_initialized_lock(vmci_lock *lock);
   52 
   53 void    *vmci_alloc_kernel_mem(size_t size, int flags);
   54 void    vmci_free_kernel_mem(void *ptr, size_t size);
   55 
   56 typedef struct sema vmci_event;
   57 typedef int (*vmci_event_release_cb)(void *client_data);
   58 void    vmci_create_event(vmci_event *event);
   59 void    vmci_destroy_event(vmci_event *event);
   60 void    vmci_signal_event(vmci_event *event);
   61 void    vmci_wait_on_event(vmci_event *event, vmci_event_release_cb release_cb,
   62             void *client_data);
   63 bool    vmci_wait_on_event_interruptible(vmci_event *event,
   64             vmci_event_release_cb release_cb, void *client_data);
   65 
   66 typedef void (vmci_work_fn)(void *data);
   67 bool    vmci_can_schedule_delayed_work(void);
   68 int     vmci_schedule_delayed_work(vmci_work_fn *work_fn, void *data);
   69 void    vmci_delayed_work_cb(void *context, int data);
   70 
   71 typedef struct mtx vmci_mutex;
   72 int     vmci_mutex_init(vmci_mutex *mutex, char *name);
   73 void    vmci_mutex_destroy(vmci_mutex *mutex);
   74 void    vmci_mutex_acquire(vmci_mutex *mutex);
   75 void    vmci_mutex_release(vmci_mutex *mutex);
   76 int     vmci_mutex_initialized(vmci_mutex *mutex);
   77 
   78 void    *vmci_alloc_queue(uint64_t size, uint32_t flags);
   79 void    vmci_free_queue(void *q, uint64_t size);
   80 
   81 typedef PPN *vmci_ppn_list;
   82 struct ppn_set {
   83         uint64_t        num_produce_pages;
   84         uint64_t        num_consume_pages;
   85         vmci_ppn_list   produce_ppns;
   86         vmci_ppn_list   consume_ppns;
   87         bool            initialized;
   88 };
   89 
   90 int     vmci_alloc_ppn_set(void *produce_q, uint64_t num_produce_pages,
   91             void *consume_q, uint64_t num_consume_pages,
   92             struct ppn_set *ppn_set);
   93 void    vmci_free_ppn_set(struct ppn_set *ppn_set);
   94 int     vmci_populate_ppn_list(uint8_t *call_buf, const struct ppn_set *ppnset);
   95 
   96 #endif /* !_VMCI_KERNEL_IF_H_ */

Cache object: ffb5069d757695bd8d89b823d5b282e5


[ 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.