From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:34411) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qa470-0007AZ-RP for qemu-devel@nongnu.org; Fri, 24 Jun 2011 06:59:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qa46v-0001WW-Dq for qemu-devel@nongnu.org; Fri, 24 Jun 2011 06:59:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:19733) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qa46v-0001WA-0q for qemu-devel@nongnu.org; Fri, 24 Jun 2011 06:59:41 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p5OAxew6009117 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 24 Jun 2011 06:59:40 -0400 From: Gerd Hoffmann Date: Fri, 24 Jun 2011 12:59:26 +0200 Message-Id: <1308913175-10454-5-git-send-email-kraxel@redhat.com> In-Reply-To: <1308913175-10454-1-git-send-email-kraxel@redhat.com> References: <1308913175-10454-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 04/13] ehci: add freq + maxframes properties List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann Add properties for the wakeup rate and the max number of frames ehci will process at once. The wakeup rate defaults to 1000 which equals the usb frame rate. This can be reduced to make qemu wake up less often when ehci is active. In case the wakeup rate is reduced or the ehci timer is delayed due to latency issues elsewhere in qemu ehci will process multiple frames at once. The maxframes property specifies the upper limit for this. Signed-off-by: Gerd Hoffmann --- hw/usb-ehci.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-) diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c index e33e546..fa9792e 100644 --- a/hw/usb-ehci.c +++ b/hw/usb-ehci.c @@ -373,6 +373,11 @@ struct EHCIState { target_phys_addr_t mem_base; int mem; int num_ports; + + /* properties */ + uint32_t freq; + uint32_t maxframes; + /* * EHCI spec version 1.0 Section 2.3 * Host Controller Operational Registers @@ -2048,7 +2053,7 @@ static void ehci_frame_timer(void *opaque) t_now = qemu_get_clock_ns(vm_clock); - expire_time = t_now + (get_ticks_per_sec() / FRAME_TIMER_FREQ); + expire_time = t_now + (get_ticks_per_sec() / ehci->freq); if (expire_time == t_now) { expire_time++; } @@ -2073,7 +2078,7 @@ static void ehci_frame_timer(void *opaque) ehci->sofv &= 0x000003ff; } - if (frames - i > 10) { + if (frames - i > ehci->maxframes) { skipped_frames++; } else { ehci_advance_periodic_state(ehci); @@ -2146,6 +2151,11 @@ static PCIDeviceInfo ehci_info = { .device_id = PCI_DEVICE_ID_INTEL_82801D, .revision = 0x10, .class_id = PCI_CLASS_SERIAL_USB, + .qdev.props = (Property[]) { + DEFINE_PROP_UINT32("freq", EHCIState, freq, FRAME_TIMER_FREQ), + DEFINE_PROP_UINT32("maxframes", EHCIState, maxframes, 128), + DEFINE_PROP_END_OF_LIST(), + }, }; static int usb_ehci_initfn(PCIDevice *dev) -- 1.7.1