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

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

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7
$ E& E. S  h9 J% P
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。! k7 S3 R6 N% n, i  ~, N9 r3 J4 O
5 X4 B. e! h. }
什么是SCI?什么是SMI?
% u9 s; K5 v( m这里如您不知道,我只大致解释一下:; |0 K% w0 N9 ^5 L! i- m% b- C
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。
0 F3 c  z1 s, \. T7 {$ G+ S% ~SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。); Y# r* O& ^1 k

' x- }; v& U& m4 y4 o当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
* A& Q* @* y. Q+ W  z% ?# S  g+ t+ a) w. b% Q! R) l' t
ICH7 GPIO Status的寄存器如下:
: H1 q0 S4 a) w4 ^  T 1.JPG
# r5 o+ `* T9 W" ]0 j
0 b& |0 A! d1 p8 Q8 H让GPIO产生SCI或SMI的Switch寄存器:3 K, W% p7 x( @4 i9 ?, q
3.JPG / H, P5 n. n( i4 M

- r3 k5 A4 S* F. K5 _5 ~一种机器所用到的的GPIO:4 Y- {( T/ ?( T6 D+ W
2.JPG 6 J3 U. q) W. V6 J* k& c1 D+ V
! H' ?  k5 c$ V& Q( a3 @) I3 G
处理这些事件的方法如下:8 G3 @5 d4 G1 l$ F7 @3 H8 K0 g0 m) S( y
4.JPG " g" t. z! S( w- R  \: d1 k
注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。
6 @/ o/ A  w, X$ q" v; W  A- V
) a! p0 m/ k' {" j5 L1 b那什么是Q方法?. p& x/ Z0 f" `- H/ R7 O
当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。
* n  e  u$ {1 I+ {" k9 p
4 D+ E& X% B* w. k# L4 e既然有256个,哪如何区分Q事件呢?
9 t9 k- x4 q+ I& b# W; v当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。- F) U/ Z+ {1 s; c1 Z0 y; D5 I
- B; ]7 d/ @& d! N# v) _1 z! P
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:! w$ `2 F5 C! S3 t
Method(_Q34) { // embedded controller event for thermal Notify4 Y3 J  H0 I: X( q( b& x5 o% K
    (\_SB.TZ0.THM1, 0x80)
8 ?1 p- N* C  G4 {}+ r4 k" u# h' q+ K; z

! w+ H) p: x% A) n- j详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
' F, L) x- T% z! ^; ?% `. G% _如找不到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.( [3 w4 L1 G* i
SCI --> IRQ --> ACPI driver。 / g0 [% @6 i/ i2 F, ~) M' _
SMI# --> SMM。
9 [8 `6 |4 Z9 C那 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上电时序进行平台上电。
. m  a$ e% d* z0 a# l$ @( J* b0 ?% @# q6 v
多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。
' H0 [$ t, Z0 X
' X/ b% W- @3 `   ^    ^# N# y* ]# P5 F" ]5 R0 w, N8 _
(   。 。  )
/ M2 u- I8 ^9 j, p" U- B     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。
1 [1 }* h. V) U7 k; f9 o其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器" ; G  ]3 x0 I9 G! ?, W9 Z. c
/ O+ U/ N; C3 P  z+ m
谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题 + P  u4 M! v, [
% U# }! k) \/ [
SMM里面还可以在发SMI吗?
回复

使用道具 举报

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

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,3 e8 I3 r7 D+ [" H# z; O# ^
RST_CNT—Reset Control Register 1 W2 Q* s, ?4 t0 w
I/O Address: CF9h Attribute: R/W
1 A, z2 n2 J7 W- u
: A2 d3 D5 W0 wICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??)1 q9 {1 t4 y; @/ r2 Q
比如:
& d; ~( F  d' G% J3 \GEN_PMCON_1—General PM Configuration 1 Register
- s3 N9 W  L/ q  ]6 }7 FOffset Address: A0h
$ B& l1 A) X: g. s/ f8 g
8 L; Y% y2 r0 ?9 }% P7 M如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????
9 j2 h5 I& n7 y9 r8 J/ u# A
! N/ L9 k( ~$ D: l7 P还有,您上面所写的: S' y' M4 e# D. Y% c' n8 m6 N
mov al, 0Eh" U7 w; S* S0 G5 M0 T+ P
mov dx, 0CF9h
$ |* A3 [8 j/ `  W# zout dx, al
, a0 f- p, l5 Z! z6 rjmp $8 J! {) t+ k& P5 S: m  a2 U

  G. w/ V1 [% [& L2 p最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。
4 Y' I  N2 w  @$ n
1 [, ]$ Q/ z$ Z4 ]$ 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, 2024-5-16 06:19 , Processed in 0.026752 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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