1 /* 2 * Kernel/userspace transport abstraction for Hyper-V util driver. 3 * 4 * Copyright (C) 2015, Vitaly Kuznetsov <vkuznets@redhat.com> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 as published 8 * by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 13 * NON INFRINGEMENT. See the GNU General Public License for more 14 * details. 15 * 16 */ 17 18 #ifndef _HV_UTILS_TRANSPORT_H 19 #define _HV_UTILS_TRANSPORT_H 20 21 #include <linux/connector.h> 22 #include <linux/miscdevice.h> 23 24 enum hvutil_transport_mode { 25 HVUTIL_TRANSPORT_INIT = 0, 26 HVUTIL_TRANSPORT_NETLINK, 27 HVUTIL_TRANSPORT_CHARDEV, 28 }; 29 30 struct hvutil_transport { 31 int mode; /* hvutil_transport_mode */ 32 struct file_operations fops; /* file operations */ 33 struct miscdevice mdev; /* misc device */ 34 struct cb_id cn_id; /* CN_*_IDX/CN_*_VAL */ 35 struct list_head list; /* hvt_list */ 36 int (*on_msg)(void *, int); /* callback on new user message */ 37 void (*on_reset)(void); /* callback when userspace drops */ 38 u8 *outmsg; /* message to the userspace */ 39 int outmsg_len; /* its length */ 40 wait_queue_head_t outmsg_q; /* poll/read wait queue */ 41 struct mutex outmsg_lock; /* protects outmsg */ 42 }; 43 44 struct hvutil_transport *hvutil_transport_init(const char *name, 45 u32 cn_idx, u32 cn_val, 46 int (*on_msg)(void *, int), 47 void (*on_reset)(void)); 48 int hvutil_transport_send(struct hvutil_transport *hvt, void *msg, int len); 49 void hvutil_transport_destroy(struct hvutil_transport *hvt); 50 51 #endif /* _HV_UTILS_TRANSPORT_H */ 52