📄 userfunc.asm
字号:
;**************************************************************************
;*
;* USERFUNC.ASM
;*
;* Copyright (c) 1999-2001 National Semiconductor Corporation.
;* All Rights Reserved.
;*
;* Function:
;* User-accessible functions.
;*
;* $Revision:: 3 $
;*
;**************************************************************************
;.MODEL TINY
.386
INCLUDE DEF.INC
INCLUDE MACROS.INC
INCLUDE PORT80.INC
INCLUDE OPTIONS.INC
INCLUDE MPC.INC
INCLUDE 5530.INC
_TEXT SEGMENT PUBLIC use16 'CODE'
EXTERN CpuRegWrite:NEAR
EXTERN CpuRegRead:NEAR
EXTERN CpuMemRegRead:NEAR
EXTERN CpuMemRegWrite:NEAR
EXTERN Cy55x0RegRead32:NEAR
EXTERN Cy55x0RegWrite32:NEAR
EXTERN cy55x0RegRead8:NEAR
EXTERN cy55x0RegWrite8:NEAR
;**************************************************************************
;*
;* UserPreInit
;*
;* Called early in POST (see XPRESS.ASM)
;*
;* Entry:
;* BX = return address
;*
;* Exit:
;* No requirements
;*
;* Destroys:
;*
;**************************************************************************
UserPreInit PROC NEAR PUBLIC
jmp bx
UserPreInit ENDP
;**************************************************************************
;*
;* UserRomInit
;*
;* Called in POST just before optionRomInit (see XPRESS.ASM)
;* Called to perform any platform specific actions required to access
;* option ROMs via various interfaces
;*
;* Entry:
;* No requirements
;*
;* Exit:
;* No requirements
;*
;* Destroys:
;*
;**************************************************************************
UserRomInit PROC NEAR PUBLIC
ret
UserRomInit ENDP
;**************************************************************************
;*
;* UserPostInit
;*
;* Called late in POST (see XPRESS.ASM)
;*
;* Entry:
;* No requirements
;*
;* Exit:
;* No requirements
;*
;* Destroys:
;*
;**************************************************************************
UserPostInit PROC NEAR PUBLIC
ret
UserPostInit ENDP
;**************************************************************************
;*
;* UserCpuInitBX
;*
;* Called just after the cpu init - used to change the default init
;*
;* Entry:
;* BX = Return address
;*
;* Exit:
;* No requirements
;*
;* Destroys: AL,EBX, CX, DL, SI
;*
;**************************************************************************
User_Cpu_TABLE:
;db register, and, or
User_CPU_NUM_VALS EQU (($-User_Cpu_TABLE) /3 )
UserCpuInitBX PROC NEAR PUBLIC
; shl ebx,16
;
; mov cx, User_CPU_NUM_VALS
; lea si, User_Cpu_TABLE
;regLoop:
; mov al, cs:[si] ;get register to read
; NOSTACK bx, CpuRegRead ;read register
; mov dl, al
; mov al, cs:[si] ;get register again
; inc si
; and dl, cs:[si] ;get value to and
; inc si
; or dl, cs:[si] ;get value to or
; inc si
; NOSTACK bx, CpuRegWrite ;write register
; loop regLoop
;
; shr ebx, 16
jmp bx
UserCpuInitBX ENDP
;**************************************************************************
;*
;* UserChipsetInit
;*
;* Called just after the cpu init - used to change the default init
;*
;* Entry:
;* No requirements
;*
;* Exit:
;* No requirements
;*
;* Destroys:
;*
;**************************************************************************
USER_5530_TABLE:
;db func, reg, and, or
;sample for centaurus platform
; db FUNC0, Cx5530_REG43,000h,047h
; db FUNC0, Cx5530_REG5A,000h,043h
; db FUNC0, Cx5530_REG5C,000h,0BAh
; db FUNC0, Cx5530_REG5D,000h,09Bh
; db FUNC0, Cx5530_REG92,000h,01bh ; gpio0
;
db 0ffh, 0ffh, 0ffh, 0ffh ;end of table
UserChipsetInit PROC NEAR PUBLIC
pushad
IF (SC_CHIP)
INCLUDE NSSIO.INC
;
; ACPI Wake-Ups
;
; Check the sleep state
mov dx, GEODE_ACPI_BASE+ACPI_PM1A_CNT
in ax, dx
cmp ax, 0FFFFh ; ACPI module disabled?
je no_acpi_wakeup
and ax, SLP_TYPx_MASK
cmp ax, SLP_TYP3 ; > S3
jb no_acpi_wakeup
mov dx, GEODE_ACPI_BASE+ACPI_PM1A_STS
in ax, dx
and ax, WAK_STS ; Check Wake_STA bit
jz no_acpi_wakeup ; If not set do nothing
; Temporary no support for SCxxxx ACPI wake-up events,
; Ignore all wake-ups, and procedure as in cold reset
jmp no_acpi_wakeup
;------------------------------------------
; Put here the code for ACPI wake-up events
;------------------------------------------
no_acpi_wakeup:
; Disable ACPI wakeup events
mov dx, NSSIO_WAKEUP_BASE + NSSIO_WAKEUP_WKCR
mov ax, 0
out dx, al
; Clear GPE events
mov dx, GEODE_ACPI_BASE+ACPI_GPE0_STS
mov ax, GPE0_STS_ALL
out dx, ax
; Clear PM1A events
mov dx, GEODE_ACPI_BASE+ACPI_PM1A_STS
mov ax, PM1A_STS_ALL
out dx, ax
; Enable ACPI and goto S0 (Full on)
mov dx, GEODE_ACPI_BASE+ACPI_PM1A_CNT
in ax, dx
and ax, 0C002h
or ax, SLP_EN OR SLP_TYP0
out dx, ax ; Goto S0
; Clear PME/SMI Status Register
mov dx, GEODE_SMI_BASE+022h ;second level ACPI PME/SMI Status Register
in ax, dx ;read to clear
ENDIF
; Load in the above USER_5530_TABLE
lea si, USER_5530_TABLE
Register_Chipset_loop:
mov eax, CX55x0_ID ; destroyed by regwrite8
mov ah, cs:[si] ; get function
inc si
mov al, cs:[si] ; get reg
inc si
mov bl, cs:[si] ; get and
inc si
mov bh, cs:[si] ; get or value
inc si
cmp ax, 0FFFFh
jne ValidReg
cmp bx, 0FFFFh
jne ValidReg
jmp RegDone ; end of table
ValidReg:
push eax ;destroyed by RegRead8
push bx
NOSTACK bx, cy55x0RegRead8 ; read it
pop bx
pop eax
and dl,bl ; and value
or dl,bh ; or value
NOSTACK bx, cy55x0RegWrite8 ; write it
jmp Register_Chipset_loop ; go do next one
RegDone:
popad
ret
UserChipsetInit ENDP
_TEXT ENDS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -