📄 pcifunc2.asm
字号:
;
; PCI functions for IBM-AT or compatible machines with PCI BUS
;
;
; This object for TurboC V2.01 compiler.
;
;use TASM.EXE V2.01 or later
;
; TASM /jSMART /jJUMPS /uM520 /jLOCALS /m8 /t
;
.386p
CGROUP GROUP _TEXT,TEXT
TEXT SEGMENT BYTE PUBLIC 'CODE' USE16
EXTRN C pciGetSts_:NEAR
EXTRN C pciConfigVersion_:NEAR
EXTRN C pciBusVersion_:NEAR
EXTRN C pciMaxBusNo_:NEAR
EXTRN C pciSigPCI_:NEAR
EXTRN C pciFindPciDevice_:NEAR
EXTRN C pciFindPciClass_:NEAR
EXTRN C pciConfigReadByte_:NEAR
EXTRN C pciConfigReadWord_:NEAR
EXTRN C pciConfigReadLong_:NEAR
EXTRN C pciConfigWriteByte_:NEAR
EXTRN C pciConfigWriteWord_:NEAR
EXTRN C pciConfigWriteLong_:NEAR
EXTRN C pciGetIrqRoute_:NEAR
TEXT ENDS
_TEXT SEGMENT BYTE PUBLIC 'CODE' USE16
ASSUME CS:CGROUP,DS:NOTHING,ES:NOTHING
;**************************
; Get PCI BIOS information
;
;unsigned int _pciGetSts(unsigned int *pciVersion,
; unsigned char *pciBusNumber,
; unsigned long *pciSignature)
;
; 入力 [SP-2].W PCI Config Mechanism value store address
; [SP-4].W PCI version value store address
; [SP-6].W number of PCI Bus store address
; [SP-8].W PCI Signature store address
; 出力 AX AX =0:PCI BIOS call successful !=0:PCI BIOS call faller
; 破壊 None
;**************************
_pciGetSts PROC C NEAR PUBLIC USES BX CX DX,pPciMech:WORD,pPciVer:WORD,pPciBusNum:WORD,pPciSign:WORD
MOV AX, [pPciMech]
MOV BX, [pPciVer]
MOV CX, [pPciBusNum]
MOV DX, [pPciSign]
CALL pciGetSts_
RET
_pciGetSts ENDP
;**************************
; Get PCI BIOS information AX
;
;unsigned int _pciGetStsAX;
;
; 入力 none
; 出力 AX return AX value of PCI function 01h
; 破壊 None
;**************************
_pciConfigVersion PROC C NEAR PUBLIC USES BX
CALL pciConfigVersion_
RET
_pciConfigVersion ENDP
;**************************
; Get PCI BIOS information BX
;
;unsigned int _pciBusVersion;
;
; 入力 none
; 出力 AX return BX value of PCI function 01h
; 破壊 None
;**************************
_pciBusVersion PROC C NEAR PUBLIC USES BX
CALL pciBusVersion_
RET
_pciBusVersion ENDP
;**************************
; Get PCI BIOS information CL
;
;unsigned char _pciMaxBusNo;
;
; 入力 none
; 出力 AL return CL value of PCI function 01h
; 破壊 None
;**************************
_pciMaxBusNo PROC C NEAR PUBLIC USES BX
CALL pciMaxBusNo_
RET
_pciMaxBusNo ENDP
;**************************
; Get PCI BIOS information EDX
;
;unsigned long int _pciSigPCI;
;
; 入力 none
; 出力 DX:AX return EDX value of PCI function 01h
; 破壊 None
;**************************
_pciSigPCI PROC C NEAR PUBLIC USES BX
CALL pciSigPCI_
MOV DX, BX
RET
_pciSigPCI ENDP
;**************************
; Find PCI device
;
;unsigned long int _pciFindPciDevice(unsigned int deviceID,
; unsigned int vendorID,
; unsigned int index);
; 入力 [SP-2].W device ID
; [SP-4].W vendor ID
; [Sp-6].W index
; 出力 DX found PCI device address
; AL function return code
; 破壊 None
;**************************
_pciFindPciDevice PROC C NEAR PUBLIC USES BX CX, deviceID:WORD,vendorID:WORD,index:WORD
MOV AX, [deviceID]
MOV BX, [vendorID]
MOV CX, [index]
CALL pciFindPciDevice_
MOV DX, BX
RET
_pciFindPciDevice ENDP
;**************************
; Find PCI class
;
;unsigned long int _pciFindPciClass(unsigned char progIF,
; unsigned char subClassCode,
; unsigned char classCode,
; unsigned int index);
; 入力 [SP-2].B Programming interface code
; [SP-4].B Sub class code
; [SP-6].B Class code
; [SP-8].W index
; 出力 DX found PCI device address
; AL function return code
; 破壊 None
;**************************
_pciFindPciClass PROC C NEAR PUBLIC USES BX CX,progIF:BYTE, subClassCode:BYTE, classCode:BYTE, index:WORD
MOV AL, progIF
MOV BL, subClassCode
MOV CL, classCode
MOV DX, index
CALL pciFindPciClass_
MOV DX, BX
RET
_pciFindPciClass ENDP
;**************************
; Read PCI configuration register byte
;
;unsigned char _pciConfigReadByte(unsigned int BusDevFunc,
; unsigned int regNumber)
; 入力 [SP-2].W bit15..8 Bus number
; bit7..3 Device number
; bit2..0 Function number
; [SP-4].W read register number
; 出力 AL Read value
; 破壊 None
;**************************
_pciConfigReadByte PROC C NEAR PUBLIC USES BX, busDevFunc:WORD,regNum:WORD
MOV AX, busDevFunc
MOV BX, regNum
CALL pciConfigReadByte_
RET
_pciConfigReadByte ENDP
;**************************
; Read PCI configuration register word
;
;unsigned int _pciConfigReadWord(unsigned int BusDevFunc,
; unsigned int regNumber)
; 入力 [SP-2].W bit15..8 Bus number
; bit7..3 Device number
; bit2..0 Function number
; [SP-4].W read register number
; 出力 AX Read value
; 破壊 None
;**************************
_pciConfigReadWord PROC C NEAR PUBLIC USES BX, busDevFunc:WORD,regNum:WORD
MOV AX, busDevFunc
MOV BX, regNum
CALL pciConfigReadWord_
RET
_pciConfigReadWord ENDP
;**************************
; Read PCI configuration register double word
;
;unsigned long int _pciConfigReadLong(unsigned int BusDevFunc,
; unsigned int regNumber)
; 入力 [SP-2].W bit15..8 Bus number
; bit7..3 Device number
; bit2..0 Function number
; [SP-4].W read register number
; 出力 DX:AX Read value
; 破壊 None
;**************************
_pciConfigReadLong PROC C NEAR PUBLIC USES BX, busDevFunc:WORD,regNum:WORD
MOV AX, busDevFunc
MOV BX, regNum
CALL pciConfigReadLong_
MOV DX, BX
RET
_pciConfigReadLong ENDP
;**************************
; Write PCI configuration register byte
;
;unsigned char _pciConfigWriteByte(unsigned int BusDevFunc,
; unsigned int regNumber,
; unsigned char data)
; 入力 [SP-2].W bit15..8 Bus number
; bit7..3 Device number
; bit2..0 Function number
; [SP-4].W register number
; [SP-6].B write value
; 出力 None
; 破壊 None
;**************************
_pciConfigWriteByte PROC C NEAR PUBLIC USES AX BX CX, busDevFunc:WORD,regNum:WORD,writeData:BYTE
MOV AX, busDevFunc
MOV BX, regNum
MOV CL, writeData
CALL pciConfigWriteByte_
RET
_pciConfigWriteByte ENDP
;**************************
; Write PCI configuration register word
;
;unsigned int _pciConfigWriteWord(unsigned int BusDevFunc,
; unsigned int regNumber,
; unsigned char data)
; 入力 [SP-2].W bit15..8 Bus number
; bit7..3 Device number
; bit2..0 Function number
; [SP-4].W register number
; [SP-6].W write value
; 出力 None
; 破壊 None
;**************************
_pciConfigWriteWord PROC C NEAR PUBLIC USES AX BX CX, busDevFunc:WORD,regNum:WORD,writeData:WORD
MOV AX, busDevFunc
MOV BX, regNum
MOV CX, writeData
CALL pciConfigWriteWord_
RET
_pciConfigWriteWord ENDP
;**************************
; Write PCI configuration register double word
;
;unsigned long int _pciConfigWriteLong(unsigned int BusDevFunc,
; unsigned int regNumber,
; unsigned char data)
; 入力 [SP-2].W bit15..8 Bus number
; bit7..3 Device number
; bit2..0 Function number
; [SP-4].W register number
; [SP-6].L write value
; 出力 None
; 破壊 None
;**************************
_pciConfigWriteLong PROC C NEAR PUBLIC USES AX BX CX DX, busDevFunc:WORD,regNum:WORD,writeData:DWORD
MOV AX, busDevFunc
MOV BX, regNum
MOV CX, WORD PTR writeData
MOV DX, WORD PTR writeData+2
CALL pciConfigWriteLong_
RET
_pciConfigWriteLong ENDP
;**************************
; Get IRQ routing
;
;unsigned char _pciGetIrqRoute(unsigned int BIOSSeg,
; unsigned char tableAdrs);
; 入力 [SP-2].W AX BIOS segment address
; [SP-4].L CX:BX IRQ routing table store far address
; 出力 AL function return code
; DX PCI IRQ mapping
; 破壊 None
;**************************
_pciGetIrqRoute PROC C NEAR PUBLIC USES BX CX, BIOSSeg:WORD,tableAdrs:DWORD
MOV AX, BIOSSeg
MOV BX, WORD PTR tableAdrs
MOV CX, WORD PTR tableAdrs+2
CALL pciGetIrqRoute_
MOV DX, BX
RET
_pciGetIrqRoute ENDP
_TEXT ENDS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -