⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmupost.asm

📁 AWARD BIOS源代码,支持的CHIPSET请看文件,有同型号的板子烧上去就可以跑
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		test	al,80h
		jnz	short @F			;No
		xor	al, al				;all mode disable
	@@:
		ret

CT_PMU_TIMER_STATUS	Endp

;[]========================================================================[]
;Procedure:	Ct_PM_Final_Init
;
;Function :	PM initialization before boot
;
;Input    :	None
;
;Output   :	None
;
;Registers:	Please preserve all registers
;
;Note	  :	1. Call from POST 82
;		2. Stack available
;[]========================================================================[]
		Public	Ct_PM_Final_Init
Ct_PM_Final_Init	Proc	Near

ifdef	Move_F000_PMU_INIT_To_E000				
		Post_Func_Call E000_Ct_PM_Final_Init
else;	Move_F000_PMU_INIT_To_E000				

ifdef	Have_Conserve_Item
		mov	si,offset Conserve_Mode_Item
		call	GetItem_Value
		mov	bl,al
		shl	bl,4
else;	Have_Conserve_Item				
		xor	bl,bl
endif;	Have_Conserve_Item				
		mov	cx,VT586_ACPI + 53h
		call	Get_Set_PMU_OR

		mov	cl, 30h
		call	Set_PMIO_Clear

;R67		mov	ah,0			; Clear Y-M-D Alarm Setting.

		mov	al,32h			;R67 Set ACPI Century Field
		call	Get_Cmos		;R67  to the year of Now !
		mov	ah,al			;R67
		mov	al,7fh			;
		call	Set_Cmos		;

		xchg	al,ah			; Clear M-D Alarm Setting.
		mov	al,7eh			;
		call	Set_Cmos		;
		xchg	al,ah			;
		mov	al,7dh			;
		call	Set_Cmos		;
ifdef	Disable_ExtSMI_SW_In_POST
 		mov	cl, 01h			; Clear Power Buttom Status
 		call	Get_PMIO		;
 		call	Set_PMIO		;
 		Post_Func_call	Delay_About_1_Second
 		mov	cl, 01h			;
 		call	Get_PMIO		;
 		call	Set_PMIO		;
 
 		mov	cl, 03h			; Enable Power Buttom
 		mov	bl, 01h			;
 		call	Get_Set_PMIO_OR		;
endif;	Disable_ExtSMI_SW_In_POST

;R01A - starts
ifdef	VT596
  IFDEF	Thermal_Enable
                mov     cx,VT586_ACPI + 4ch
;R08		mov     bl,70h
;R08		call    E000_Get_Set_PMU_OR
		mov     bl,0D0h			;R08
		call    Get_Set_PMU_OR		;R08
    ifndef	Thermal_Active_By_High		;R08
                mov     cl,2ch			;R08
                mov     bl,40h			;R08
                call    Get_Set_PMIO_OR		;R08
    endif;	Thermal_Active_By_High		;R08
  ENDIF;Thermal_Enable			
endif;	VT596
;R01A - ends

endif;	Move_F000_PMU_INIT_To_E000				

		ret
Ct_PM_Final_Init	Endp

;[]========================================================================[]
;Procedure:	Ct_PM_Init
;
;Function :	Special PM init which the standard code can't do
;
;Input	  :	DS = DGROUP
;		ES = PM_RAM
;
;Output   :	None
;
;Note	  :	1. Call from POST 79S (PM initialization)
;		2. Stack available
;		3. Don't destroy any SEGMENT registers!
;[]========================================================================[]
		ASSUME	ES:PM_RAM
		ASSUME	DS:DGROUP
		Public	Ct_PM_Init
Ct_PM_Init	Proc	Near

ifdef	Move_F000_PMU_INIT_To_E000				
		Post_Func_Call E000_Ct_Pm_Init
else;	Move_F000_PMU_INIT_To_E000				
		pusha
		push	ds
		push	es
		pop	ds

