找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 60091|回复: 16

[原创]BIOS知识点滴Follow Bini系列之--ACPI _GPE & _Q方法

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7
2 g" j! c% I  K& P
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。
& {% P3 _* t6 [$ \& Y8 k
5 Q) y" p7 W8 @* d& N1 Z( [什么是SCI?什么是SMI?, e+ w# P6 k. [1 U! }) D3 y9 G
这里如您不知道,我只大致解释一下:3 y) s4 k) x) a3 J8 d% O4 N
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。" w( |" v* b# a$ }, z% w* I
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)5 E0 D1 \1 l$ t+ l4 t
! ?6 G: i& ^9 x; ^
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。% ~# v7 O  w5 P

$ i4 M* _! F: oICH7 GPIO Status的寄存器如下:( K3 u5 ~( @/ H3 P! M8 z
1.JPG
. P6 t) B9 L1 h6 k5 f: Q8 j4 b+ S2 Z4 ]' g# A; J- y
让GPIO产生SCI或SMI的Switch寄存器:. n: T- a9 r. w- C- V: _7 B  ]
3.JPG
% l8 u7 f5 c$ s* q# r% y& {- k) Y8 n) \1 E
一种机器所用到的的GPIO:: g& ?: z$ \6 z
2.JPG
  U, J5 k& c- D, S7 m
6 p7 X% i/ g% Y- }) J- [- S处理这些事件的方法如下:
0 o. d+ d# g* a" }8 N 4.JPG
( D  H9 g+ q8 _3 w- d) x' D注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。
; @' k1 `0 z! |) V. ?. p& Y* w6 W% K: F- L% R& p3 F2 j
那什么是Q方法?
5 C% N0 P) }3 k' C$ a+ B6 U! s2 Z5 Y当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。
3 h5 U& y- D0 \3 [4 B. C5 l3 G: z) v- Y3 W1 Q
既然有256个,哪如何区分Q事件呢?
! H6 v7 t' _: O/ T6 `& }6 A4 u当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。6 G0 z  l; m1 X4 T/ s: v

2 ]5 Z# |% G  {- g如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:
0 j' r# w" G9 s( kMethod(_Q34) { // embedded controller event for thermal Notify
0 s! J: s' V: D. y* M    (\_SB.TZ0.THM1, 0x80) ! b* u8 h& f( m2 B" Z+ O& M, y
}
( t: F/ ~. o) V# O# I& @$ x- P2 R4 S8 G& z( s; U$ q
详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
- {/ W0 z" @% U& ~7 y如找不到ACPI 3.0b请到:http://www.ufoit.com/bbs/thread-7-1-1.html 处或 http://www.acpi.info 下载。
发表于 2007-12-8 09:17:47 | 显示全部楼层
嗯,多谢分享
回复

使用道具 举报

发表于 2007-12-24 11:22:01 | 显示全部楼层

wake event

看spec,GPE 事件产生后除了会发 SCI/SMI#,有时候还会发 wake event.+ W0 ^' c% K, A6 ~2 P
SCI --> IRQ --> ACPI driver。
4 q: r: L$ J0 r# P" D9 sSMI# --> SMM。9 W. D0 }7 v$ B' V/ ^
那 wake event 的工作机制又是怎样的呢?
回复

使用道具 举报

发表于 2007-12-24 12:09:51 | 显示全部楼层
Wake Event, 就是可以把系统唤醒的事件, 例如网络的唤醒方式, 是通过 PME# 产生 Wake 事件, 把机器从S1/S3/S4/S5唤醒, 返回到S0.
回复

使用道具 举报

 楼主| 发表于 2007-12-26 14:31:54 | 显示全部楼层
你看Host的Datasheet,看平台支持哪些唤醒,如你平台支持GPI[0..n]的 wake up,那就应该有个开关,让某个GPI[0..n]产生Wake event(注意是在S1~S5,看你的平台说明),如果在S0,那么就可能只产生SCI/SMI。所以,当此GPI产生Wake event时,HOST就会启用wake up上电时序进行平台上电。
1 ^7 o( I4 o5 W" H2 c& O
- g6 \9 h/ V: Z  `& i4 k多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。
- h$ N7 n: Z, A
( R7 R/ l  d( I- x# n   ^    ^) H# d6 {8 J4 ~4 a. J
(   。 。  )2 ], f* K: @% d9 v  \2 o+ Z( }- G
     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。. n' y: R* t$ v/ W) B
其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器" , x! K9 x5 z- w) d
9 S8 T# }/ C  Z; N, w9 i% @1 l
谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题
: y/ Y- C! C0 Q( s( |7 x! l
' a2 ?3 ~9 R9 d8 [SMM里面还可以在发SMI吗?
回复

使用道具 举报

 楼主| 发表于 2008-5-20 00:54:48 | 显示全部楼层
SMI是不可重入的.具体见IA64 & IA32 AS, Volume 3B 第24章.
回复

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,
7 O4 i/ Z* }' ^& u1 MRST_CNT—Reset Control Register
& O& p" Z$ d$ k! r" u3 R% YI/O Address: CF9h Attribute: R/W
7 g* h" {" ^4 U. ]2 o5 F+ S* N5 v; b/ a" y6 Z
ICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??)7 q2 O! W) z8 S2 f2 b+ u3 i
比如:
1 h/ S! O; E0 H( |GEN_PMCON_1—General PM Configuration 1 Register
& g' T) {) w+ C% cOffset Address: A0h" q* U; i4 i% q5 E4 n# z3 R$ c

$ _7 G" H( t) u* ^如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????
0 q; @. V( l8 B' n# z* ~2 e2 G; U1 z- g2 }) n
还有,您上面所写的' z3 M5 j& I! |' D! z
mov al, 0Eh. u; e9 n) [% R8 e# p- d8 r+ F6 {
mov dx, 0CF9h
! @  M+ _7 s6 a5 qout dx, al
5 A8 z2 h5 o% ~jmp $& |8 e8 E+ d) J, ^# x( ^5 t- G

  L8 G0 H4 Y" p* H最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。
/ A: u# b6 e% A! M# P. j. h1 n# Q! ~) G/ }/ A" W/ C' s, l4 r
Jmp $,就是Jmp到自己,也就相当于一个死循环。
回复

使用道具 举报

发表于 2009-12-4 17:25:54 | 显示全部楼层
哥哥,有些复杂
回复

使用道具 举报

发表于 2010-7-19 19:53:15 | 显示全部楼层
mark,等我先看看spec,再来领会先,多谢
回复

使用道具 举报

发表于 2011-1-4 14:26:46 | 显示全部楼层
mark,等我先看看spec,再来领会先,多谢
回复

使用道具 举报

发表于 2012-7-20 10:53:39 | 显示全部楼层
Bini,怎麼看不到你最近的動態了呢?什麽時候再出江湖,為我們指點迷津呀?
回复

使用道具 举报

发表于 2013-9-4 00:25:20 | 显示全部楼层
暂时还在学习中,很多看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-6-8 07:05 , Processed in 0.241247 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表