xref: /openbmc/linux/drivers/xen/pvcalls-front.c (revision 416efba0bd69b2f57da95049d505fff289269c11)
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