Message ID | 20191022055415.18122-4-svens@stackframe.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | HPPA: i82596, PS/2 and graphics emulation | expand |
On 10/22/19 7:54 AM, Sven Schnelle wrote: > HP-UX sends both the 'Set key make and break (0xfc) and > 'Set all key typematic make and break' (0xfa). QEMU response > with 'Resend' as it doesn't handle these commands. HP-UX than > reports an PS/2 max retransmission exceeded error. Add these > commands and just reply with ACK. > > Signed-off-by: Sven Schnelle <svens@stackframe.org> > --- > hw/input/ps2.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/hw/input/ps2.c b/hw/input/ps2.c > index 67f92f6112..6c2c7066a6 100644 > --- a/hw/input/ps2.c > +++ b/hw/input/ps2.c > @@ -49,6 +49,8 @@ > #define KBD_CMD_RESET_DISABLE 0xF5 /* reset and disable scanning */ > #define KBD_CMD_RESET_ENABLE 0xF6 /* reset and enable scanning */ > #define KBD_CMD_RESET 0xFF /* Reset */ > +#define KBD_CMD_SET_MAKE_BREAK 0xFC /* Set Make and Break mode */ > +#define KBD_CMD_SET_TYPEMATIC 0xFA /* Set Typematic Make and Break mode */ > > /* Keyboard Replies */ > #define KBD_REPLY_POR 0xAA /* Power on reset */ > @@ -592,6 +594,10 @@ void ps2_write_keyboard(void *opaque, int val) > KBD_REPLY_ACK, > KBD_REPLY_POR); > break; > + case KBD_CMD_SET_TYPEMATIC: > + case KBD_CMD_SET_MAKE_BREAK: Shouldn't we reset the write state machine too? I'm not sure. s->common.write_cmd = -1; > + ps2_queue(&s->common, KBD_REPLY_ACK); > + break; > default: > ps2_queue(&s->common, KBD_REPLY_RESEND); > break; >
Hi Philippe, On Tue, Oct 22, 2019 at 11:50:14AM +0200, Philippe Mathieu-Daudé wrote: > On 10/22/19 7:54 AM, Sven Schnelle wrote: > > HP-UX sends both the 'Set key make and break (0xfc) and > > 'Set all key typematic make and break' (0xfa). QEMU response > > with 'Resend' as it doesn't handle these commands. HP-UX than > > reports an PS/2 max retransmission exceeded error. Add these > > commands and just reply with ACK. > > > > Signed-off-by: Sven Schnelle <svens@stackframe.org> > > --- > > hw/input/ps2.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/hw/input/ps2.c b/hw/input/ps2.c > > index 67f92f6112..6c2c7066a6 100644 > > --- a/hw/input/ps2.c > > +++ b/hw/input/ps2.c > > @@ -49,6 +49,8 @@ > > #define KBD_CMD_RESET_DISABLE 0xF5 /* reset and disable scanning */ > > #define KBD_CMD_RESET_ENABLE 0xF6 /* reset and enable scanning */ > > #define KBD_CMD_RESET 0xFF /* Reset */ > > +#define KBD_CMD_SET_MAKE_BREAK 0xFC /* Set Make and Break mode */ > > +#define KBD_CMD_SET_TYPEMATIC 0xFA /* Set Typematic Make and Break mode */ > > /* Keyboard Replies */ > > #define KBD_REPLY_POR 0xAA /* Power on reset */ > > @@ -592,6 +594,10 @@ void ps2_write_keyboard(void *opaque, int val) > > KBD_REPLY_ACK, > > KBD_REPLY_POR); > > break; > > + case KBD_CMD_SET_TYPEMATIC: > > + case KBD_CMD_SET_MAKE_BREAK: > > Shouldn't we reset the write state machine too? I'm not sure. > > s->common.write_cmd = -1; Looking at this again i think the KBD_CMD_SET_TYPEMATIC case needs to assign common.write_cmd to properly handle the addtional data byte. For KBD_CMD_SET_MAKE_BREAK i think that's not neccessary. I'll fix that up. > > > + ps2_queue(&s->common, KBD_REPLY_ACK); > > + break; > > default: > > ps2_queue(&s->common, KBD_REPLY_RESEND); > > break; > > > Thanks Sven
diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 67f92f6112..6c2c7066a6 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -49,6 +49,8 @@ #define KBD_CMD_RESET_DISABLE 0xF5 /* reset and disable scanning */ #define KBD_CMD_RESET_ENABLE 0xF6 /* reset and enable scanning */ #define KBD_CMD_RESET 0xFF /* Reset */ +#define KBD_CMD_SET_MAKE_BREAK 0xFC /* Set Make and Break mode */ +#define KBD_CMD_SET_TYPEMATIC 0xFA /* Set Typematic Make and Break mode */ /* Keyboard Replies */ #define KBD_REPLY_POR 0xAA /* Power on reset */ @@ -592,6 +594,10 @@ void ps2_write_keyboard(void *opaque, int val) KBD_REPLY_ACK, KBD_REPLY_POR); break; + case KBD_CMD_SET_TYPEMATIC: + case KBD_CMD_SET_MAKE_BREAK: + ps2_queue(&s->common, KBD_REPLY_ACK); + break; default: ps2_queue(&s->common, KBD_REPLY_RESEND); break;
HP-UX sends both the 'Set key make and break (0xfc) and 'Set all key typematic make and break' (0xfa). QEMU response with 'Resend' as it doesn't handle these commands. HP-UX than reports an PS/2 max retransmission exceeded error. Add these commands and just reply with ACK. Signed-off-by: Sven Schnelle <svens@stackframe.org> --- hw/input/ps2.c | 6 ++++++ 1 file changed, 6 insertions(+)