www.pudn.com > hpbios.rar > AOL_INIT.ASM
; []===========================================================[] ; ; NOTICE: THIS PROGRAM BELONGS TO AWARD SOFTWARE INTERNATIONAL(R) ; INC. IT IS CONSIDERED A TRADE SECRET AND IS NOT TO BE ; DIVULGED OR USED BY PARTIES WHO HAVE NOT RECEIVED ; WRITTEN AUTHORIZATION FROM THE OWNER. ; ; []===========================================================[] ; ; PAGE 60,132 ; TITLE POST -- 386 ROM/BIOS POST ;---------------------------------------------------------------------------- ;Rev Date Name Description ;--------------------------------------------------------------------------- ;R00 09/16/99 DNL Initial version for Alert on LAN 2 .386P ;[]-----------------------------------[] ; ; Award Software 386/486 BIOS ; ; Copyright (C) 1996 ; Award Software, Inc. ; All Rights Reserved ;[]-----------------------------------[] .XLIST INCLUDE BIOS.CFG INCLUDE BTROMSEG.EQU INCLUDE COMMON.EQU INCLUDE POST.EQU INCLUDE ATORGS.EQU INCLUDE PORT61.EQU INCLUDE 8042.EQU INCLUDE 8259.EQU INCLUDE COMMON.MAC INCLUDE POST.MAC INCLUDE USERINT.MAC include AOL.EQU ifdef AOL_SUPPORT extrn Issue_System_Reset:near extrn PCI_Procedure:near extrn CT_I2CREADBYTE:near extrn CT_I2CWRITEBYTE:near endif ;AOL_SUPPORT extrn F000_func_end:Near extrn F000_VECT:Near extrn E_F000_Shadow_W:near extrn E_F000_Shadow_R:near .LIST ;Macro for far calling from E-segment and the called routine is in F-segment F000_call MACRO func_addr LOCAL Ret_addr push 0e000h push offset cs:Ret_addr push offset F000_func_end if ((.TYPE func_addr) and 10h) ;func_addr is register? push func_addr ;Yes,direct push else push offset func_addr endif FAR_JMP,0F000H Ret_addr: ENDM ;[]---------------------------[] ; ; Low memory init (1st 64k) ; ;[]---------------------------[] G_RAM SEGMENT USE16 AT 0 ORG 04H*4 INCLUDE SEG_0.INC ORG 400H INCLUDE G_RAM.INC G_RAM ENDS PAGE EGROUP GROUP ECODE DGROUP GROUP FCODE ECODE SEGMENT USE16 PARA PUBLIC 'ECODE' ASSUME CS:EGROUP,DS:G_RAM,ES:EGROUP ifdef AOL_SUPPORT ;[]==================================================================[] ; ; Procedure Name: Update_WDMessage ; ; This procedure should be called periodically by the BIOS to ; update the watchdog status word. The watchdog status value ; will be sent if watchdog (TCO) timer expires before the next ; update or reload of the timer. Although the OEM may wish to ; specify custom watchdog byte combinations, the Alert on ; LAN BIOS software reserves the many combinations (see ; Alert on LAN documentation). ; ; The low order byte of the Watchdog Message Word is used in ; the Cape Lookout Watchdog Information Byte 1. ; The high order byte of the Watchdog Message Word is used in ; the Cape Lookout Watchdog Information Byte 2. ; ; Input: BX = watchdog message word ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Update_WDMessage Update_WDMessage Proc Near Call AOL_GetConfigInfo test al,80h jz short @F ; Convert the index from the Configuration Byte into ; a Cape Lookout SMBus address Call Get_AOL_Add mov cl,WATCHDOG_INFO_BYTE1_REG mov al, bl Call Ct_I2CWriteByte mov cl,WATCHDOG_INFO_BYTE2_REG mov al, bh Call Ct_I2CWriteByte Call Start_WDTimer @@: ret Update_WDMessage ENDP ;[]==================================================================[] ; ; Procedure Name: Start_WDTimer ; ; This procedure should be called periodically by the BIOS to ; update the watchdog status word. The watchdog status value ; will be sent if watchdog (TCO) timer expires before the next ; update or reload of the timer. Although the OEM may wish to ; specify custom watchdog byte combinations, the Alert on ; LAN BIOS software reserves the many combinations (see ; Alert on LAN documentation). ; ; The Cape Lookout implementation of CL_StartWDTimer performs ; a stop and restart to the Watchdog Timer using the Cape ; Watchdog Timer Register (0x08). ; ; The watchdog timer is stopped by writing any value with the ; enable bit cleared (bit zero) to the watchtimer register. ; After stopping watchdog timer, the watchdog timer register ; contains the watchdog timer count. The timer is then ; restarted with the default value. ; ; Input: None ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Start_WDTimer Start_WDTimer Proc Near Call AOL_GetConfigInfo test al,80h jz short @F Call Get_AOL_Add mov cl,WATCHDOG_TIMER_REG mov al,01Eh Call Ct_I2CWriteByte Call Get_AOL_Add mov cl,WATCHDOG_TIMER_REG mov al,01Fh Call Ct_I2CWriteByte @@: mov ax,0Fh * 43 ret Start_WDTimer ENDP ;[]==================================================================[] ; ; Procedure Name: Stop_WDTimer ; ; This function allows the BIOS to stop the watchdog timer ; during the operations. The BIOS may require this function ; since some POST functions such as ROM scan may be expected ; to execute for an indeterminate period of time without the ; ability to call the AOL code to service the watchdog. ; ; Prevent Alert on LAN Hardware from sending a watchdog packet. ; Also, if possible stop the watchdog timer and prevent the ; watchdog status bit from indicating a watchdog event has ; occurred. ; ; The Cape Lookout implementation of CL_StopWDTimer performs ; a stop of the Watchdog Timer using the Cape Watchdog Timer ; Register (0x08). ; ; The watchdog timer is stopped by writing a zero to the ; watchtimer register. After stopping watchdog timer, the ; watchdog timer register contains the watchdog timer count. ; ; Input: None ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Stop_WDTimer Stop_WDTimer Proc Near Call AOL_GetConfigInfo test al,80h jz short @F Call Get_AOL_Add mov cl,WATCHDOG_TIMER_REG mov al, 01Eh Call Ct_I2CWriteByte @@: ret Stop_WDTimer Endp ;[]==================================================================[] ; ; Procedure Name: AOL_EnterROMScan ; ; This procedure should be called by the BIOS just prior to ; entering the ROM scan. The Alert on Hardware may need to ; be reprogrammed to handle this section of BIOS based on ; hardware limitations and/or interactions. ; ; The Cape Lookout AOL_EnterROMScan() procedure is limited ; to programming of the watchdog timer since no other functions ; of the Cape Lookout device interfere with network functions. ; The watchdog expiration causes a watchdog packet to be sent ; and this packet causes a selective reset of the D101M and ; thus an unacceptable network interaction. ; ; If the input parameter indicates the watchdog should be ; enabled, enable the watchdog timer using Start_WDTimer(). ; ; If the input parameter indicates the watchdog should be ; disabled, stop the watchdog timer using the Stop_WDTimer() ; procedure. ; ; Input: None ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public AOL_EnterROMScan AOL_EnterROMScan Proc Near Call Stop_WDTimer ret AOL_EnterROMScan ENDP ;[]==================================================================[] ; ; Procedure Name: AOL_ExitROMScan ; ; The Cape Lookout AOL_ExitROMScan() procedure is limited to ; programming of the watchdog timer since no other functions ; of the Cape Lookout device interfere with network functions. ; The watchdog expiration causes a watchdog packet to be sent ; and this packet causes a selective reset of the D101M and ; thus an unacceptable network interaction. ; ; If the input parameter indicates the watchdog should be ; enabled, enable the watchdog timer using Start_WDTimer(). ; ; If the input parameter indicates the watchdog should be ; disabled, stop the watchdog timer using the Stop_WDTimer() ; procedure. ; ; Input: None ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public AOL_ExitROMScan AOL_ExitROMScan Proc Near Call Start_WDTimer ret AOL_ExitROMScan ENDP ;[]==================================================================[] ; ; Procedure Name: AOL_BeforeOSBoot ; ; This function should be called by the system BIOS just before ; boot. The Alert on LAN BIOS will configure the Alert on LAN ; hardware and send software messages as required to inform the ; management software of the status of boot. This procedure can ; also program the watchdog timer to determine whether the ; system completes the OS boot. ; ; If the input parameter indicates the watchdog should be ; enabled, enable the watchdog timer using CL_StartWDTimer(). ; ; If the input parameter indicates the watchdog should be ; disabled, stop the watchdog timer using the CL_StopWDTimer() ; procedure. ; ; One feature specific to the Cape Lookout device is the ; General Purpose Receive bits. It is the responsibility of ; the CL_BeforeOSBoot procedure to clear the GP RX bits. ; ; Input: AL = 0 Watchdog Disabled ; 1 Watchdog Enabled ; AH = 0 No errors detected during POST ; 1 Errors detected during POST ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public AOL_BeforeOSBoot AOL_BeforeOSBoot Proc Near Call AOL_GetConfigInfo test al,80h jz short @F ; Clear the General Purpose Receive bits ; Clear all four bits and set no bits in ; the APM Configurastion Register Call Get_AOL_Add mov cl,APM_CONFIGURATION_REG Call Ct_I2CReadByte and al,0Fh Call Ct_I2CWriteByte ; Send Software message indicating OS boot ; with or without POST errors mov bx,SW_SYSTEM_BOOTING_WITH_ERRORS ;;;;;;; cmp PostErrors, TRUE jne short PostErrorsExist mov bx,SW_SYSTEM_BOOTING PostErrorsExist: Call SendSoftware_Message Call Start_WDTimer @@: ret AOL_BeforeOSBoot Endp ;[]==================================================================[] ; ; Procedure Name: Enable_AOL ; ; This routine performs all initialization required after ; returning from a POST task which required the Alert on ; LAN hardware to be disabled. The procedure will enable ; all Alert on LAN hardware to its previous functioning ; state. ; ; The Cape Lookout hardware is globally enabled by setting ; the Global Enable Bit (ENA_ALL) in the Enable Configuration ; Register (0x0D). ; ; Input: none ; ; Output: Al = date value ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Enable_AOL Enable_AOL Proc Near Call AOL_GetConfigInfo test al,80h jz short @F Call Get_AOL_Add mov cl,ENABLE_CONFIGURATION_REG Call Ct_I2CReadByte or al,80h Call Ct_I2CWriteByte @@: ret Enable_AOL Endp ;[]==================================================================[] ; ; Procedure Name: Disable_AOL ; ; This routine performs all initialization required before ; attempting a POST task which requires the Alert on LAN ; hardware to be disabled. ; ; The Cape Lookout hardware is globally disabled by clearing ; the Global Enable Bit (ENA_ALL) in the Enable Configuration ; Register (0x0D). Also disables the Watchdog Timer to ; prevent expiration using the CL_STopWDTimer routine. ; ; Input: None ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Disable_AOL Disable_AOL Proc Near Call AOL_GetConfigInfo test al,80h jz short @F mov bx,SW_HEARTBEAT_STOP Call SendSoftware_Message Call Get_AOL_Add mov cl,ENABLE_CONFIGURATION_REG Call Ct_I2CReadByte and al,not 80h Call Ct_I2CWriteByte @@: ret Disable_AOL Endp Get_AOL_Add: push ax CAll AOL_GetConfigInfo and al,0Fh mov ch,0C4h cmp al,01h je short @F mov ch,0C6h cmp al,02h je short @F mov ch,0CCh cmp al,03h je short @F mov ch,0CEh cmp al,04h je short @F mov ch,00h @@: pop ax ret ;[]==================================================================[] ; ; Procedure Name: SendSoftware_Message ; ; The procedure is used to force a network packet containing the ; software message word to be sent via the Alert on LAN device ; and the network controller. ; ; The low order byte of software message word is used in software ; status byte 1 (0x0E) and the high order byte of the software ; message word is used in software status byte 2 (0x0F). ; ; The procedure uses the Cape Lookout Force Software Event ; (FRC_SWE) to force Cape Lookout to send a network packet. ; ; Input: ax = software message word ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public SendSoftware_Message SendSoftware_Message Proc Near Call AOL_GetConfigInfo test al,80h jz short @F Call Get_AOL_Add mov cl,SOFTWARE_STATUS_BYTE1_REG mov al,bl Call Ct_I2CWriteByte mov cl,SOFTWARE_STATUS_BYTE2_REG mov al,bh Call Ct_I2CWriteByte mov cl,FORCED_ACTIONS_REG mov al,10h Call Ct_I2CWriteByte @@: ret SendSoftware_Message ENDP ;[]==================================================================[] ; ; Procedure Name: Read_AOL_EEPROM ; ; This routine will read a specified byte from the EEPROM. ; ; Input: BL = EEPROM register to read ; ; Output: AL = EEPROM byte register data ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Read_AOL_EEPROM Read_AOL_EEPROM Proc Near ;* Read Control register - Verify that EEC_BUSY and EEC_LOAD ; bits are cleared Call Get_AOL_Add mov cl,EEPROM_CONTROL_REG Call Ct_I2CReadByte and al,90h jnz short @F ;* Write Address register with desired EEPROM address mov cl,EEPROM_ADDR_REG mov al,bl Call Ct_I2CWriteByte ;* Write Control register with Read command mov cl,EEPROM_CONTROL_REG mov al,READ_COMMAND Call Ct_I2CWriteByte ;* Read Control register - Wait for EEC_BUSY to clear Call EEpromWaitForNotBusy ;* Read Data register to get EEPROM data mov cl,EEPROM_DATA_REG Call Ct_I2CReadByte @@: ret Read_AOL_EEPROM Endp ;[]==================================================================[] ; ; Procedure Name: Write_AOL_EEPROM ; ; This routine will write a specified byte to the EEPROM. ; ; Input: BL = EEPROM register to read ; AL = EEPROM byte register data ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public Write_AOL_EEPROM Write_AOL_EEPROM Proc Near ;* Read Control register - Verify that EEC_BUSY and EEC_LOAD ; bits are cleared mov bh,al Call Get_AOL_Add mov cl,EEPROM_CONTROL_REG Call Ct_I2CReadByte and al,90h jnz short @F ;* Write Address register with Write Enable Address mov cl,EEPROM_ADDR_REG mov al,WRITE_ENABLE_ADDRESS Call Ct_I2CWriteByte ;* Write Control register with Write Enable Command mov cl,EEPROM_CONTROL_REG mov al,WRITE_ENABLE_COMMAND Call Ct_I2CWriteByte ;* Read Control register - Wait for EEC_BUSY to clear Call EEpromWaitForNotBusy ;* Write Adress register with desired EEPROM address mov cl,EEPROM_ADDR_REG mov al,bl Call Ct_I2CWriteByte ;* Write Data register wih desired write data mov cl,EEPROM_DATA_REG mov al,bh Call Ct_I2CWriteByte ;* Write Control register with the Write command mov cl,EEPROM_CONTROL_REG mov al,WRITE_COMMAND Call Ct_I2CWriteByte ;* Read Control register - Wait for EEC_BUSY to clear Call EEpromWaitForNotBusy ;* Write Address register with Write Disable Address mov cl,EEPROM_ADDR_REG mov al,WRITE_DISABLE_ADDRESS Call Ct_I2CWriteByte ;* Write Control register with Write Disable Command mov cl,EEPROM_CONTROL_REG mov al,WRITE_DISABLE_COMMAND Call Ct_I2CWriteByte ;* Read Control register - Wait for EEC_BUSY to clear Call EEpromWaitForNotBusy ret Write_AOL_EEPROM Endp ;[]==================================================================[] ; ; Procedure Name: EEpromWaitForNotBusy ; ; This procedure will wait a set maximum time for the EEPROM ; busy bit to clear indicating the last command has successfully ; completed. ; ; This procedure is not designed to be called externally. ; It is used for code support and is intended for use by ; higher level stack-less EEprom routines within this file. ; Input: None ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] EEpromWaitForNotBusy PROC NEar ;* Read Control register - Wait for EEC_BUSY to clear push cx mov cx,100h @@: push cx mov cl,EEPROM_CONTROL_REG Call Ct_I2CReadByte pop cx test al,10h loopnz short @B pop cx ret EEpromWaitForNotBusy ENDP ;[]==================================================================[] ; ; Procedure Name: AOL_SaveConfigInfo ; ; This routine is called by the Alert on LAN BIOS to store one byte of ; configuration information. ; ; Bit 7 Global Enable State ; 1 = Enabled ; 0 = Disabled ; Bit 6 ICH Detected ; 1 = ICH detected ; 0 = ICH not detected ; Bit 5:4 Unused ; Bit 3-0 Encoded address for the Alert on LAN device ; 0000 = No AOL device ; 0001 = 0x1100010b (C4h) ; 0010 = 0x1100011b (C6h) ; 0011 = 0x1100110b (CCh) ; 0100 = 0x1100111b (CEh) ; ; Input: AL = Configuration Information Byte ; ; Output: None ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public AOL_SaveConfigInfo AOL_SaveConfigInfo Proc Near xchg al,ah mov al,AOL_CMOS OR 80h out 70h,al NEWIODELAY xchg al,ah out 71h,al NEWIODELAY ret AOL_SaveConfigInfo Endp ;[]==================================================================[] ; ; Procedure Name: AOL_GetConfigInfo ; ; This routine is called by the Alert on LAN BIOS to get one byte of ; configuration information. ; ; Bit 7 Global Enable State ; 1 = Enabled ; 0 = Disabled ; Bit 6 ICH Detected ; 1 = ICH detected ; 0 = ICH not detected ; Bit 5:4 Unused ; Bit 3-0 Encoded address for the Alert on LAN device ; 0000 = No AOL device ; 0001 = 0x1100010b (C4h) ; 0010 = 0x1100011b (C6h) ; 0011 = 0x1100110b (CCh) ; 0100 = 0x1100111b (CEh) ; ; Input: None ; ; Output: AL = Configuration Information Byte ; ; Name | Date | Description ; ----------------------------------------------------------------- ; DNL | 09/16/99 | Initial version for AOL2 ;[]==================================================================[] Public AOL_GetConfigInfo AOL_GetConfigInfo Proc Near mov al,AOL_CMOS OR 80h out 70h,al NEWIODELAY in al,71h ret AOL_GetConfigInfo Endp endif ;AOL_SUPPORT ECODE ENDS FCODE SEGMENT PARA PUBLIC 'CODE' ASSUME CS:DGROUP FCODE ENDS END