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

📄 userfunc.asm

📁 X86 GX1 BOOTLOAD代码 ,支持WINCE操作系统!
💻 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 + -