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

📄 usbdval.asm

📁 dos下的USB源码(包括UHCI
💻 ASM
字号:
	TITLE	USBDVAL.ASM -- USB Data Area Size Validater Utility

;***************************************************************************;
;***************************************************************************;
;**                                                                       **;
;**           (C)Copyright 1985-2003, American Megatrends, Inc.           **;
;**                                                                       **;
;**                          All Rights Reserved.                         **;
;**                                                                       **;
;**                6145-F Northbelt Pkwy, Norcross, GA 30071              **;
;**                                                                       **;
;**                          Phone (770)-246-8600                         **;
;**                                                                       **;
;***************************************************************************;
;***************************************************************************;
;***************************************************************************;
; $Header: /BIOS/Corebin/800/Modules/USB2/Template/Core/USBDVAL.ASM 2     3/17/03 5:46p Sivagarn $
;
; $Revision: 2 $
;
; $Date: 3/17/03 5:46p $
;***************************************************************************;
; Revision History
; ----------------
; $Log: /BIOS/Corebin/800/Modules/USB2/Template/Core/USBDVAL.ASM $
; 
; 2     3/17/03 5:46p Sivagarn
; Fixed the build error when KBC_EMULATION token is enabled
; 
; 1     1/27/03 8:43p Sivagarn
;  - This file is used to built a DOS utility which is invoked during the
; BIOS build process to check the validity of USB parameters
; 
;***************************************************************************;
.MODEL TINY
; The purpose of this file is to validate the USB data area size during
; the BIOS build process. In case of error the utility will provide proper
; data area size suggestions.

;----------------------------------------------------------------------------
; 		Global options are defined here
;----------------------------------------------------------------------------
OPTION	PROC:PRIVATE
.586
;----------------------------------------------------------------------------

;----------------------------------------------------------------------------
;		Macro and equate files are included here
;----------------------------------------------------------------------------
;	INCLUDE equates.equ
	INCLUDE	usbflag.equ
	INCLUDE	usb.equ
;	INCLUDE	mbiosequ.equ
;	INCLUDE	int13pnp.equ
;----------------------------------------------------------------------------
USB_Header_count	equ	8
MKF_USB_MODE	=	2
TRUE				EQU	0FFh
FALSE				EQU	00
USB_MEM_BLK_SIZE		EQU	32	; 32 bytes
USB_MEM_BLK_SIZE_SHIFT		EQU	5	; log2 (USB_MEM_BLK_SIZE)
MKF_EHCI_64BIT_DATA_STRUCTURE EQU	1  
BIT16				equ	10000h
MKF_USB_DEV_MASS  EQU	1
MKF_USB_DEV_HUB  EQU	1

MKF_MAX_MASS_DEVICES	=	6
MKF_USB_DATA_AREA_SIZE	=	16

MKF_USB_DATA_SEGMENT	EQU	0EC00h

MKF_USB_MAX_HC		EQU	(0 + 2 + 0)

;----------------------------------------------------------------------------
;		 USB data size equates
;----------------------------------------------------------------------------
UHCI_DATA_AREA_SIZE		EQU	01000h
OHCI_DATA_AREA_SIZE		EQU	0100h
EHCI_DATA_AREA_SIZE		EQU	01000h
TOTAL_UHCI_DATA_AREA_SIZE	EQU	(UHCI_DATA_AREA_SIZE * MKF_USB_UHCI)
TOTAL_OHCI_DATA_AREA_SIZE	EQU	(OHCI_DATA_AREA_SIZE * MKF_USB_OHCI)
TOTAL_EHCI_DATA_AREA_SIZE	EQU	(EHCI_DATA_AREA_SIZE * MKF_USB_EHCI)
TOTAL_HC_DATA_AREA_SIZE		EQU	(TOTAL_UHCI_DATA_AREA_SIZE + \
					 TOTAL_OHCI_DATA_AREA_SIZE + \
					 TOTAL_EHCI_DATA_AREA_SIZE)
USB_HC_DATA_AREA_SIZE_PARA	EQU	(TOTAL_HC_DATA_AREA_SIZE SHR 4)

; Find extended memory size for the HC data area in 1KB chunks
USB_HC_EXT_MEM_SIZE		EQU	(TOTAL_HC_DATA_AREA_SIZE SHR 10)
USB_GLOBAL_DATA_SIZE		EQU	((16 * 1024) - TOTAL_HC_DATA_AREA_SIZE)
MKF_USB_UHCI	=	0
MKF_USB_OHCI	=	2
MKF_USB_EHCI	=	0
MKF_HID_DEVICE_LIMIT	=	4
MKF_HUB_DEVICE_LIMIT	=	4
MKF_DISPLAY_DEV_DISABLE_ERROR	=	0
.CODE

			WORD	512 DUP (0)
StackPtr		LABEL	WORD

APPROX_GLOBAL_DATA_SIZE_IN_KBS			EQU	10


ERROR_NOT_ENOUGH_MEM_FOR_HC			EQU	01h

CrgRet			BYTE	0Dh, 0Ah, '$'
DelimiterMsg		BYTE	'*****************************************************', 0Dh, 0Ah,'$'
SignOnMsg		BYTE	'AMI USB eModule Data Area Validater Ver 1.00', 0dh, 0ah
			BYTE	'(c)Copyright American Megatrends Inc. 1985 - 2006', 0dh, 0ah, '$'

NumUHCIHCMsg		BYTE	'Number of UHCI Controllers Specified : $'
NumOHCIHCMsg		BYTE	'Number of OHCI Controllers Specified : $'
NumEHCIHCMsg		BYTE	'Number of EHCI Controllers Specified : $'
TotalHCDataSizeMsg	BYTE	'Total Data area needed for HC''s      : $'
GlobalDataSizeMsg	BYTE	'Global data area needed              : $'
DataSizeProvidedMsg	BYTE	'Data area size specified             : $'
MemBlockAvailMsg	BYTE	'Number of memory blocks available    : $'


ErrorMsg		BYTE	'Fatal Error! $'
KiloBytesMsg		BYTE	' KB$'


bErrorCode		BYTE	0
wMemoryNeededinKBs	WORD	0

pErrorMessageFuncTable		LABEL	WORD
	WORD	OFFSET NotEnoughMemForHCFunc
pErrorMessageFuncTableEnd	LABEL	WORD


PrintMesg	PROC	NEAR C USES AX DX, pMsgPtr:NEAR
	mov	dx, pMsgPtr
	mov	ah, 9h
	int	21h
	ret
PrintMesg	ENDP


CarriageReturn	PROC	NEAR C USES AX DX
	INVOKE	PrintMesg, OFFSET CrgRet
	ret
CarriageReturn	ENDP


PrintDecimalDword	PROC	NEAR C USES ECX EDX, dData:DWORD

	mov	eax, dData
	xor	edx, edx
	mov	ecx, 10			; convert to decimal
	div	ecx			; divide by 10
	or	eax, eax		; continue untill quotent = 0
	jz	de_00
	INVOKE	PrintDecimalDword, EAX	; Recursion
de_00:
;;	mov	al, dl			; (dl) = (0....9)
	add	dl, 30h			; convert to ASCII
	mov	ah, 02h
	int	21h

	ret
PrintDecimalDword	ENDP

PrintDecimalWord	PROC	NEAR C USES EAX, wData:WORD
	movzx	eax, wData
	INVOKE	PrintDecimalDword, EAX
	ret
PrintDecimalWord	ENDP


DisplayParameters	PROC	NEAR C 

; Display number of UHCI controllers
	INVOKE	PrintMesg, OFFSET NumUHCIHCMsg
	INVOKE	PrintDecimalWord, MKF_USB_UHCI
	INVOKE	CarriageReturn

; Display number of OHCI controllers
	INVOKE	PrintMesg, OFFSET NumOHCIHCMsg
	INVOKE	PrintDecimalWord, MKF_USB_OHCI
	INVOKE	CarriageReturn

; Display number of EHCI controllers
	INVOKE	PrintMesg, OFFSET NumEHCIHCMsg
	INVOKE	PrintDecimalWord, MKF_USB_EHCI
	INVOKE	CarriageReturn

; Total data size needed for HC
	INVOKE	PrintMesg, OFFSET TotalHCDataSizeMsg
	INVOKE	PrintDecimalDword, ((TOTAL_HC_DATA_AREA_SIZE + 1023) SHR 10)
	INVOKE	PrintMesg, OFFSET KiloBytesMsg
	INVOKE	CarriageReturn

; Global data size needed
	INVOKE	PrintMesg, OFFSET GlobalDataSizeMsg
	INVOKE	PrintDecimalWord, APPROX_GLOBAL_DATA_SIZE_IN_KBS
	INVOKE	PrintMesg, OFFSET KiloBytesMsg
	INVOKE	CarriageReturn

; Data area size provided
	INVOKE	PrintMesg, OFFSET DataSizeProvidedMsg
	INVOKE	PrintDecimalWord, MKF_USB_DATA_AREA_SIZE
	INVOKE	PrintMesg, OFFSET KiloBytesMsg
	INVOKE	CarriageReturn
	
	ret
DisplayParameters	ENDP


WarningDelay		PROC NEAR C
	INVOKE	PrintMesg, OFFSET DelimiterMsg
	push	cx
	mov	cx, 02FFh
wdLoop:
	push	ax
	push	bx
	push	cx
	push	dx
	push	si
	push	di

	push	cx
	mov	cx, 0FFFFh
wdLoop1:
	pusha
	popa
	loop	wdLoop1
	pop	cx


	pop	di
	pop	si
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	loop	wdLoop

	pop	cx
	ret
WarningDelay		ENDP

KBCEmulationWarningMsg		BYTE	'Warning! KBC emulation will be enabled only for UHCI controllers.', 0Dh, 0Ah, '$'
MassDevCountWarningMsg		BYTE	'Warning! Only 6 emulation question for USB mass devices are added in', 0Dh, 0Ah
				BYTE	'USBSB.ASM and USB.SSP files. Please verify these files before making', 0dh, 0ah
				BYTE    'any change to the MAX_MASS_DEVICES token.', 0Dh, 0Ah, '$'
MassDevCountWarningMsg1		BYTE	'Warning! Only $'
MassDevCountWarningMsg2		BYTE	' USB mass devices will be installed.', 0Dh, 0Ah, '$'
ExtMemAllocWarningMsg		BYTE	'Warning! Extended memory allocation support is available from AMIBIOS8 core', 0Dh, 0Ah
				BYTE	'version 8.00.09.  Please check the core support before enabling the extended', 0Dh, 0Ah
				BYTE	'memory flag (ENABLE_EXT_MEMORY_DATA_AREA).', 0Dh, 0Ah, '$'

ValidateSDLTokens	PROC NEAR C
IFDEF	MKF_USB_KBC_EMULATION
IF	MKF_USB_KBC_EMULATION

; Validate USB_KBC_EMULATION option
; If other than UHCI HC are enabled give warning
	mov	al, MKF_USB_UHCI
	or	al, al
	jz	vst_CheckNext

	mov	al, MKF_USB_OHCI
	or	al, al
	jnz	vst_DisplayWarning

	mov	al, MKF_USB_EHCI
	or	al, al
	jz	vst_CheckNext

vst_DisplayWarning:
; UHCI and other HCs are enabled. Display warning!
	INVOKE	PrintMesg, OFFSET DelimiterMsg
	INVOKE	PrintMesg, OFFSET KBCEmulationWarningMsg
	INVOKE	WarningDelay
vst_CheckNext:
ENDIF
ENDIF

; Validate mass device count
IF	MKF_USB_DEV_MASS
	mov	al, MKF_MAX_MASS_DEVICES

; Check for more than 6 entries
	cmp	al, 6
	jbe	vst_CheckNext1

; Display warning
	INVOKE	PrintMesg, OFFSET DelimiterMsg
	INVOKE	PrintMesg, OFFSET MassDevCountWarningMsg
	INVOKE	WarningDelay

vst_CheckNext1:
	cmp	al, USB_Header_Count
	jbe	vst_CheckNext2

; Display warning
	INVOKE	PrintMesg, OFFSET DelimiterMsg
	INVOKE	PrintMesg, OFFSET MassDevCountWarningMsg1
	INVOKE	PrintDecimalWord, USB_Header_Count
	INVOKE	PrintMesg, OFFSET MassDevCountWarningMsg2
	INVOKE	WarningDelay
vst_CheckNext2:

ENDIF

; Validate core version related compatibilities

; Check for extended memory allocation support in core
IFDEF	MKF_ENABLE_EXT_MEMORY_DATA_AREA
IF	MKF_ENABLE_EXT_MEMORY_DATA_AREA
	mov	al, MKF_CORE8_ID
	cmp	al, 9
	jae	vst_ExtMemAllocSupported

; Display warning
	INVOKE	PrintMesg, OFFSET DelimiterMsg
	INVOKE	PrintMesg, OFFSET ExtMemAllocWarningMsg
	INVOKE	WarningDelay
vst_ExtMemAllocSupported:
ENDIF
ENDIF

	ret
ValidateSDLTokens	ENDP

StartHere:
	push	cs
	pop	ds

; Setup stack
	push	cs
	pop	ss
	mov	sp, OFFSET StackPtr

; Display sign on message
	INVOKE	CarriageReturn
	INVOKE	PrintMesg, OFFSET DelimiterMsg
	INVOKE	PrintMesg, OFFSET SignOnMsg
	INVOKE	CarriageReturn

; Display the parameters
;;	INVOKE	DisplayParameters

; Validating tokens
	INVOKE	ValidateSDLTokens

; Number of memory blocks available
	INVOKE	PrintMesg, OFFSET MemBlockAvailMsg
	INVOKE	PrintDecimalWord, USB_MEM_NUMBER_OF_BLK
	INVOKE	CarriageReturn
	
; Assume data area is not sufficient for host controllers
	mov	bErrorCode, ERROR_NOT_ENOUGH_MEM_FOR_HC
; Validate data area needed for host controllers
	mov	eax, MKF_USB_DATA_AREA_SIZE
	shl	eax, 10		; Multiply by 1K
	cmp	eax, TOTAL_HC_DATA_AREA_SIZE
	jbe	DispErrorAndExit

; No error found. Reset the error code.
	mov	bErrorCode, 0
	jmp	SHORT LeaveRoutine

DispErrorAndExit:

; Display fatal error message
	INVOKE	CarriageReturn
	INVOKE	PrintMesg, OFFSET ErrorMsg

	mov	bx, OFFSET pErrorMessageFuncTable
	movzx	ax, bErrorCode
	dec	ax
	shl	ax, 1
	call	WORD PTR [bx]

LeaveRoutine:
; Return error code
	mov	al, bErrorCode

; Exit
	INVOKE	CarriageReturn
	INVOKE	CarriageReturn
	mov	ah, 04Ch
	int	21h

ErrorBell	PROC	NEAR C
	mov	dl, 7
	mov	ah, 2
	int	21h
	ret
ErrorBell	ENDP


NotEnoughMemForHCMsg	BYTE	'Host controllers alone need $'
NotEnoughMemForHCMsg1	BYTE	'K of memory.', 0Dh, 0Ah
			BYTE	'Total memory needed for proper USB operation is $'
NotEnoughMemForHCMsg2	BYTE	'K.', 0Dh, 0Ah
			BYTE	'Increase the amount of memory or reduce number of host controllers.$'

NotEnoughMemForHCFunc		PROC	NEAR SYSCALL

	push	bx

; Print message 1
	INVOKE	PrintMesg, OFFSET NotEnoughMemForHCMsg
	mov	bx, ((TOTAL_HC_DATA_AREA_SIZE + 1023) SHR 10)
	INVOKE	PrintDecimalWord, bx
	INVOKE	PrintMesg, OFFSET NotEnoughMemForHCMsg1
	add	bx, APPROX_GLOBAL_DATA_SIZE_IN_KBS
	INVOKE	PrintDecimalWord, bx
	INVOKE	PrintMesg, OFFSET NotEnoughMemForHCMsg2
	INVOKE	CarriageReturn

	pop	bx
	ret
NotEnoughMemForHCFunc		ENDP

	END StartHere

;***************************************************************************;
;***************************************************************************;
;**                                                                       **;
;**           (C)Copyright 1985-2003, American Megatrends, Inc.           **;
;**                                                                       **;
;**                          All Rights Reserved.                         **;
;**                                                                       **;
;**                6145-F Northbelt Pkwy, Norcross, GA 30071              **;
;**                                                                       **;
;**                          Phone (770)-246-8600                         **;
;**                                                                       **;
;***************************************************************************;
;***************************************************************************;

⌨️ 快捷键说明

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