linux/drivers/misc/vmw_vmci/vmci_handle_array.h
<<
>>
Prefs
   1/*
   2 * VMware VMCI Driver
   3 *
   4 * Copyright (C) 2012 VMware, Inc. All rights reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License as published by the
   8 * Free Software Foundation version 2 and no later version.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  12 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13 * for more details.
  14 */
  15
  16#ifndef _VMCI_HANDLE_ARRAY_H_
  17#define _VMCI_HANDLE_ARRAY_H_
  18
  19#include <linux/vmw_vmci_defs.h>
  20#include <linux/limits.h>
  21#include <linux/types.h>
  22
  23struct vmci_handle_arr {
  24        u32 capacity;
  25        u32 max_capacity;
  26        u32 size;
  27        u32 pad;
  28        struct vmci_handle entries[];
  29};
  30
  31#define VMCI_HANDLE_ARRAY_HEADER_SIZE                           \
  32        offsetof(struct vmci_handle_arr, entries)
  33/* Select a default capacity that results in a 64 byte sized array */
  34#define VMCI_HANDLE_ARRAY_DEFAULT_CAPACITY                      6
  35/* Make sure that the max array size can be expressed by a u32 */
  36#define VMCI_HANDLE_ARRAY_MAX_CAPACITY                          \
  37        ((U32_MAX - VMCI_HANDLE_ARRAY_HEADER_SIZE - 1) /        \
  38        sizeof(struct vmci_handle))
  39
  40struct vmci_handle_arr *vmci_handle_arr_create(u32 capacity, u32 max_capacity);
  41void vmci_handle_arr_destroy(struct vmci_handle_arr *array);
  42int vmci_handle_arr_append_entry(struct vmci_handle_arr **array_ptr,
  43                                 struct vmci_handle handle);
  44struct vmci_handle vmci_handle_arr_remove_entry(struct vmci_handle_arr *array,
  45                                                struct vmci_handle
  46                                                entry_handle);
  47struct vmci_handle vmci_handle_arr_remove_tail(struct vmci_handle_arr *array);
  48struct vmci_handle
  49vmci_handle_arr_get_entry(const struct vmci_handle_arr *array, u32 index);
  50bool vmci_handle_arr_has_entry(const struct vmci_handle_arr *array,
  51                               struct vmci_handle entry_handle);
  52struct vmci_handle *vmci_handle_arr_get_handles(struct vmci_handle_arr *array);
  53
  54static inline u32 vmci_handle_arr_get_size(
  55        const struct vmci_handle_arr *array)
  56{
  57        return array->size;
  58}
  59
  60
  61#endif /* _VMCI_HANDLE_ARRAY_H_ */
  62