本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種通過(guò)bios實(shí)現(xiàn)pcie設(shè)備熱插拔功能的方法及主板。
背景技術(shù):
在主板領(lǐng)域,目前主流的外圍設(shè)備包括usb接口設(shè)備、sata接口設(shè)備、pcie接口設(shè)備等,無(wú)論在主板啟動(dòng)過(guò)程還是在各種不同類型系統(tǒng)下面,usb和sata接口設(shè)備都能隨意進(jìn)行熱插入和熱拔出,實(shí)現(xiàn)即插即用的功能,用戶操作非常方便。但是市面上主流的主板,都沒(méi)有設(shè)計(jì)pcie設(shè)備熱插拔的功能,要插拔更換pcie設(shè)備,必須在主板關(guān)機(jī)狀態(tài)下進(jìn)行?,F(xiàn)在的技術(shù),通過(guò)硬件設(shè)計(jì)、bios程序設(shè)計(jì)和操作系統(tǒng)支持,已經(jīng)能實(shí)現(xiàn)pcie設(shè)備的熱插拔功能。硬件上,需要增加熱插拔控制器、電源指示燈、提示按鈕等,要設(shè)計(jì)卡槽電源切換邏輯電路、板卡重置邏輯電路;固件bios要提供軟件支持;操作系統(tǒng)要提供支持pcie設(shè)備熱插拔所需要的功能組件,包括用戶操作界面軟件、熱插拔服務(wù)程序、標(biāo)準(zhǔn)熱插拔系統(tǒng)驅(qū)動(dòng)、設(shè)備驅(qū)動(dòng),整個(gè)功能實(shí)現(xiàn)的過(guò)程硬件成本增加,并且實(shí)現(xiàn)起來(lái)也很復(fù)雜,所以主流主板都沒(méi)有去實(shí)現(xiàn)pcie設(shè)備熱插拔功能。
目前主流主板沒(méi)有去實(shí)現(xiàn)pcie設(shè)備熱插拔功能,可以通過(guò)硬件、bios、操作系統(tǒng)的配合,是能實(shí)現(xiàn)這個(gè)功能的,但是即使實(shí)現(xiàn)這個(gè)功能,熱插拔的操作也只能在acpi操作系統(tǒng)下來(lái)完成,開(kāi)機(jī)過(guò)程bios運(yùn)行階段不能進(jìn)行熱插拔操作,non-acpi系統(tǒng)(例如dos系統(tǒng))不能進(jìn)行熱插拔操作,一方面,這些non-acpi環(huán)境下,pcie設(shè)備熱插拔功能是缺失的,不能滿足操作需求,另外一方面,操作人員可能會(huì)誤以為所有環(huán)境都支持pcie設(shè)備熱插拔功能,在進(jìn)入了acpi操作系統(tǒng)前進(jìn)行熱插拔操作,導(dǎo)致誤操作。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)以上技術(shù)問(wèn)題,本發(fā)明公開(kāi)了一種通過(guò)bios實(shí)現(xiàn)pcie設(shè)備熱插拔功能的方法及主板,能在non-acpi環(huán)境下有效地支持pcie設(shè)備熱插拔功能,彌補(bǔ)了non-acpi環(huán)境下功能的缺失,滿足操作人員的需求;而且硬件線路設(shè)計(jì)簡(jiǎn)單,不會(huì)增加主板的成本,也不會(huì)增加開(kāi)發(fā)調(diào)試時(shí)間.
對(duì)此,本發(fā)明采用的技術(shù)方案為:
一種通過(guò)bios實(shí)現(xiàn)pcie設(shè)備熱插拔功能的方法,主板包括pch和與其連接的bios基本輸入輸出模塊;pch包括gpio1、gpio2、gpio3、gpio4、gpio5、gpio6和gpio7,所述gpio1、gpio2和gpio3分別與pcie插槽電連接;所述gpio1通過(guò)電阻r1與3.3v輔助電源連接,所述gpio1同時(shí)通過(guò)電阻r2接地;所述gpio2通過(guò)電阻r1與3.3v電源連接,所述gpio2同時(shí)通過(guò)電阻r2接地;所述gpio3通過(guò)電阻r1與12v電源連接,所述gpio3同時(shí)通過(guò)電阻r2接地;gpio4與pcie插槽的熱插拔檢測(cè)信號(hào)prsnt1#電連接;gpio5與熱插拔檢測(cè)信號(hào)prsnt2#電連接,gpio6連接發(fā)光二極管后通過(guò)電阻r接地,gpio7通過(guò)電阻r連接3.3v電源,并通過(guò)按鍵接地。
作為本發(fā)明的進(jìn)一步改進(jìn),所述bios基本輸入輸出模塊設(shè)定gpio1、gpio2、gpio3、gpio6、gpio7為gpio輸出功能;所述bios基本輸入輸出模塊設(shè)定gpio4和gpio5為gpio輸入功能。
作為本發(fā)明的進(jìn)一步改進(jìn),在pcie設(shè)備熱插入階段,所述bios基本輸入輸出模塊采用以下步驟進(jìn)行控制:
步驟s101,運(yùn)行bios程序,進(jìn)行g(shù)pio初始化,將gpio1、gpio2、gpio3和gpio6設(shè)置為gpio輸出功能,輸出低電平,pcie插槽電源關(guān)閉,發(fā)光二極管熄滅;
步驟s102,將gpio4、gpio5、gpio7設(shè)置為輸入功能,打開(kāi)gpio4、gpio7觸發(fā)smi中斷功能,然后bios程序進(jìn)入non-acpi環(huán)境;
包括gpio初始化之后bios運(yùn)行過(guò)程、dos系統(tǒng)等。
步驟s103,在non-acpi環(huán)境下,若有pcie設(shè)備插入pcie插槽,則將gpio5拉低,不觸發(fā)中斷程序,將gpio4拉低,觸發(fā)smi中斷程序;
步驟s104,中斷程序首先檢查gpio5是否是低電平,如果不是,則不處理,說(shuō)明設(shè)備接觸不良或者其他原因?qū)е碌膅pio拉低;如果gpio5是低電平,說(shuō)明gpio4、gpio5都被拉低,有設(shè)備插入插槽且接觸良好;smi中斷程序?qū)pio6設(shè)置為方波輸出,發(fā)光二極管閃爍,提醒操作人員不能拔出設(shè)備;
步驟s105,然后將gpio1、gpio2、gpio3設(shè)置為高電平輸出,打開(kāi)pcie插槽的3.3v輔助電源、3.3v電源和12v電源,然后讀取插槽設(shè)備的父級(jí)橋,為設(shè)備分配bus號(hào)資源,等待pcie設(shè)備和父級(jí)橋linktraining結(jié)束;linktraining結(jié)束后,為pcie設(shè)備分配內(nèi)存資源、io資源,為設(shè)備分配中斷。
作為本發(fā)明的進(jìn)一步改進(jìn),步驟s105中,linktraining結(jié)束后,檢查mmio資源當(dāng)中是否有足夠資源分配給pcie設(shè)備,如果有資源,根據(jù)基地址計(jì)算,為pcie設(shè)備分配內(nèi)存資源、io資源,為設(shè)備分配中斷;如果沒(méi)有資源,首先修改tolm低內(nèi)存頂端寄存器,將值減小,增加mmio的大小,然后設(shè)置mmiorule寄存器來(lái)說(shuō)明mmio的大小,修改mtrr(內(nèi)存類型范圍寄存器)寄存器,設(shè)置新增的mmio為不可緩沖類型,然后更新e820表,說(shuō)明當(dāng)前所有內(nèi)存的類型使用情況,然后再分配內(nèi)存、io和中斷資源,分配完資源后,打開(kāi)內(nèi)存、io資源的開(kāi)關(guān),讓資源處于可使用狀態(tài)。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括步驟s106,將gpio6設(shè)置為高電平輸出,讓發(fā)光二極管常亮,表明設(shè)備可以正常工作了。
作為本發(fā)明的進(jìn)一步改進(jìn),在pcie設(shè)備熱拔出階段,所述bios基本輸入輸出模塊采用以下步驟進(jìn)行控制:
步驟s201,初始化gpio1、gpio2、gpio3和gpio6設(shè)置為輸出低電平,發(fā)光二極管熄滅;然后設(shè)置gpio4、gpio5和gpio7為輸入功能,打開(kāi)gpio4、gpio7觸發(fā)smi中斷功能,然后bios程序進(jìn)入non-acpi環(huán)境;包括gpio初始化之后bios運(yùn)行過(guò)程、dos系統(tǒng)等。
步驟s202,gpio7一直輸入高電平,如果操作人員有拔出pcie設(shè)備的需求,首先按下按鍵,使gpio7產(chǎn)生一個(gè)低電平,觸發(fā)smi中斷程序;
步驟s204,bios程序通過(guò)設(shè)備的命令寄存器禁止內(nèi)存和io空間,再在父級(jí)橋里面禁止與pcie設(shè)備的鏈接,將gpio1、gpio2、gpio3設(shè)置為輸出低電平,關(guān)閉pcie插槽的電源,釋放掉pcie設(shè)備所需要的內(nèi)存、io和中斷資源。
這里釋放掉的內(nèi)存資源并沒(méi)有給系統(tǒng)使用,仍然保留mmio屬性,方便再次插入設(shè)備時(shí)候優(yōu)先分配這部分資源。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括步驟s203,smi中斷程序啟動(dòng)中,先將gpio6設(shè)置為輸出方波,使發(fā)光二極管閃爍,提醒操作人員不能拔出設(shè)備。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括步驟s205,將gpio6設(shè)置為低電平,讓發(fā)光二極管熄滅,表明此時(shí)可以將設(shè)備安全移除了。
作為本發(fā)明的進(jìn)一步改進(jìn),所述gpio4、gpio5、gpio6與3.3v電源連接。
本發(fā)明還公開(kāi)了一種bios階段實(shí)現(xiàn)pcie設(shè)備熱插拔的主板,其采用如上任意一項(xiàng)通過(guò)bios實(shí)現(xiàn)pcie設(shè)備熱插拔功能的方法。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
采用本發(fā)明的技術(shù)方案,實(shí)現(xiàn)了在non-acpi環(huán)境中pcie設(shè)備熱插拔的功能,彌補(bǔ)這種環(huán)境下功能的缺失,而硬件成本基本沒(méi)有增加。通過(guò)單個(gè)gpio和發(fā)光二極管連接,完成與操作人員的交流,避免誤操作。在內(nèi)存資源方面,無(wú)需要預(yù)先預(yù)留資源,插入設(shè)備后,再獲取資源分配給設(shè)備,增加了內(nèi)存資源的利用率。資源分配過(guò)程中,不會(huì)對(duì)其他設(shè)備進(jìn)行資源重新分配,中斷其他設(shè)備的使用,最大限度降低插拔設(shè)備對(duì)系統(tǒng)的影響,偵測(cè)設(shè)備熱插入時(shí),采用雙在位pin角偵測(cè),無(wú)需按鈕提示。
附圖說(shuō)明
圖1是本發(fā)明一種實(shí)施例的硬件連接結(jié)構(gòu)示意圖。
圖2是本發(fā)明一種實(shí)施例的pcie設(shè)備熱插入時(shí)的方法的流程圖。
圖3是本發(fā)明一種實(shí)施例的pcie設(shè)備熱拔出時(shí)的方法的流程圖。
具體實(shí)施方式
下面對(duì)本發(fā)明的較優(yōu)的實(shí)施例作進(jìn)一步的詳細(xì)說(shuō)明。
一種通過(guò)bios實(shí)現(xiàn)pcie設(shè)備熱插拔功能的方法,其包括硬件電路設(shè)計(jì)部分和bios程序設(shè)計(jì)部分。
硬件電路設(shè)計(jì)部分如下:
如圖1所示,硬件上,主要是pch的gpio和pcie插槽之間的線路設(shè)計(jì)。pch的gpio1、gpio2和gpio3都設(shè)置為gpio輸出功能,gpio1通過(guò)r1和r2電阻將3.3v輔助電源(3.3vaux)連接到pcie插槽上,gpio2通過(guò)電阻r1和r2將3.3v電源連接到pcie插槽上,gpio3通過(guò)電阻r1和r2將12v電源連接到pcie插槽上,gpio4和gpio5設(shè)置為gpio輸入功能,gpio4連接到熱插拔檢測(cè)信號(hào)prsnt1#上面,gpio5連接到熱插拔檢測(cè)信號(hào)prsnt2#上面,gpio6設(shè)置為gpio輸出功能,連接發(fā)光二極管,通過(guò)電阻r接地,gpio7設(shè)置為gpio輸入功能,3.3v電源連接電阻r,電阻r既連接gpio7,也通過(guò)按鍵接地。
以下為pcie設(shè)備熱插入操作。
操作人員將pcie設(shè)備熱插入pcie插槽內(nèi),prsnt1#和prsnt2#信號(hào)會(huì)被同時(shí)拉低,低電平信號(hào)通過(guò)gpio4和gpio5輸入到pch,產(chǎn)生smi中斷,運(yùn)行bios中斷程序,bios程序?qū)⒐怆姸O管設(shè)置為閃爍狀態(tài),提醒操作人員,此時(shí)不要拔出pcie設(shè)備,然后bios將gpio1、gpio2和gpio3設(shè)置為高電平輸出,12v電源、3.3v電源和3.3v輔助電源給pcie插槽供電,等待bios對(duì)設(shè)備進(jìn)行初始化完成,初始化完成后,bios將發(fā)光二極管設(shè)置為常亮狀態(tài),提醒操作人員,pcie設(shè)備已經(jīng)初始化完成,可以進(jìn)行正常工作了。這里我們采用prsnt1#和prsnt2#兩個(gè)信號(hào)同時(shí)被拉低來(lái)判斷設(shè)備的插入狀態(tài),防止pcie設(shè)備接觸不良或者其他誤操作,導(dǎo)致單個(gè)信號(hào)被拉低,誤報(bào)設(shè)備接入狀態(tài)。
以下為pcie設(shè)備熱移除操作。
操作人員按下按鍵,會(huì)產(chǎn)生一個(gè)低電平信號(hào),通過(guò)gpio7輸入到pch,產(chǎn)生一個(gè)smi中斷,運(yùn)行bios中斷程序,bios程序?qū)⒐怆姸O管設(shè)置為閃爍狀態(tài),提醒操作人員,此時(shí)不要拔出pcie設(shè)備,直到bios程序完成相關(guān)設(shè)置,并將gpio1\2\3設(shè)置為輸出低電平,關(guān)閉插槽的電源,釋放掉設(shè)備所需要的內(nèi)存、io和中斷資源,最后將gpio6設(shè)置為低電平,讓發(fā)光二極管熄滅,表明此時(shí)可以將設(shè)備安全移除了。
bios程序設(shè)計(jì)部分如下:
pcie設(shè)備熱插入程序設(shè)計(jì):
如圖2所示,bios程序開(kāi)始運(yùn)行,首先進(jìn)行g(shù)pio初始化,將gpio1\2\3\6設(shè)置為gpio輸出功能,輸出低電平,pcie插槽電源關(guān)閉,發(fā)光二極管熄滅,將gpio4\5\7設(shè)置為輸入功能,打開(kāi)gpio4\7觸發(fā)smi中斷功能,然后bios程序進(jìn)入non-acpi環(huán)境,包括gpio初始化之后bios運(yùn)行過(guò)程、dos系統(tǒng)等。在non-acpi環(huán)境下,若有pcie設(shè)備插入插槽,會(huì)將gpio5拉低,但不會(huì)觸發(fā)中斷程序,會(huì)將gpio4拉低,觸發(fā)smi中斷程序。中斷程序首先檢查gpio5是否是低電平,如果不是,則不處理,說(shuō)明設(shè)備接觸不良或者其他原因?qū)е碌膅pio拉低,如果是低電平,說(shuō)明gpio4\5都被拉低,有設(shè)備插入插槽且接觸良好。中斷程序?qū)pio6設(shè)置為方波輸出,讓發(fā)光二極管閃爍,提醒操作人員不能拔出設(shè)備,然后將gpio1\2\3設(shè)置為高電平輸出,打開(kāi)pcie插槽的3.3v輔助電源、3.3v電源和12v電源,然后讀取插槽設(shè)備的父級(jí)橋,為設(shè)備分配bus號(hào)資源,等待pcie設(shè)備和父級(jí)橋linktraining結(jié)束,training結(jié)束后,檢查mmio資源當(dāng)中是否有足夠資源分配給pcie設(shè)備,如果有資源,根據(jù)基地址計(jì)算,為設(shè)備分配內(nèi)存資源、io資源,為設(shè)備分配中斷,如果沒(méi)有資源,首先修改tolm(低內(nèi)存頂端寄存器),將值減小,增加mmio的大小,然后設(shè)置mmiorule寄存器來(lái)說(shuō)明mmio的大小,修改mtrr(內(nèi)存類型范圍寄存器)寄存器,設(shè)置新增的mmio為不可緩沖類型,然后更新e820表,說(shuō)明當(dāng)前所有內(nèi)存的類型使用情況,然后再分配內(nèi)存、io和中斷資源,分配完資源后,打開(kāi)內(nèi)存、io資源的開(kāi)關(guān),讓資源處于可使用狀態(tài)。最后,將gpio6設(shè)置為高電平輸出,讓發(fā)光二極管常亮,表明設(shè)備可以正常工作了。
pcie設(shè)備熱拔出程序設(shè)計(jì):
同熱插入程序一樣,如圖3所示,首先要初始化gpio1\2\3\6設(shè)置為輸出低點(diǎn)平,發(fā)光二極管熄滅,然后設(shè)置gpio4\5\7為輸入功能,打開(kāi)gpio4\7觸發(fā)smi中斷功能,然后bios程序進(jìn)入non-acpi環(huán)境,包括gpio初始化之后bios運(yùn)行過(guò)程、dos系統(tǒng)等。gpio7一直輸入高電平,如果操作人員有拔出pcie設(shè)備的需求,首先按下提示按鈕,會(huì)使gpio7產(chǎn)生一個(gè)低電平,將觸發(fā)smi中斷程序。中斷程序中,首先將gpio6設(shè)置為輸出方波,使發(fā)光二極管閃爍,提醒操作人員不能拔出設(shè)備,然后程序通過(guò)設(shè)備的命令寄存器禁止內(nèi)存和io空間,再在父級(jí)橋里面禁止與設(shè)備的鏈接,將gpio1\2\3設(shè)置為輸出低電平,關(guān)閉插槽的電源,釋放掉設(shè)備所需要的內(nèi)存、io和中斷資源,最后將gpio6設(shè)置為低電平,讓發(fā)光二極管熄滅,表明此時(shí)可以將設(shè)備安全移除了。這里釋放掉的內(nèi)存資源并沒(méi)有給系統(tǒng)使用,仍然保留mmio屬性,方便再次插入設(shè)備時(shí)候優(yōu)先分配這部分資源。
上述方法通過(guò)簡(jiǎn)單的硬件線路設(shè)計(jì)和bios程序設(shè)計(jì),能在non-acpi環(huán)境下有效地支持pcie設(shè)備熱插拔功能,彌補(bǔ)了non-acpi環(huán)境下功能的缺失,滿足操作人員的需求。而且硬件線路設(shè)計(jì)簡(jiǎn)單,不會(huì)增加主板的成本,也不會(huì)增加開(kāi)發(fā)調(diào)試時(shí)間。
本發(fā)明所涉及的英文縮寫的技術(shù)術(shù)語(yǔ)的解釋:
bios(basicinputoutputsystem):基本輸入輸出系統(tǒng),主要用于計(jì)算機(jī)開(kāi)機(jī)過(guò)程中各種硬件設(shè)備的初始化和檢測(cè)。
pch(platformcontrollerhub):intel公司的集成南橋。
pcie(pci-express):一種高速串行總線接口技術(shù)標(biāo)準(zhǔn)。
gpio(generalpurposeinputoutput):通用輸入/輸出。
acpi(advancedconfigurationandpowermanagementinterface):高級(jí)配置與電源管理接口,操作系統(tǒng)應(yīng)用程序管理所有電源管理接口,non-acpi環(huán)境,即不支持acpi標(biāo)準(zhǔn)的環(huán)境。
usb(universalserialbus):通用串行總線。
sata(serialadvancedtechnologyattachment):串行ata接口規(guī)。
dos(diskoperatingsystem):磁盤操作系統(tǒng)。
smi(systemmanagementinterrupt):系統(tǒng)管理中斷。
mmio(memorymappingi/o):內(nèi)存映射i/o。
tolm(topoflowmemory):低內(nèi)存頂端。
mtrr(memorytyperangeregisters):內(nèi)存類型范圍寄存器。
以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說(shuō)明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說(shuō)明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡(jiǎn)單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。