📄 usbdval.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 + -