·¢²¼Ê±¼ä : ÐÇÆÚÁù ÎÄÕÂPCI Configuration¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ
PMC Register:
λ 15:11
˵Ã÷
PMEÖ§³Ö(PME_Support)×Ö¶Î,±íʾ¹¦ÄÜ¿ÉÒÔÔÚ¸Ã״̬ÏÂ,Çý¶¯ PME#µ½µÍ̬(µçÔ´¹ÜÀíʼþPM Event)µÄPM״̬,λΪ0±íʾ ÔÚÕâ¸öPM״̬ϲ»Ö§³ÖPME#²úÉú. λ ¶ÔÓ¦µÄPM״̬ 11 12
13 14 15
D0 D1 D2 D3 hot
D3 cold(¹¦ÄÜÐèÒª¸¨ÖúµçÔ´À´¹©Ó¦PMEÂß¼µçÁ¦)
10 9 8:6 5 4 3
D2Ö§³Öλ D2Ö§³Öλ ¸¨ÖúµçÁ÷(Aux_Current)×Ö¶Î.
×°ÖÃÌض¨µÄ³õʼ»¯(Device-Specific Initialization,¼ò³ÆDSI)λ. ±£Áô
PMEƵÂÊ(PME Clock)λ,´ËλΪ1±íʾ¹¦ÄÜÐèÒªÓÐPCIƵÂÊ´æ
ÔÚ,²ÅÄܲúÉúPME#,²»ÐèҪƵÂÊ»ò²»²úÉúPME#µÄ¹¦ÄÜ»áÒÔÓ²¼þ½ÓÏß
½«±¾Î»ÔªÉ趨Ϊ0.
2:0
°æ±¾×Ö¶Î(Version). λ ×ñѵĹæ¸ñ°æ±¾ 210 001 10
1.0 1.1
PM¿ØÖÆ/״̬(PMCSR)»º´æÆ÷
? ¼ÙÈ繦ÄÜʵ×÷PMEÄÜÁ¦µÄ»°,Ôò´Ë»º´æÆ÷º¬ÓÐÒ»¸öÓÃÀ´·´Ó¦ÏÈÇ°ÖÂÄÜÖ®PMEÊÇ·ñ·¢ÉúµÄPME
״̬(PME Status)λ.
? ¼ÙÈ繦ÄÜʵ×÷PMEÄÜÁ¦µÄ»°, Ôò´Ë»º´æÆ÷º¬ÓÐÒ»¸öPMEÖÂÄÜ(PME Enable)λ,ËüÔÊÐíÈí¼þÈ¥?
ÖÂÄÜ»ò¹Ø±Õ¹¦ÄÜÇý¶¯PME#ѶºÅµ½µÍ̬µÄÄÜÁ¦.
¼ÙÈçʵ×÷Á˷DZØÒªµÄÊý¾Ý»º´æÆ÷µÄ»°,Ôò´Ë»º´æÆ÷º¬ÓÐÁ½¸ö×Ö¶Î: ? ÔÊÐíÈí¼þÑ¡Ôñ¿ÉÒÔ͸¹ýÊý¾Ý»º´æÆ÷À´¶ÁÈ¡µÄÐÅÏ¢. ? ²¢ÌṩÊý¾Ý»º´æÆ÷ÊýÖµ±ØÐëÏà³ËµÄ±ÈÀýÒò×Ó.
Èí¼þʹÓô˻º´æÆ÷µÄµçԴ״̬(Power State)×Ö¶Î,À´¾ö¶¨¹¦ÄÜÄ¿Ç°µÄPM״̬,ÒÔ¼°°Ñ¹¦ÄÜתÒƵ½ÐÂPM״̬. ¶Á/д(R/W) ˵Ã÷ ¶Á/д,ÏëÒª½« PME״̬(PME Status)λ,¼ÙÈ繦ÄÜÖ§³ÖPME
1Çå³ýΪ0µÄ»°, µÄ»°,´Ëλ»á·´Ó¦¹¦ÄÜÊÇ·ñÓöµ½PME£¨¼´Ê¹ÔÚ °Ñ1дÈëÆäÖÐ ´Ë»º´æÆ÷ÀïµÄPME_En뽫¹¦ÄÜÔÚ·¢ÉúPME
ʼþʱ,Çý¶¯PME#µ½µÍ̬µÄÄÜÁ¦¹Ø±Õ),¼ÙÈçÉ趨Ϊ1,Ôò¹¦ÄÜÓöµ½
PME,¶øÈí¼þ¿ÉÒÔÓÃдÈë1µ½ÆäÖеķ½Ê½½«ËüÇå³ý. Êý¾Ý±ÈÀý(Data Scale)×Ö¶Î. Êý¾ÝÑ¡Ôñ(Data Select)×Ö¶Î. PMEÖÂÄÜ(PME_En)λ.
1=ÖÂÄܹ¦ÄÜÔÚ·¢ÉúPMEʼþʱ,Çý¶¯PME#µ½µÍ
̬µÄÄÜÁ¦. 0=¹Ø±Õ. ±£Áô. µçԴ״̬(Power State)×Ö¶Î,Èí¼þÓôË×Ö¶ÎÀ´¾Ó
¾ö¶¨¹¦ÄÜÄ¿Ç°µÄPM״̬(ÒÔ¶ÁÈ¡´Ë×ֶεķ½Ê½)
»òÊǽ«Ëü·ÅÈëµ½Ò»¸öеÄPM״̬(ÒÔдÈë´Ë×ֶεķ½Ê½),¼ÙÈçÈí¼þÑ¡Ôñ¹¦Äܲ»Ö§³ÖµÄPM״̬,ÔòдÈë±ØÐëÕý³£µØÍê³É,µ«ÊÇдÈëµÄÊý¾Ý»á±»¶ªÆú,ÇÒ״̬²»±ä. 10 PM״̬
00b 01b
D0 D1
? λ 15
14:13 12:9 8
Ö»¶Á ¶Á/д ¶Á/д
7:2 1:0
Ö»¶Á
¶Á/д
10b 11b
?
D2 D3hot
Ïà¹ØÐÅÏ¢ÓëʵÀý
µ±¿Í»§ÒªÇóÖ§³ÖS5 PME Wake up¹¦Äܵ«PCI×°Öò»Ö§³Öʱ,BIOS¿ÉÀûÓÃÏÂÁгÌÐòÀ´×öµ½:
STR_SAVE_PCI_DEVICE LABEL BYTE
dw MKF_PCI_SLOT1_DEV_FUNC ;(25-11)shl 3 dw MKF_PCI_SLOT2_DEV_FUNC ;(26-11)shl 3 dw MKF_PCI_SLOT3_DEV_FUNC ;(27-11)shl 3 dw MKF_PCI_SLOT4_DEV_FUNC ;(28-11)shl 3 dw MKF_PCI_SLOT5_DEV_FUNC ;(29-11)shl 3
NO_OF_STR_PCI_TABLE equ ($ - offset cgroup:STR_SAVE_PCI_DEVICE)/2
mov si,offset cgroup:STR_SAVE_PCI_DEVICE mov cx,NO_OF_STR_PCI_TABLE loop_for_pme_d3: push cx
mov dx, word ptr cs:[si]
mov ah,00h ; 00h call read_pci cmp al,0ffh
jz next_for_pme_d3 mov ah,PCI_REG_STATUS call read_pci
test al, CAPABILITIES_BIT jz next_for_pme_d3
mov ah,PCI_CAP_PTR read_cap_id:
call read_pci cmp al, 00
jz next_for_pme_d3 mov ah,al
; 06h ; 10h
; 34h
call read_pci
cmp al, PME_CAP_ID ; 01h jz found_for_pme_id inc ah
jmp read_cap_id found_for_pme_id:
add ah,PMECS_REG+1 ; 05h call read_pci
and al,0feh ; Clear & Disable PME call write_pci dec ah
call read_pci and bl,0fch call write_pci inc ah
call read_pci or al,01h call write_pci next_for_pme_d3:
; set power on state
; Enable PME
inc si inc si pop cx
loop loop_for_pme_d3 mov cx,3333 call pm_fixed_delay popa
for_pme_disable: