UNIQLOCK

2010年8月31日 星期二

EFI

這位作者對EFI的看法與研讀方向給了我這新人在EFI前進的方向!
他部落格中的文章寫得非常好!分享給有同樣需求的人!

2010年8月27日 星期五

IO Index/Data

IO Index/Data :

由兩個為一組 IO 為單位, Index IO 也就是所謂的輸入 commond 的 port ,而 Data IO 就是存放資料的 IO .一組 IO Index/Data 有FFh的空間,也就是256 bytes.

試著使用 IRU 去看 IO Index/Data  ,這次以CMOS測試存取了它的 Port 70/71.


從圖片中看到第一個位址00的數字是32,這資料就是它放秒數的地方,用DOS的Debug來試著讀取它


圖片中看到了指令 i 和 o ,也就是 IN 和 OUT , IN/OUT 的存取是從 CPU 的角度來看的.
如圖上的" -o 70,00 "中的OUT是CPU將自己的 data OUT 到70的00去," -i 71 "就是 CPU 從 70 IN data 進來.

如果有錯請糾正,謝謝!

中斷資料

這兩個網站對中斷有很詳細的介紹,多看個幾遍就有個觀念和架構.

http://www.ltivs.ilc.edu.tw/kocp/mpu/m5/m5index.htm

http://blog.csdn.net/lightseed/archive/2009/06/08/4250623.aspx

2010年8月26日 星期四

Interrupt(中斷)


中斷實在是非常龐大又複雜,所以先簡單整理個觀念

80x86的中斷機制:

當CPU收到中斷訊號會中斷(暫停)目前的工作去執行所指定的程式,這種由中斷所指定執行的程式叫做中斷服務程式 ISR (Interrupt: Service Routine).執行完後會回復到原本執行的程式.

那CPU怎麼知道要執行什麼中斷呢?其實當CPU收到或執行到中斷時會得到一個位址,這就是指向中斷向量表(Interrupt Vector Table)的位址.中斷向量表就像是陣列一樣,每個位址依序都存有一個指向中斷程式的位址.表中每個位址都有定義要處理的事件.

中斷可分為:
  1. 硬體中斷:來自於CPU內部演算異常或是周邊裝置.又可分為內部中斷外部中斷.外部中斷還可分為不可遮罩式(non-maskable interrupt)可遮罩式(maskable interrupt)兩種.
  2. 軟體中斷:以指令形式存在.通常存在於程式中.

以CPU中斷接腳來說有三種形式存在:
  1. INTR(硬體中斷)
  2. SMI(硬體;軟體中斷)
  3. NMI(硬體中斷之外部中斷)

CPU

CPU很簡單,主要的工作就是:
  1. 在內部做"加'減'乘'除'浮點數"的運算.
  2. 與外部溝通執行指令就必須Read,做Memory和I/O存取.
  3. 中斷.

Calling Convention (呼叫協定)

Calling Convention (呼叫協定)

因為函式呼叫牽涉到參數的傳遞, 所以並不只是單純跳到那個Address執行程式碼再跳回來這麼簡單, 呼叫副程式(函式)的主程式, 需要知道怎麼填參數,副程式(函式)才能接到參數後進行處理, 再將結果傳給主程式, 所以這段協定稱之為Calling Convention(呼叫協定)

但因為程式類型的不同(assambly, c/c++ , passcal ,fortran, vc .....), 並因為平台不同(Windows,Linux,MacOS,Unix...), 最主要的是CPU的不同(x86,PowerPC,Sparc.....), 所以這種協定就有很多方式...




看了以後個人覺得很清晰明瞭它的含意,因為正在看EFI Spec發現了EFIAPI這Data Type常出現在函式定義中,但並不了解為何有這東西.不過有關它的協定目前尚未研讀.


2010年8月25日 星期三

SCI

SCI (System Control Interrupt) :系統控制中斷

A system interrupt used by hardware to notify the OS of ACPI events. SCI is one of IRQ source .

SCI 機制完全由ACPI OS Kernel 所掌控與保護, User App/Driver 無法禁止SCI 發生.DOS下能觸發SMI但不能觸發SCI,在OS則是兩者都能觸發.簡單說SCI也是IRQ的一種.

SMI

SMI (System Management Interrupt) :系統管理中斷

SMI will put CPU in SMM mode. (Big real mode)
SMI handlers stay  in SMRAM.
SMRAM is not visible in non-SMM mode.
SMI has two types – Software SMI / Hardware SMI.

從上面來看,觸發SMI pin會使CPU進入到SMM mode,可存取4G的位址空間.CPU會進入到SMRAM中執行所需要的handler程式碼.其中SMRAM是被保護的,在其他狀態下是看不見的.

Software SMI :由軟體自發性觸動, 一般是讀寫chipset 指定之IO port . OS/App/Driver 可以透過Software SMI 來指使SMI BIOS 執行預設之SMI code .

Hardware SMI :由chipset 發動或者是外部(如EC) 發動.

2010年8月20日 星期五

ACPI

  ACPI(Advanced configuration and power interface)先進組態和電源介面





ACPI有五大狀態 :
  1. Global system state (Gx states) 全域系統狀態 :

    使用者在
    全域系統狀態可見的環境下,全域系統狀態被以下六條主要標準所定義:

    1. 是否有應用程式在執行?
    2. 何時對外部事件的申請作回應?
    3. 耗能的情況?
    4. 是否有作業系統需要重新啟動進入G0?
    5. 是否安全拆解電腦?
    6. 是否能通過電子手段進出該狀態(state)?

    分為以下系統狀態 :

    1. G0(S0)Working :
      可以正常執行作業系統和應用程式,而周邊的裝置如CPU'硬碟'光碟機等可以反覆進入低功耗狀態,達到省電效果.
    2. G1 Sleeping :
      G1可分成為"G1S1~G1S4"四種狀態,區分方式主要以回復到G0速度來定.最快的是G1S1依順序到最慢的G1S4.
    3. G2(S5)Soft Off :
      此狀態下只繼續供電給具有喚醒電腦功能的
      裝置,其餘裝置則斷電.如果想回到G0則系統需要重新啟動.簡單說就是一般的關機. 
    4. G3 Mechanical Off :
      將所有的
      裝置電源都關閉,連插頭也拔掉.只有在這狀態下才能拆組電腦.
    簡單狀態表
  2. Device Power State (Dx states) 裝置電源狀態 :
    使用者通常是看不見裝置狀態的.當一個裝置已經沒有電源供應的時候,整個系統可能還是在G0.例如:光碟機.

    它們主要是從以下四條主要標準作一般定義:


    1. 耗能.裝置使用了多少電源.
    2. 裝置的前後關係.硬體保留了多少裝置原來的狀態/環境.作業系統負責恢復任何失去裝置原來的狀態/環境(可以通過重置裝置).
    3. 裝置驅動程式.該裝置驅動程式必須能還原該裝置到D0.
    4. 恢復時間.要花多少時間能恢復到D0.

    分為以下狀態 :

    1. D0 (Fully-On) :
      裝置是可以完全回應並且正常工作的.
    2. D1,D2 :它的定義會根據裝置類別的不同而不同.有些裝置甚至不定義.
    3. D3 (Off) :完全關閉裝置電源,並且不解碼該位址線.需要重新初始化,通常需要較長恢復時間.所有裝置都有定義此狀態.

      簡單狀態表


  3. Sleeping State (Sx states) 睡眠狀態 :

    包含在G1中的狀態.分為以下狀態:


    1. S0:如同上述的G0.
    2. S1:又稱為 POS (Power on Suspend).CPU內的cache;RAM;晶片組等有持續供電,但CPU停止運作.供電給其他有用到的裝置,可進入或不進入省電狀態.由硬碟維持所有的環境狀態.
    3. S2:又稱為 Deeper Sleep.類似S1,但CPU斷電,造成CPU和cache內資料遺失,作業系統必須維護CPU和cache的內容.通常不支援此狀態.
    4. S3:又稱為 STR (Suspend to RAM).幾乎所有裝置都斷電,剩下RAM等必要設備供電.作業系統和所有應用程式及開啟的檔案都存入RAM中,因RAM存取速度快,所以回復時間很短.
    5. S4:又稱為 STD (Suspend to Disk).只供電給硬碟,其他裝置全部斷電,是最省電的狀態.作業系統將所有資料與當前的狀態存入硬碟中,即使被斷電資料也不會遺失.它不像S1~S3,反而比較像G2'G3,是一個特別的狀態.

  4. Processor Power State (Cx states) 處理器電源狀態 :

    是指在G0的處理器耗能和溫度管理的狀態,而且處理器電源狀態只定義於G0.有C0~Cn.

    分為以下系統狀態 :

    C0:只有此狀態下CPU才會正常執行指令,C1~Cn全部都是睡眠狀態,不執行任何指令.此狀態下ACPI允許透過Throttling和multiple performance states (P states)去改變處理器的效能.
    C1:又稱為HLT(Halt).所有處理器都支援此狀態.這種狀態是透過內部的處理器指令,不需要晶片組的硬體支持.使用此狀態必須讓OSPM不需要考慮延遲的問題,沒有軟體會顯示此狀態.C1可以保持cache裡的資料.必須有中斷請求到達處理器才可以退出該狀態.
    C2:又稱為Stop-Clock.比C1省電,延遲較C1長,保留所有執行軟體當前的資訊狀態.
    必須有中斷請求到達處理器才可以退出該狀態.C3:又稱為Sleep.比C2省電,延遲較C2長,只保留cache裡的資料,並且忽略原本對cache的探測(cache snoop),必須由作業系統自己維護.必須有中斷請求到達處理器才可以退出該狀態或是有匯流排控制器訪存.

  5. Device and Processor Performance State (Px states) 裝置和處理器效能狀態 :

    是指在C0和D0狀態下所定義的耗能
    和效能的狀態,並允許OSPM在耗能與效能間取得平衡.

    分為以下系統狀態 :

    P0:為正常執行狀態,有最大效能和最高耗能的狀態.
    P1:效能和耗能都較P0低.

    Pn:n最多到16,由處理器和裝置所定義.依數字的增加遞減效能與耗.


    以上是個人看 ACPI 4.0a Space 和網路上資料所做的參考,內容依個人理解所做的整理,如果有錯誤或者遺漏的地方歡迎告訴我,謝謝!

2010年8月17日 星期二

BIOS之路漫長長

今天開始記錄對BIOS學習的心得與過程

希望能加深自己的觀念和糾正錯誤

BIOSS是條漫長的道路

而現在自己正在加班!

 該好好學習"黃金小子"的精神!!!

學習~ 學習~ 學習~ 學習~ 學習~ 學習~ 學習~ 學習~!!!