;--------------- Set 32bit Timer for ACPI ------------------------
;R39		mov	cx, VT586_ACPI + 41h
;R39		mov	bl, 08h			
;R39		call	Get_Set_PMU_OR		

		mov	si, offset DGROUP:Alarm_Item
		call	GetItem_Value		;get setup setting
		mov	bl,al
		mov	si, offset DGROUP:PWRBTN_OVRD_Item
		call	GetItem_Value		;get setup setting
		shl	al,1
		or	bl,al
		mov	PM_RAM:[ALARM_RESUME], bl

		mov	si, offset DGROUP:Ring_Item	; Set Ring Resume
		call	GetItem_Value		; By Setup Item
		mov	bh,al				;R32
		shl	al,3
		or	PM_RAM:[ALARM_RESUME], al
ifndef	VT596						;R32
		mov	cl, 27h
		mov	bl,not 04h
		call	Get_Set_PMIO_AND
else;	VT596						;R32
		mov	cl, 25h				;R32
		mov	bl,not 01h			;R32
		call	Get_Set_PMIO			;R32
endif;	VT596						;R32
ifdef Set_APM_According_PM_Setup
		call	PM_Option_Check			   ; If PM set Disable
		jc	short @f			   ; No, Jmp !
		or	byte ptr PM_RAM:[ALARM_RESUME],80h ; Set Flag to be PM Disable ?
@@:
endif; Set_APM_According_PM_Setup

ifdef	ABIT_Have_Suspend_Fan_Item
		mov	si, offset DGROUP:Fan_Item
		call	GetItem_Value
		shl	al,2
		or	PM_RAM:[ALARM_RESUME], al
endif;	ABIT_Have_Suspend_Fan_Item


;--------------- Save miscellaneous setup settings ---------------

		mov	si,offset DGROUP:Doze_Timer_Item
		mov	di,offset PM_RAM:DOZE_TIME
;R62 start
		call	Timer_Transfer

		mov	si,offset DGROUP:Susp_Timer_Item
		mov	di,offset PM_RAM:SUSPEND_TIME
		call	Timer_Transfer
;R62 end
;R62 		mov	cx,2
;R62 
;R62 	Prg_Next_Item:
;R62 
;R62 		call	GetItem_Value		;get setup setting
;R62 		xor	ah,ah
;R62 		shl	ax,1	
;R62 		mov	bx,offset Timer_Value	;value table
;R62 		add	bx,ax			;translate
;R62 		mov	ax,cs:[bx]		;into reg. value	
;R62 		mov	es:[di],ax		;save value in PM_RAM	
;R62 
;R62 		add	si,ITEM_SIZE
;R62 		inc	di
;R62 		inc	di						
;R62 		loop	short Prg_Next_Item

		mov	ax,PM_RAM:[DOZE_Time]			
		mov	PM_RAM:[Doze_Setting],ax		
								
		mov	ax,PM_RAM:[SUSPEND_TIME]		
		mov	PM_RAM:[Suspend_Setting],ax		

        ;Primary/Secondary Setting
;R62 		mov	si,offset DGROUP:IRQ3_Event_Item
;R62 		mov	cx,13
;R62                 xor     bx, bx
;R62 		xor	dx,dx
;R62         set_pri:
;R62                 call    GetItem_Value
;R62                 or      bl, al
;R62                 and     bl, 11111101b
;R62                 shr     al, 1
;R62                 or      dl, al
;R62 pri:
;R62                 add     si, ITEM_SIZE
;R62                 ror     bx, 1
;R62                 ror     dx, 1
;R62                 loop    set_pri
;R62 start
		mov	di,offset DGROUP:IRQ_Evnt_TBL
		mov	cx,IRQ_Evnt_TBL_Len
                xor     bx, bx
		xor	dx,dx
        set_pri:
		mov	si,word ptr CS:[DI]
		push	di
                call    GetItem_Value
		pop	di
                or      bl, al
                and     bl, 11111101b
                shr     al, 1
                or      dl, al
pri:
                add     di, 2
                ror     bx, 1
                ror     dx, 1
                loop    short set_pri
;R62 end
		test	byte ptr FLOPPY_TYPE[bp],0ffH	; no floppy installed ?
		jnz	short Fdd_Attach
		and	bl,NOT 01000000b 	;disable IRQ6 primary event
Fdd_Attach:
;R23A ifdef	Cover_Garbage_IRQ12			;R23 - starts
;R23A 		test	bh,10h
;R23A 		jz	short W_IRQ12_Dis
;R23A 		or	PM_RAM:[ALARM_RESUME], 80h	;Wake Event IRQ12 Enabled.
;R23A 		and	bh,not 10h
;R23A 	W_IRQ12_Dis:
;R23A endif;	Cover_Garbage_IRQ12			;R23 - ends
ifdef	VT686					;R52A
		or	bl,00000010b		;R52A Always Enable IRQ1(Keyboard Event).
endif;	VT686					;R52A
                push    dx
                mov     cx, VT586_ACPI + 44h
                mov     al, bl
                call    Set_PMU

                mov     cx, VT586_ACPI + 45h
                mov     al, bh
                call    Set_PMU
                pop     dx
                mov     bx, dx
                mov     cx, VT586_ACPI + 46h

                mov     al, bl
                call    Set_PMU
		mov     cx, VT586_ACPI + 47h

                mov     al, bh
                call    Set_PMU

	;APM option

		mov	si,offset DGROUP:Wait_APM_Item
		call	GetItem_Value
		mov	PM_RAM:[Wait_APM_Flag],al

	;video off option

		mov	si,offset Video_Off_Item
		call	GetItem_value
		mov	PM_RAM:[Video_Off_Mode],al

;Read DOZE timer setup value and store in SM RAM

;Read Suspend timer setup value and store in SM RAM

;Set Conserve Mode
		mov	cx, VT586_ACPI + 53h
                mov     al, 88h                 ; But the first conserve mode will on afer
                call    Set_PMU                 ; first doze state

		mov	PM_RAM:[PM_MODE1],FULL_ON
		post_func_call	Update_PM_Timer		

;enable primary activity monitor

		post_func_call	End_Pmi_Handler 	;clear status

ifdef	Break_Suspend_In_Mouse_CMOS	       		
                mov     si,offset Mouse_Irq_Item	
		call    GetItem_Value
		shl	al,2
                mov     PM_RAM:[MISC_CNTL1],al		
endif;	Break_Suspend_In_Mouse_CMOS	       		   	

ifdef	HDD_PWRDOWN_IN_SUSPEND					
ifdef   HDD_PWRDOWN_IN_SUSPEND_After_1Min 			
		mov	si,offset HDD_Power_Item		
		Call	GetItem_Value		
 								
		mov	byte ptr PM_RAM:[HDD_OFF_Timer],al	

		cmp 	al,0				   
		jz	short @f			   

		post_func_call	HDD_Timer_Restore	
@@:					 
endif;	HDD_PWRDOWN_IN_SUSPEND_After_1Min
endif;	HDD_PWRDOWN_IN_SUSPEND
		mov	cl, 2ch
;R08		mov	al, 1
;R08		call	Set_PMIO
;R16		mov	bx, 01e0h		;R08
		mov	bx, 01e4h		;R16
		call	Get_Set_PMIO		;R08
;Set CPU type


ifdef	VT686				;R52A - starts
		mov	si,offset Evt_INTR_Item
		call	F000_Getitem_Value
		mov	bl,00000000b			; set primary activity
		test	al,1	    
		jz	short @F    
		mov	bl,00000010b
@@:				    
		mov	PM_RAM:[VT586PM_I34h_Value],bl	;default
		mov	cl, 34h
		call	E000_Set_PMIO
	
		mov	si,offset Evt_HDD_Item
		call	F000_GetItem_Value
		or	al,al
		jz	short No_Evt_HDD
		or	PM_RAM:[VT586PM_I34h_Value],00011100b
	No_Evt_HDD:

		mov	si,offset Evt_DMA_Item
		call	F000_GetItem_Value
		or	PM_RAM:[VT586PM_I34h_Value],al

		mov	si,offset Evt_LPT_COM_Item
		call	F000_GetItem_Value
		or	al,al
		jz	short No_Evt_LPT_COM
		or	PM_RAM:[VT586PM_I34h_Value],11100000b
	No_Evt_LPT_COM:

		mov	si,offset M_Evt_VGA_Item
		call	F000_GetItem_Value
		mov	cl, 35h
		call	E000_Set_PMIO
