📄 pcipost.asm
字号:
DEFINE_STACK RESERVE_PCIIRQ , 1
DEFINE_STACK PCI_IRQ_ASSIGNED , 2
DEFINE_STACK PCI_IRQ_MAP , 2
DEFINE_STACK PCIIRQ , 32 ;need 16*2 bytes
;PCI available IRQ no. 1,2,4,4
;low byte = IRQ No. 0-15
;high byte = INT No. 1-16
DEFINE_STACK PCI_IDE_EXIST , 1
DEFINE_STACK PCI_IDE_FOUND , 1
IDE_EXIST EQU 0AAH ;flag for PCI/IDE found
DEFINE_STACK ESCD_IRQ , 2
DEFINE_STACK ESCD_DMA , 1
DEFINE_STACK BP_FIXED_IRQ_MAP , 2 ;R111
;[]================================================================[]
;[]================================================================[]
MAX_SUB_BUS EQU 16
BUS_TREE_STRUC STRUC
Host_Slot db ?
P2PB_BusNo db ?
P2PB_DevFucNo db ?
Sub_Buses db MAX_SUB_BUS dup (?)
TotalMemReq dd ?
TotalPfMemReq dd ?
TotalIOReq dd ?
TotalLMemReq dd ?
Bus_IO_Start dd ?
Bus_Mem_Start dd ?
Bus_PfMem_Start dd ?
BUS_TREE_STRUC ENDS
SIZE_BUS_TREE_STRUC EQU (SIZE BUS_TREE_STRUC)
VGA_INFO_STRUC STRUC
VGA_DevNum db ?
VGA_BusNum db ?
OnboardVGA db ?
db ? ;dummy byte
VGA_ID dd ?
VGA_INFO_STRUC ENDS
SIZE_VGA_INFO_STRUC EQU (SIZE VGA_INFO_STRUC)
IRQ_REQ_STRUC STRUC
;R111 - starts
FixedIRQ db ?
db ? ;dummy byte
db ? ;dummy byte
db ? ;dummy byte
;R111 - ends
IntPin db ?
IrqReqDevNum db ?
IrqReqBusNum db ?
HostSlot db ?
;R111 dd ? ;dummy dword
IRQ_REQ_STRUC ENDS
SIZE_IRQ_REQ_STRUC EQU (SIZE IRQ_REQ_STRUC)
TEMP_PCI_REQ_BUF SEGMENT USE16 AT 5000h
P2P_TREE_INFO Label Byte
db (MAX_SUB_BUS * SIZE_BUS_TREE_STRUC) dup (?)
PCI_VGA_DEVICE_BUF Label Byte
db 16*SIZE_VGA_INFO_STRUC dup (?)
TEMP_BASE_REQ_BUF Label Byte
TEMP_PCI_REQ_BUF ENDS
MEMIO_BUF STRUC
MemIO_Req dd 0
Cfg_Loc dw 0
MemIo_Info db 0
Bus_Num db 0
MEMIO_BUF ENDS
SIZE_MEMIO_BUF EQU SIZE MEMIO_BUF
PCI_REQ_BUF SEGMENT USE16 AT 4000h
BUF_SIZE EQU 6*8*32 ;max 32 devices
;each device has max 8 functions
;each function request max 6 Mem base
IO_BUF db (BUF_SIZE * SIZE_MEMIO_BUF) dup (?)
HMEM_BUF db (BUF_SIZE * SIZE_MEMIO_BUF) dup (?)
LMEM_BUF db (BUF_SIZE * SIZE_MEMIO_BUF) dup (?)
PREFET_MEM_BUF db (BUF_SIZE * SIZE_MEMIO_BUF) dup (?)
PCI_REQ_BUF ENDS
VIRTUAL_HMEM_BASE EQU 0A0h
VIRTUAL_PFMEM_BASE EQU 0A8h
VIRTUAL_BUS0_PFMEM_BASE EQU 0B0h
VIRTUAL_IO_BASE EQU 0A1h
G_RAM SEGMENT USE16 AT 0
ORG 04H*4
INCLUDE SEG_0.INC
ORG 400H
INCLUDE G_RAM.INC
ifdef PNP_BIOS
ORG 2000h
INCLUDE PNPDATA.INC
endif ;PNP_BIOS
G_RAM ENDS
extrn xcall_proc:near
extrn X_GetItem_Value:Near
.LIST
IFE COMPILE_FOR_E0 EQ 1
ifdef PCI_BUS
ifdef PNP_BIOS
extrn Build_OnboardRomNode:near
ifdef COMBINE_ISA_ROM
extrn Build_OtherRomNode:near
endif; COMBINE_ISA_ROM
;R110 ifndef NEW_PNP_SETUP
;R110 ifdef PNP_PCI_AUTO
;R110 extrn PnP_Auto_Item:near
;R110 endif ;PNP_PCI_AUTO
;R110 endif ;NEW_PNP_SETUP
endif; PNP_BIOS
ifdef Cardbus_support
extrn Cardbus_Init:near
endif ;Cardbus_support
IF SET_MPIRQ_TBL
extrn IO_Int_Entry16:near
ENDIF ;SET_MPIRQ_TBL
extrn Pci_Class_Code:near
IF BIOS_SUPPORT_586 ;R99
extrn Check_M1_Cpu:near
ENDIF ;BIOS_SUPPORT_586 ;R99
extrn Unlock_Cyrix:near
extrn lock_Cyrix:near
extrn F000_Set_Cyrix:near
extrn F000_call_proc:near
extrn Post_call_proc:near
extrn POST_func_end:Near
extrn POST_VECT:Near
extrn Vga_Snoop_Item:near
extrn Ct_OnChip_IDE_Chk:near
ifdef ONBOARD_NCR_SETUPABLE
extrn Scsi_Item:near
endif ;ONBOARD_NCR_SETUPABLE
extrn AGet_CfgSpace_Byte:near
extrn AGet_CfgSpace_Word:near
extrn AGet_CfgSpace_Dword:near
extrn ASet_CfgSpace_Byte:near
extrn ASet_CfgSpace_Word:near
extrn ASet_CfgSpace_Dword:near
extrn Move_Codes:Near
extrn GetItem_Value:Near
extrn F000_GetItem_Value:near
extrn F000_Shadow_W:near
extrn F000_Shadow_R:near
extrn E000_64k_Shadow_RW:Near
extrn E000_64k_Shadow_R:Near
extrn C000_Shadow_RW:near ;chipset.asm
extrn C000_Shadow_R:near ;chipset.asm
extrn C800_Shadow:near ;chipset.asm
extrn CC00_Shadow:near ;chipset.asm
extrn D000_Shadow:near ;chipset.asm
extrn D400_Shadow:near ;chipset.asm
extrn D800_Shadow:near ;chipset.asm
extrn DC00_Shadow:near ;chipset.asm
extrn PCI_SLOT_CFG:near ;chipset.asm
extrn Ct_Shadow_Unit:Near ;pcichip.asm
extrn Ct_C8_To_DF_RW:Near ;pcichip.asm
extrn Ct_C8_To_DF_R:Near ;pcichip.asm
extrn Ct_PCI_Info:Near ;pcichip.asm
extrn Ct_Special_PCI_Device:Near ;pcichip.asm
extrn Ct_Set_PciIrq:near ;pcichip.asm
extrn IrqRout_Table:near ;pcichip.asm
;R110 ifndef NEW_PNP_SETUP
;R110 extrn PciIrq_Item:near ;pcichip.asm
;R110 endif ;NEW_PNP_SETUP
extrn Ct_Disable_Shadow:Near ;pcichip.asm
;R82 ifdef CT_SHADOW_RW_HOOK_SUPPORT
extrn Ct_Shadow_R:near ;pcichip.asm
extrn Ct_Shadow_RW:near ;pcichip.asm
;R82 endif ;CT_SHADOW_RW_HOOK_SUPPORT
;728 ifndef NO_PCI_IDE_CARD
;728 extrn PCI_IDE_IRQ:near ;pcifeat.asm
;728 extrn First_IDE_INT:near ;pcifeat.asm
;728 extrn Second_IDE_INT:near ;pcifeat.asm
;728 endif ;NO_PCI_IDE_CARD
;728 ifndef NO_PCI_IDE_2ND_CONTROL
;728 extrn Second_IDE_channel:near ;bfeature.asm
;728 endif ;NO_PCI_IDE_2ND_CONTROL
extrn Ct_PCI_VGA_IDSEL:near ;pcichip.asm
ifdef CT_SPEICAL_PCI_VGA
extrn Set_Ct_For_PciVga:near
endif ;CT_SPEICAL_PCI_VGA
extrn Ct_Special_Copy_PCI_VGA:near
ifdef SPECIAL_PCI_IDE_PRG
extrn CT_PRI_PCI_IDE_PRG:near ;pcichip.asm
extrn CT_SEC_PCI_IDE_PRG:near ;pcichip.asm
endif ;SPECIAL_PCI_IDE_PRG
ifndef No_C8_DF_Shadow_Item
extrn C800_Item:near
extrn CC00_Item:near
extrn D000_Item:near
extrn D400_Item:near
extrn D800_Item:near
extrn DC00_Item:near
endif ;No_C8_DF_Shadow_Item
ifdef Combined_Other_PCI_ROM
extrn Ct_If_Combined_ROM_Needed:near
endif ;Combined_Other_PCI_ROM
ifdef MULTI_HOST_BRIDGE
extrn Ct_Set_Mult_PciBus:near
endif ;MULTI_HOST_BRIDGE
extrn GDTR1:fword
extrn code1_dt:near
extrn data1_dt:near
extrn data1_index:abs
extrn fProc_Pci_IO_Mem_Init:far
IF MSIRQROUT_SUPPORT
extrn MsPciIrqTbl:Near
ENDIF ;MSIRQROUT_SUPPORT
extrn PciIrqTbl_Size:Near
extrn IRQ_REQ_BUF:Near
extrn IRQ_REQ_BUF_PTR:Near
extrn fProc_PciRom_Before_Init:Far
extrn POST_decompress:near
extrn A20_On:Near
extrn A20_Off:Near
;R72 extrn fProc_Reserve_Irq_For_PciBootDev:far
ifdef RAID_BOOT_OPTION
extrn RaidBoot_Item:near
endif; RAID_BOOT_OPTION
;R91A ifdef PciLanROM_Control ;R91
;R91A extrn LAN_COMMAND_WORD:word ;R91
;R91A endif ;PciLanROM_Control ;R91
endif ;PCI_BUS
extrn BootEntryTbl:near ;R96
extrn BootEntryEnd:near ;R96
extrn R_Mod_Ck:near
extrn F_C000_Shadow_R:near ;R82
DGROUP GROUP FCODE
FCODE SEGMENT USE16 PARA PUBLIC 'CODE'
ASSUME CS:DGROUP
ifdef PCI_BUS
;[]==============================================================[]
;
;Note : Don't destroy following codes , because it will be executed
; while warm booting
;
;Reset_PciMaster:
; Clear bit 2 (master bit ) of PCI command register
;
;Saves: all
;
;Input : none
;
;Output: None
;
;[]==============================================================[]
public Reset_PciMaster
Reset_PciMaster proc near
ifndef PCI_RESET_SUPPORT
pushad
xor bh, bh ;start from bus 0
Scan_Nxt_BusMs:
xor cx, cx ;start from devic 0 , func. 0
Scan_Nxt_Master:
ifdef Cx5510_PCI_REG
cmp ch, Cx5510_PCI_REG ;if Cyrix Cx5510 chipset
je Next_Dev ;
endif; Cx5510_PCI_REG
xor cl, cl
call AGet_CfgSpace_Word ;get vendor ID
cmp ax, -1 ;legal vendor ?
je Next_Dev
mov cl, 4
call AGet_CfgSpace_Byte ;get command register
and al, NOT 04H ;disable master bit
call ASet_CfgSpace_Byte ;Set command register
mov cl, 0bh
call AGet_CfgSpace_Byte ;get class code
cmp al, 02 ;is PCI LAN ?
jne No_PCI_LAN
mov cl, 04h
xor al, al
call ASet_CfgSpace_Byte ;clear command register.
No_PCI_LAN:
Next_Dev:
call Get_Nxt_Device ;CH return next device to do
jnc Scan_Nxt_Master
inc bh ;next bus
cmp bh, 4 ;total 4 buses
jb Scan_Nxt_BusMs
popad
endif; PCI_RESET_SUPPORT
ret
Reset_PciMaster endp
ifndef PCI_RESET_SUPPORT
;[]================================================================[]
;Get_Next_Device:
; This routine is used to get next device no to treat
;Input : CH - Slot identification Number
;Output : NC : CH - Next Slot ID numbuer
; CF : All slot & function spaces has scanned
;[]================================================================[]
ALIGN 4
Get_Nxt_Device proc near
test ch, 07h ;alread a multi-function space?
jnz @F ;yes, go point to next function
mov cl, 0Eh ;read header type
call AGet_CfgSpace_Byte ;read header type
test al, 80H ;multi-function support?
jnz @F ;yes, multi-function card!
and ch, NOT 111B ;mask function bits ;R57
add ch, 7 ;point to next device!
@@:
add ch, 1 ;point to next function space
jc @F ;already overflow!
ifdef CONFIG_MECHANISM_1
cmp ch, (31 SHL 3) ;exceed maximum device?
else ;CONFIG_MECHANISM_1
cmp ch, (15 SHL 3) ;exceed maximum device?
endif ;CONFIG_MECHANISM_1
ja @F ;yes, tell caller error!
clc ;success return
ret
@@:
stc ;error return
ret
Get_Nxt_Device endp
endif; PCI_RESET_SUPPORT
;[]================================================================[]
;[]================================================================[]
Public fProc_Get_CfgSpace_Byte
fProc_Get_CfgSpace_Byte Proc Far
call Get_CfgSpace_Byte
retf
fProc_Get_CfgSpace_Byte Endp
Get_CfgSpace_Byte Proc Near
push bx
mov bh, CURRENT_BUS_NO[bp]
call AGet_CfgSpace_Byte
pop bx
ret
Get_CfgSpace_Byte Endp
;-----------------------
;-----------------------
Public fProc_Get_CfgSpace_Word
fProc_Get_CfgSpace_Word Proc Far
call Get_CfgSpace_Word
retf
fProc_Get_CfgSpace_Word Endp
Get_CfgSpace_Word Proc Near
push bx
mov bh, CURRENT_BUS_NO[bp]
call AGet_CfgSpace_Word
pop bx
ret
Get_CfgSpace_Word Endp
;-----------------------
;-----------------------
Public fProc_Get_CfgSpace_Dword
fProc_Get_CfgSpace_Dword Proc Far
call Get_CfgSpace_Dword
retf
fProc_Get_CfgSpace_Dword Endp
Get_CfgSpace_Dword Proc Near
push bx
mov bh, CURRENT_BUS_NO[bp]
call AGet_CfgSpace_Dword
pop bx
ret
Get_CfgSpace_Dword Endp
;-----------------------
;-----------------------
Public fProc_Set_CfgSpace_Byte
fProc_Set_CfgSpace_Byte Proc Far
call Set_CfgSpace_Byte
retf
fProc_Set_CfgSpace_Byte Endp
Set_CfgSpace_Byte Proc Near
push bx
mov bh, CURRENT_BUS_NO[bp]
call ASet_CfgSpace_Byte
pop bx
ret
Set_CfgSpace_Byte Endp
;-----------------------
;-----------------------
Public fProc_Set_CfgSpace_Word
fProc_Set_CfgSpace_Word Proc Far
call Set_CfgSpace_Word
retf
fProc_Set_CfgSpace_Word Endp
Set_CfgSpace_Word Proc Near
push bx
mov bh, CURRENT_BUS_NO[bp]
call ASet_CfgSpace_Word
pop bx
ret
Set_CfgSpace_Word Endp
;-----------------------
;-----------------------
Public fProc_Set_CfgSpace_Dword
fProc_Set_CfgSpace_Dword Proc Far
call Set_CfgSpace_Dword
retf
fProc_Set_CfgSpace_Dword Endp
Set_CfgSpace_Dword Proc Near
push bx
mov bh, CURRENT_BUS_NO[bp]
call ASet_CfgSpace_Dword
pop bx
ret
Set_CfgSpace_Dword Endp
;[]================================================================[]
;[]================================================================[]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -