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

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

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7
, g2 ]% M' F& W
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。' c5 l( w% u' R. k

; k: U/ e/ @2 n9 [, y2 C什么是SCI?什么是SMI?8 G. S, z9 E4 N" o/ w3 b. h* L
这里如您不知道,我只大致解释一下:8 F0 w/ T6 Q6 U7 ~0 k
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。1 v' l2 s  _  t0 z5 |/ w% O
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。): e, A0 h$ \$ V9 |, x
: W/ A# l  ]: g% f: ^7 f2 B
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
, I& |: R( }. K" T. Z
0 q6 [$ `% G' d- l8 Y: w' \) ^ICH7 GPIO Status的寄存器如下:9 L" c( X) b5 p: W
1.JPG * a; L3 |0 i& f# W- I

: R: u& r) `8 o: f! X& K/ w让GPIO产生SCI或SMI的Switch寄存器:
4 K+ I( g0 u5 F2 s 3.JPG 3 @0 ^- H7 x" A% U) w

2 ^( ?6 [# B* M8 U- {1 V一种机器所用到的的GPIO:
8 e9 o, D8 K5 o6 t$ H* H- e: `7 c+ Y 2.JPG
# P& d( ]. s# F+ u4 R2 O) o1 }- h' E- h6 \3 s1 ^
处理这些事件的方法如下:& ]  X) l# Z6 N; O7 o, l
4.JPG
( v& m; D0 ^4 ]; I; K注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。& t1 T4 H- U# r% t8 Y# @$ `3 Y

& X4 f7 F& h5 a7 L5 K- s' X那什么是Q方法?
: n  s2 r6 W9 S, W' ~当你的平台定义了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 e+ _; Y) S- k, Q

' a; `8 d5 b" M% m, H" ]既然有256个,哪如何区分Q事件呢?
% l; Y3 E; J- E6 @当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。7 e( G$ A; \% @% v) d3 G5 P

9 }% S4 U: L4 y8 s5 k如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:6 k- A, X9 C& \1 O
Method(_Q34) { // embedded controller event for thermal Notify' O* q5 I& n' R
    (\_SB.TZ0.THM1, 0x80) & M( P1 R2 b* J. k6 y: c
}
) A) B. ?$ E5 _( \8 D  q4 \2 R7 k$ F
详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
4 c% e$ _6 }, h- j2 u9 ?  y, u5 i如找不到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.
+ J, x2 Z" @2 m! _- _3 JSCI --> IRQ --> ACPI driver。
# H3 T' T4 S+ j; qSMI# --> SMM。. v2 x: C$ k' N
那 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上电时序进行平台上电。
8 v8 e* ~. T' ?$ O  G
; ^, c$ \7 c; B- E  P* r1 |3 q多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。
" H# R% \  ]9 D4 D/ e
# I( {6 q( w+ ]4 S   ^    ^
0 t5 n" M/ e: T$ c1 n (   。 。  )9 s" U9 d3 b2 F" A0 l, ]' L
     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。
& i4 b- r# q2 t. ~- F3 Q其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器"   q; i* K7 l( a! R) U

! J1 X) z3 O0 a; f( q3 k谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题 - n3 d6 k0 V9 T0 I( j
9 @# v- c& u- j
SMM里面还可以在发SMI吗?
回复

使用道具 举报

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

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,8 F8 f0 F3 g. m0 y3 R) {+ r
RST_CNT—Reset Control Register , {7 r% S& ~+ n/ i3 L
I/O Address: CF9h Attribute: R/W
6 q$ v1 P! F- X$ M  h- Z7 {" o2 d
5 I, y0 b! C8 j: dICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??)
% L4 _2 S2 g' N4 W0 P2 W比如:
' `. }% L! ?, C1 c' lGEN_PMCON_1—General PM Configuration 1 Register
- P& O5 @% }( I, e6 `4 P. c, ROffset Address: A0h
8 U* t- k) v" g- X3 J: y: j6 O: p, [5 K( ^
如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????
: R) c4 ~6 u2 @( m8 {7 y* g4 \  U- E0 `* q$ S9 |* |' {
还有,您上面所写的
% O! m. }8 n" ^! J2 @+ k" ^mov al, 0Eh
- L" s- _+ y# z6 x  H0 ?0 Pmov dx, 0CF9h
8 w% `* h. s8 |# t3 w8 vout dx, al, m+ M$ G7 x4 R2 l7 y
jmp $9 U+ }9 i- P% z* H% J

" K& |: A! G, X) g/ l0 _7 L5 U最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。; o& X7 t9 F7 D1 s% }9 i
; |4 V! o& g. w! G  [# j& N1 C
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-9-2 22:27 , Processed in 0.186604 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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