else;	VT686				;R52A - ends
		mov	si,offset Evt_INTR_Item
		call	Getitem_Value
		mov	bl,10000000b			; set primary activity
		test	al,1	    
		jz	short @F    
		mov	bl,10000010b			
@@:				    
		mov	al,bl	    
		mov	PM_RAM:[VT586PM_I34h_Value],al	;default
		mov	cl, 34h
		call	Set_PMIO
	
		mov	si,offset Evt_HDD_Item
		call	GetItem_Value
		shl	al,3
		or	PM_RAM:[VT586PM_I34h_Value],al

		mov	si,offset Evt_DMA_Item
		call	GetItem_Value
		or	PM_RAM:[VT586PM_I34h_Value],al

;R52A		mov	si,offset Evt_INTR_Item
;R52A		call	GetItem_Value
;R52A		shl	al,1
;R52A		or	PM_RAM:[VT586PM_I34h_Value],al


		mov	si,offset Evt_LPT_COM_Item
		call	GetItem_Value
		shl	al,5
		or	PM_RAM:[VT586PM_I34h_Value],al

		mov	si,offset M_Evt_VGA_Item
		call	GetItem_Value
;R52Aifndef	VT686			;R52
		shl	al,4
		or	PM_RAM:[VT586PM_I34h_Value],al
;R52A;R52 - starts	
;R52Aelse;	VT686
;R52A		mov	cl, 35h
;R52A		call	E000_Set_PMIO
;R52Aendif;	VT686
;R52A;R52 - ends
endif;	VT686				;R52A

		mov	cl, 38h
		mov	al, 01h
		call	Set_PMIO

ifdef	Have_Fan_Control_Item_In_GPO_Low
	Have_Fan_Control_Item_In_GPO 	EQU	1
endif;	Have_Fan_Control_Item_In_GPO_Low
ifdef	Have_Fan_Control_Item_In_GPO_High
	Have_Fan_Control_Item_In_GPO 	EQU	1
endif;	Have_Fan_Control_Item_In_GPO_High

ifdef   Have_Fan_Control_Item_In_GPO
		extrn	Fan_Control_Item:near
		mov	si, offset DGROUP:Fan_Control_Item 
		call	GetItem_Value	       ;save suspend--> fan
		shl	al,7			       ;stop ?
 		or	PM_RAM:[Video_Off_Mode],al
endif;  Have_Fan_Control_Item_In_GPO

ifdef ACPI_SUPPORT			;
		mov	cl, 2ah		; Enable Software SMI
		mov	bl, 40h		;
		call	Get_Set_PMIO_OR	;
endif ;ACPI_SUPPORT			;

		push	ds			     
		mov	ax,G_RAM		     
		mov	ds,ax			     
		assume	ds:G_RAM		     
		mov	bl,byte ptr ds:[hardware]    
		pop	ds			     
		mov	byte ptr PM_RAM:[PS2_INST],bl
		pop	ds
		popa
endif;	Move_F000_PMU_INIT_To_E000				

		ret
Ct_PM_Init	Endp

ifndef	Move_F000_PMU_INIT_To_E000				
;R62 start
;==================================================[]
;Input: SI = item offset
;	DI = timer setting offset in PM_RAM
;==================================================[]
Timer_Transfer	proc	near
		call	GetItem_Value		;get setup setting
		xor	ah,ah
		shl	ax,1	
		mov	bx,offset Timer_Value	;value table
		add	bx,ax			;translate
		mov	ax,cs:[bx]		;into reg. value	
		mov	es:[di],ax		;save value in PM_RAM	
		ret
Timer_Transfer	ENDP

IRQ_Evnt_TBL:
		dw	offset IRQ3_Event_Item

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -