162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * VMware VMCI Driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2012 VMware, Inc. All rights reserved.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef _VMCI_DRIVER_H_
962306a36Sopenharmony_ci#define _VMCI_DRIVER_H_
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/vmw_vmci_defs.h>
1262306a36Sopenharmony_ci#include <linux/wait.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include "vmci_queue_pair.h"
1562306a36Sopenharmony_ci#include "vmci_context.h"
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cienum vmci_obj_type {
1862306a36Sopenharmony_ci	VMCIOBJ_VMX_VM = 10,
1962306a36Sopenharmony_ci	VMCIOBJ_CONTEXT,
2062306a36Sopenharmony_ci	VMCIOBJ_SOCKET,
2162306a36Sopenharmony_ci	VMCIOBJ_NOT_SET,
2262306a36Sopenharmony_ci};
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/* For storing VMCI structures in file handles. */
2562306a36Sopenharmony_cistruct vmci_obj {
2662306a36Sopenharmony_ci	void *ptr;
2762306a36Sopenharmony_ci	enum vmci_obj_type type;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci/*
3162306a36Sopenharmony_ci * Needed by other components of this module.  It's okay to have one global
3262306a36Sopenharmony_ci * instance of this because there can only ever be one VMCI device.  Our
3362306a36Sopenharmony_ci * virtual hardware enforces this.
3462306a36Sopenharmony_ci */
3562306a36Sopenharmony_ciextern struct pci_dev *vmci_pdev;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciu32 vmci_get_context_id(void);
3862306a36Sopenharmony_ciint vmci_send_datagram(struct vmci_datagram *dg);
3962306a36Sopenharmony_civoid vmci_call_vsock_callback(bool is_host);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciint vmci_host_init(void);
4262306a36Sopenharmony_civoid vmci_host_exit(void);
4362306a36Sopenharmony_cibool vmci_host_code_active(void);
4462306a36Sopenharmony_ciint vmci_host_users(void);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciint vmci_guest_init(void);
4762306a36Sopenharmony_civoid vmci_guest_exit(void);
4862306a36Sopenharmony_cibool vmci_guest_code_active(void);
4962306a36Sopenharmony_ciu32 vmci_get_vm_context_id(void);
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_cibool vmci_use_ppn64(void);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#endif /* _VMCI_DRIVER_H_ */
54