| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * VMware VMCI Driver |
| * |
| * Copyright (C) 2012 VMware, Inc. All rights reserved. |
| */ |
| |
| #ifndef _VMCI_DATAGRAM_H_ |
| #define _VMCI_DATAGRAM_H_ |
| |
| #include <linux/types.h> |
| #include <linux/list.h> |
| |
| #include "vmci_context.h" |
| |
| #define VMCI_MAX_DELAYED_DG_HOST_QUEUE_SIZE 256 |
| |
| /* |
| * The struct vmci_datagram_queue_entry is a queue header for the in-kernel VMCI |
| * datagram queues. It is allocated in non-paged memory, as the |
| * content is accessed while holding a spinlock. The pending datagram |
| * itself may be allocated from paged memory. We shadow the size of |
| * the datagram in the non-paged queue entry as this size is used |
| * while holding the same spinlock as above. |
| */ |
| struct vmci_datagram_queue_entry { |
| struct list_head list_item; /* For queuing. */ |
| size_t dg_size; /* Size of datagram. */ |
| struct vmci_datagram *dg; /* Pending datagram. */ |
| }; |
| |
| /* VMCIDatagramSendRecvInfo */ |
| struct vmci_datagram_snd_rcv_info { |
| u64 addr; |
| u32 len; |
| s32 result; |
| }; |
| |
| /* Datagram API for non-public use. */ |
| int vmci_datagram_dispatch(u32 context_id, struct vmci_datagram *dg, |
| bool from_guest); |
| int vmci_datagram_invoke_guest_handler(struct vmci_datagram *dg); |
| |
| #endif /* _VMCI_DATAGRAM_H_ */ |