计算机系统与其组态管理程序传输系统信息的方法 【技术领域】
本发明是有关于一种组态管理程序,且特别是有关于一种计算机系统与其组态管理程序传输系统信息的方法。
背景技术
进阶组态与电源接口(Advanced configuration and power interface,以下简称ACPI)目前广泛地被应用于各式的计算机平台,包括网络服务器、桌上型个人计算机、笔记本计算机等等。就目前ACPI功能的研发工作上,业界大都采用ASL(ACPI Source Language)程序语言来撰写ACPI功能模块,且需要先将ASL原始程序代码(Code)编译成机器码形式的AML(ACPI machine language)程序代码,再将AML程序代码烧入至闪存(Flash ROM)中,然后由ACPI操作系统(Operating System,OS)来执行所需的电源管理功能。
另外,ACPI AML程序常需要与基本输入输出系统(Basic input output system,以下简称BIOS)产生对应的数据交流关系。就目前来说,BIOS的功能于研发上大都采用C程序语言或汇编语言(Assembly Language)来撰写,因此计算机工程师于研发某一ACPI功能时,则需以ASL程序语言来撰写ASL程序代码,且同时用C程序语言(或汇编语言)来撰写相关的BIOS程序代码。
由于ASL程序语言和C程序语言(或汇编语言)为二种语法完全不同的程序语言,因此,对于计算机工程师(即ACPI的研发人员)来说,会带来很大的不便与困扰。也就是说,当计算机系统的芯片组需更换、硬件设计上需修改或BIOS程序代码需要修正时,计算机工程师不仅需要修正相关的BIOS程序代码,且须同时修正相关的ASL程序代码,使得计算机系统可以正常运作。
有鉴于此,若是能提供一种技术,可以将单一版本ASL程序代码应用于不同产品项目,甚至用于不同的芯片组(Chipset)以及不同的硬件环境中,使得计算机工程师不需另外对ASL程序代码进行修正,以减少修改ASL程序代码的修正时间,将是一个重要的课题。
【发明内容】
本发明提供一种计算机系统与其组态管理程序获得系统信息的方法,藉此让计算机工程师进行硬件(Hardware)或基本输入输出系统(BIOS)的修改时,不必去修改相关的组态管理程序的ASL/AML程序代码,以减少撰写ASL/AML程序代码的错误以及除错时间。
本发明提出一种组态管理程序传输系统信息的方法,包括下列步骤。首先,提供第一存储器,其中该第一存储器记录着至少一系统信息。之后,由组态管理程序触发一中断,其中此中断具有指令信息。接着,由中断处理程序处理上述中断,以便依据上述中断的指令信息进行对应的组态设定操作,或是依据该指令信息将第一存储器中对应的系统信息回传给组态管理程序。
在本发明一实施例中,上述方法还包括下列步骤。首先,检测计算机系统,以获取至少一系统信息。接着,将系统信息记录于第一存储器。
在本发明一实施例中,上述检测计算机系统的步骤包括下列步骤。首先,进行开机自我测试程序。接着,于开机自我测试程序中,由基本输入输出系统检测计算机系统的组态,以获取系统信息。
在本发明一实施例中,上述中断为系统管理中断(System ManagementInterrupt,SMI),而中断处理程序为系统管理中断处理程序(SMI Handler)。
在本发明一实施例中,上述指令信息包含指令,而上述组态管理程序触发中断的步骤包括写入指令至中断控制端口,其中中断处理程序执行中断控制端口的指令,以便依据上述指令进行对应的组态设定操作,或是依据上述指令将第一存储器中对应的系统信息回传给组态管理程序。
在本发明一实施例中,上述指令信息包含指令与第一参数,而组态管理程序触发中断的步骤包括下列步骤。写入第一参数至中断数据端口。接着,写入指令至中断控制端口。其中,中断处理程序依据中断数据端口的第一参数执行中断控制端口的指令,以便依据第一参数与指令进行对应的组态设定操作,或是依据第一参数与指令将第一存储器中对应的系统信息写入中断数据端口。
在本发明一实施例中,上述组态管理程序传输系统信息的方法还包括由组态管理程序从中断数据端口读取系统信息。
在本发明一实施例中,上述中断数据端口是地址为B3h的输入输出端口。
在本发明一实施例中,上述中断控制端口是地址为B2h的输入输出端口。
在本发明一实施例中,上述组态管理程序触发该中断的步骤还包括写入第二参数至第二存储器,其中中断处理程序依据中断数据端口的第一参数与第二存储器的第二参数执行中断控制端口的指令,以便依据第一参数、第二参数与指令进行对应的组态设定操作,或是依据第一参数、第二参数与指令将第一存储器中对应的系统信息写入第二存储器。
在本发明一实施例中,上述组态管理程序传输系统信息的方法还包括由组态管理程序从第二存储器读取系统信息。
在本发明一实施例中,上述第二存储器为延伸BIOS数据区域(Extended BIOSData Area,EBDA)。
在本发明一实施例中,上述第一存储器为系统管理模式存储器(SystemManagement Mode Random Access Memory,SMM RAM)。
在本发明一实施例中,上述组态管理程序为先进组态与电源接口(AdvancedConfiguration and Power Interface,ACPI)程序。
本发明提出一种计算机可读取储存媒体,用以储存计算机程序,此计算机程序用以加载至计算机系统中并且使得计算机系统执行上述组态管理程序传输系统信息的方法。
本发明提出一种用于使组态管理程序传输系统信息的计算机程序产品,当计算机加载计算机程序并执行后,可完成上述组态管理程序传输系统信息的方法。
本发明提出一种计算机系统,包括检测模块、存储器与组态管理程序模块与中断处理程序模块。检测模块用以检测计算机系统,以获取至少一系统信息。存储器用以储存该系统信息。组态管理程序模块用以执行组态管理程序,以触发一中断,且此中断具有指令信息。中断处理程序模块用以执行中断处理程序处理中断,以便依据指令信息进行对应的组态设定操作,或是依据指令信息将第一存储器中对应的系统信息回传给组态管理程序模块。
在本发明一实施例中,上述计算机系统还包括检测模块。此检测模块用以检测计算机系统,以获取至少一系统信息,并将系统信息记录于第一存储器。
在本发明一实施例中,上述检测模块进行开机自我测试程序,且于开机自我测试程序中,由基本输入输出系统检测计算机系统的组态,以获取系统信息。
在本发明一实施例中,上述中断为系统管理中断,而中断处理程序为系统管理中断处理程序。
在本发明一实施例中,上述指令信息包含指令,而计算机系统还包括中断控制端口。此中断控制端口用以储存指令,其中中断处理程序模块执行中断控制端口的指令,以便依据上述指令进行对应的组态设定操作,或是依据上述指令将第一存储器中对应的该系统信息回传给组态管理程序模块。
在本发明一实施例中,上述指令信息包含指令与第一参数,而计算机系统还包括中断数据端口与中断控制端口。中断数据端口用以储存第一参数。中断控制端口用以储存指令。其中,中断处理程序模块依据中断数据端口的第一参数执行中断控制端口的指令,以便依据第一参数与指令进行对应的组态设定操作,或是依据第一参数与指令将第一存储器中对应的系统信息写入中断数据端口。
在本发明一实施例中,上述组态管理程序模块是从中断数据端口读取系统信息。
在本发明一实施例中,上述中断数据端口是地址为B3h的输入输出端口。
在本发明一实施例中,上述中断控制端口是地址为B2h的输入输出端口。
在本发明一实施例中,上述计算机系统还包括第二存储器,用以写入第二参数。其中,中断处理程序依据中断数据端口地第一参数与第二存储器的第二参数执行中断控制端口的指令,以便依据第一参数、第二参数与指令进行对应的组态设定操作,或是依据第一参数、第二参数与指令将第一存储器中对应的系统信息写入第二存储器。
在本发明一实施例中,上述组态管理程序模块是从第二存储器读取系统信息。
本发明通过将检测计算机系统所获取的系统信息,先存放于存储器中。再通过组态管理程序触发中断,并由中断处理程序处理中断,以便依据中断之指令信息进行对应的组态设定操作,或是依序中断的指令信息将存储器中对应的系统信息回传给组态管理程序,以便于让组态管理程序获得对应的系统信息。如此一来,若是计算机系统的芯片组需更换、硬件设计上需修改或BIOS程序代码需要修正时,计算机工程师只需要修正相关的BIOS程序代码即可,而不需在对组态管理程序相关的ASL程序代码进行修正,进而减少撰写ASL程序代码的错误以及除错时间。
为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图,作详细说明如下。
【附图说明】
图1绘示为本发明一实施例的组态管理程序传输系统信息的方法流程图。
图2绘示为本发明一实施例的计算机系统的示意图。
图3绘示为本发明另一实施例的组态管理程序传输系统信息的方法流程图。
图4绘示为本发明另一实施例的计算机系统的示意图。
图5绘示为本发明又一实施例的组态管理程序传输系统信息的方法流程图。
图6绘示为本发明又一实施例的计算机系统的示意图。
图7绘示为本发明再一实施例的组态管理程序传输系统信息的方法流程图。
图8绘示为本发明再一实施例的计算机系统的示意图。
【具体实施方式】
图1绘示为本发明一实施例的组态管理程序获取系统信息的方法流程图。图2绘示为本发明一实施例的计算机系统的示意图。请合并参照图1与图2,计算机系统200包括检测模块210、第一存储器220、组态管理程序模块230与中断处理程序模块240。检测模块210用以检测计算机系统200,以获取至少一系统信息(步骤S101)。在本实施例中,检测模块210中可以配置一非易失性存储器(Non-volatileRandom Access Memory,NVRAM),此非易失性存储器用以储存基本输入输出系统(Basic Input Output System,BIOS)。因此,检测模块210会先进行开机自我测试(POST)程序,并于此开机自我测试程序中,由基本输入输出系统检测计算机系统200的组态,以获取所需要的系统信息。上述系统信息可以为通讯端口COM1/COM2、PS2-KB/MS、电话唤醒(Wakeup on Ring,WOR)、网络唤醒(Wakeupon LAN,WOL)、停止风扇运转(Stop Fan)、设定电源指示灯状态(Set Power LedState)、告知基板管理控制器(Baseboard Management Controller,BMC)…等计算机系统200内部的各种相关信息。
接着,在获得系统信息之后,检测模块210会将所获取的系统信息写入第一存储器220(步骤S103)。亦即第一存储器220会储存系统信息,以便计算机系统200在后续运作中可以由第一存储器220中读取出系统信息。在本实施例中,第一存储器220例如为系统管理模式存储器(System Management Mode Random AccessMemory,SMM RAM)。
组态管理程序模块230执行组态管理程序。当组态管理程序欲传输系统信息以执行组态管理时,组态管理程序模块230的组态管理程序会触发一中断(Interrupt),其中中断具有指令(Command)信息(步骤S105)。在本实施例中,组态管理程序模块230的组态管理程序可以是进阶组态与电源接口(ACPI)或其它任何用来管理计算机系统内部组态的组态管理程序。
当中断处理程序模块240接收到上述中断发出之后,便会执行中断处理程序来处理此中断,以便依据中断的指令信息进行对应的组态设定操作或是获取组态讯息。前述中断例如为系统管理中断(System Management Interrupt,SMI),而中断处理程序模块240所执行的中断处理程序可以是系统管理中断处理程序(SMIHandler)。
换句话说,组态管理程序模块230可以通过触发中断,要求中断处理程序模块240依据该指令信息代为执行一部或全部的组态设定操作。也就是说,中断处理程序模块240会依据上述中断的指令信息而产生一设定值,以便进行组态设定操作(例如设定风扇转速,或其它组态设定)。或者,组态管理程序模块230也可以通过触发中断,要求中断处理程序模块240依据该指令信息至第一存储器220中读取对应的系统信息(即组态讯息,例如读取「网络唤醒」的设定值,或读取其它组态设定值),并将此系统信息回传给组态管理程序模块230(步骤S107),使得组态管理程序可以获得对应的系统信息。如此一来,计算机工程师不必因为计算机系统200的硬件或是基本输入输出系统的程序代码需要修改时,还要对组态管理程序模块230的程序代码进行修改。
图3绘示为本发明另一实施例的组态管理程序传输系统信息的方法流程图。图4绘示为本发明另一实施例的计算机系统的示意图。请合并参照图3与图4,计算机系统400包括检测模块410、第一存储器420、组态管理程序模块430、中断处理程序模块440与中断控制端口450。本实施例中检测模块410、第一存储器420、组态管理程序模块430、中断处理程序模块440除下述说明外,也可以别参照图2中检测模块210、第一存储器220、组态管理程序模块230与中断处理程序模块240的相关说明。
检测模块410用以检测计算机系统400,以获取至少一系统信息(步骤S301)。接着,检测模块410会将系统信息写入第一存储器420中(步骤S303),以便计算机系统400在后续运作中可以由第一存储器420中读取出系统信息。在本实施例中,第一存储器420例如为系统管理模式存储器。之后,组态管理模块430会写入一指令至中断控制端口450,并且执行组态管理程序触发一中断,而此中断具有上述指令(步骤S305)。前述中断例如为系统管理中断(SMI),而中断控制端口450可以是系统管理中断控制端口(SMI control port)。
接着,中断处理程序模块430接收到上述中断后,会到中断控制端口450读取上述指令,以便执行中断处理程序来处理中断控制端口450的指令,而将第一存储器420中对应的系统信息回传给组态管理程序模块430(步骤S307),使得组态管理程序可以获得对应的系统信息;或者,中断处理程序模块440依据第一参数执行中断控制端口450的指令,而进行对应的组态设定操作。如此一来,计算机工程师不必因为计算机系统400的硬件或是基本输入输出系统需要修改时,而还要对组态管理程序模块430的程序代码进行修改。
图5绘示为本发明又一实施例的组态管理程序传输系统信息的方法流程图。图6绘示为本发明又一实施例的计算机系统的示意图。请合并参照图5与图6,计算机系统600包括检测模块610、第一存储器620、组态管理程序模块630、中断处理程序模块640、中断控制端口650、中断数据端口660。本实施例中检测模块610、第一存储器620、组态管理程序模块630、中断处理程序模块640、中断控制端口650除下述说明外,也可以分别参照图4中检测模块410、第一存储器420、组态管理程序模块430、中断处理程序模块440与中断控制端口450的相关说明。
检测模块610检测计算机系统600,以获取至少一系统信息(步骤S501)。接着,检测模块610将系统信息写入第一存储器620中(步骤S503),以便计算机系统600在后续运作中可以由第一存储器620中读取出系统信息。在本实施例中,第一存储器620例如为系统管理模式存储器。
之后,组态管理程序模块630先写入第一参数至中断数据端口660,再写入指令至中断控制端口650,并且执行组态管理程序以触发中断,且此中断具有上述第一参数与指令(步骤S505)。前述中断例如为系统管理中断(SMI),而中断数据端口660与中断控制端口650可以是系统管理中断数据端口(SMI data port)与系统管理中断控制端口(SMI control port)。
在中断处理程序模块640接收到上述中断后,中断处理程序模块640会分别至中断数据端口660与中断控制端口650读取第一参数与指令,以便于依据中断数据端口660的第一参数执行中断控制端口650的指令,而将第一存储器620中对应的系统信息写入中断数据端口660(步骤S507);或者,中断处理程序模块640依据第一参数执行中断控制端口650的指令,而进行对应的组态设定操作。最后,组态管理程序模块630会从中断数据端口660中读取系统信息(步骤S509),以便让组态管理程序获得对应的系统信息。如此一来,计算机工程师不必因为计算机系统600的硬件或是基本输入输出系统需要修改时,而还要对组态管理程序模块630的程序代码进行修改。在本实施例中,中断数据端口660例如是地址为B3h的输入输出端口(8-bit),而中断控制端口650例如是地址为B2h的输入输出端口(8-bit)。
在上述实施例中,中断数据端口660的所能储存的数据位大小为8位(Bit)。当组态管程序模块630写入参数的数据量大于8位时,上述实施例的中断数据端口660便无法完整地储存上述参数。因此,以下便举另一例来说明如。图7绘示为本发明再一实施例的组态管理程序传输系统信息的方法流程图。图8绘示为本发明再一实施例的计算机系统的示意图。请先参照图8,于本实施例中,计算机系统800包括检测模块810、第一存储器820、组态管理程序模块830、中断处理程序模块840、中断控制端口850、中断数据端口860与第二存储器870。本实施例中检测模块810、第一存储器820、组态管理程序模块830、中断处理程序模块840、中断控制端口850除下述说明外,也可以分别参照图6中检测模块610、第一存储器620、组态管理程序模块630、中断处理程序模块640与中断控制端口650的相关说明。第二存储器870可以储存数据量较大的参数,例如为1KB。
请合并参照图7与图8,图7的步骤S701、S703的说明与图5的步骤S501、S503相同或相似,故不再赘述。接着,在步骤S705中,组态管理程序模块830将第一参数(8-bit)写入中断数据端口860以及写入指令至中断控制端口850外,还会将第二参数写入至第二存储器870。
之后,在步骤S707中,中断处理程序模块840接收到中断后,会先至中断数据端口860读取第一参数以及中断控制端口850读取指令外,还会同时至第二存储器870读取第二参数,以便于依据第一参数与第二参数执行中断控制端口850的指令,而将第一存储器820中对应的系统信息写入第二存储器870;或者,中断处理程序模块840可以依据在中断数据端口860的第一参数与在第二存储器870的第二参数执行中断控制端口850的指令,而进行对应的组态设定操作(例如设定风扇转速,或设定其它组态参数)。在此假设断处理程序模块840接收到中断后,会依据第一参数与第二参数执行中断控制端口850的指令,而将第一存储器820中对应的系统信息写入第二存储器870。
最后,在步骤S709中,组态管理程序模块830会从第二存储器870中读取系统信息,以便让组态管理程序获得对应的系统信息。在本实施例中,第二存储器870为延伸BIOS数据区域(Extended BIOS Data Area,EBDA)。此EBDA可以容纳的数据量高达1024字节(bytes)。
以下,将举一些实际的例子来说明。在计算机系统600(800)进入睡眠状态(Sleep State)之前,有2个时间点的工作必需由基本输入出系统执行。而第1个时间点为ACPI中的_PTS程序(Method)被执行时,也就是说使用软件的系统管理程序中断(SW SMI)去让基本输入输出系统执行一些功能,例如使能PS2 KB/MS唤醒、清除唤醒状态、停止风扇运转、设定电源指示灯状态。此软件的系统管理中断要有输入数据(Input Data)及输出结果(Output Result)。而上述输入参数为本实施例所述的第一参数与指令,输出结果为本实施例所述的系统信息。并且,执行上述功能的程序如下所示:
EX:
Method(_PTS,1,NotSerialized)
{
if(Lor(LEqual(ARG0,4),LEqual(ARG0,5))) //S4 or S5
{\_SB.SSMI(0xAF,0) //issue sw smi 0xAF subfunction 0 to Enable SIO wakeup on ring
on COMA
\_SB.SSMI(0xAF,2) //issue sw smi 0xAF subfunction 2 to Enable SIO wakeup on ring
on COMB
}
if(LEqual(ARG0,1)) //While entering S1
{
if(Lor(\_SB.WPSK,\_SB.WPSM)) //PS2 KB/MS will can wakeup from S1
{
\_SB.SSMI(0xAF,4) //issue sw smi 0xAF subfunction 4 to Enaable SIO wakeup on PS2
KB
\_SB.SSMI(0xAF,6) //issue sw smi 0xAF subfunction 6 to Enable SIO wakeup on PS2
MS
}
\_SB.SSMI(0xAF,0) //issue sw smi 0xAF subfunction 0 to Enable SIO wakeup on ring on
COMA
\_SB.SSMI(0xAF,2) //issue sw smi 0xAF subfunction 2 to Enable SIO wakeup on ring on
COMB
} //end if
…
Store(One,PS1S) //Clear Sleep status
Store(One,PS1E) //Enable Sleep
//After here,system will issue“Sleep SMI”if“sleep type enable bit”is set as 1
} //end of_PTS
另外,第2个时间点为计算机系统600(800)要进入睡眠状态的最后点,也就是当睡眠缓存器(Sleep Register)的使能位(Enable Bit)被写入1时,基本输入输出系统必需使用输入输出拦截(IO trap)或睡眠状态缓存器(Sleep TypeRegister)去栏截此系统管理中断,以便去执行相关的工作。上述功能例如为使能PS2 KB/MS唤醒事件、电话唤醒与网络唤醒。
此外,在计算机系统600(800)离开休眠状态后有1个时间点的工作必须由基本输入输出系统来执行,也就是ACPI中的_WAK程序(Method)被执行时,而透过软件的系统管理中断去执行工作,例如清除状态(Clear Status)、禁能唤醒事件(Disable Wakeup Event)、恢复风扇运转(Restore Fan)、设定电源指示灯状态。而执行上述功能的程序如下所述:
Ex:
Method(_WAK,1,Serialized)
{
\_SB.SSMI(0xAF,1) //issue sw smi 0xAF subfunction 1 to disable SIO wakeup on ring on
COMA
\_SB.SSMI(0xAF,3) //issue sw smi 0xAF subfunction 3 to disable SIO wakeup on ring on
COMB
\_SB.SSMI(0xAF,5) //issue sw smi 0xAF subfunction 5 to disable SIO wakeup on PS2 KB
\_SB.SSMI(0xAF,7) //issue sw smi 0xAF subfunction 7 to disable SIO wakeup on PS2 MS
…
}
在本实施例中,ASL程序代码中只有一个「触发软件的系统管理中断的程序」。而上述的程序中需要2个输入参数(指令与输入参数),亦即本实施例的第一参数与指令,并且于执行完上述程序后将回传1个输出值,亦即本实施例的系统信息。因此,需要定义出指令(中断控制端口650(850),SMI Command Port 0B2h)/输入参数(中断数据端口660(860),SMI Data Port 0B3h)/输出参数(中断数据端口660(860),SMI Data Port 0B3h)的对应关系即可。并且,指令(Command)/输入数据(Input Data)/输出数据(Output Data)皆为8位。而执行上述功能的程序如下所述:
EX:
//
//Alg-issue SW SMI with command ARG0(8bits) & input data ARG1(8bits),and return a value
(8bits)
// EX:SW SMI 0xAF with parameter input parameter
// 0:Enable SIO COMA wake on Ring(EnableSioComaWOR)
// 1:Disable SIO COMA wake on Ring(DisableSioComaWOR)
// 2:Enable SIO COMB wake on Ring(EnableSioCombWOR)
// 3:Disable SIO COMB wake on Ring(DisableSioCombWOR)
// 4:Enable SIO PS2 KB wakeup(EnableSioPs2Kb)
// 5:Disable SIO PS2 KB wakeup(DisableSioPs2Kb)
// 6:Enable SIO PS2 MS wakeup(EnableSioPs2Ms)
// 7:Disable SIO PS2 MS wakeup(DisableSioPs2Ms)
//
Method(SSMI,2) //SW SMI
{
Mutex(MUT1,0) //MUTEX for SMIS(IO 0x B3) & SMIC(IO 0xB2)
Acquire(MUT1,0xFFFF) //Acquire Semaphore
Store(\_SB.SMIS,Local0) //Save SMIS
Store(Arg1,\_SB.SMIS) //Set parameter into SMIS
Store(Arg0,\_SB.SMIC) //SW SMI command into SMIC;issue SW SMI & return value
will save to IO 0xB3
Store(\_SB.SMIS,Local1)
Store(Local0,\_SB.SMIS) //Restore SMIS
Release(MUT1) //Release Semaphore
Return(Local1)
} //end SSMI
OperationRegion(IOB2,SystemIO,0xB2,2) //MKF_SMIPORT
Field(IOB2,ByteAcc,NoLock,Preserve)
{
SMIC,8, //SW-SMI ctrl port
SMIS,8, //SW-SMI Data port
}
另外,在本例中,若能由透过软件的系统管理中断方式由检测模块(基本输入输出系统)610(810)中获得,如此,当基本输入输出系统的数据修改时并不用去修改ASL程序代码。如下例所示,
Memory32Fixed(ReadOnly,0x0FEC00000,0x0100)//IO APIC
IO(Decode16,0x0,0x0,0,0x10)
若要获得MMIO(Memory Mapped Input Output)Base Address 0x0FEC00000及IO Port Base Address 0x0,能由透过软件的系统管理中断方式由检测模块610(810)中经由EBDA存储器中获得。
另外,AML程序代码与基本输入输出系统之间如何互换大量的数据。在本实施例中,可以使用第二存储器870。并且,于基本输入输出系统的自我测试程序时,保留一块最大且标准化的存储器容量(例如1KB)做为互换的数据区。AML透过软件的系统管理中断去获得此区域的存储地址(Memory Address),且其程序如下所述:
Ex:
Name(EBAD,0) //Memory base
OperationRegion(EBDA,SystemMemory,EBAD,0x1) //EBDA Base Address
Field(EBDA,ByteAcc,NoLock,Preserve)
{
DAT0,8,
DAT1,8,
DAT2,8,
…
DATn,8
}
Scope(_SB)
{
Method(_INI,0)
{
Store(SSMI(0xAD,0),EBAD) //issue SW SMI 0xAD with input parameter 0 to get
EBDA base
SHL(EBAD,8)
…
}
}
在呼叫软件的系统管理中断前,要将所要传入的数据写入此第二存储器870,也就是组态管理程序模块830需要将第一数据写入至第二存储器870。当执行完软件的系统管理中断,中断处理程序模块840依据控制数据端口的第一参数及第二存储器870的第二参数执行中断控制端口850的指令,而至第一存储器820中读取对应的系统信息,并将系统信息写入第二存储器870。而上述功能的程序如下所述:
EX: //Input Parameters
Store(0,DAT0)
Store(1,DAT1)
…
Store(n,DATn)
SSMI(0xFD,0) //issue SW SMI
//Get return values
Store(DAT0,Local0)
…
表1至表6为中断管理程序中,各种指令与第一参数、第二参数与系统信息的对照表。SMI机制分别为软件的系统管理中断(SW SMI)以及休眠模式系统管理中断(Sleep Type SMI);「Both」表示同时具有SW SMI以及Sleep Type SMI两种模式。「指令(Command)」字段表示中断控制端口650(850)中的指令;「第一参数」字段表示写入至中断数据端口660(860)中的第一参数;「第二参数」字段表示写入至为第二存储器870中的第一参数;「回传的系统信息」字段表示由中断处理程序模块640(840)依据中断所伴随的「指令」而回传给组态管理程序模块630(830)的对应的系统信息;「动作(action)」字段表示该对应「指令」的动作;「SMI处理程序的对应程序(corresponding procedure in SMI handler)」字段表示SMI处理程序依据中断所伴随的「指令」而内部执行的对应程序。
以下,将以表1中灰色区块的数据进行说明。请合并参照表1与图6,在此假设指令信息包含指令与第一参数。当组态管理程序模块630将第一参数「0Bh」写入至中断数据端口660(其地址在B3h),再写入指令「AFh」至中断控制端口650(其地址在B2h)时,表示此时所用的SMI机制为SW SMI,且要取得计算机系统600中「网络唤醒」(wakeup on LAN)的设定值。在将第一参数「0Bh」与指令「AFh」分别填入中断数据端口660与中断控制端口650后,组态管理程序模块630可以触发SMI中断。也就是说,此中断具有第一参数「0Bh」以及指令「AFh」。
接着,在中断处理程序模块640接收到上述SMI中断后,会依据中断数据端口660的第一参数「0Bh」执行中断控制端口650的指令「AFh」,而至第一存储器620中读取「网络唤醒」的设定值(对应的系统信息),并将系统信息写入中断数据端口660(步骤S507)。在另一实施例中,SMI处理程序(中断处理程序模块640)可能会依据中断数据端口660的第一参数「0B」执行中断控制端口650的指令「AFh」,而呼叫对应的「GetWOLSts」程序(procedure)来取得计算机系统600中「网络唤醒」的设定值。最后,组态管理程序模块630会从中断数据端口660中读取系统信息(步骤S509),以便让组态管理程序获得对应的系统信息。
在本实施例中,若上述步骤S507写入中断数据端口660中的系统信息(「网络唤醒」的设定值)为「0」,表示计算机系统600禁能「网络唤醒」。若上述步骤S507写入中断数据端口660的系统信息(「网络唤醒」的设定值)为「1」,表示计算机系统600可以通过网络唤醒(「网络唤醒」功能已被使能)。
另外,再举一例进行说明。在此假设指令信息包含指令、第一参数与第二参数。请合并参照表6与图8,当组态管理程序模块830将第一参数「0h」写入至中断数据端口860(其地址在B3h),写入指令「FAh」至中断控制端口850(其地址在B2h),以及写入第二参数「0h」至第二存储器870时,表示此时所用的SMI机制为SW SMI,且要依据「从ACPI传送所运行操作系统类别给BIOS SMI处理程序(send the running OS type to BIOS SMI handler from ACPI OS)」的设定值对组态管理模块830进行对应的组态设定操作。在将第一参数「0h」、指令「FAh」以及第二参数「0h」分别填入中断数据端口860、中断控制端口850与第二存储器870后,组态管理程序模块830可以触发SMI中断。也就是说,此中断具有第一参数「0h」指令「FAh」以及第二参数「0h」。
接着,在中断处理程序模块840接收到上述SMI中断后,会依据中断数据端口860的第一参数「0h」以及第二存储器870的第二参数「0h」执行中断控制端口850的指令「FAh」,而至第一存储器820中读取「从ACPI操作系统传送执行操作系统型态至BIOS中断处理程序」的设定值(对应的系统信息),并将系统信息写入第二存储器870(步骤S707)。在另一实施例中,SMI处理程序(中断处理程序模块840)可能会依据中断数据端口860的第一参数「0h」以及第二存储器870的第二参数「0h」执行中断控制端口850的指令「FAh」,而呼叫对应的「SendRunningOsType」程序来执行「从ACPI传送所运行操作系统类别给BIOSSMI处理程序」的设定值的组态设定操作。
在本实施例中,若上述步骤S707写入第二存储器870中的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「0h」,表示计算机系统800的操作系统类别为「Windows XP」。若上述步骤S707写入第二存储器870的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「1h」,表示计算机系统800的操作系统类别为「Windows 2003 32bit」。若上述步骤S707写入第二存储器870的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「2h」,表示计算机系统800的操作系统类别为「Windows 2003 64bit」。若上述步骤S707写入第二存储器870的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「3h」,表示计算机系统800的操作系统类别为「Windows 2000」。若上述步骤S707写入第二存储器870的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「4h」,表示计算机系统800的操作系统型态为「NT 4.0」。若上述步骤S707写入第二存储器870的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「5h」,表示计算机系统800的操作系统类别为「Redhat Linux EL5 AS」。若上述步骤S707写入第二存储器870的系统信息(「从ACPI传送所运行操作系统类别给BIOS SMI处理程序」的设定值)为「6h」,表示计算机系统800的操作系统类别为「Fedora Core 8」。本领域有通常知识者可以通过上述的说明,来推得其它的对应关系,故在此不再赘述。
表1为中断处理程序中,指令为AFh时,第一参数、第二参数与系统信息的对照表
指令/SMI 机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 AFh (Wakeup Event, Fan)/ Sleep-type SMI 0/NA NA/Enable SIO COMA wake on Ring/ EnableSioComaWOR AFh (Wakeup Event, Fan)/SW SMI 1/NA NA/Disable SIO COMA wake on Ring/ DisableSioComaWOR
指令/SMI 机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 AFh (Wakeup Event, Fan)/ Sleep-type SMI 2/NA NA/Enable SIO COMB wake on Ring/ EnableSioCombWOR AFh (Wakeup Event, Fan)/SW SMI 3/NA NA/Disable SIO COMB wake on Ring/ EnableSioCombWOR AFh (Wakeup Event, Fan)/ Both 4/NA NA/Enable SIO PS2 KB wakeup/ EnableSioPs2Kb AFh (Wakeup Event, Fan)/SW SMI 5/NA NA/Disable SIO PS2 KB wakeup/ DisableSioPs2Kb AFh (Wakeup Event, Fan)/ Both 6/NA NA/Enable SIO PS2 MS wakeup/ EnableSioPs2Ms AFh (Wakeup Event, Fan)/SW SMI 7/NA NA/Disable SIO PS2 MS wakeup/ DisableSioPs2Ms
指令/SMI 机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 AFh (Wakeup Event, Fan)/ Both 8/NA NA/Clear all wakeup event status/ ClearAllWakEvtSts AFh (Wakeup Event, Fan)/ Both 9/NA NA/Stop all fans and save all fans speed in SMM RAM/StopAllFanWithSave AFh (Wakeup Event, Fan)/SW SMI 0A/NA NA/Restore all fans speed per previous fan data in SMM RAM/RestoreAllFanPreviousSpeed AFh (Wakeup Event, Fan)/SW SMI 0B/NA Port 3Bh(0-No/1-yes)/wakeup on LAN? /GetWOLSts AFh (Wakeup Event, Fan)/ Sleep-type SMI 0C/NA NA/Enable wakeup on LAN/EnableWOR
表2为中断处理程序中,指令为AEh时,第一参数、第二参数与系统信息的对照表
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 AEh (Onboard Legacy Devices status)/ SWSMI 0/NA Port B3h/Get COM A port status(enabled/ disabled)/GetComAPortSts AEh (Onboard Legacy 1/NA Port B3h/Get COM B port status(enabled/ disabled)/GetComBPortSts Devices status)/ SWSMI AEh (Onboard Legacy Devices status)/ SW SMI 2/NA Port B3h/Get Parallel port status(enabled/ disabled)/GetParallelPortSts AEh (Onboard Legacy Devices status)/ SW SMI 3/NA Port B3h/Get Floppy A status(enabled/ disabled)/GetFloppyPortSts AEh (Onboard Legacy Devices status)/ SW SMI 4/NA Port B3h/Get Floppy B status(enabled/ disabled)/GetFloppyPortSts
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 AEh (Onboard Legacy Devices status)/ SW SMI 5/NA Port B3h/Get Power Button status(enabled/ disabled)/GetPwrButtonSts
表3为中断处理程序中,指令为ADh时,第一参数、第二参数与系统信息的对照表
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 ADh (IO/ MMIO base address)/ SW SMI 0/NA Port B3h/Get EBDA memory base address(high byte),low byte always is 0.(EX:9800h)/ GetEbdaMemBaseAddr
表4为中断处理程序中,指令为FCh时,第一参数、第二参数与系统信息的对照表
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 FCh (EBDA-re lated command )/SW SMI 0/NA EBDA/Get BIOS POST information/ GetBiosPostInfo
FCh (EBDA-re lated command )/Both 1/4bytes byte1:LED status type 0-LED off 1-LED ON 2-LED blink Byte2:Led color 0-Green 1-Amber 2-Red byte3:The blink frequency in 0.1sec byte4:LED on duty in% (0~100) NA/Set the power Led status/SetPwrLedSts
表5为中断处理程序中,指令为FBh时,第一参数、第二参数与系统信息的对照表
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 FB (System Status)/ Both 0(system state S0) /NA NA/Notify BMC of system state S0/ NotifyBmcSysSts FB (System Status)/ Both 1(system state S1) /NA NA/Notify BMC of system state S1/ NotifyBmcSysSts FB (System Status)/ Both 2(system state S0) /NA NA/Notify BMC of system state S2/ NotifyBmcSysSts FB (System Status)/ Both 3(system state S3) /NA NA/Notify BMC of system state S3/ NotifyBmcSysSts
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 FB (System 4(system state S4) /NA NA/Notify BMC of system state S4/ NotifyBmcSysSts Status)/ Both FB (System Status)/ Both 5(system state S5) /NA NA/Notify BMC of system state S5/ NotifyBmcSysSts
表6为中断处理程序中,指令为FAh时,第一参数、第二参数与系统信息的对照表
指令/ SMI机制 第一参数/第二参 数 回传的系统信息/动作/SMI处理程序的对应 程序 FAh (传送信息 给SMI处 理程序) /SW SMI 0/1byte 0-Windows XP 1-Windows 2003 32bit 2-Windows 2003 64bit 3-Windows 2000 4-NT 4.0 5-Redhat Linux EL5 AS 6-Fedora Core 8 NA/从ACPI传送所运行的操作系统类别给 BIOS SMI处理程序/SendRunningOsType
在本实施例中,组态管理程序模块630所采用ASL程序语言包括SMI呼叫指令,其格式例如为CALL_SMI(command,input data,output data),其中「command」为指令,「input data」为第一参数,「output data」为系统信息。并且,以软件的系统管理中断(Software SMI)呼叫界面的程序如下所述:
Method(SSMI,2) //SW SMI=>Call_SMI(command,input data,output data)
//Arg0-command;Arg1-Input Data;Local1-Ouput Data
{
Mutex(MUT1,0) //MUTEX for SMIS(IO 0x B3) & SMIC(IO 0xB2)
Acquire(MUT1,0xFFFF) //Acquire Semaphore
Store(\_SB.SMIS,Local0) //Save SMIS
Store(Arg1,\_SB.SMIS) //Set parameter into SMIS
Store(Arg0,\_SB.SMIC) //SW SMI command into SMIC;issue SW SMI & return value
will save to IO 0xB3
Store(\_SB.SMIS,Local1)
Store(Local0,\_SB.SMIS) //Restore SMIS
Release(MUT1) //Release Semaphore
Return(Local1) //Output Data
} //end SSMI
另外,以休眠模式系统管理中断(Sleep SMI)呼叫界面的程序如下所述:
Method(LSMI,1) //Sleep-Type SMI=>Call_SMI(command)Arg0-Command
{
Store(Arg1,\_SB.SMIS) //Set parameter into SMIS
Store(One,PS1S) //Clear Sleep status
Store(One,PS1E) //Enable Sleep
//After here,system will issue“Sleep SMI”if“sleep type enable bit”is set as 1
} //end LSMI
本发明另提供一种计算机可读取储存媒体,其用以储存计算机程序,此计算机程序用以加载至计算机系统中并且使得计算机系统执行上述组态管理程序传输系统信息的方法。
本发明另提供一种计算机程序产品,其是用以执行态管理程序传输系统信息的方法,此计算机程序产品基本上是由多个程序代码片段所组成的,并且这些程序代码片段在加载计算机中并执行之后,即可完成上述组态管理程序传输系统信息的步骤。
综上所述,本发明通过将检测计算机系统所获取的系统信息,先存放于存储器中。再通过组态管理程序触发中断,并由中断处理程序处理中断,以便依据中断的指令信息进行对应的组态设定操作,或是依据中断的指令信息将存储器中对应的系统信息回传给组态管理程序,以便于让组态管理程序获得对应的系统信息。如此一来,若是计算机系统的芯片组需更换、硬件设计上需修改或BIOS程序代码需要修正时,计算机工程师只需要修正相关的BIOS程序代码即可,而不需在对组态管理程序相关的ASL程序代码进行修正,进而减少撰写ASL程序代码的错误以及除错时间。
虽然本发明已以实施例揭露如上,然其并非用以限定本发明,任何所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作些许更动与润饰,因此本发明的保护范围当以权利要求所界定的为准。