1197dbaaaSGeorge Zhang /*
2197dbaaaSGeorge Zhang  * VMware VMCI Driver
3197dbaaaSGeorge Zhang  *
4197dbaaaSGeorge Zhang  * Copyright (C) 2012 VMware, Inc. All rights reserved.
5197dbaaaSGeorge Zhang  *
6197dbaaaSGeorge Zhang  * This program is free software; you can redistribute it and/or modify it
7197dbaaaSGeorge Zhang  * under the terms of the GNU General Public License as published by the
8197dbaaaSGeorge Zhang  * Free Software Foundation version 2 and no later version.
9197dbaaaSGeorge Zhang  *
10197dbaaaSGeorge Zhang  * This program is distributed in the hope that it will be useful, but
11197dbaaaSGeorge Zhang  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12197dbaaaSGeorge Zhang  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13197dbaaaSGeorge Zhang  * for more details.
14197dbaaaSGeorge Zhang  */
15197dbaaaSGeorge Zhang 
16197dbaaaSGeorge Zhang #ifndef _VMCI_DRIVER_H_
17197dbaaaSGeorge Zhang #define _VMCI_DRIVER_H_
18197dbaaaSGeorge Zhang 
19197dbaaaSGeorge Zhang #include <linux/vmw_vmci_defs.h>
20197dbaaaSGeorge Zhang #include <linux/wait.h>
21197dbaaaSGeorge Zhang 
22197dbaaaSGeorge Zhang #include "vmci_queue_pair.h"
23197dbaaaSGeorge Zhang #include "vmci_context.h"
24197dbaaaSGeorge Zhang 
25197dbaaaSGeorge Zhang enum vmci_obj_type {
26197dbaaaSGeorge Zhang 	VMCIOBJ_VMX_VM = 10,
27197dbaaaSGeorge Zhang 	VMCIOBJ_CONTEXT,
28197dbaaaSGeorge Zhang 	VMCIOBJ_SOCKET,
29197dbaaaSGeorge Zhang 	VMCIOBJ_NOT_SET,
30197dbaaaSGeorge Zhang };
31197dbaaaSGeorge Zhang 
32197dbaaaSGeorge Zhang /* For storing VMCI structures in file handles. */
33197dbaaaSGeorge Zhang struct vmci_obj {
34197dbaaaSGeorge Zhang 	void *ptr;
35197dbaaaSGeorge Zhang 	enum vmci_obj_type type;
36197dbaaaSGeorge Zhang };
37197dbaaaSGeorge Zhang 
386d6dfb4fSAndy King /*
396d6dfb4fSAndy King  * Needed by other components of this module.  It's okay to have one global
406d6dfb4fSAndy King  * instance of this because there can only ever be one VMCI device.  Our
416d6dfb4fSAndy King  * virtual hardware enforces this.
426d6dfb4fSAndy King  */
436d6dfb4fSAndy King extern struct pci_dev *vmci_pdev;
446d6dfb4fSAndy King 
45197dbaaaSGeorge Zhang u32 vmci_get_context_id(void);
46197dbaaaSGeorge Zhang int vmci_send_datagram(struct vmci_datagram *dg);
47197dbaaaSGeorge Zhang 
48197dbaaaSGeorge Zhang int vmci_host_init(void);
49197dbaaaSGeorge Zhang void vmci_host_exit(void);
50197dbaaaSGeorge Zhang bool vmci_host_code_active(void);
51197dbaaaSGeorge Zhang 
52197dbaaaSGeorge Zhang int vmci_guest_init(void);
53197dbaaaSGeorge Zhang void vmci_guest_exit(void);
54197dbaaaSGeorge Zhang bool vmci_guest_code_active(void);
55197dbaaaSGeorge Zhang u32 vmci_get_vm_context_id(void);
56197dbaaaSGeorge Zhang 
57f2db7361SVishnu DASA bool vmci_use_ppn64(void);
58f2db7361SVishnu DASA 
59197dbaaaSGeorge Zhang #endif /* _VMCI_DRIVER_H_ */
60