1*416efba0SStefano Stabellini /* 2*416efba0SStefano Stabellini * (c) 2017 Stefano Stabellini <stefano@aporeto.com> 3*416efba0SStefano Stabellini * 4*416efba0SStefano Stabellini * This program is free software; you can redistribute it and/or modify 5*416efba0SStefano Stabellini * it under the terms of the GNU General Public License as published by 6*416efba0SStefano Stabellini * the Free Software Foundation; either version 2 of the License, or 7*416efba0SStefano Stabellini * (at your option) any later version. 8*416efba0SStefano Stabellini * 9*416efba0SStefano Stabellini * This program is distributed in the hope that it will be useful, 10*416efba0SStefano Stabellini * but WITHOUT ANY WARRANTY; without even the implied warranty of 11*416efba0SStefano Stabellini * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*416efba0SStefano Stabellini * GNU General Public License for more details. 13*416efba0SStefano Stabellini */ 14*416efba0SStefano Stabellini 15*416efba0SStefano Stabellini #include <linux/module.h> 16*416efba0SStefano Stabellini 17*416efba0SStefano Stabellini #include <xen/events.h> 18*416efba0SStefano Stabellini #include <xen/grant_table.h> 19*416efba0SStefano Stabellini #include <xen/xen.h> 20*416efba0SStefano Stabellini #include <xen/xenbus.h> 21*416efba0SStefano Stabellini #include <xen/interface/io/pvcalls.h> 22*416efba0SStefano Stabellini 23*416efba0SStefano Stabellini static const struct xenbus_device_id pvcalls_front_ids[] = { 24*416efba0SStefano Stabellini { "pvcalls" }, 25*416efba0SStefano Stabellini { "" } 26*416efba0SStefano Stabellini }; 27*416efba0SStefano Stabellini 28*416efba0SStefano Stabellini static int pvcalls_front_remove(struct xenbus_device *dev) 29*416efba0SStefano Stabellini { 30*416efba0SStefano Stabellini return 0; 31*416efba0SStefano Stabellini } 32*416efba0SStefano Stabellini 33*416efba0SStefano Stabellini static int pvcalls_front_probe(struct xenbus_device *dev, 34*416efba0SStefano Stabellini const struct xenbus_device_id *id) 35*416efba0SStefano Stabellini { 36*416efba0SStefano Stabellini return 0; 37*416efba0SStefano Stabellini } 38*416efba0SStefano Stabellini 39*416efba0SStefano Stabellini static void pvcalls_front_changed(struct xenbus_device *dev, 40*416efba0SStefano Stabellini enum xenbus_state backend_state) 41*416efba0SStefano Stabellini { 42*416efba0SStefano Stabellini } 43*416efba0SStefano Stabellini 44*416efba0SStefano Stabellini static struct xenbus_driver pvcalls_front_driver = { 45*416efba0SStefano Stabellini .ids = pvcalls_front_ids, 46*416efba0SStefano Stabellini .probe = pvcalls_front_probe, 47*416efba0SStefano Stabellini .remove = pvcalls_front_remove, 48*416efba0SStefano Stabellini .otherend_changed = pvcalls_front_changed, 49*416efba0SStefano Stabellini }; 50*416efba0SStefano Stabellini 51*416efba0SStefano Stabellini static int __init pvcalls_frontend_init(void) 52*416efba0SStefano Stabellini { 53*416efba0SStefano Stabellini if (!xen_domain()) 54*416efba0SStefano Stabellini return -ENODEV; 55*416efba0SStefano Stabellini 56*416efba0SStefano Stabellini pr_info("Initialising Xen pvcalls frontend driver\n"); 57*416efba0SStefano Stabellini 58*416efba0SStefano Stabellini return xenbus_register_frontend(&pvcalls_front_driver); 59*416efba0SStefano Stabellini } 60*416efba0SStefano Stabellini 61*416efba0SStefano Stabellini module_init(pvcalls_frontend_init); 62