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

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

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7

3 i8 t, x9 t' m7 Z) }在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。
- K, H7 y, ~1 o2 E* f4 j( @* X# }
1 t. n/ a# z1 u: h9 Z+ A2 P什么是SCI?什么是SMI?6 J2 g$ E; a: {, I" G
这里如您不知道,我只大致解释一下:/ M3 J3 ?# y3 l4 O) {
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。0 }8 w9 Y0 x8 u, P5 }9 F
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
9 }& u* H8 Z; ~  A& M" D1 n; l; q- A! \# E) l/ b, n# q
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
: r# V. [0 @2 N/ s7 ~9 n( w! q2 h3 q+ A+ z  p3 E; d
ICH7 GPIO Status的寄存器如下:6 i3 Q9 Z$ M- _3 R4 c; ~1 t8 u- g4 M
1.JPG
0 E2 z) D5 }; [+ D. L& Y! f6 n! T
) \0 v3 H& W* W1 C6 S1 `, [让GPIO产生SCI或SMI的Switch寄存器:
  b6 l6 G% u( ` 3.JPG 8 E, V: ~# i0 H8 m
1 m( M( G9 }6 f- e: S* G9 i
一种机器所用到的的GPIO:( m& C. d) B1 f4 N, @! ]
2.JPG
- \9 f. o( a' b" v' F) B3 m( W; z! A: u# Z# x: |9 ~
处理这些事件的方法如下:
3 a" z" }9 }! ]6 f 4.JPG
- d' A; g: ^9 V9 B. ~! ~% o注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。1 k+ y9 z7 `+ d1 I

' G" C; D4 K% n1 D, p/ M那什么是Q方法?
2 H4 V+ a" S9 i; m6 A当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。
. C6 K( w0 ]1 d, j  h" z
9 s, \& q7 Q1 m; K* z既然有256个,哪如何区分Q事件呢?4 J3 y3 A- C! U$ v- M
当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。7 i( z- I: A8 R$ j/ G& M
: [  R& q' e6 O) A7 i: e1 j
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:
5 J: |9 m4 S( o2 `Method(_Q34) { // embedded controller event for thermal Notify
) {+ ^& _8 C9 V9 `    (\_SB.TZ0.THM1, 0x80)
3 s( A6 c% ~- `}
! b; G% |( A3 W, y& M: q( Y5 b
" j: l8 Y; s, a5 p详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
0 J/ a3 x* I7 Q  U3 }如找不到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.4 q( {! [5 [9 V7 O" e
SCI --> IRQ --> ACPI driver。
+ Y& f2 \& y1 F3 P, ]' JSMI# --> SMM。
" u) t% b+ B( J" y! z, ]/ Y3 a* X那 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上电时序进行平台上电。$ [3 v+ y/ w) w

: ^6 u9 C+ @, {0 Q" o4 j7 Z( t多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。/ {- e2 O+ U1 a0 R% W6 k( m, ?
2 R- F; V2 G6 G7 c. d" ~
   ^    ^
5 U. E' u8 d$ K' ?8 U% U, ?! ] (   。 。  )
3 Z9 _! w1 V' `/ s     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。
' a7 f0 C; {$ |  E' D/ ~其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器" " @: Z: l  I. O% F
: n! p: A$ F, r) a  w
谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题 ' h' s: p9 [# Q% i) I
& L0 p6 m) ]$ ]$ U; i
SMM里面还可以在发SMI吗?
回复

使用道具 举报

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

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,9 Q) Y- d( [* C! W
RST_CNT—Reset Control Register 9 q" \- p  x% o
I/O Address: CF9h Attribute: R/W
1 c* d" t& o5 _: F( O9 @
& B* a& r- c9 u+ }: r- m! KICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??): |$ r4 A- Q0 U+ w2 ~0 C: w, W
比如:+ \; P8 V9 `" e9 l& k% f9 j
GEN_PMCON_1—General PM Configuration 1 Register
6 T/ j- m2 g' z3 `Offset Address: A0h
% R3 ~. P" u, V( a5 z* x
- s% r6 F" B: d8 j如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????( F6 x4 a) C4 f, t9 b4 Y6 }
2 L$ j8 T8 [' ^2 j
还有,您上面所写的7 N% w6 h4 Q% j4 g4 R( Q4 v% V
mov al, 0Eh6 a- y! h1 k6 ?$ W6 E  h; h1 I) L
mov dx, 0CF9h
2 W4 }# G. H3 f7 ]% `4 zout dx, al. p$ H% Y2 w7 c5 `0 u% X
jmp $; ?3 {: v: v% T) f: _
8 U# t  z2 h& T4 Z+ s) T& J6 t
最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。) y. h, ~$ r" [4 n+ D0 Q/ P& o. D  ]

$ x$ ~% J# V& l- ~3 {% XJmp $,就是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-4-4 16:35 , Processed in 4.349695 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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