From: Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.
This patch is to add keyboard input device type.
Signed-off-by: Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
---
docs/schemas/domaincommon.rng | 1 +
src/conf/domain_conf.c | 20 +++++++++++++-------
src/conf/domain_conf.h | 1 +
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c1efcd2..601e7ac 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3269,6 +3269,7 @@
<choice>
<value>tablet</value>
<value>mouse</value>
+ <value>keyboard</value>
</choice>
</attribute>
<optional>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index f6065ed..9d344bc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -506,7 +506,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
"mouse",
- "tablet")
+ "tablet",
+ "keyboard")
VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
"ps2",
@@ -7796,8 +7797,9 @@ virDomainInputDefParseXML(const char *ostype,
}
if (STREQ(ostype, "hvm")) {
- if (def->bus == VIR_DOMAIN_INPUT_BUS_PS2 && /* Only allow mouse
for ps2 */
- def->type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+ if (def->bus == VIR_DOMAIN_INPUT_BUS_PS2 && /* PS2 can be mouse or
keyboard */
+ !(def->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+ def->type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("ps2 bus does not support %s input device"),
type);
@@ -7815,7 +7817,8 @@ virDomainInputDefParseXML(const char *ostype,
_("unsupported input bus %s"),
bus);
}
- if (def->type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+ if (def->type != VIR_DOMAIN_INPUT_TYPE_MOUSE &&
+ def->type != VIR_DOMAIN_INPUT_TYPE_KBD) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("xen bus does not support %s input device"),
type);
@@ -7824,7 +7827,8 @@ virDomainInputDefParseXML(const char *ostype,
}
} else {
if (STREQ(ostype, "hvm")) {
- if (def->type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+ if (def->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+ def->type == VIR_DOMAIN_INPUT_TYPE_KBD)
def->bus = VIR_DOMAIN_INPUT_BUS_PS2;
else
def->bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12422,10 +12426,12 @@ virDomainDefParseXML(xmlDocPtr xml,
* XXX will this be true for other virt types ? */
if ((STREQ(def->os.type, "hvm") &&
input->bus == VIR_DOMAIN_INPUT_BUS_PS2 &&
- input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+ input->type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
(STRNEQ(def->os.type, "hvm") &&
input->bus == VIR_DOMAIN_INPUT_BUS_XEN &&
- input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+ input->type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
virDomainInputDefFree(input);
continue;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4895e81..98706d5 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1239,6 +1239,7 @@ struct _virDomainTPMDef {
enum virDomainInputType {
VIR_DOMAIN_INPUT_TYPE_MOUSE,
VIR_DOMAIN_INPUT_TYPE_TABLET,
+ VIR_DOMAIN_INPUT_TYPE_KBD,
VIR_DOMAIN_INPUT_TYPE_LAST
};
--
1.8.2.1