CN100410912C - 从一个设备驱动程序向另一个传送信息的系统和方法 - Google Patents
从一个设备驱动程序向另一个传送信息的系统和方法 Download PDFInfo
- Publication number
- CN100410912C CN100410912C CNB2005100769452A CN200510076945A CN100410912C CN 100410912 C CN100410912 C CN 100410912C CN B2005100769452 A CNB2005100769452 A CN B2005100769452A CN 200510076945 A CN200510076945 A CN 200510076945A CN 100410912 C CN100410912 C CN 100410912C
- Authority
- CN
- China
- Prior art keywords
- dma
- bus
- subset
- device driver
- driver
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
Abstract
本发明提供了一种为初始化用于DMA操作的设备而从一个设备驱动程序向另一个传送直接存储器存取(DMA)配置信息的系统和方法。更具体地说,提供了从子虚拟设备向虚拟I/O(VIO)总线传送用于标识为子虚拟设备分配的DMA地址空间的信息的机制,从而可以经由VIO总线为子虚拟设备初始化DMA操作。根据该系统和方法,通过使用I/O控制(IOCTL)接口和操作系统内核服务之一,子虚拟设备的设备驱动程序直接向VIO总线的设备驱动程序传送有关子虚拟设备的支持DMA的地址空间的信息。然后VIO总线设备驱动程序使用该信息设置用于来自子虚拟设备的DMA操作的VIO总线。
Description
技术领域
本发明一般涉及从一个设备驱动程序直接向另一个传送信息的改进的数据处理系统。更具体地说,本发明涉及为初始化用于DMA操作的设备而从一个设备驱动程序向另一个传送直接存储器存取(DMA)配置信息的系统和方法。
背景技术
在周边元件互连(PCI)系统体系结构中,PCI总线具有多个与该PCI总线相连的子设备。直接存储器存取(DMA)操作是此类子设备经由该PCI总线向和从系统存储器传送数据时使用的一种机制。该PCI总线具有可以用来执行DMA操作的系统存储器的指配部分,即,支持DMA的地址空间或存储区域。为了执行此类DMA操作,为每个子设备指派支持DMA的地址空间内的某个地址范围。配置子设备以便在该PCI总线的支持DMA的地址空间的指配部分内执行DMA操作。
使用三个参数描述该支持DMA的存储区域:标识该支持DMA的存储区域开始的起始地址,指示该支持DMA的存储区域有多大的大小,以及与该支持DMA的区域有关的唯一标识符。由于该支持DMA的存储区域全部属于该PCI总线,并且该支持DMA的存储区域的所有部分是为每个子设备划出的,所以有关该支持DMA的存储区域的信息保存在开放固件设备树中的该PCI总线节点层上。
开放固件提供生成计算机系统的与硬件无关的引导代码,固件和设备驱动程序的能力。引导代码的基本任务是:1)构建设备树,操作系统使用该设备树来发现其可利用的设备和使用它们的方法,以及2)引导设备驱动程序。该设备树的特定格式依赖于操作系统,但是所有设备树有许多共性。可以利用与操作系统无关的通用语言来表示以上共性。开放固件设备树的格式就是此种通用语言。
在一个典型安装中,操作系统使用客户接口调用把开放固件设备树转换为操作系统自己的格式。开放固件设备树是设备树的普通和简单的格式。可以利用它来表达几乎任何一种操作系统的设备树中的各种条目。就像所有树一样,它是由节点组成的,某些节点为叶节点,即没有孩子的节点。除顶节点之外,每个节点有一个双亲。每个节点有一个节点名,以及一个“属性”和“方法”的列表。事实上,该节点名为一个属性,每个节点需要一个这样的属性。属性为指定的数据。开放固件并不限制操作系统怎样最终使用该指定的数据,只是保留某些名称具有某些含义:例如,“name”属性总是节点名称。该指定的数据也可以为任意类型:明确支持string和integer类型,而int、string和bytes的组合可以组成复合类型,其中bytes为任何长度的任意连续字节。
如上所述,对于此类开放固件设备树,有关支持DMA的存储区域或地址空间的信息是该开放固件设备树中的PCI总线节点的一部分。在配置该系统及其设备期间,把该DMA存储区域信息传送给PCI总线驱动程序,从而在配置PCI总线及其子设备期间,PCI总线驱动程序为每个子设备划出该支持DMA的存储区域的一部分,作为有关PCI总线驱动程序的DMA操作的设备寄存器。因此,完全由PCI总线驱动程序判断为每个子设备指派支持DMA的存储区域的哪些部分。换句话说,为了向子设备分配支持DMA的存储区域的一部分,PCI总线驱动程序无需来自子设备的任何附加信息。
对于虚拟输入/输出(I/O)总线和设备,引入不同情况。对于虚拟I/O(VIO),每个设备有一个支持DMA的地址空间。这些支持DMA的地址空间并不是一个更大的地址空间的一部分,例如以上为PCI总线分配的支持DMA的地址空间。换句话说,为每个设备分配的支持DMA的地址空间并不是从VIO总线拥有的更大的支持DMA的地址空间中划出的,而是该设备完全拥有的支持DMA的地址空间。因此,以上描述的三部分信息,即,虚拟地址空间的起始地址、大小和标识符在开放固件设备树的设备节点内。
设备配置的发生方式类似于以上描述的有关PCI总线的发生方式。亦即,相同的分级顺序,总线是在使用其子设备执行设备配置之前配置的。然而,问题是此刻VIO总线并不了解为该设备分配的支持DMA的地址空间,因此DMA操作不能开始。为此,需要一种用来通知VIO总线为与该VIO总线相连的设备分配的支持DMA的地址空间的机制,从而可以经由VIO总线到达系统存储器执行DMA操作。
发明内容
本发明提供从一个设备驱动程序直接向内核空间中的另一个设备驱动程序传送信息的系统和方法。根据本发明的一个示例性实施方式,提供为初始化用于DMA操作的设备而从一个设备驱动程序向另一个传送直接存储器存取(DMA)配置信息的机制。更具体地说,本发明的该实施方式提供从子设备向虚拟I/O(VIO)总线传送用于标识为该子设备分配的DMA虚拟地址空间的信息的机制,从而可以经由VIO总线为该子设备初始化DMA操作。
根据本发明的系统和方法,该子设备的设备驱动程序通过使用I/O控制(IOCTL)接口和操作系统内核服务中的一个,直接向VIO总线的设备驱动程序传送有关该子设备的支持DMA的地址空间的信息。设备驱动程序加载在内核空间中。因此,在内核空间而不是用户空间中的设备驱动程序之间传送有关支持DMA的地址空间的信息。
在本发明的一个示例性实施方式中,所有VIO总线和子设备信息均存储在诸如开放固件设备树之类的设备树中,该设备树是在引导时由例如开放固件生成的。配置管理器在引导时运行,并从该设备树中读取信息,并且在它分析该设备树时,调用不同设备的合适配置方法(例如,每个设备有一个配置方法)。
在是VIO总线及其子设备的情况下,该配置管理器调用VIO总线的配置方法,然后调用其子设备的配置方法。由于该设备树中的VIO总线节点并不包含有关支持DMA的地址空间的任何信息,所以该VIO总线的配置方法不向VIO总线设备驱动程序传送任何支持DMA的地址空间信息。此后,在配置子设备时,有关每个子设备的支持DMA的地址空间的信息可从设备树中的它的节点那里获得,然后向下传送给该子设备的设备驱动程序。
本发明提供从该子设备的设备驱动程序直接向VIO总线的设备驱动程序传送支持DMA的地址空间的机制。在本发明的一个示例性实施方式中,该机制是以一个或多个输入/输出控制(IOCTL)方法的方式实现的,IOCTL方法是VIO总线设备驱动程序的一部分,并且子设备的设备驱动程序可以调用它们。这些IOCTL方法允许子设备的设备驱动程序利用标识该子设备的DMA地址空间的参数调用这些IOCTL方法,然后将该参数写入到由VIO总线的设备驱动程序维护的数据结构中,以便在用该子设备执行DMA操作时使用。上述IOCTL方法可以采用一对IOCTL方法的形式,一个用于向VIO总线注册子设备,一个用于向VIO总线注销子设备,或者为单一注册/注销IOCTL方法,其中利用一个比特指示该方法是执行注册操作还是执行注销操作。
在本发明的选择性实施方式中,通过使用允许向VIO总线设备驱动程序注册子设备的新的内核服务,可以提供类似的功能。根据该选择性实施方式,子设备的设备驱动程序可以调用内核服务,以便向VIO总线设备驱动程序注册或注销子设备。对该内核服务的调用可以包括用来标识分配给该子设备的DMA地址空间的参数。然后该内核服务向VIO总线设备驱动程序提供该DMA地址空间信息,该VIO总线设备驱动程序将该信息写入到由该VIO总线设备驱动程序维护的数据结构中,以便在用该子设备执行DMA操作时使用。
优选实施方式的下述详细描述将描述本发明的这些和其它特征和优点,考虑到优选实施方式的下述详细描述,本发明的这些和其它特征和优点对本领域的一般技术人员是显而易见的。
附图说明
所附权利要求书阐述了被认为是本发明之特征的新颖特征。然而,通过参考连同附图一起阅读说明性的实施方式的下述详细描述,将更好地理解该发明本身、其优选使用方式、其它目的及其优点,其中:
图1是可以实施本发明的数据处理系统的框图;
图2是说明根据已知配置机制的PCI总线的DMA配置操作的示意图;
图3A-3C是根据已知配置机制的PCI总线及其子设备的设备树的一部分的示意图;
图4是根据本发明一个示例性实施方式的VIO总线及其子设备的设备树的一部分的示意图;
图5是说明根据本发明一个示例性实施方式的VIO总线的DMA配置操作的示意图;
图6是说明根据本发明一个示例性实施方式的配置操作的示意图;
图7是根据本发明的数据交换接口的一个示例性实施方式的示意图;
图8是根据本发明的数据交换接口的另一个示例性实施方式的示意图;以及
图9是一个流程图,概述了配置用于DMA操作的VIO总线及其子设备时的本发明的示例性操作。
具体实施方式
本发明提供了一种在内核空间内的设备驱动程序之间直接传送信息的机制。在一个示例性实施方式中,本发明的机制允许在配置系统期间在设备驱动程序之间直接传送设备的配置信息。按照配置用于直接存储器存取(DMA)操作的设备并在设备驱动程序之间传送DMA信息来描述本发明的示例性实施方式,然而,本发明并不限于仅仅交换此类信息。相反,通过使用本发明的机制,可以交换希望在内核空间的设备驱动程序之间直接进行传送的各类信息。例如,可以在设备驱动程序之间传送的其它种类的信息包括:与中断有关的信息,与存储映象的I/O有关的信息,或需要共享的任何设备特有的信息。
然而,为了以下描述的目的,假设在设备驱动程序之间传送的信息为DMA配置信息,以便在用总线的子设备执行DMA操作时配置DMA硬件和操作系统资源。在该假设下,本发明提供以下机制,即方便子设备的设备驱动程序从它们的设备驱动程序直接向内核空间中的虚拟I/O(VIO)总线设备驱动程序发送支持DMA的地址空间信息的机制。这样,为VIO总线设备驱动程序提供了DMA配置信息,可以利用该信息初始化DMA硬件和操作系统资源,从而经由VIO总线,子设备可以对系统存储器执行DMA操作。
现在参照附图,具体地,参照图1,该图描述了一个可以实施本发明的数据处理系统的框图。数据处理系统100可以是一个包括与系统总线106相连的多个处理器101、102、103和104的对称多处理器(SMP)系统。例如,数据处理系统100可以为IBM eServer,后者为位于纽约阿芒克的国际商业机器公司的产品,用作网络内的服务器。作为选择,可以使用单处理器系统。同时与系统总线106连接的是存储控制器/高速缓冲存储器108,它提供多个局部存储器160-163的接口。I/O总线桥110与系统总线106相连,并提供I/O总线112的接口。可以按所示方式集成存储控制器/高速缓冲存储器108和I/O总线桥110。
数据处理系统100为逻辑分区的(LPAR)数据处理系统。因此,数据处理系统100可以有多个同时运行的异构操作系统(或单一操作系统的多个实例)。这些多个操作系统的每个可以有许多在其内执行的软件程序。对数据处理系统100进行逻辑分区,以便把不同的PCI I/O适配器120-121、128-129和136,图形适配器148和硬盘适配器149分配给不同的逻辑分区。在这种情况下,图形适配器148提供用于显示设备(未示出)的连接,而硬盘适配器149提供用于控制硬盘150的连接。
因此,例如,假设数据处理系统100被划分为三个逻辑分区P1、P2和P3。把PCI I/O适配器120-121、128-129和136的每一个,图形适配器149,硬盘适配器149,主处理器101-104的每一个,以及局部存储器160-163中的存储器分配给三个分区中的每个分区。在这些例子中,存储器160-163可采取双列直插存储模块(DIMM)的形式。DIMM通常不是以每DIMM为基础分配给所有分区的。相反,一个分区获得该平台发现的全部存储器的一部分。例如,处理器101,局部存储器160-163中的存储器的某些部分,以及I/O适配器120、128和129可以分配给逻辑分区P1;处理器102-103,局部存储器160-163中的存储器的某些部分,以及PCI I/O适配器121和136可以分配给分区P2;处理器104,局部存储器160-163中的存储器的某些部分,图形适配器148和硬盘适配器149可以分配给逻辑分区P3。
在数据处理系统100内执行的每个操作系统分配给不同的逻辑分区。因此,在数据处理系统100内执行的每个操作系统只能访问在其逻辑分区内的那些I/O装置。例如,可以在分区P1内执行高级交互执行(AIX)操作系统的一个实例,可以在分区P2内执行AIX操作系统的第二实例(映象),而可以在逻辑分区P3内运行Linux或OS/400操作系统。
与I/O总线112相连的周边元件互连(PCI)主桥114提供到局部总线115的接口。多个PCI输入/输出适配器120-121可以通过PCI到PCI桥116、PCI总线118、PCI总线119、I/O插槽170和I/O插槽171连接到PCI总线115。PCI到PCI桥116提供到PCI总线118和PCI总线119的接口。PCI I/O适配器120和121分别插入在I/O插槽170和171中。典型PCI总线实现将支持四个和八个I/O适配器(即,用于插式连接器的扩展插槽)。各PCI I/O适配器120-121提供数据处理系统100和诸如其它是数据处理系统100的客户机的网络计算机之类的输入/输出设备之间的接口。
附加PCI主桥122提供用于附加PCI总线123的接口。PCI总线123连接到多个PCI I/O适配器128-129。PCI I/O适配器128-129可以通过PCI到PCI桥124、PCI总线126、PCI总线127、I/O插槽172和I/O插槽173连接到PCI总线123。PCI到PCI桥124提供到PCI总线126和PCI总线127的接口。PCI I/O适配器128和129分别插入在I/O插槽172和173中。照这样,通过各PCI I/O适配器128-129,可以支持诸如调制解调器或网络适配器之类的附加I/O设备。照这样,数据处理系统100允许连接多个网络计算机。
插入在I/O插槽174中的存储映象的图形适配器148可以通过PCI总线144、PCI到PCI桥142、PCI总线141和PCI主桥140连接到I/O总线112。硬盘适配器149可以插入在与PCI总线145相连的I/O插槽175中。该总线145连接到PCI到PCI桥142,利用PCI总线141,PCI到PCI桥142连接到PCI主桥140。
PCI主桥130提供PCI总线131连接到I/O总线112的接口。PCII/O适配器136连接到I/O插槽176,利用PCI总线133,该I/O插槽176连接到PCI到PCI桥132。PCI到PCI桥132连接到PCI总线131。同时,该PCI总线131把PCI主桥130连接到服务处理器邮箱接口和ISA总线访问通过逻辑194以及PCI到PCI桥132。服务处理器邮箱接口和ISA总线访问通过逻辑194转发前往PCI/ISA桥193的PCI访问。NVRAM存储器192连接到ISA总线196。服务处理器135通过其局部PCI总线195连接到服务处理器邮箱接口和ISA总线访问通过逻辑194。同时,服务处理器135经由多个JTAG/I2C总线134,连接到处理器101-104。JTAG/I2C总线134为JTAG/扫描总线(参见IEEE 1149.1)和飞利浦I2C总线的组合。然而,作为选择,可单独利用飞利浦I2C总线或单独利用JTAG/扫描总线替换JTAG/I2C总线134。主处理器101、102、103和104的所有SP-ATTN信号连接在一起,作为服务处理器的中断输入信号。服务处理器135有它自己的局部存储器191,并且有权使用硬件OP面板190。
在最初给数据处理系统100加电时,服务处理器135使用JTAG/I2C总线来询问系统(主)处理器101-104、存储控制器/高速缓冲存储器108和I/O桥110。在完成此步骤后,服务处理器135具有数据处理系统100的详细目录和拓扑理解。同时,服务处理器135对通过询问主处理器101-104、存储控制器/高速缓冲存储器108和I/O桥110发现的所有元件执行内置自检(BIST)、基本正确性检测(BAT)和存储器测试。由服务处理器135收集并报告BIST、BAT和存储器测试期间检测出的故障的出错信息。
如果在去除BIST、BAT和存储器测试期间发现的故障元件后系统资源的有意义的/有效配置仍然可行,则允许数据处理系统100继续向局部(主)存储器160-163中加载可执行代码。接着,服务处理器135释放主处理器101-104以执行加载到局部存储器160-163中的代码。在主处理器101-104执行数据处理系统100内的各个操作系统的代码时,服务处理器135进入监控和报告错误的模式。由服务处理器135监控的项目类型包括:例如,风扇速度和操作,热传感器,电源稳压器,以及由处理器101-104、局部存储器160-163和I/O桥110报告的可恢复的和不可恢复的错误。
服务处理器135负责保存并报告与数据处理系统100中的所有被监控项目有关的出错信息。同时,服务处理器135根据错误类型和定义的阈值采取行动。例如,服务处理器135可以注意到某个处理器的高速缓冲存储器上过多的不可恢复的错误,并确定这是硬盘故障的预兆。基于上述确定,服务处理器135可以标记该资源以便在当前的运行会话和未来的初始程序装入(IPL)期间解除配置。IPL有时也称为“引导”或“自举”。
可以使用可从市场上买到的各种计算机系统来实现数据处理系统100。例如,可使用可从国际商业机器公司获得的IBM eServeriSeries Model 840系统来实现数据处理系统100。此系统可以支持使用OS/400操作系统的逻辑分区,OS/400操作系统也可以从国际商业机器公司获得。
本领域的一般技术人员可以理解,图1描述的硬件可以改变。例如,除所示硬件之外,也可以使用诸如光盘驱动器之类的其它外围设备,或代替所示硬件。所示例子并不意味着对本发明的体系结构的限制。
本发明提供了为初始化用于DMA操作的设备而从一个设备驱动程序向另一个传送直接存储器存取(DMA)配置信息的机制。更具体地说,本发明提供了从子设备向虚拟I/O(VIO)总线传送用于标识为子设备分配的DMA虚拟地址空间的信息的机制,从而可以经由VIO总线为子设备初始化DMA操作。
根据本发明的系统和方法,子设备的设备驱动程序通过使用I/O控制(IOCTL)接口和操作系统内核服务中的一个,直接向VIO总线的设备驱动程序传送有关该子设备的支持DMA的地址空间的信息。因此,在内核空间而不是用户空间中的设备驱动程序之间传送有关支持DMA的地址空间的信息。
在本发明的一个示例性实施方式中,所有VIO总线和子设备信息均存储在诸如开放固件设备树之类的设备树中,该设备树是在引导时由例如开放固件生成的。配置管理器在引导时运行,并从设备树中读取信息,在它分析设备树时,调用不同设备的合适配置方法(例如,每个设备有一个配置方法)。在是VIO总线及其子设备的情况下,配置管理器调用VIO总线的配置方法,然后调用其子设备的配置方法。由于VIO总线节点并不包含有关支持DMA的地址空间的任何信息,所以VIO总线的配置方法不向VIO总线设备驱动程序传送任何支持DMA的地址空间信息。此后,在配置子设备时,有关每个子设备的支持DMA的地址空间的信息可从设备树中的它的节点那里获得,然后向下传送给该子设备的设备驱动程序。
本发明提供了从子设备的设备驱动程序直接向VIO总线的设备驱动程序传送支持DMA的地址空间的机制。在本发明的一个示例性实施方式中,该机制是以一个或多个输入/输出控制(IOCTL)方法的形式实现的,IOCTL方法是VIO总线设备驱动程序的一部分,并且子设备的设备驱动程序可以调用它们。上述IOCTL方法允许子设备的设备驱动程序利用标识该子设备的DMA地址空间的参数调用这些IOCTL方法,然后将该参数写入到由VIO总线的设备驱动程序维护的数据结构中,以便在用该子设备执行DMA操作时使用。上述IOCTL方法可以采用一对IOCTL方法的形式,一个用于向VIO总线注册子设备,一个用于向VIO总线注销子设备,或者为单一注册/注销IOCTL方法,其中利用一个比特指示该方法是执行注册操作还是执行注销操作。
在本发明的选择性实施方式中,通过使用允许向VIO总线设备驱动程序注册子设备的新的内核服务,可以提供类似的功能。根据该选择性实施方式,子设备的设备驱动程序可以调用内核服务,以便向VIO总线设备驱动程序注册或注销子设备。对该内核服务的调用可以包括用来标识分配给该子设备的DMA地址空间的参数。然后内核服务可以向VIO总线设备驱动程序提供该DMA地址空间信息,VIO总线设备驱动程序将该信息写入到由该VIO总线设备驱动程序维护的数据结构中,以便在用该子设备执行DMA操作时使用。
图2是说明根据已知配置机制的PCI总线的DMA配置操作的示意图。正如图2所示,作为用于管理逻辑分区的计算系统中的分区的固件,管理程序210向生成设备树,例如开放固件设备树,的开放固件220提供分区资源信息。管理程序210存储有关向与数据处理系统的分区关联的各种设备分配的存储器的信息。该信息标识用于一个分区的DMA操作的可用系统存储器的数量。分配的DMA可用的系统存储器,即dma-window(dma窗口),传递给设备树,直至最底层的PCI总线,即,与输入/输出设备最靠近的PCI总线。另外,管理程序210确定向该PCI总线的子设备分配该dma-window。
在配置分区时,操作系统中的配置管理器接收来自开放固件的设备树,并遍历该设备树以配置用于该分区的设备。操作系统调用该设备树中节点的合适配置方法,上述配置方法然后执行必要的内核服务调用以便实际配置要使用的设备。该配置方法使设备从定义的(不能在该系统中使用)变成可用的(可以在该系统中使用)。如果该设备有设备驱动程序,则该配置方法把设备驱动程序加载到操作系统内核中,并使用设备相关结构(DDS)向该设备驱动程序描述设备特征。
在设备树中,由于PCI总线节点在其子设备节点之前出现,所以操作系统的配置管理器首先调用PCI总线配置方法230,以便配置该PCI总线。此后,通过调用它们各自的配置方法,配置该PCI总线的子设备。
PCI总线配置方法230接收来自开放固件220的设备树,并生成提供给PCI总线设备驱动程序240的设备相关结构(DDS)。DDS包含向该设备驱动程序描述设备实例的信息。它通常包含有关设备相关属性的信息以及该设备驱动程序与该设备通信所需的其它信息。设备的DDS是在每次配置设备被构建的。配置方法可以用固定值、计算值和来自设备树的信息填充DDS。
传送给PCI总线驱动程序240的DDS包括有关该PCI总线的dma-window的信息。接着,PCI总线设备驱动程序240根据从管理程序210那里获得的信息,把该dma-window按比例分配给将向该PCI总线注册的子设备。此后,当配置管理器调用子设备的配置方法250时,子设备的配置方法250可以从管理程序210那里获得其它设备特有的信息(例如,与中断有关的信息),并向子设备的设备驱动程序260提供该信息,以便在配置该设备时使用(例如,可使用中断信息来初始化该设备的中断控制硬件)。
图3A-3C是根据已知配置机制的PCI总线及其子设备的设备树的一部分的示意图。正如描述的设备树显示的那样,“dma-window”属性正好在PCI总线节点/pci@800000020000001/pci@2,2的下面。在配置总线时,PCI总线设备驱动程序使用“dma-window”属性中包含的信息来初始化DMA硬件,如物理到DMA地址的转换表。仅仅与该设备有关的转换表被初始化。同时,使用“dma-window”信息来分配并初始化总线驱动程序实现的与DMA有关的内核服务使用的内部数据结构。
PCI总线是在分区初始化时在它们下面的子设备之前配置的。在描述的设备树中,在该PCI总线上提供两个集成通用串行总线(USB)设备。请注意,“dma-window”属性属于该PCI总线,而不属于该PCI总线下面的子设备。在描述的例子中,子设备,即两个USB设备,共享该PCI总线的同一“dma-window”属性。
可以把“dma-window”属性视为输入/输出端的平面地址空间。就像具有虚拟地址空间和物理地址空间的现代操作系统中的进程一样,有物理地址空间和I/O地址空间(也称为总线地址空间),其中在上述进程中,操作系统的虚拟存储管理器(VMM)子系统把虚拟地址转换为实际地址,或者相反。DMA内核服务执行从物理地址到I/O或总线地址的转换。
利用固件对DMA硬件进行编程以理解上述地址空间,从而它能够进行反向转换,即,从总线地址到物理地址的转换。固件经由“dma-window”属性向DMA内核服务报告地址空间信息,DMA内核服务是作为PCI总线驱动程序的一部分实现的。
“dma-window”有三个部分:逻辑总线标识符,起始地址,以及窗口大小。在该描述的示例中,这些部分分别为:0x00000001、0x02000000以及0x10000000。因此,用于/pci@800000020000001/pci@2,2总线的全部DMA总线地址空间的大小为256MB,其中以总线地址0x02000000开始。两个USB设备共享256MB空间,以执行它们的DMA操作。从0x02000000开始到0x02000000+0x10000000-1的每个地址依靠DMA内核服务转换地址的方式转换为物理存储器中的某些地址。
从图3A-3C所示例子中获得的主要观察是,“dma-window”属性属于设备树中的PCI总线节点,并且PCI总线节点是在USB设备之前配置的。这使得在USB设备驱动程序能够发起第一个DMA操作之前,该DMA硬件是“准备好的”。然而,对于虚拟输入/输出(VIO),由于用于DMA操作的地址空间是分配给子虚拟设备本身的,并且不是VIO总线拥有的,所以不在子虚拟设备的第一个DMA操作之前配置用于DMA操作的DMA硬件和操作系统资源。亦即,为每个子虚拟设备配备利用设备树中的子虚拟设备的节点中的“dma-window”属性表示的它们自己的全部4GB的总线地址空间,而不是子虚拟设备共享VIO总线拥有的“dma-window”。
在配置VIO总线时,VIO总线设备驱动程序不了解每个子虚拟设备的“dma-window”。显然,只有在VIO总线设备驱动程序完成DMA设置从而配置了供子虚拟设备使用的DMA硬件和操作系统资源,例如,地址转换表等后,子虚拟设备才能执行DMA操作。本发明解决了该问题,并且提供了在用于子虚拟设备和用于它们“连接到的”VIO总线的设备驱动程序之间传送地址空间信息的机制,以便使得在由子虚拟设备发起第一个DMA操作时,DMA硬件是“准备好”的。
图4是根据本发明一个示例性实施方式的VIO总线及其子虚拟设备的设备树的一部分的示意图。在图4所示设备树的一部分的例子中,在用于VIO总线的设备树节点,即/vdevice节点,和子虚拟设备,即,/vdevice/v-scsi-host@30000002中,“dma-window”属性属于虚拟设备节点。所描述的虚拟设备有两个窗口,每一个都有逻辑总线标识符、起始地址和窗口大小。在本例子中,dma-window的大小为256MB,从支持DMA的地址0开始。同时请注意,起始地址和大小为64比特值,而逻辑总线标识符为32比特值。起始地址的大小、窗口数量的大小和逻辑总线标识符是操作系统和体系结构特有的。在虚拟SCSI目标设备的特定例子中,将向VIO总线驱动程序传送有关两个窗口的信息,然而,实际上仅仅使用第一个dma-window信息来初始化DMA硬件和内部数据结构。
图5是说明根据本发明一个示例性实施方式的VIO总线的DMA配置操作的示意图。正如图5所示,该配置操作类似于图2的配置操作,只是由虚拟输入/输出(VIO)总线的配置方法530向VIO总线设备驱动程序540提供的设备相关结构(DDS)不包括VIO总线或每个子设备的dma-window属性。因此,VIO总线设备驱动程序不能给子虚拟设备分配部分dma-window,并且没有有关每个子虚拟设备的dma-window的任何信息。
相反,子虚拟设备的dma-window信息存在于开放固件520生成的设备树内的子虚拟设备节点中。因此,在调用子虚拟设备的配置方法550时,子虚拟设备的配置方法550可以从开放固件设备树中获得该子虚拟设备的必要的dma-window信息,生成带有该信息的DDS并向子虚拟设备的设备驱动程序560提供该DDS。然而,由于VIO总线设备驱动程序540没有有关分配给子设备的dma-window的任何信息,所以不能为来自该子虚拟设备的DMA操作配置与VIO总线关联的DMA硬件和操作系统资源。
图6是说明根据本发明一个示例性实施方式的配置操作的示意图。在该描述的例子中,假设已经按照与参照图5描述的方式类似的方式配置了VIO总线。正如图6所示,配置操作类似于图5中配置VIO总线的子虚拟设备的配置操作。亦即,子虚拟设备的配置方法630接收来自开放固件620的设备树,并生成描述该子虚拟设备的DDS,其中该设备树是根据从管理程序610那里获得的分区资源信息生成的。该DDS包括子虚拟设备的dma-window信息。向子虚拟设备的设备驱动程序640提供该DDS。
然而,根据本发明,为了配置用于来自子虚拟设备的DMA操作的DMA硬件和操作系统资源,提供了从分区操作系统内核空间中的子虚拟设备驱动程序640直接向VIO总线设备驱动程序650传送dma-window信息的机制。在图6中,该机制称为数据交换接口660。子虚拟设备的设备驱动程序640利用传送的标识子虚拟设备的dma-window的参数,调用数据交换接口660。接着,数据交换接口660将该信息写入到由虚拟总线驱动程序650维护的数据结构中,并利用该信息配置DMA硬件和操作系统资源。子虚拟设备驱动程序现在可以用于DMA操作了。
图7是根据本发明的数据交换接口的一个示例性实施方式的示意图。正如图7所示,在本发明的一个示例性实施方式中,数据交换接口包括称为虚拟设备注册(VDEVREG)的第一输入/输出控制(IOCTL)方法720,用于向虚拟输入/输出(VIO)总线设备驱动程序740注册子虚拟设备。另外,提供称为虚拟设备注销(VDEVUNREG)的第二IOCTL方法730,用于向VIO总线设备驱动程序740注销子虚拟设备。
子虚拟设备驱动程序750可以调用上述IOCTL方法720和730,以便向VIO总线设备驱动程序740注册或注销子虚拟设备。为了能够调用上述IOCTL方法720和730,子虚拟设备驱动程序750必须了解“连接”该子虚拟设备的VIO总线的设备标识符。子设备的配置方法可以基于从设备树中获得的信息在DDS中提供该信息。通过了解VIO总线的设备标识符,子虚拟设备的设备驱动程序750可以在该特定总线设备的设备驱动程序上调用IOCTL方法720和730,以便向VIO总线注册/注销子虚拟设备。
在调用上述IOCTL方法720和730时,子设备驱动程序750以参数的方式传送借助配置方法生成的DDS从子虚拟设备的配置方法中获得的dma-window信息。接着,IOCTL方法720和730使用该dma-window信息,或者使用分配的dma-window为子虚拟设备的DMA操作初始化合适的DMA硬件和操作系统资源(注册),或者释放上述操作系统资源和DMA硬件(注销)。例如,为了执行上述操作,虚拟设备驱动程序使用VIO总线的设备标识符(例如,主和辅号码)调用fp_open()方法来打开VIO总线驱动程序。如果fp_open()成功,则虚拟设备驱动程序调用fp_ioctl()向VIO总线驱动程序进行注册或注销。
用于注册的IOCTL取得“dma-window”信息,并初始化用于该设备的物理到DMA地址的转换表。例如,它将表条目中的许可位初始化为“不能访问”。周边主桥(PHB)硬件读取该表以执行实际的DMA操作。除转换表之外,VIO总线驱动程序基于“dma-window”信息分配并初始化VIO总线驱动程序实现的与DMA有关的内核服务使用的内部数据结构。同时,注册接口在VIO总线驱动程序的存储器中保存“dma-window”信息,从而在来自虚拟设备驱动程序的DMA请求到达时,可以有效读取转换表条目或写入到转换表条目中。在虚拟设备驱动程序调用它们时,诸如d_map_page()和d_map_list()之类的DMA内核服务写出转换信息。上述服务确保映射是仅仅在该特定驱动程序的dma-window,即,dma-window指定的地址范围内执行的。同样,d_unmap_page()和d_unmap_list()服务仅仅使指定dma-window内的转换表条目无效。
注销接口释放在注册时分配的所有内部数据结构。只有在证实没有正在进行的或未决的DMA操作后才这么做。因此,既不期待也不允许来自该驱动程序的更多的DMA操作。
注册和注销通常为在配置和解除配置时执行的一次操作。当设备在使用时,在注册和注销操作之间可以执行许多次映射和解除映射操作。在完成注册之前和注销之后,不允许映射和解除映射操作。
在选择性实施方式中,可以给单一IOCTL方法配备一个参数,而不是具有两个新的IOCTL方法720和730,该参数标识该IOCTL是向VIO总线设备驱动程序注册还是注销子设备。在此种实施方式中,子虚拟设备的设备驱动程序可以调用该IOCTL方法,并以参数的方式提供dma-window信息和该输入参数的值,标识是向VIO总线设备驱动程序注册还是注销子虚拟设备。IOCTL将包括包含注册和注销操作在内的功能,其中基于输入参数的设置选择注册或注销。
本发明的IOCTL方法实施方式提供“清除”方法,以解决能轻易实现的在内核空间中的设备驱动程序之间传送信息的问题。然而,上述IOCTL方法必须在VIO总线设备驱动程序中提供。因此,需要从子虚拟设备中获取信息的每个VIO总线设备驱动程序必须实现上述IOCTL方法,以便能够从子虚拟设备中获取必要的信息。
在使用IOCTL接口时有两个主要困难。第一,传送信息的设备驱动程序需要了解目标设备驱动程序的标识符。这未必是一项简单任务,因为它需要访问目的设备,即向其传送信息的设备驱动程序的设备配置信息。源设备驱动程序,即传送信息的设备驱动程序,也许无权从内核空间中访问该信息,因此,它的配置方法需要访问该信息并作为DDS的一部分向下传送。该特殊步骤可能需要改变源设备的配置方法。
第二,操作系统还需要在内核空间中提供open()、close()和ioctl()接口。这些是文件系统接口,通常用于来自用户空间的内核空间操作。换句话说,用户空间应用程序可以调用内核扩展或设备驱动程序的IOCTL来完成某些特殊任务。在调用ioctl()之前,用户空间应用程序用其名称打开内核扩展。例如,open(“/dev/hdisk0”,O_RDONLY)(如上所述,在内核空间中由设备标识符代替更自然更方便的设备名称,因为诸如“/dev/hdisk0”之类的名称在内核空间中没有直接含义)。AIX操作系统以fp_open()、fp_ioctl()和fp_close()提供上述接口。然而,其它操作系统未必在内核空间中提供此类接口。
图8是根据本发明的数据交换接口的另一个示例性实施方式的示意图。提供图8所示的数据交换接口,作为避免与提供新的IOCTL方法关联的问题的选择性实施方式。正如图8所示,在该选择性实施方式中,操作系统内核820输出可以由子虚拟设备的设备驱动程序810调用的两个新的内核服务830-840,或者可选择地,输出带有操作参数的单个内核服务,而不是提供两个新的IOCTL方法,其中该操作参数类似于如上参照单个IOCTL方法描述的参数。操作系统内核调用总线特有的注册/注销例程860-870。操作系统内核820切断bus-id以查找正确的总线特有的例程,并利用函数指针调用它。bus-id是识别需要调用哪个总线驱动程序的注册或注销服务的一种方式。例如,系统可以支持多种类型的总线,如ISA、PCI、VIO等。每个总线有其特有的总线驱动程序,并且可以实现注册和注销服务。内核服务基于bus-id确定总线驱动程序。诸如d_map_init()之类的其它内核服务也使用bus-id,因此,设备驱动程序总是可以使用bus-id。尽管本发明根据VIO总线驱动程序的使用描述,但是本发明可以使用包括ISA、PCI等在内的任何类型的总线。
一旦确定总线驱动程序,内核服务需要调用总线驱动程序中的函数。在优选实施方式中,这是用于借助于函数指针调用函数的标准C接口实现的。函数指针是方便的,因为引导时内核只需保存每个总线驱动程序的两个函数指针。在图2所示的配置期间,总线驱动程序借助于内核服务向内核传送函数指针。例如,在AIX操作系统中,可以利用总线驱动程序用来向内核注册各种信息的bus_register()内核服务,向内核传送上述函数指针。由于总线驱动程序是在它们子设备之前配置的,所以在配置子设备时已经建立了函数指针。
总线特有的例程860-870向VIO总线注册或注销虚拟子设备。在本示例性实施方式中,VIO总线驱动程序的注册/注销函数执行以下任务,初始化物理到DMA地址的转换表以及由VIO DMA内核服务使用的内部数据结构。另一方面,内核服务只是传递接口,输出该接口以便任何一种设备驱动程序或内核扩展调用。如上所述,内核服务仅仅使用函数指针调用合适的总线驱动程序的注册/注销函数。内核服务不关心该信息的特性或其被使用的方式,并且不对该信息进行任何确认。所有确认是由内核服务借助于函数指针调用的总线驱动程序特有的例程完成的。成功和失败返回代码也可以传递,即,如果总线驱动程序特有的例程由于某些原因失败,则内核服务可以将失败上传给调用设备驱动程序。
把内核服务输出到全局内核名字空间中。在本实施方式中,它们称为register_device()和unregister_device()。通过把这些内核服务输出到全局内核名字空间中使得所有内核扩展和设备驱动程序都可以使用它们。相反,总线驱动程序特有的例程在驱动程序的内部,只有绑定到该驱动程序的对象才能使用它们。换句话说,它们只在驱动程序的名字空间内可见,不具备类似于内核服务的全局可见性。因此,其它设备驱动程序和内核扩展不能直接调用它们。
图9是一个流程图,概述了配置用于DMA操作的VIO总线及其子设备时的本发明的示例性操作。可以理解,可利用计算机程序指令实现流程图所示的每个方块,以及流程图所示的方块的组合。可以向处理器或其它可编程的数据处理装置提供上述计算机程序指令以产生机器,以至在处理器或其它可编程的数据处理装置上执行的指令创建用于实现流程图方块中指定的功能的装置。也可以把上述计算机程序指令存储到计算机可读存储器或存储介质中,这些计算机程序指令可以控制处理器或其它可编程的数据处理装置以特定方式运行,以至计算机可读存储器或存储介质中存储的指令产生一个包括实现流程图方块中指定的功能的指令装置的产品。
因此,流程图所示的方块支持用于执行指定功能的装置的组合,用于执行指定功能的步骤和用于执行指定功能的程序指令装置的组合。同时可以理解,可以利用执行指定功能或步骤的基于专用目的硬件的计算机系统,或利用专用目的硬件和计算机指令的组合,实现流程图所示的每个方块,以及流程图所示中的方块的组合。
正如图9所示,该操作首先通过调用与子虚拟设备关联的配置方法来初始化子虚拟设备的配置(步骤910)。为了本描述的目的,假设已经配置了VIO总线。子虚拟设备的配置方法读取固件生成的设备树(步骤920),并生成用于子虚拟设备的设备相关结构(DDS)(步骤930)。该DDS包括连接子虚拟设备的VIO总线的标识符以及与子虚拟设备关联的dma-window。将DDS发送给子虚拟设备的设备驱动程序(步骤940)。
接着,子虚拟设备的设备驱动程序依据上面的特定实施方式,调用VIO总线设备驱动或操作系统内核的数据交换接口(步骤950)。子虚拟设备的设备驱动程序向操作系统内核/VIO总线设备驱动程序的数据交换接口传送数据(步骤960)。例如,该数据可以指示子虚拟设备的dma-window。
数据交换接口向VIO总线注册/注销子虚拟设备(步骤970),并初始化用于子虚拟设备的DMA操作的DMA硬件和操作系统资源(步骤980)。然后该操作终止。
这样,本发明提供了为了向用于DMA操作的VIO总线注册/注销子虚拟设备而从子虚拟设备的设备驱动程序直接向VIO总线设备驱动程序传送dma-window信息的机制。尽管上述实施方式是按照配置用于子虚拟设备的DMA操作的系统来描述的,但是本发明并不限于此。相反,可使用本发明的机制在操作系统内核空间中的设备驱动程序之间传送任何合适信息。因此,也可以使用本发明来传送需要与另一个内核扩展或驱动程序共享的任意一种设备特有的信息,而不是仅仅使用本发明配置用于带有VIO总线的DMA操作的子虚拟设备。
重要的是请注意,尽管本发明是在全功能数据处理系统的情况下描述的,但是本领域的一般技术人员可以理解,可以以指令的计算机可读介质的形式,以及多种形式分布本发明的进程,并且不论实际完成分布的信号承载介质的特定类型,本发明同样适用。计算机可读介质的例子包括可记录类型的介质,如软盘、硬盘驱动器、RAM、CD-ROM、DVD-ROM,以及传输类型的介质,如数字和模拟通信链路,使用诸如射频和光波传输之类的传输形式的有线或无线通信链路。计算机可读介质可以采取编码的格式的形式,其中当在特定数据处理系统中实际使用时进行解码。
提供本发明的说明书的目的是为了说明和描述,而不是用来穷举或将本发明限制为所公开的形式。对本领域的一般技术人员而言,许多修改和变更都是显而易见的。选择并描述实施方式是为了更好地解释本发明的原理,其实际应用,并使本领域的其他一般技术人员理解带有各种修改的各种实施方式的本发明同样适用于设想的特定用途。
Claims (18)
1. 一种方法,在数据处理系统中用于为初始化用于直接存储器存取DMA操作的设备而在第一设备驱动程序和第二设备驱动程序之间传送数据,包括:
在该第一设备驱动程序中确定将向该第二设备驱动程序提供的数据;
由该第一设备驱动程序调用内核空间中的数据交换接口;以及
向该数据交换接口提供该数据,其中该内核空间中的该数据交换接口将该数据写入到由该第二设备驱动程序维护并使用的数据结构中,
其中该第一设备驱动程序和设备树中的子设备相关联,并且该第二设备驱动程序和该设备树中的该子设备的双亲设备相关联,以及其中该子设备为子虚拟设备,并且该双亲设备为虚拟输入/输出总线。
2. 根据权利要求1的方法,其中该数据交换接口包括至少一个输入/输出控制方法,用于向设备树中的双亲设备注册和注销子设备。
3. 根据权利要求1的方法,其中该数据交换接口包括一个或多个内核服务,用于向设备树中的双亲设备注册和注销子设备。
4. 根据权利要求1的方法,进一步包括:
获取该双亲设备的设备标识符,其中调用该内核空间内的该数据交换接口包括,通过使用该设备标识符调用该数据交换接口的内核服务和输入/输出控制方法之一。
5. 根据权利要求4的方法,其中该双亲设备的该设备标识符是从与该子设备关联的配置方法生成的设备相关结构中获得的。
6. 根据权利要求1的方法,其中提供给该第二设备驱动程序的该数据包括与该子设备关联的直接存储器存取窗口的标识符。
7. 根据权利要求6的方法,其中该直接存储器存取窗口的该标识符是从与该子设备关联的配置方法生成的设备相关结构中获得的。
8. 根据权利要求6的方法,其中该数据交换接口基于直接存储器存取窗口的该标识符,初始化用于该子设备的物理到直接存储器存取地址的转换表。
9. 根据权利要求8的方法,其中该直接存储器存取窗口的该标识符保存在与该双亲设备关联的存储器中,用于当来自该第一设备驱动程序的直接存储器存取请求到达时写入和读取物理到DMA地址的转换表条目。
10. 一种系统,用于为初始化用于直接存储器存取DMA操作的设备而在第一设备驱动程序和第二设备驱动程序之间传送数据,包括:
用于在该第一设备驱动程序中确定将向该第二设备驱动程序提供的数据的装置;
用于由该第一设备驱动程序调用内核空间中的数据交换接口的装置;以及
用于向该数据交换接口提供该数据的装置,其中该内核空间中的该数据交换接口将该数据写入到由该第二设备驱动程序维护并使用的数据结构中,
其中该第一设备驱动程序和设备树中的子设备相关联,并且该第二设备驱动程序和该设备树中的该子设备的双亲设备相关联,以及其中该子设备为子虚拟设备,并且该双亲设备为虚拟输入/输出总线。
11. 根据权利要求10的系统,其中该数据交换接口包括至少一个输入/输出控制方法,用于向设备树中的双亲设备注册和注销子设备。
12. 根据权利要求10的系统,其中该数据交换接口包括一个或多个内核服务,用于向设备树中的双亲设备注册和注销子设备。
13. 根据权利要求10的系统,进一步包括:
用于获取该双亲设备的设备标识符的装置,其中用于调用该内核空间内的该数据交换接口的装置包括,用于通过使用该设备标识符调用该数据交换接口的内核服务和输入/输出控制方法之一的装置。
14. 根据权利要求13的系统,其中该双亲设备的该设备标识符是从与该子设备关联的配置方法生成的设备相关结构中获得的。
15. 根据权利要求10的系统,其中提供给该第二设备驱动程序的该数据包括与该子设备关联的直接存储器存取窗口的标识符。
16. 根据权利要求15的系统,其中该直接存储器存取窗口的该标识符是从与该子设备关联的配置方法生成的设备相关结构中获得的。
17. 根据权利要求15的系统,其中该数据交换接口基于直接存储器存取窗口的该标识符,初始化用于该子设备的物理到直接存储器存取地址的转换表。
18. 根据权利要求17的系统,其中该直接存储器存取窗口的该标识符保存在与该双亲设备关联的存储器中,用于当来自该第一设备驱动程序的直接存储器存取请求到达时写入和读取物理到DMA地址的转换表条目。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/922,276 US7506343B2 (en) | 2004-08-19 | 2004-08-19 | System and method for passing information from one device driver to another |
US10/922276 | 2004-08-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1737780A CN1737780A (zh) | 2006-02-22 |
CN100410912C true CN100410912C (zh) | 2008-08-13 |
Family
ID=36080581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100769452A Expired - Fee Related CN100410912C (zh) | 2004-08-19 | 2005-06-09 | 从一个设备驱动程序向另一个传送信息的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7506343B2 (zh) |
CN (1) | CN100410912C (zh) |
TW (1) | TW200617692A (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4788124B2 (ja) * | 2004-09-16 | 2011-10-05 | 株式会社日立製作所 | データ処理システム |
US20060242270A1 (en) * | 2005-04-21 | 2006-10-26 | Microsoft Corporation | Isolation of user-mode device drivers |
US8918530B2 (en) * | 2005-09-09 | 2014-12-23 | Microsoft Corporation | Plug and play device redirection for remote systems |
KR100757229B1 (ko) * | 2005-12-05 | 2007-09-10 | 한국전자통신연구원 | 리눅스 시스템상에서 usb 디바이스 드라이버 개발을지원하는 운영체제 자원 진단 장치 및 방법 |
US7546398B2 (en) * | 2006-08-01 | 2009-06-09 | International Business Machines Corporation | System and method for distributing virtual input/output operations across multiple logical partitions |
CN100428171C (zh) * | 2006-12-08 | 2008-10-22 | 杭州华三通信技术有限公司 | 数据平面与控制平面之间的通讯方法 |
US7979868B2 (en) | 2007-01-07 | 2011-07-12 | Apple Inc. | Method and apparatus for intercommunications amongst device drivers |
US8196153B1 (en) * | 2007-01-07 | 2012-06-05 | Apple Inc. | Method and apparatus for associating device drivers via a device tree |
US8689288B2 (en) * | 2007-04-16 | 2014-04-01 | Samsung Electronics Co., Ltd. | Apparatus and method for protecting system in virtualized environment |
US20090210888A1 (en) * | 2008-02-14 | 2009-08-20 | Microsoft Corporation | Software isolated device driver architecture |
US8171181B2 (en) * | 2008-05-05 | 2012-05-01 | Micron Technology, Inc. | Memory module with configurable input/output ports |
US8762698B2 (en) * | 2009-12-14 | 2014-06-24 | Intel Corporation | Virtual bus device using management engine |
US9858126B2 (en) | 2010-12-16 | 2018-01-02 | Microsoft Technology Licensing, Llc | Device redirection for remote systems |
US8719466B2 (en) * | 2011-12-16 | 2014-05-06 | Oracle International Corporation | Direct data transfer for device drivers |
WO2013095562A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Method, device and system for aggregation of shared address devices |
CN102866966B (zh) * | 2012-08-28 | 2015-07-29 | 大唐移动通信设备有限公司 | 一种Linux操作系统的设备驱动控制方法和装置 |
JP6282434B2 (ja) * | 2012-10-22 | 2018-02-21 | キヤノンイメージングシステムズ株式会社 | デバイス制御装置、その制御方法、及びデバイス制御システム |
JP6349783B2 (ja) * | 2014-02-28 | 2018-07-04 | 富士通株式会社 | 端末装置、サーバ装置、デバイスドライバプログラム及び外部周辺機器制御方法 |
US10437747B2 (en) * | 2015-04-10 | 2019-10-08 | Rambus Inc. | Memory appliance couplings and operations |
CN107391355B (zh) * | 2017-07-25 | 2020-08-25 | 苏州浪潮智能科技有限公司 | 一种控制内核模块日志输出的方法与装置 |
CN108287804B (zh) * | 2018-01-25 | 2021-12-28 | 郑州云海信息技术有限公司 | 一种i2c控制器驱动方法及系统 |
CN110209602A (zh) * | 2019-05-17 | 2019-09-06 | 北京航空航天大学 | 跨域虚拟数据空间中区域划分及空间分配方法 |
CN117707628A (zh) * | 2023-06-15 | 2024-03-15 | 荣耀终端有限公司 | 一种器件初始化方法、电子设备和可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1326569A (zh) * | 1998-10-30 | 2001-12-12 | 电脑联合想象公司 | 用操作系统安装新的设备驱动程序的装置和方法 |
WO2003038582A1 (en) * | 2001-10-31 | 2003-05-08 | Microsoft Corporation | Selective suspension of bus devices |
CN1462395A (zh) * | 2001-05-07 | 2003-12-17 | 科学园株式会社 | 电子计算机的接口驱动器程序 |
WO2004001615A1 (en) * | 2002-06-19 | 2003-12-31 | Telefonaktiebolaget Lm Ericsson | A network device driver architecture |
CN1482522A (zh) * | 2002-12-24 | 2004-03-17 | 联想(北京)有限公司 | 与外部设备分离设置的计算机系统及其输入输出方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0664536B2 (ja) * | 1986-01-17 | 1994-08-22 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | 仮想端末サブシステムの制御方法 |
US6473803B1 (en) * | 1997-06-02 | 2002-10-29 | Unisys Corporation | Virtual LAN interface for high-speed communications between heterogeneous computer systems |
WO2001044935A1 (en) * | 1999-12-15 | 2001-06-21 | Sun Microsystems, Inc. | Computer system with an improved device and driver framework |
US6823404B2 (en) * | 2000-06-08 | 2004-11-23 | International Business Machines Corporation | DMA windowing in an LPAR environment using device arbitration level to allow multiple IOAs per terminal bridge |
US6985951B2 (en) * | 2001-03-08 | 2006-01-10 | International Business Machines Corporation | Inter-partition message passing method, system and program product for managing workload in a partitioned processing environment |
US7124228B2 (en) * | 2001-07-10 | 2006-10-17 | Sun Microsystems, Inc. | Bus communication architecture, in particular for multicomputing systems |
US6725284B2 (en) * | 2002-04-25 | 2004-04-20 | International Business Machines Corporation | Logical partition hosted virtual input/output using shared translation control entries |
-
2004
- 2004-08-19 US US10/922,276 patent/US7506343B2/en not_active Expired - Fee Related
-
2005
- 2005-06-09 CN CNB2005100769452A patent/CN100410912C/zh not_active Expired - Fee Related
- 2005-08-02 TW TW094126240A patent/TW200617692A/zh unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1326569A (zh) * | 1998-10-30 | 2001-12-12 | 电脑联合想象公司 | 用操作系统安装新的设备驱动程序的装置和方法 |
CN1462395A (zh) * | 2001-05-07 | 2003-12-17 | 科学园株式会社 | 电子计算机的接口驱动器程序 |
WO2003038582A1 (en) * | 2001-10-31 | 2003-05-08 | Microsoft Corporation | Selective suspension of bus devices |
WO2004001615A1 (en) * | 2002-06-19 | 2003-12-31 | Telefonaktiebolaget Lm Ericsson | A network device driver architecture |
CN1482522A (zh) * | 2002-12-24 | 2004-03-17 | 联想(北京)有限公司 | 与外部设备分离设置的计算机系统及其输入输出方法 |
Also Published As
Publication number | Publication date |
---|---|
US7506343B2 (en) | 2009-03-17 |
US20060136612A1 (en) | 2006-06-22 |
TW200617692A (en) | 2006-06-01 |
CN1737780A (zh) | 2006-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100410912C (zh) | 从一个设备驱动程序向另一个传送信息的系统和方法 | |
CN102023932B (zh) | 为本地与远程物理存储器之间的共享虚拟存储器提供硬件支持 | |
CN100442237C (zh) | 访问逻辑分区中的存储器的方法和系统 | |
CN100583046C (zh) | 用于单根无状态虚拟功能迁移的系统和方法 | |
US6725284B2 (en) | Logical partition hosted virtual input/output using shared translation control entries | |
CN101268445B (zh) | 用于向多核环境中的应用程序提供实时线程服务的方法、装置 | |
CN101206623B (zh) | 迁移虚拟端点的系统和方法 | |
CN100356335C (zh) | 保存跟踪数据的方法和装置 | |
CN102541619B (zh) | 虚拟机管理装置和方法 | |
US7363434B2 (en) | Method, system, and computer-readable medium for updating memory devices in a multi-processor computer system | |
CN103034524A (zh) | 半虚拟化的虚拟gpu | |
EP3992790B1 (en) | Information processing method, physical machine and pcie device | |
CN107209681A (zh) | 一种存储设备访问方法、装置和系统 | |
CN101206629A (zh) | 在运行的PCIe架构中热插/拔新组件的系统和方法 | |
CN101165676A (zh) | 隔离数据处理系统的多个输入/输出适配器单元的方法和系统 | |
CN101206633A (zh) | 用事务协议和共享存储器在主机系统间通信的系统和方法 | |
TW200307203A (en) | Method and apparatus for managing memory blocks in a logical partitioned data processing system | |
CN101206634A (zh) | 用于初始化共享存储器的系统和方法 | |
EP4152149A1 (en) | Method and apparatus for processing exception or interrupt under heterogeneous instruction set architecture | |
JP5365847B2 (ja) | 仮想化装置における物理デバイスのコンフィグレーション処理方法及びコンピュータシステム | |
CN101154202B (zh) | 管理多处理器计算机系统中的系统管理中断的系统和方法 | |
US20240264768A1 (en) | Request Processing Method, Apparatus, and System | |
CN100594481C (zh) | 允许运行在逻辑分区上的程序访问资源的方法与系统 | |
US5890011A (en) | Method and system for dynamically translating bus addresses within a computer system | |
US9575796B2 (en) | Virtual device timeout by memory offlining |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080813 |