发明的详细描述
现在参考附图,本发明通过诸如一个通用串行总线(USB)之类总线连接的一个或多个硬件设备来维持功率控制。
图1以方框图的形式说明了通过USB连接到设备的一个硬件模式。在图1所示的实施例中,一个计算机82包括一个内部PCI总线84。外围组件包括,但并不限制于,结合图2所描述的这些组件,连接到内部PCI总线84。例如,一个外围组件可以是一个综合设备(例如,一个具有多个接口的设备),一个诸如USB根HUB88的根集线器,或者一个诸如USB主机控制器的控制器86。在图1中,在计算机82中的USB主机控制器86连接到PCI总线84。USB主机控制器86包括USB根HUB 88,可以通过一般以89表示的USB连接到外围设备。在其它实施例中,USB根HUB 88是在USB控制器86的外部。在图1中,打印机90和操纵杆92连接到USB根HUB 88。在该实施例中,打印机90包括一个HUB因为它还有一个鼠标器94和扬声器96与它相连。
在图1所示实例中的外围设备都是以一个树状结构中的节点来分层次组成的,在该树状结构中鼠标器94和扬声器96都是子结点或者是打印机90的子设备。如果打印机90是一个综合设备,则打印组件将是同属于相同打印机90设备的其它组件的一个兄弟。在另一个实施例中,一个原始的母体设备可用作为一个综合设备的母体,且该综合设备自身并不具有最小功能性。同样,打印机90和操纵杆92都是计算机82的子结点。在这种情况下,控制器86、根HUB88、或者计算82都可称之为打印机90和操纵杆92的母结点。一般来说,HUB。控制器或者原始母体可以是一个和多个子结点的母结点。为了简洁,参考字符98一般是指设备,例如,一个或多个打印机90、操纵杆92、鼠标器94、扬声器96,等等。
本领域中的熟练技术人士都会注意到,图1所示的结点结构仅仅是一个实例,并且本发明可以采用以连接到一个第二结点的树状结构中的多个结点的任何一个结点来操作。此外,如果图1中的总线是一个USB,则本领域中的熟练技术人士将会注意到,本发明可以采用任何类型的总线或者允许在设备之间或在设备和控制器之间通讯的网络结构进行操作。
在某些现有技术的系统中,综合设备的子设备不能够单独进行功率控制,因为子设备是相同物理设备的组件并且相互共同享用着相同的公共功率电源。本发明对设备98提供了独立的功率控制,该设备并不具有通过任何连接的子设备(例如,鼠标器94和扬声器96)的独立功率控制。本发明的实现是在诸如USB设备驱动器(例如,类驱动器)和USB核心堆之类的驱动软件之间的协同努力。虽然本文所讨论的本发明包括对类驱动器的示例引用,本领域的熟练技术人士都会注意到,本发明一般可以任何类型的设备驱动软件(即,并不限制于对类驱动器)来操作。根据本发明,USB类驱动器可向USB核心堆指示,该设备98是空闲的且不再在使用。当所指定的设备98是空闲时,驱动器可以希望将它们各个设备98进入到低功率模式。低功率模式若可用的话可以节省能源以及电池的功率。另外,本发明包括了一个机制,该机制使得USB核心堆可以对该类驱动器指示出该类设备98可以安全地进入到低功率模式。在驱动器和核心堆之间的交互允许USB类驱动器在驱动器检测到它们的设备98是空闲的或者不再使用时就关闭它们的设备98的电源。
根据本发明的操作,具有独立的输入/输出控制和功能但没有独立功率控制的两个独立设备可以变成空闲的并准备单独暂停。两个独立的设备向第三设备发出信号,通知第三设备这两个设备是相互连接的且将同时暂停。此外,主机控制器86可以空闲,即使在一个或多个设备是连接到根HUB 88的一个或多个端口。同样,本发明包括适用于独立暂停连接到总线的一个或多个根HUB的方法。在只有一个综合设备连接到总线的情况下,本发明还允许暂停一个总线。相类似,在没有设备与总线相连接的情况下,本发明的操作允许一个计算机来暂停一个总线控制器。
一个新的输入/输出控制(IOCTL)请求允许一个USB类驱动器向一个USB核心堆指出,与USB类驱动器有关的驱动器已准备暂停。当该类驱动器已经确定所下载的USB设备98处于空闲且不再使用时,USB类驱动器就向USB核心堆发出IOCTL请求。在一个实施例中,IOCTL通过一个输入/输出请求包(IRP)机制发送至USB核心堆。在IOCTL请求中转发至USB核心堆的参数之一是在所提交该请求的USB类驱动器中的回叫信号功能的指针。该回叫信号功能是提交该请求的USB类驱动器中的实际功能,当已经进行了呼叫时,它可使USB设备98进入到低功率模式。
在本发明的一个实施例中,设备98通过USB相互连接。一个USB综合设备(例如,打印机90,扬声器96)可以是一种类型的USB设备98,该设备可以包含用于多种(或者相同的多个实例)要被下载的USB类驱动器的多个接口。例如,许多USB扬声器(例如,扬声器96)设备事实上都是USB综合设备,事实上,它的一个接口事实上是一个USB音频组件,另一个接口是一组人机接口设备(HID)控制,一般可用于提升/降低由扬声器96输出的声音音量。典型的是,对一个简单的USB设备或者对一个USB综合设备的接口来说,适用于USB综合设备98的驱动器一般知道它是否能被下载。一般,USB综合设备都具有多个接口。对于USB设备98来说,用于控制一个HID或其它USB设备的软件也可称之为USB类驱动器。同样,对于一个USB来说,用于控制该控制器的软件也可以称之为USB核心堆。该USB核心堆包括一个原始母驱动器、一个HUB驱动器以及一个控制器驱动器。例如,USB核心堆一般可以包括作为USB综合设备一个类驱动器的USBCCGP.SYS以及作为用于USB HUB设备一个类驱动器和作为用于USB集线器驱动器的类驱动器和用于USB的总线驱动器的USBHUB.SYS。USBHUB.SYS为每一个连接到系统的USB设备,无论是简单的还是综合的设备,都创建一个物理设备对象(PD0)。在综合设备的情况下,可以在由USBHUB.SYS所创建的一个PDO上下载USBCCGP.SYS作为该类驱动器。
常规USB实现所在着各种限制。特别是,在一个USB综合设备的情况下,一个单一的接口就不能够进入到一个低功率模式,且也不能要求在同一USB综合设备上的所有的其它接口进入到一个低功率模式。此外,在不了解与该接口有关USB类驱动器的知识或许可的条件下,一个接口不能够强制进入到一个低功率模式。
另外,某些类型的USB类驱动器,特别是适用于USB输入(或者HID)设备的那些USB类设备,就需要用户输入或者设备活动的通知,以便于了解何时将USB设备返回到全功率模式。对一些现有的USB主机控制器来说,控制器中时常存在着一个硬件问题,如果只有一个单个USB端口是处于低功率模式或者整个控制器的硬件本身不是处于低功率模式,则通知功能就难以发挥其功能。例如,如果有一个USB鼠标器(即,鼠标器94)连接到一个怀疑是USB主机控制器(即,USB主机控制器86)中的一个端口,以及还存在着另一个USB设备连接到同一控制器的另一端口时,则如果用于USB鼠标器的该类驱动器使得设备进入到一个低功率模式,那么USB类驱动器就将不能知道后续的设备活动(即,终端用户是移动鼠标器还是点击鼠标器的按钮)。于是,用于USB鼠标器的USB类驱动器就不能够将设备设置成全功率模式。该硬件问题带给终端用户的影响是很显然的,该USB鼠标器已经变得不能操作了。由于这类有问题的USB主机控制器,当采用USB工作时的另一个限制是用于USB设备而下载的USB类驱动器不能允许把已下载了该驱动器的USB设备基于来自USB类驱动器单方面的请求而使之进入到一个低功率模式。
结合图4和图5说明和讨论了根据本发明的驱动软件的操作。在图4中,驱动软件支持一个USB设备(例,一个HID)作为以层次结构设备树中的一个子设备来操作。在图5中,驱动器软件支持层次结构设备树中的一个USB综合的母设备和USB集线器设备。本发明的该驱动软件包括正如图4和图5所说明的软件的两个方面。
再参考图2,该方框图说明了一例适用于实现本发明的计算机系统的环境100的实例。该计算机系统环境100仅仅只是一例适用的计算机或者操作环境的实例,并不试图对本发明的使用范围和功能形成任何限制。并不应该将计算机系统环境100解释成具有与在示例性计算机系统环境100中所说明组件中任何一个或其组合有关的依赖性或要求性。
图2以计算机130形式显示了一例通用的计算设备的实例。在本发明的一个实施例中,一个诸如计算机130的计算机也适用于在本文中所说明和讨论的其它附图中使用。例如,一个诸如计算机130的计算机可适合作为计算机82来使用。
计算机130具有一个或多个处理器或处理单元132和一个系统存储器134。在所说明的实施例中,一个系统总线136与各种系统组件相耦合,包括:系统存储器134与处理器132的耦合。该总线136表示了若干总线结构中的一种或多种,包括一个存储器总线或存储器控制器、一个外围总线、一个加速图形端口,以及一个使用多种总线结构中的任何一种的处理器或局部总线。举例来说,但并不限制于,这类结构包括:工业标准结构(ISA)总线、微通道结构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)局部总线、以及外围组件互连(PCI)也称之为Mezzanine总线。
计算机130一般具有至少某些形式的计算机可读媒体。包括易失性和非易失性媒体或可移动和不可移动媒体的计算机可读媒体也可以是计算机130能够读取的任何可供使用的媒体。举例来说,但并不限制于,计算机可读媒体包括计算机存储媒体和通讯媒体。计算机存储媒体包括用于信息(例如,计算机可读指令、数据结构、程序模块或者其它数据)存储中的任何方法或技术所实现的任何易失性和非易失性或可移动和不可移动的媒体。例如,计算机存储媒体包括:RAM、ROM、EEPROM、闪存存储器或者其它存储器技术、CD-ROM、数字通用盘片(DVD)或者其它光盘存储、盒式磁带、磁带、磁盘存储或其它磁性存储设备、或者任何其它可以用于存储所需信息且能够由计算机130所读取的媒体。
通讯媒体一般都嵌入于计算机可读指令、数据结构、程序模块、或者在诸如载波或其它传输机制之类的调制信号中的数据中,并且包括任何信息传递的媒体。本领域中的熟练技术人士都十分熟悉调制数据的信号,它可以以对信号中的信息编码的方式来对其一个或多个特性进行设置或改变。通讯媒体的实例包括:有线媒体,例如,一个有线网络或直接连线的连接,和无线媒体,例如,超声、RF、红外和其它无线媒体。上述的任何组合也都包括于计算机可读媒体的范围内。
计算机存储器134包括可移动和/或不可移动、易失性和/或非易失性存储器形式的计算机存储媒体。在所说明的实施例中,系统存储器134包括只读存储器(ROM)138和随机存取存储器(RAM)140。基本输入/输出系统142(BIOS),包含着有助于在计算机130中的各组件之间传递信息(例如,在启动器件)的基本例程,一般都存储于ROM 138中。RAM 140一般都包含数据和/或程序模块,这些数据和/或程序模块都是处理器单元132可以直接存取和/或进行处理的。举例来说,但并不限制于,图2显示了操作系统144、应用程序146、其它程序模块148和程序数据150。
计算机130也可以包括其它可移动/不移动,易失性/非易失性计算机存储媒体。例如,图2显示了一个硬盘驱动器154,它能够对一个非移动的、非易失性的存储媒体进行读写。图2也显示了一个磁盘驱动器156,它能够对一个可移动的、非易失性的磁盘158进行读写;以及一个光盘驱动器160,它可以对一个诸如CD-ROM和其它光学媒体之类的可移动的、非易失性的光盘162进行读写。在示例性计算机环境中可以使用的其它可移动/不可移动的、易失性/非易失性的计算机存储媒体包括,但并不限制于,盒式磁带、闪存存储卡、数字通用盘片、数字视频带、固态RAM、固态ROM。以及其它等等。硬盘驱动器144、和磁盘驱动器156以及光盘驱动器160一般都通过一个非易失性存储器接口,例如,接口166,连接到系统总线136。
以上所讨论和图2所显示的驱动器或者其它批量存储设备以及它们所相关的计算机存储媒体,都可以提供适用于计算机130的计算机可读指令、数据结构、程序模块和其它数据的存储。在图2中,例如,所显示的硬盘驱动器154可存储操作系统170、应用程序72、其它程序模块174、以及程序数据176、值得注意的是,这些组件都可以类同于或者不同于操作系统144、应用程序146、其它程序模块148以及程序数据150。操作系统170、应用程序172、其它程序模块174以及程序数据176在本文中以不同的数字给出,以便于说明至少它们是不同的拷贝。
用户可以通过输入设备,例如,键盘180和指点设备182(例如,鼠标器、跟踪球。笔、或者触摸屏)向计算机130输入命令和信息。其它输入设备(未显示)可以包括:麦克风、操纵杆、游戏垫、碟形卫星天线、扫描仪,或其它等等。上述设备以及其它设备都可以通过一个用户接口184连接到处理单元132,该用户接口于系统总线136相耦合,但是,也可以通过其它接口和总线结构来连接,例如,并行端口、游戏端口、或者通用串行总线(USB)。监视器188或其它类型的显示设备也可通过一个接口,例如,一个视频接口190,与系统总线136相连接。除了监视器188之外,计算机还时常包括其它外围输出设备(未显示),例如,打印机和扬声器,这些都可以通过一个输出外围接口(未显示)相连接。
计算机130可以在一个网络环境中操作,它使用与一个和多个远程计算机,例如,远程计算机194的逻辑连接。远程计算机194可以是一台个人计算机。一台服务器、一个路由器、一台网络计算机、一个对等设备或者其它公共网络结点,并且一般都包括许多或所有与计算机130有关的上述讨论的组件。图2所表示的逻辑连接包括一个局域网(LAN)196以及一个广域网(WAN)198,但是也可以包括其它网络。这类网络化的环境在办公室中都是常见的,例如,企业内部的计算机网络、内部互联网,以及全球计算机网络(例如,互联网)。
当用于局域网联网环境中时,计算机130可以通过一个网络接口或适配器186与LAN 196相连接。当用于广域网络联网环境中时,计算机130一般可包括一个调制解调制178或者其它建立与WAN 198(例如,互联网)相通讯的部件。调制解调器178可以是内置的或者是外置的,它可以通过用户输入接口194或者其它合适的机制与系统总线136相连接。在联网环境中,所表示的与计算机130有关的程序模块,或者它的一部分可以存储于远程存储器存储设备(未显示)中。举例来说,但并不限制于,图2说明了远程应用程序192驻留在远程存储器设备中。应该意识到,所显示的网络连接仅仅是一个例子,也可以使用适用于在计算机之间建立通讯链路的其它装置。
一般来说,计算机130的数据处理器是可编程的,它可以籍助于以不同的时间存储于计算机的各种不同计算机可读存储媒体中的指令来编程。程序和操作系统一般是分布在,例如,软盘上和CD-ROM上。从软盘上和CD-ROM,可以将程序和操作系统下载到计算机的辅助存储器中。在执行时,它们至少部分可下载到计算机的主电子存储器中。当计算机可读存储媒体包含了适用于实现以下结合微处理器和其它数据处理器讨论的步骤的指令或程序,本文所讨论的发明包括上述和其它各种计算机可读存储媒体。在以下讨论根据方法和技术的编程时,本发明也包括了计算机本身。
为了说明的目的,程序和其它了执行程序组件,例如,操作系统,在本文中都以分立的方框的形式来说明。然而,应该认识到,这些程序和组件都可以各种不同的时间驻留在计算机的不同存储组件中,并且可以由计算机的数据处理器来执行。
接着,参考图3,方框图说明了通过USB连接的设备(例如,以上结合图1所说明和讨论的设备)的软件模式。图3的软件模式显示了与一个示例性设备配置有关的软件组件。图3所示的设备配置与图1所示的设备配置不同。在图3中,以虚线所显示的硬件设备都是与靠近该设备所显示的软件组件有关。
在该实施例中,USB控制器302连接到一个与一台计算机(例如,计算机130)有关的PCI总线304。USB控制器302包括一个根HUB 306。该根HUB 306包括一个或多个端口308,由端口#1至端口#N所表示。HUB 310连接到端口308中的一个端口。使用HUB310的软件包括一个总线驱动器312和一个客户机驱动器314。一个原始的母体(或者其它综合设备)316和一个连接到HUB 310的HID 318,它可作为子设备或HUB 310的结点。用于HID 318的软件包括客户机驱动器。在图3所示的示例性实施例中,HID 318与鼠标器有关。原始母体316具有两个子设备:一个音频组件320和一个HID 322。软件子客户机驱动器分别与音频组件320和HID 322有关。在该实例中,音频组件320与扬声器有关。此外,HID 322与一个和多个扬声器按钮有关。
接着,参考图4,该流程图显示了适用于控制一个子USB设备(例如,HID 322)的驱动软件的示例性操作。该驱动软件包括发出和等待暂停一个诸如结合图1和图3所讨论的USB设备(例如,一个原始母体和一个HUB设备)的方法。与USB设备有关的驱动软件可以在402连续确定该USB设备是否空闲。如果该驱动器软件已经确定该USB设备是空闲的或者准备暂停的话,则在404驱动软件就向USB设备的母设备(即,母设备316)提交一个空闲请求或者以另外方式发出一个信号。例如,驱动软件以软件的方式向它的物理设备对象发送该请求。在一个实施例,所提交或发送空闲请求包括将来自USB设备的IOCTL请求发送至USB设备的母设备。在一个实施例中,所发送的IOCTL请求包括将一个包含了来自USB设备的IOCTL请求的输入/输出请求包(IRP)发送至USB设备的母设备。例如,USB设备可以是一个USB主机控制器,并且USB设备的母设备可以是一台计算机。在该实例中,USB主机控制器向计算机发出USB主机控制器准备暂停的信号。计算机可以随后暂停该USB主机控制器,即使如果没有其它设备与USB主机控制器相连接。也就是说,对于希望空闲的根HUB的客户机驱动器用于该根HUB的物理设备对象(PDO)发送一个空闲请求。该PDO随后指令客户机驱动器暂停该根HUB。
在一个实施例中,USB设备具有一个活动状态和一个空闲状态。在该实例中,在处于空闲状态时,USB设备已准备好暂停。本发明预期可以在其它实施例中希望USB设备能够暂停,即使USB设备还没有完全空闲。例如,USB设备可以执行不需要全功率的操作。正是如此,USB设备可以继续执行操作,即使进入一个低功率模式或者其它暂停状态。在一个实施例中,该实施例中的USB设备可以具有一个或多个子结点(见下列图5),当USB设备处于空闲且USB设备的各个子结点都准备暂停时,USB设备才可以准备暂停。在该实例中,USB设备的各个子结点都将向USB设备发出一个空闲请求,以表示它们正准备暂停。
在提交了该空闲请求之后,驱动器软件就在406等待来自母设备所呼叫的使它功率降低的回叫信号功能。在功率降低回叫功能来自母设备的回叫之后,驱动器软件就在408对USB设备执行功率降低的回叫信号的功能,以暂停USB设备。在非空闲活动之后,驱动器软件就在410唤醒USB设备。USB设备,任何一个或多个USB设备的多个子结点,USB设备的母结点,或者与控制器有关的软件(即,应用程序)可以执行向USB设备发出唤醒的信号的非空闲活动。例如,如果USB设备是一个指点设备(例如,鼠标器),则非空闲的活动可能是鼠标器的移动。同样,如果母结点是控制器且一个或多个设备是扬声器,则在计算机上所执行的与控制有关的软件可以通过扬声器播放音乐来创建一个非空闲的活动。唤醒设备包括复位各空闲请求,使得该设备可自由提交新的空闲请求。
在一个设备通过USB相连接的实施例中,一旦USB设备(和整个USB设备树)已经被暂停时,就会至少由两种方法可以使得设备(以及随后的整个USB设备树)可以被“唤醒”并且重新回到全功率模式。第一种方法是任何USB类驱动器的都可以通过提交一个用于该设备的设置功率的请求使得它的子设备进入到全功率模式。第二种方法是通过对任何USB设备的“远程唤醒”活动,该USB设备可以支持且在设备进入到低功率模式之前原先已经使能了远程唤醒。在各种这样的情况下,所采取的行动将会具有使得整个设备树都进入到全功率模式的效果,并且当它们确定了它们的子设备和接口都已经是空闲并且不再使用时,用于子设备的USB类驱动器随后就能自由地进一步提交新的空闲请求,从而整个周期再一次开始。
也就是说,一旦暂停之后,一个设备就能够至少以两种方法来唤醒。第一,通过继续向远程具有唤醒功能的设备发出信号来产生唤醒(即,成功地完成一个等待/唤醒IRP)。典型的是,通过功能驱动器的等待/唤醒IRP完成例程将设备设置成全操作功率状态(即,功率状态DO)。等待/唤醒IRP可以用于提供设备的远程唤醒。第二,通过由客户机软件来始发一个新的开启请求,从而产生唤醒。在唤醒的过程中,任何空闲请求信息都是可以复位或者取消的。
在本发明的一个实施例中,当子设备不再准备暂停时,一个驱动器可以在执行它的回叫信号功能之前,通过向该子设备的母设备发送一个取消请求,来取消用于它的子设备或者接口的空闲请求。一般来说,取消请求是在发出了空闲请求之后由子设备发出的。控制器(例,USB核心堆)可以响应取消请求来取消当前正在处理的任何暂停转换并且取消用于在设备树中的任何其它设备的任何其它待决的空闲请求。
如果取消请求是在暂停之后发出的,则控制器可认为该取消请求是请求唤醒整个设备树的非空闲活动。
USB设备和母设备可以通过一个通讯媒体相互连接。通讯媒体包括,但并不限制于,结合图2所讨论的任何网络和总线结构。这类总线结构包括一个层次结构的并行总线,一个具有类似树状结构连接的无线总线,以及一个USB。例如,结合图4所讨论的结点可以是通过USB连接的设备。在该实例中,当其它设备暂停时,也可以暂停一个USB HUB和/或一个USB控制器。此外,即使没有其它设备(计算机内部或外部的设备)与总线相连接时,一台计算机也能够暂停USB控制器。
本发明包括一个或多个计算机可读媒体,该媒体具有执行图4所示方法的计算机可执行指令。
在一个实施例中,在设备之间的通讯可以通过操作系统内部的设备的软件表示来发生。例如,当控制器接受到一个空闲请求时,这是适用于接受空闲请求的控制器的软件设备对象。本领域内的熟练技术人士都会意识到,通讯也可以通过在物理硬件设备之间的电性能信令来发生。此外,本领域内的熟练技术人士也都会意识到,对于控制和功能的目的来说,母子设备可以是逻辑上的不同,而并不是物理上的不同。例如,该设备可以包括一个嵌入的HUB和两个嵌入的设备,或者一个具有两种独立控制功能的综合设备。
接着,参考图5,该流程图说明了适用于控制一个母USB设备(即,母316)的驱动器软件的操作。该母USB设备(即,原始母体或者HUB设备)具有一个和多个连接到母USB设备的子设备(即,音频320和HID 322)。用于母USB设备的驱动软件在502重复循环,以确定是否已经接受到了来自各个子设备的一个空闲请求。如果已经接受到来自子设备的一个空闲请求,驱动器软件就在504确定是否母设备自身是空闲的。如果母USB设备不是空闲的,则驱动软件就返回到在502的确定。如果母USB是空闲的,则驱动软件就在506确定是否母设备是一个根HUB。如果该母USB设备不是根HUB,则母USB设备就在508通过向母USB设备的一个母设备(例,HUB 310)提交一个空闲的请求来传递所接受到的空闲请求。在一个实施例,所提交的空闲请求包括所有接受到的来自子设备的空闲请求。如果子设备具有从属于该树中的母USB设备的子设备,则所提交的空闲请求就包括由各个从属子设备所提交的所有的空闲请求。采用这样的方式,来自该树中各个设备的空闲请求都会转发至根HUB或者在树根部上的其它控制器。
如果母USB设备是根HUB,则母设备可以在510暂停设备树(见图6)。在设备是通过USB相连接的实施例中,则根HUB管理树中的设备的功率。
本领域熟练技术人士应该注意到,作出空闲确定的次序并非限制于图5所说明的次序。确定是否已经接受到来自各个子结点的空闲请求和是否母USB设备已经是空闲的可以任何次序来发生,只要在树暂停或者母设备将空闲请求转发给母USB设备的母设备之前能够满足这两项确定。也就是说,转发该空闲请求一般包括,如果第一设备准备暂停和如果第一设备已经接受到了来自第一设备的任何一个子设备的空闲请求,就向一个第二设备(例如,是第一设备的母设备)发送来自一个第一设备所接受到的空闲请求。转发空闲请求还包括从第一设备到控制器传导式地遍历树结构。特别是,转发该空闲请求包括确定是否第一设备已经接受到了一个来自第一设备的各个子结点的空闲请求。如果还没有接受到一个来自各个子结点的空闲请求,则驱动器软件就等待接受一个来自各个子结点的空闲请求。如果第一设备已经接受到一个来自各个子结点的空闲请求,则驱动器软件就向第二设备提交一个空闲请求。
本发明包括一个或多个计算机可读媒体,它具有执行图5所说明的方法的计算机可执行指令。
接着,参考图6,该流程图说明了适用于暂停设备树的控制器软件的操作。在设备通过USB相互连接的实施例中,图6说明了适用于根HUB(例如,根HUB
306)的管理树中设备功率的软件的操作。在其它实施例中,控制器软件可以是除根HUB以外的与在树根部的组件有关。
参考图6,该树包括一个或多个以树状的子设备和母设备的层次组成的设备。特别是,根HUB具有一个或多个连接到根HUB的子设备且以树状结构组成。控制器软件(例,USB核心堆)接受来自子设备的空闲请求。用于根HUB的控制器软件在602重复循环以确定是否已经接受到了来自各个子设备的空闲请求。如果已经接受到了来自各个子设备的一个空闲请求,控制器软件就在604暂停设备树。
在一个实施例中,所接受到的来自子设备的空闲请求包括转发的来自从属于各子设备的子设备的空闲请求。暂停可以通过在树中的各个母设备呼叫它的各个子设备的功率下降的回叫信号功能来实现。这一过程可以通过该树经过接受到来自子设备的空闲请求所经过的路径以及转发的空闲请求来实现。这个转发以如下方式通过树,即在树中的各个子设备的驱动器软件的转发接受来自子设备的母设备的对回叫功能的呼叫并且随后该回叫功能执行对子设备的暂停。各个子设备的暂停包括回叫功能的执行,以将子设备置于低功率模式和其它暂停状态。
在另一实施例中,根HUB或其它控制器接受来自连接这根HUB的各个子设备的一个单一空闲请求,其中所接受到的空闲请求并不包括来自任何其它从属子设备的空闲请求。响应所接受到的来自子设备的所有空闲请求,根HUB可以通过功率下降回叫功能的逆向转发来暂停在树中的所有设备。也就是说,用于根HUB的控制器软件呼叫该根HUB的各个子设备的功率下降回叫功能,随后,适用于各个子设备的驱动器软件呼叫它的各个子设备的功率下降回叫功能,等等。采用这样的方式,就可以暂停树中的各个设备。该实施例假定适用于各个母设备的驱动器软件可以了解到对母设备的任何子设备指定的驱动器软件的功率下降回叫功能。
本发明包括一个或多个计算机可读媒体,它媒体具有执行图6所示方法的计算机可执行指令。
接着,参考图7,该方框图说明了与控制一个作为树结构中的一个子设备的HID的驱动器软件有关的一个信令组件704和一个驱动器组件706。虽然在图7所示的子设备作为一个HID来讨论,本领域内的熟练技术人士应该注意到,子设备可以是任何总线设备(例,任何USB设备)。树包括一个或多个以母设备和子设备层次组成的设备。在一个实施例中,母设备和子设备都是通过USB相互连接到的。一个或多个与HID有关的计算机可读媒体702可具有适用于发出信号和等待暂停HID的计算机可执行组件。该组件包括信令组件704和驱动器组件706。当HID准备暂停时,该信令组件704将一个空闲请求从HID发送至HID的母设备。该空闲请求通过树从母设备转发至控制器或者根HUB设备。此外,如HID具有至少一个子设备的话,则信令组件704就可接受到来自子设备的一个空闲请求并且将所接受到的空闲请求发送至母设备。
在一个实施例中,如果空闲请求在暂停HID之前发送的话,则可以由HID取消空闲请求。在该实施例中,信令组件704响应由HID产生的非空闲活动将一个取消请求从HID转发至母设备。该取消请求可以转发至控制器或者根HUB设备,并且随后取消由信令组件704所发送的空闲请求。如果在HID暂停之后发送的话,则由控制器或需要唤醒树中所有设备的非空闲活动的母设备来产生该取消请求。
驱动器组件706等待着它的回叫功能被从自它的母设备处调用来暂停HID。信令组件704响应所转发的空闲请求接受来自控制器的它的回叫功能的调用。驱动器组件706响应由信令组件704所调用的回叫功能的执行来暂停HID。在一个实施例中,回叫功能执行功率下降功能以将HID的功率下降。此外,功率下降功能可以包括一个将HID置于一个低功率模式的降低功率的功能。驱动器组件706响应由HID的活动,一个来自母设备的信号,或者一个来自与控制器相关软件的信号而唤醒该HID。
接着,参考图8,该方框图说明了与控制器有关的一个接口组件804和一个控制器组件806。本领域内的熟练技术人士应该意识到,本文主要讨论的控制器的某些和所有功能以及特别是与图7和图8有关的都可以采用根HUB设备作为一个控制器的子设备来执行。一个或多个计算机可读媒体802具有可通过在树根部的一个控制器来对设备树施加功率控制的计算机可执行组件。一个或多个计算机可读媒体802是与控制器相关联。该树包括一个或多个以树中的母设备和子设备层次组织的设备。在一个实施例中,母设备和子设备都通过USB相互连接到。组件可包括接口组件804和控制器组件806。接口组件804在接受到来自一个或多个子设备的空闲请求控制器组件806在接收到来自各个子设备的一个空闲请求之后阿暂停树中的所有设备。控制器随后响应控制器和任何设备或者两者的活动来唤醒树中的设备。
接着,参考图9,该方框图说明了一个IOCTL空闲请求的数据结构。计算机可读媒体902存储着表示以一个IOCTL请求方式体现的一个空闲请求的数据结构904。该数据结构904包括一个第一字段和一个第二字段。第一字段存储着表示一个回叫信号的例程属性906。例如,例程属性906是指向一个子设备中功能的指针,当母设备需要对子设备指示一个能够安全降低它的设备功率时,这是可以由母设备所调用的功能。第二字段存储着表示一个回叫环境的环境属性908。当回叫功能被调用时回叫环境被传递给回叫功能并提供一个用于执行该回叫功能的环境。正如以上所讨论的,当第一设备准备暂停时,一个第一设备可通过数据结构904向一个第二设备发送一个空闲请求。回叫功能响应空闲请求的发送执行暂停第一设备,正如结合图4和图5所讨论的那样。
第一设备具有一个和多个以树状结构组织的子结点。此外,第一设备具有一个活动状态和一个空闲状态。当第一设备中的一个和多个子结点的每一个准备暂停时,该第一设备就准备暂停。在一个实施例中,第一设备和第二设备都是通过通用串行总线来相互连接的。
以下显示了图9所示的一例数据结构的实例:
typedef VOID(*USB_IDLE_CALLBACK)(
PVOID Context
);
typedef struct_USB_IDLE_CALLBACK_INFO{
USB_IDLE_CALLBACK IdleCallback;
PVOID IdleContext;
} USB_IDLE_CALLBACK_INFO,*PUSB_IDLE_CALLBACK_INFO;
本领域内的熟练技术人士都会意识到,本文所讨论的设备包括,但并不限制于,设备可以在计算机的外部以及设备可以嵌入在计算机内部。例如,设备可以是嵌入在膝上计算机中的USB相兼容的设备。使用本发明,膝上计算机允许一个高速缓存和与所嵌入的USB设备有关,与膝上计算机有关,或者与另一个嵌入设备(例,一个控制器)有关的处理器,从而可以进入到一个暂停状态(例如,C3)。
下列特定于USB的实例说明了本发明。当一个USB类驱动器确定用于下载的USB设备是空闲的并且不再使用时,USB类驱动器就向USB核心堆发送一个包含了一个IOCTL空闲请求的IRP,以向USB核心堆表示用于该设备的USB类驱动器希望将该设备置于低功率模式。该IOTCL空闲请求被作为IOCTL_INTERNAL USB_SUBMIT_IDLE_NOTIFICATION而引用。该IOCTL空闲请求可以在一个中断请求级(IRQL)PASSIVE_LEVEL上发送。当USB核心堆接受该请求,USB核心堆驱动器就标记该子设备是空闲的。USB核心堆、总线、或者端口驱动器设置将适当的出错状态例如,变量中的STATUS_SUCCESS设置为例如,Irp->IoStatus.Status。USB芯片驱动器随后遍历一列表中的所有子设备,以确定是否用于所有其它子设备的所有USB类设备都已经请求将它们的子设备置于一个低功率模式。如果USB核心驱动器确定了确实所有的USB子设备已经通过为每个设备下载的USB类驱动器请求而进入到低功率模式,则USB芯片存储器随后向这些USB子设备的母设备提交一个空闲请求。如果子设备是一个USB综合设备的话,则该母设备可以是一个USB原始的母设备。同样,如果子设备是一个简单的USB设备的话,则该母设备可以是一个USB HUB。如果它所有的子设备都是空闲的,则母USB原始设备或HUB设备是空闲的。
一旦空闲的请求是通过USB设备树来传输的,并且提交了一个用于USB根HUB设备的空闲请求,则USB根HUB设备随后调用它的下载的类驱动器的回叫信号(USBHUB.SYS)。各个USB母设备,USB综合设备,或者HUB设备随之调用各个USB类驱动器的回叫信号,下载用于各个USB子设备或接口。所有这类驱动器请求将它们的USB设备或接口置于低功率模式,并随后整个USB设备树和USB根HUB都置于低功率模式。当USB根HUB置于了低功率模式时,USB主机控制器就随后也置于低功率模式。如果USB设备或者接口支持远程唤醒并且还没有IRP_MN_WAIT_WAKE的请求在待命,则用于这些设备或接口的回叫例程就应该在关闭设备或接口之前向USB核心堆提交一个IRP_MN_WAIT_WAKE的请求。另外,一旦清楚Wait/WAKE将被要求,功能驱动器就向USB驱动器堆提交一个Wait/Wake IRP,而不是等待在呼叫信号例程中来进行。
另外,如果能够将设备置于一个全功率操作状态的话,则HUB驱动器可采用一个指示成功的状态代码来完成空闲请求(例,DO)。这就通知了较高层次的驱动器设备已经不再是空闲的。然而,如果设备已经移去了或者停止了,则HUB驱动器就可以采用一个适当的出错码来完成该空闲请求IRP。
如果功能驱动器取消了该空闲请求IRP,则HUB驱动器就将以一个出错码来完成该IRP。当一个功能驱动器的完成例程检测到HUB驱动器以一个出错码而不是STATUS_POWER_STATE_INVALID来完成该空闲请求的话,则功能驱动器就将试图打开该设备。在一个实施例中,只要HUB驱动器是以一个出错来完成一个空闲请求IRP,则HUB驱动器就不能保证该设备是处于一个功率状态。
根据本发明的一个方面,一种方法提供了发出信号并等待暂停一个第一设备。该第一设备通过一个通讯媒体与一个第二设备相连接。该方法包括:当第一设备准备暂停时,就将来自第一设备的一个空闲请求发送至第二设备。该方法还包括由第一设备来等待接受来自第二设备的,对与第一设备有关的回叫功能的调用来暂停第一设备。
根据本发明的另一个方面,一种方法提供了暂停设备树。该树包括一个或多个以树状结构的母设备和子设备所组织的设备。该树还包括一个在树根部的控制器。该方法包括由控制器来接受一个来自一个或多个子设备的空闲请求。该方法还包括在接受一个来自该树中的各个设备的空闲请求之后由控制器暂停在树状结构中的所有设备。
根据本发明的还有一个方面,一个或多个计算机可读媒体具有用于发出信号和等待暂停设备树中的一个设备的计算机可执行组件。该树包括以分层结构组织为母设备和子设备的一个或多个的设备。该树还包括一个在树根部的控制器。该组件包括一个信令组件,它用于当子设备准备暂停时,将来自至少一个子设备的一个空闲请求发送至一个母设备的信令组件。该空闲请求通过树从母设备传播到控制器。该组件还包括一个驱动器组件,它用于等待由子设备所接受到的来自控制器的,对与子设备有关的回叫功能的调用以能够暂停该子设备。
本发明的一个或多个计算机可读媒体的实施方面具有计算机可执行组件,它适用于由一个在树根部的控制器来施加对设备树的功率控制。该树包括一个或多个以树状结构的母设备和子设备所组织的设备。该组件包括一个接口组件,用于由控制接受来自一个或多个子设备的一个空闲请求。该组件还包括一个控制器组件,用于由控制器在接受到来自各个子设备的一个空闲请求之后暂停树状结构中的所有设备。
在本发明的还有一个方面,一种计算机可读媒体存储表示一个空闲请求的一个数据结构。该数据结构包括一个第一字段和一个第二字段。第一字段存储着表示一个呼叫功能的一个例程属性。第二字段存储着表示一个回叫环境的一个环境属性。在第一设备准备暂停时,一个第一设备就通过该数据结构向一个第二设备发送一个空闲请求。
尽管讨论结合了一个包括计算机130的示例性计算机系统环境,但是本发明可以多种其它通用或专用计算机系统环境或结构来实现。计算机系统环境并不试图建议对本发明的使用或功能的范围作出任何限制,此外,计算机系统环境不应该理解成具有在示例性操作环境中所说明组件的任何一个或组合有关的任何依赖性或要求。适用于本发明所使用的众所周知的计算机系统、环境,和/或配置的实例可包括,但并不限制于,个人计算机、服务器计算机、手持或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机、包括任何上述系统或设备的分布式计算环境,以及其它相类似的。
本发明可以采用计算机可执行指令的一般环境来讨论,例如,可以由一个或多个计算机或其它设备执行的程序模块。一般来说,程序模块包括,但并不限制于,例程,程序、对象、组件,以及执行特殊任务或实现特殊抽象数据类型的数据结构。本发明也可以分布式计算环境来实现,在该分布式计算环境中,其任务是由通过一个通讯网络相连接的远程处理设备来执行的。在一个分布式计算环境中,程序模块可以置于包括存储器存储设备的局部或远程计算机存储媒体中。
在介绍本发明的组件或实施例时,所使用冠词“a”,“an”,“the”和“said”都是试图是指由一个和多个组件。术语“comprising”,“including”和“having”都是试图包括且是指还可能存在着其它组件而不仅仅是所列出的组件。
鉴于以上讨论,应该看到,能够达到本发明的几个目的且能够获得其它有益结果。
当对上述产品和方法在不背离本发明范围的条件下进行各种不同变化时,在上述讨论中所包含的所有内容以及在附图中所显示的所有内容都应该理解成仅仅是说明而没有限制的含义。