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

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

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7
4 g  c! u8 M! r. P' L
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。
( \2 J) ^7 u' [/ P+ a% e$ _8 q
4 ^! x5 ?+ t; ~, m4 v- e什么是SCI?什么是SMI?
  ~2 K* A' ~+ r4 F1 S3 l这里如您不知道,我只大致解释一下:
, J8 M- f- e7 bSCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。7 M7 X& B: p( R+ N. T, F1 T
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
* g& X9 c" [7 G" A/ X) |: q" y6 R# y' K
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
* x! h3 v1 O  F& ^. H* C2 D1 H! }: d" q) k. Z/ |- O
ICH7 GPIO Status的寄存器如下:
. k2 c, G! X5 x8 \ 1.JPG ( P1 C; G6 a2 u" i2 Q; |
: t- K7 e+ `8 X1 J: r. a
让GPIO产生SCI或SMI的Switch寄存器:
$ p6 Z7 t5 n4 M/ R; ]8 a 3.JPG
0 e# o) r8 J# L+ M6 ?4 S& n0 H/ W/ ^% X$ M7 B; \
一种机器所用到的的GPIO:. P# b7 U! Z, [9 y7 M
2.JPG , w9 X) Q7 k0 p8 Z" s
. x: L/ ^& l  H% k
处理这些事件的方法如下:
# ^$ ~# P% @: k9 v) | 4.JPG
% M0 N4 R: J# l2 w- [注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。
# d) T" `5 x' M( ^8 Y
0 s8 M4 a/ T! `6 F% ^0 d5 c9 b那什么是Q方法?
* r  `  z1 u5 [3 b当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。. V. ^( z/ O6 P6 M. d5 e5 ?

; q4 n: V: d, t. C既然有256个,哪如何区分Q事件呢?
3 J& k) ?) x! Y' R$ P8 J; B0 O/ Y当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。1 l( |1 q1 M- ?4 L
6 |5 J) q: [2 q4 g
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:
+ r* e) F( X) t2 t+ A7 yMethod(_Q34) { // embedded controller event for thermal Notify
) U6 a3 z" L) {& I    (\_SB.TZ0.THM1, 0x80)
) A; `/ @3 d4 s7 b1 R}
: o- R  X& z3 ^7 m2 u# L
! D& n3 Y$ ^2 @. s; \) a4 j* \; L详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
# ~. a" ~4 ^  T" ^& p如找不到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.
: C9 e5 Z" z- L  v8 HSCI --> IRQ --> ACPI driver。
' J6 n, X. I* Q1 A# p3 |2 `& hSMI# --> SMM。
  E- b1 M( e' W5 P  ~那 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上电时序进行平台上电。* H8 e' U, Q: u2 D4 f' y& B1 h

& y3 l% R- {; D1 d& W3 V: \# K1 T多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。# S8 p4 n. B* \! @4 O: ^

4 B, J3 x0 q, s+ {   ^    ^
* C- t' Z0 }: J0 ^4 I5 T7 G. {  R. u# x (   。 。  ), ^7 p) Y* R3 D( m  X
     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。
' n3 n# v0 H' c其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器" 2 w2 W/ ?5 ^6 V% E
) ^$ s9 M& `) V# T% n' J: u/ l
谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题 # B$ O) C+ v) N
: n9 W! j  s$ k5 y7 z6 X
SMM里面还可以在发SMI吗?
回复

使用道具 举报

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

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,
9 j  ?8 [" [" m6 j# PRST_CNT—Reset Control Register $ |+ W4 v* c& w/ I% @
I/O Address: CF9h Attribute: R/W3 O1 @  F0 a  t' @6 n

: v' V3 E4 N( x, yICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??)6 w8 O4 E: C% y+ Y4 j, R. B
比如:
, q7 I; J2 @7 P3 L3 T1 EGEN_PMCON_1—General PM Configuration 1 Register 5 A0 [6 |  m0 b9 v  l, g3 a2 M1 t' T
Offset Address: A0h% h1 {& p) c* e& z2 L) V2 c
- j% R; B* R  @
如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????
& ?# f6 t$ s: B5 w0 j
7 }3 `7 i" t) U4 l! X  i: K& ^. U还有,您上面所写的- i9 F" i) {9 E' P3 B: A/ a
mov al, 0Eh6 `+ h# i4 v6 e% S  A: n6 }
mov dx, 0CF9h
3 \* X! c! a' g4 p2 t: b, ]" Gout dx, al
: H4 x) F+ S8 P6 T: Sjmp $8 ?  s% {/ h2 `7 y3 [5 q
/ K* n. r( T- `
最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。
" @  Z' K& ?$ }- k/ W" R
6 z) L3 N  L& l+ k9 s7 A, iJmp $,就是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-10-11 10:35 , Processed in 1.391130 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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