From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LKbTa-0005tc-1Z for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:41:50 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LKbTZ-0005tK-GM for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:41:49 -0500 Received: from [199.232.76.173] (port=57691 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LKbTZ-0005tE-CU for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:41:49 -0500 Received: from savannah.gnu.org ([199.232.41.3]:50924 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LKbTZ-0006JW-1r for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:41:49 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LKbTY-0002Jv-FV for qemu-devel@nongnu.org; Wed, 07 Jan 2009 16:41:48 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LKbTY-0002Jr-45 for qemu-devel@nongnu.org; Wed, 07 Jan 2009 16:41:48 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Wed, 07 Jan 2009 16:41:48 +0000 Subject: [Qemu-devel] [6211] fix usb-hid SET_IDLE behaviour (Stefano Stabellini) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6211 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6211 Author: aliguori Date: 2009-01-07 16:41:47 +0000 (Wed, 07 Jan 2009) Log Message: ----------- fix usb-hid SET_IDLE behaviour (Stefano Stabellini) the usb-hid spec states that the SET_IDLE request has a 16bit value, where the upper byte specifies the idle rate (currently unimplemented, we handle only the 0 case, meaning infinite duration) and the lower byte specifies the report id (0 means all reports). In our code we do idle = value, while it should be idle = "upper byte", especially if the guest issues a GET_IDLE, we should return only the idle rate while we are returning only the report id. In practice it doesn't make much difference because I have only seen SET_VALUE with both bytes set to 0 so far, but still it is wrong. Signed-off-by: Stefano Stabellini Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/hw/usb-hid.c Modified: trunk/hw/usb-hid.c =================================================================== --- trunk/hw/usb-hid.c 2009-01-07 14:19:38 UTC (rev 6210) +++ trunk/hw/usb-hid.c 2009-01-07 16:41:47 UTC (rev 6211) @@ -65,7 +65,7 @@ }; int kind; int protocol; - int idle; + uint8_t idle; int changed; void *datain_opaque; void (*datain)(void *); @@ -794,7 +794,7 @@ data[0] = s->idle; break; case SET_IDLE: - s->idle = value; + s->idle = (uint8_t) (value >> 8); ret = 0; break; default: