1685a6bf8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2d021c344SAndy King /*
3d021c344SAndy King  * VMware vSockets Driver
4d021c344SAndy King  *
5d021c344SAndy King  * Copyright (C) 2009-2013 VMware, Inc. All rights reserved.
6d021c344SAndy King  */
7d021c344SAndy King 
8d021c344SAndy King #ifndef __VMCI_TRANSPORT_NOTIFY_H__
9d021c344SAndy King #define __VMCI_TRANSPORT_NOTIFY_H__
10d021c344SAndy King 
11d021c344SAndy King #include <linux/types.h>
12d021c344SAndy King #include <linux/vmw_vmci_defs.h>
13d021c344SAndy King #include <linux/vmw_vmci_api.h>
14d021c344SAndy King 
15d021c344SAndy King #include "vmci_transport.h"
16d021c344SAndy King 
17d021c344SAndy King /* Comment this out to compare with old protocol. */
18d021c344SAndy King #define VSOCK_OPTIMIZATION_WAITING_NOTIFY 1
19d021c344SAndy King #if defined(VSOCK_OPTIMIZATION_WAITING_NOTIFY)
20d021c344SAndy King /* Comment this out to remove flow control for "new" protocol */
21d021c344SAndy King #define VSOCK_OPTIMIZATION_FLOW_CONTROL 1
22d021c344SAndy King #endif
23d021c344SAndy King 
24d021c344SAndy King #define VMCI_TRANSPORT_MAX_DGRAM_RESENDS       10
25d021c344SAndy King 
26d021c344SAndy King struct vmci_transport_recv_notify_data {
27d021c344SAndy King 	u64 consume_head;
28d021c344SAndy King 	u64 produce_tail;
29d021c344SAndy King 	bool notify_on_block;
30d021c344SAndy King };
31d021c344SAndy King 
32d021c344SAndy King struct vmci_transport_send_notify_data {
33d021c344SAndy King 	u64 consume_head;
34d021c344SAndy King 	u64 produce_tail;
35d021c344SAndy King };
36d021c344SAndy King 
37d021c344SAndy King /* Socket notification callbacks. */
38d021c344SAndy King struct vmci_transport_notify_ops {
39d021c344SAndy King 	void (*socket_init) (struct sock *sk);
40d021c344SAndy King 	void (*socket_destruct) (struct vsock_sock *vsk);
41d021c344SAndy King 	int (*poll_in) (struct sock *sk, size_t target,
42d021c344SAndy King 			  bool *data_ready_now);
43d021c344SAndy King 	int (*poll_out) (struct sock *sk, size_t target,
44d021c344SAndy King 			   bool *space_avail_now);
45d021c344SAndy King 	void (*handle_notify_pkt) (struct sock *sk,
46d021c344SAndy King 				   struct vmci_transport_packet *pkt,
47d021c344SAndy King 				   bool bottom_half, struct sockaddr_vm *dst,
48d021c344SAndy King 				   struct sockaddr_vm *src,
49d021c344SAndy King 				   bool *pkt_processed);
50d021c344SAndy King 	int (*recv_init) (struct sock *sk, size_t target,
51d021c344SAndy King 			  struct vmci_transport_recv_notify_data *data);
52d021c344SAndy King 	int (*recv_pre_block) (struct sock *sk, size_t target,
53d021c344SAndy King 			       struct vmci_transport_recv_notify_data *data);
54d021c344SAndy King 	int (*recv_pre_dequeue) (struct sock *sk, size_t target,
55d021c344SAndy King 				 struct vmci_transport_recv_notify_data *data);
56d021c344SAndy King 	int (*recv_post_dequeue) (struct sock *sk, size_t target,
57d021c344SAndy King 				  ssize_t copied, bool data_read,
58d021c344SAndy King 				  struct vmci_transport_recv_notify_data *data);
59d021c344SAndy King 	int (*send_init) (struct sock *sk,
60d021c344SAndy King 			  struct vmci_transport_send_notify_data *data);
61d021c344SAndy King 	int (*send_pre_block) (struct sock *sk,
62d021c344SAndy King 			       struct vmci_transport_send_notify_data *data);
63d021c344SAndy King 	int (*send_pre_enqueue) (struct sock *sk,
64d021c344SAndy King 				 struct vmci_transport_send_notify_data *data);
65d021c344SAndy King 	int (*send_post_enqueue) (struct sock *sk, ssize_t written,
66d021c344SAndy King 				  struct vmci_transport_send_notify_data *data);
67d021c344SAndy King 	void (*process_request) (struct sock *sk);
68d021c344SAndy King 	void (*process_negotiate) (struct sock *sk);
69d021c344SAndy King };
70d021c344SAndy King 
713b22dae3SJulia Lawall extern const struct vmci_transport_notify_ops vmci_transport_notify_pkt_ops;
723b22dae3SJulia Lawall extern const
733b22dae3SJulia Lawall struct vmci_transport_notify_ops vmci_transport_notify_pkt_q_state_ops;
74d021c344SAndy King 
75d021c344SAndy King #endif /* __VMCI_TRANSPORT_NOTIFY_H__ */
76