1b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang/*
2b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * VMware VMCI Driver
3b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang *
4b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * Copyright (C) 2012 VMware, Inc. All rights reserved.
5b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang *
6b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * This program is free software; you can redistribute it and/or modify it
7b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * under the terms of the GNU General Public License as published by the
8b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * Free Software Foundation version 2 and no later version.
9b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang *
10b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * This program is distributed in the hope that it will be useful, but
11b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang * for more details.
14b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang */
15b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
16b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#ifndef _VMCI_HANDLE_ARRAY_H_
17b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#define _VMCI_HANDLE_ARRAY_H_
18b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
19b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#include <linux/vmw_vmci_defs.h>
20b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#include <linux/types.h>
21b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
22b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#define VMCI_HANDLE_ARRAY_DEFAULT_SIZE 4
23b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#define VMCI_ARR_CAP_MULT 2	/* Array capacity multiplier */
24b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
25b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstruct vmci_handle_arr {
26b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang	size_t capacity;
27b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang	size_t size;
28b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang	struct vmci_handle entries[];
29b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang};
30b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
31b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstruct vmci_handle_arr *vmci_handle_arr_create(size_t capacity);
32b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangvoid vmci_handle_arr_destroy(struct vmci_handle_arr *array);
33b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangvoid vmci_handle_arr_append_entry(struct vmci_handle_arr **array_ptr,
34b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang				  struct vmci_handle handle);
35b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstruct vmci_handle vmci_handle_arr_remove_entry(struct vmci_handle_arr *array,
36b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang						struct vmci_handle
37b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang						entry_handle);
38b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstruct vmci_handle vmci_handle_arr_remove_tail(struct vmci_handle_arr *array);
39b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstruct vmci_handle
40b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangvmci_handle_arr_get_entry(const struct vmci_handle_arr *array, size_t index);
41b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangbool vmci_handle_arr_has_entry(const struct vmci_handle_arr *array,
42b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang			       struct vmci_handle entry_handle);
43b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstruct vmci_handle *vmci_handle_arr_get_handles(struct vmci_handle_arr *array);
44b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
45b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhangstatic inline size_t vmci_handle_arr_get_size(
46b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang	const struct vmci_handle_arr *array)
47b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang{
48b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang	return array->size;
49b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang}
50b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
51b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang
52b484b26cc7be6ccf3676deb5e03aed2609ee9a40George Zhang#endif /* _VMCI_HANDLE_ARRAY_H_ */
53