* visornic - network interface
* visorhba - scsi disk adapter
-* visorhid - keyboard and mouse
+* visorinput - keyboard and mouse
These drivers conform to the standard Linux bus/device model described
within Documentation/driver-model/, and utilize a driver named visorbus to
* Because the s-Par back-end provides a standard EFI framebuffer to each
guest, the already-existing efifb Linux driver is used to provide guest
video access. Thus, the only s-Par-unique support that is necessary to
- provide a guest graphics console are for keyboard and mouse (via visorhid).
+ provide a guest graphics console are for keyboard and mouse (via visorinput).
2. Driver Descriptions
alias visorbus:8cd5994d-c58e-11da-95a9-00e08161165f visornic
-2.4. visorhid
--------------
+2.4. visorinput
+---------------
-The visorhid driver registers with visorbus as the function driver to
+The visorinput driver registers with visorbus as the function driver to
handle human input devices, specified using the
SPAR_KEYBOARD_CHANNEL_PROTOCOL_UUID and SPAR_MOUSE_CHANNEL_PROTOCOL_UUID
-types in the visorbus_register_visor_driver() call. visorhid uses
+types in the visorbus_register_visor_driver() call. visorinput uses
input_register_device() to expose devices of class input
(e.g., /sys/class/input/) for virtual keyboard and virtual mouse devices.
A s-Par virtual keyboard device maps 1-to-1 with a Linux input device
By registering as input class devices, modern versions of X will
automatically find and properly use s-Par virtual keyboard and mouse devices.
As the s-Par back-end reports keyboard and mouse activity via events on the
-virtual device channel, the visorhid driver delivers the activity to the
+virtual device channel, the visorinput driver delivers the activity to the
Linux environment by calling input_report_key() and input_report_abs().
You can interact with the guest console using the usyscon Partition Desktop
PartitionDesktop.msi, you will be able to launch a console for your guest
Linux environment by clicking the console icon in the s-Par web UI.
-When compiled as a module, visorhid can be autoloaded by visorbus in
+When compiled as a module, visorinput can be autoloaded by visorbus in
standard udev/systemd environments, as it includes the modules.alias
definition:
i.e.:
- alias visorbus:c73416d0-b0b8-44af-b304-9d2ae99f1b3d visorhid
- alias visorbus:addf07d4-94a9-46e2-81c3-61abcdbdbd87 visorhid
+ alias visorbus:c73416d0-b0b8-44af-b304-9d2ae99f1b3d visorinput
+ alias visorbus:addf07d4-94a9-46e2-81c3-61abcdbdbd87 visorinput
3. Minimum Required Driver Set
configurations where the Linux guest is provided with an SR-IOV NIC
for example, visornic is not technically required.
-visorhid is only required for a Linux guest running under s-Par if you
+visorinput is only required for a Linux guest running under s-Par if you
require graphics-mode access to your guest console.
-/* visorhid.c
+/* visorinput.c
*
* Copyright (C) 2011 - 2015 UNISYS CORPORATION
* All rights reserved.
SPAR_KEYBOARD_CHANNEL_PROTOCOL_UUID;
static const uuid_le spar_mouse_channel_protocol_uuid =
SPAR_MOUSE_CHANNEL_PROTOCOL_UUID;
-static int visorhid_probe(struct visor_device *dev);
-static void visorhid_remove(struct visor_device *dev);
-static void visorhid_channel_interrupt(struct visor_device *dev);
-static int visorhid_pause(struct visor_device *dev,
+static int visorinput_probe(struct visor_device *dev);
+static void visorinput_remove(struct visor_device *dev);
+static void visorinput_channel_interrupt(struct visor_device *dev);
+static int visorinput_pause(struct visor_device *dev,
visorbus_state_complete_func complete_func);
-static int visorhid_resume(struct visor_device *dev,
+static int visorinput_resume(struct visor_device *dev,
visorbus_state_complete_func complete_func);
static struct input_dev *register_client_keyboard(void);
static struct input_dev *register_client_mouse(void);
static void unregister_client_input(struct input_dev *visorinput_dev);
/* GUIDS for all channel types supported by this driver. */
-static struct visor_channeltype_descriptor visorhid_channel_types[] = {
+static struct visor_channeltype_descriptor visorinput_channel_types[] = {
{ SPAR_KEYBOARD_CHANNEL_PROTOCOL_UUID, "keyboard"},
{ SPAR_MOUSE_CHANNEL_PROTOCOL_UUID, "mouse"},
{ NULL_UUID_LE, NULL }
};
-MODULE_DEVICE_TABLE(visorbus, visorhid_channel_types);
+MODULE_DEVICE_TABLE(visorbus, visorinput_channel_types);
MODULE_ALIAS("visorbus:" SPAR_MOUSE_CHANNEL_PROTOCOL_UUID_STR);
MODULE_ALIAS("visorbus:" SPAR_KEYBOARD_CHANNEL_PROTOCOL_UUID_STR);
* we support, and what functions to call when a visor device that we support
* is attached or removed.
*/
-static struct visor_driver visorhid_driver = {
- .name = "visorhid",
+static struct visor_driver visorinput_driver = {
+ .name = "visorinput",
.vertag = NULL,
.owner = THIS_MODULE,
- .channel_types = visorhid_channel_types,
- .probe = visorhid_probe,
- .remove = visorhid_remove,
- .channel_interrupt = visorhid_channel_interrupt,
- .pause = visorhid_pause,
- .resume = visorhid_resume,
+ .channel_types = visorinput_channel_types,
+ .probe = visorinput_probe,
+ .remove = visorinput_remove,
+ .channel_interrupt = visorinput_channel_interrupt,
+ .pause = visorinput_pause,
+ .resume = visorinput_resume,
};
-enum visorhid_device_type {
- visorhid_keyboard,
- visorhid_mouse,
+enum visorinput_device_type {
+ visorinput_keyboard,
+ visorinput_mouse,
};
/* This is the private data that we store for each device.
* A pointer to this struct is maintained via
* dev_get_drvdata() / dev_set_drvdata() for each struct device.
*/
-struct visorhid_devdata {
+struct visorinput_devdata {
struct visor_device *dev;
/** lock for dev */
struct rw_semaphore lock_visor_dev;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */
};
-static struct visorhid_devdata *
-devdata_create(struct visor_device *dev, enum visorhid_device_type devtype)
+static struct visorinput_devdata *
+devdata_create(struct visor_device *dev, enum visorinput_device_type devtype)
{
- struct visorhid_devdata *devdata = NULL;
+ struct visorinput_devdata *devdata = NULL;
devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
if (!devdata)
* deliver our inputs to the guest OS.
*/
switch (devtype) {
- case visorhid_keyboard:
+ case visorinput_keyboard:
devdata->visorinput_dev = register_client_keyboard();
if (!devdata->visorinput_dev)
goto cleanups_register;
break;
- case visorhid_mouse:
+ case visorinput_mouse:
devdata->visorinput_dev = register_client_mouse();
if (!devdata->visorinput_dev)
goto cleanups_register;
}
static int
-visorhid_probe(struct visor_device *dev)
+visorinput_probe(struct visor_device *dev)
{
- struct visorhid_devdata *devdata = NULL;
+ struct visorinput_devdata *devdata = NULL;
uuid_le guid;
- enum visorhid_device_type devtype;
+ enum visorinput_device_type devtype;
guid = visorchannel_get_uuid(dev->visorchannel);
if (uuid_le_cmp(guid, spar_mouse_channel_protocol_uuid) == 0)
- devtype = visorhid_mouse;
+ devtype = visorinput_mouse;
else if (uuid_le_cmp(guid, spar_keyboard_channel_protocol_uuid) == 0)
- devtype = visorhid_keyboard;
+ devtype = visorinput_keyboard;
else
return -ENODEV;
devdata = devdata_create(dev, devtype);
}
static void
-visorhid_remove(struct visor_device *dev)
+visorinput_remove(struct visor_device *dev)
{
- struct visorhid_devdata *devdata = dev_get_drvdata(&dev->device);
+ struct visorinput_devdata *devdata = dev_get_drvdata(&dev->device);
if (!devdata)
return;
visorbus_disable_channel_interrupts(dev);
/* due to above, at this time no thread of execution will be
- * in visorhid_channel_interrupt()
+ * in visorinput_channel_interrupt()
*/
down_write(&devdata->lock_visor_dev);
* from the channel, and deliver them to the guest OS.
*/
static void
-visorhid_channel_interrupt(struct visor_device *dev)
+visorinput_channel_interrupt(struct visor_device *dev)
{
struct ultra_inputreport r;
int scancode, keycode;
int xmotion, ymotion, zmotion, button;
int i;
- struct visorhid_devdata *devdata = dev_get_drvdata(&dev->device);
+ struct visorinput_devdata *devdata = dev_get_drvdata(&dev->device);
if (!devdata)
return;
}
static int
-visorhid_pause(struct visor_device *dev,
+visorinput_pause(struct visor_device *dev,
visorbus_state_complete_func complete_func)
{
int rc;
- struct visorhid_devdata *devdata = dev_get_drvdata(&dev->device);
+ struct visorinput_devdata *devdata = dev_get_drvdata(&dev->device);
if (!devdata) {
rc = -ENODEV;
}
static int
-visorhid_resume(struct visor_device *dev,
+visorinput_resume(struct visor_device *dev,
visorbus_state_complete_func complete_func)
{
int rc;
- struct visorhid_devdata *devdata = dev_get_drvdata(&dev->device);
+ struct visorinput_devdata *devdata = dev_get_drvdata(&dev->device);
if (!devdata) {
rc = -ENODEV;
}
static int
-visorhid_init(void)
+visorinput_init(void)
{
- return visorbus_register_visor_driver(&visorhid_driver);
+ return visorbus_register_visor_driver(&visorinput_driver);
}
static void
-visorhid_cleanup(void)
+visorinput_cleanup(void)
{
- visorbus_unregister_visor_driver(&visorhid_driver);
+ visorbus_unregister_visor_driver(&visorinput_driver);
}
-module_init(visorhid_init);
-module_exit(visorhid_cleanup);
+module_init(visorinput_init);
+module_exit(visorinput_cleanup);
MODULE_AUTHOR("Unisys");
MODULE_LICENSE("GPL");