1) SouthBridge utilities;
2) reverted for the old (but stable) 62syscall for a while... git-svn-id: svn://kolibrios.org@1599 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e5c581d60d
commit
e5b8886135
@ -7,13 +7,16 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;; AMD HyperTransport bus control ;;
|
;; AMD HyperTransport bus control ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; art_zh <artem@jerdev.co.uk> ;;
|
;; art_zh <kolibri@jerdev.co.uk> ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 1554 $
|
$Revision: 1554 $
|
||||||
|
|
||||||
|
NB_MISC_INDEX equ 0xF0000060 ; NB Misc indirect access
|
||||||
|
NB_MISC_DATA equ 0xF0000064
|
||||||
|
PCIEIND_INDEX equ 0xF00000E0 ; PCIe Core indirect config space access
|
||||||
|
HTIU_NB_INDEX equ 0xF0000094 ; HyperTransport indirect config space access
|
||||||
|
|
||||||
;=============================================================================
|
;=============================================================================
|
||||||
;
|
;
|
||||||
@ -44,6 +47,10 @@ rs7xx_nbconfig_flush_pci:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
|
;------------------------------------------
|
||||||
|
; params: al = nbconfig register#
|
||||||
|
; ebx = register content
|
||||||
|
;
|
||||||
rs7xx_nbconfig_write_pci:
|
rs7xx_nbconfig_write_pci:
|
||||||
and eax, 0x0FC ; leave register# only
|
and eax, 0x0FC ; leave register# only
|
||||||
or eax, 0x80000000 ; bdf = 0:0.0
|
or eax, 0x80000000 ; bdf = 0:0.0
|
||||||
@ -54,6 +61,138 @@ rs7xx_nbconfig_write_pci:
|
|||||||
out dx, eax
|
out dx, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;***************************************************************************
|
||||||
|
; Function
|
||||||
|
; rs7xx_unlock_bar3: unlocks the BAR3 register of nbconfig that
|
||||||
|
; makes pcie config address space visible
|
||||||
|
; -----------------------
|
||||||
|
; in: nothing out: nothing destroys: eax ebx edx
|
||||||
|
;
|
||||||
|
;***************************************************************************
|
||||||
|
align 4
|
||||||
|
rs7xx_unlock_bar3:
|
||||||
|
mov eax, NB_MISC_INDEX
|
||||||
|
mov ebx, 0x080 ; reg#0; write-enable
|
||||||
|
call rs7xx_nbconfig_write_pci ; set index
|
||||||
|
mov eax, NB_MISC_DATA
|
||||||
|
call rs7xx_nbconfig_read_pci ; read data
|
||||||
|
mov ebx, eax
|
||||||
|
and ebx, 0xFFFFFFF7 ; clear bit3
|
||||||
|
mov eax, NB_MISC_DATA
|
||||||
|
call rs7xx_nbconfig_write_pci ; write it back
|
||||||
|
mov eax, NB_MISC_INDEX
|
||||||
|
xor ebx, ebx ; reg#0; write-locked
|
||||||
|
call rs7xx_nbconfig_write_pci ; set index
|
||||||
|
ret
|
||||||
|
|
||||||
|
;--------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
rs780_read_misc:
|
||||||
|
; in: eax(al) - reg# out: eax = NBMISCIND data
|
||||||
|
push edx
|
||||||
|
mov edx, NB_MISC_INDEX
|
||||||
|
and eax, 0x07F
|
||||||
|
mov [edx], eax
|
||||||
|
add dl, 4
|
||||||
|
mov eax, [edx]
|
||||||
|
pop edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-------------------------------------------
|
||||||
|
align 4
|
||||||
|
rs780_write_misc:
|
||||||
|
; in: eax(al) - reg# ebx = NBMISCIND data
|
||||||
|
push edx
|
||||||
|
mov edx, NB_MISC_INDEX
|
||||||
|
and eax, 0x07F
|
||||||
|
or eax, 0x080 ; set WE
|
||||||
|
mov [edx], eax
|
||||||
|
add dl, 4
|
||||||
|
mov [edx], ebx
|
||||||
|
sub dl, 4
|
||||||
|
xor eax, eax
|
||||||
|
mov [edx], eax ; safety last
|
||||||
|
pop edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
rs780_read_pcieind:
|
||||||
|
; in: ah = bridge#, al = reg# out: eax = PCIEIND data
|
||||||
|
push edx
|
||||||
|
xor edx, edx
|
||||||
|
mov ah, dl ; bridge# : 0 = Core+GFX; 0x10 = Core+SB
|
||||||
|
and dl, 15 ; 0x20 = Core+GPP; 2..12 = a PortBridge
|
||||||
|
shl edx, 15 ; device#
|
||||||
|
add edx, PCIEIND_INDEX ; full bdf-address
|
||||||
|
and eax, 0x30FF
|
||||||
|
or al, al
|
||||||
|
jnz @f
|
||||||
|
shl eax, 4 ; set bits 17..16 for a Core bridge
|
||||||
|
@@:
|
||||||
|
mov [edx], eax
|
||||||
|
add dl, 4
|
||||||
|
mov eax, [edx]
|
||||||
|
pop edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-------------------------------------------
|
||||||
|
align 4
|
||||||
|
rs780_write_pcieind:
|
||||||
|
; in: ah = bridge#, al = reg#, ebx = PCIEIND data
|
||||||
|
push edx
|
||||||
|
xor edx, edx
|
||||||
|
mov ah, dl ; bridge# : 0 = Core+GFX; 0x10 = Core+SB
|
||||||
|
and dl, 15 ; 0x20 = Core+GPP; 2..12 = a PortBridge
|
||||||
|
shl edx, 15 ; device#
|
||||||
|
add edx, PCIEIND_INDEX ; full bdf-address
|
||||||
|
and eax, 0x30FF
|
||||||
|
or al, al
|
||||||
|
jnz @f
|
||||||
|
shl eax, 4 ; set bits 17..16 for a Core bridge
|
||||||
|
@@:
|
||||||
|
mov [edx], eax
|
||||||
|
add dl, 4
|
||||||
|
mov [edx], ebx
|
||||||
|
sub dl, 4
|
||||||
|
xor eax, eax
|
||||||
|
mov [edx], eax ; safety last
|
||||||
|
pop edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
align 4
|
||||||
|
rs780_read_htiu:
|
||||||
|
; in: al = reg# | out: eax = HTIU data
|
||||||
|
;------------------------------------------------
|
||||||
|
push edx
|
||||||
|
mov edx, HTIU_NB_INDEX
|
||||||
|
and eax, 0x07F
|
||||||
|
mov [edx], eax
|
||||||
|
add dl, 4
|
||||||
|
mov eax, [edx]
|
||||||
|
pop edx
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
align 4
|
||||||
|
rs780_write_htiu:
|
||||||
|
; in: al = reg#; ebx = data
|
||||||
|
;------------------------------------------------
|
||||||
|
push edx
|
||||||
|
mov edx, HTIU_NB_INDEX
|
||||||
|
and eax, 0x07F
|
||||||
|
or eax, 0x100
|
||||||
|
mov [edx], eax
|
||||||
|
add dl, 4
|
||||||
|
mov [edx], ebx
|
||||||
|
sub dl, 4
|
||||||
|
xor eax, eax
|
||||||
|
mov [edx], eax
|
||||||
|
pop edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
; Function
|
; Function
|
||||||
; rs7xx_pcie_init:
|
; rs7xx_pcie_init:
|
||||||
@ -66,6 +205,7 @@ rs7xx_nbconfig_write_pci:
|
|||||||
align 4
|
align 4
|
||||||
|
|
||||||
rs7xx_pcie_init:
|
rs7xx_pcie_init:
|
||||||
|
call rs7xx_unlock_bar3
|
||||||
mov al, 0x7C ; NB_IOC_CFG_CNTL
|
mov al, 0x7C ; NB_IOC_CFG_CNTL
|
||||||
call rs7xx_nbconfig_read_pci
|
call rs7xx_nbconfig_read_pci
|
||||||
mov ebx, eax
|
mov ebx, eax
|
||||||
@ -120,7 +260,6 @@ rs7xx_pcie_init:
|
|||||||
xor dx, dx ; PDEs counter
|
xor dx, dx ; PDEs counter
|
||||||
@@:
|
@@:
|
||||||
mov dword[ebx], eax ; map 4 buses
|
mov dword[ebx], eax ; map 4 buses
|
||||||
invlpg [ecx] ; next PgDir entry
|
|
||||||
add bx, 4 ; new PDE
|
add bx, 4 ; new PDE
|
||||||
add eax, 0x400000 ; +4M phys.
|
add eax, 0x400000 ; +4M phys.
|
||||||
add ecx, 0x400000 ; +4M lin.
|
add ecx, 0x400000 ; +4M lin.
|
||||||
@ -128,6 +267,8 @@ rs7xx_pcie_init:
|
|||||||
jnc .pcie_cfg_mapped
|
jnc .pcie_cfg_mapped
|
||||||
inc dl
|
inc dl
|
||||||
jmp @b
|
jmp @b
|
||||||
|
mov eax, cr3
|
||||||
|
mov cr3, eax ; flush TLB
|
||||||
.pcie_cfg_mapped:
|
.pcie_cfg_mapped:
|
||||||
mov esi, boot_pcie_ok
|
mov esi, boot_pcie_ok
|
||||||
call boot_log
|
call boot_log
|
||||||
@ -135,13 +276,11 @@ rs7xx_pcie_init:
|
|||||||
.rs7xx_pcie_fail:
|
.rs7xx_pcie_fail:
|
||||||
mov esi, boot_rs7xx_fail
|
mov esi, boot_rs7xx_fail
|
||||||
call boot_log
|
call boot_log
|
||||||
ret
|
jmp $
|
||||||
.rs7xx_pcie_blocked:
|
.rs7xx_pcie_blocked:
|
||||||
mov esi, boot_rs7xx_blkd
|
mov esi, boot_rs7xx_blkd
|
||||||
call boot_log
|
call boot_log
|
||||||
call pci_ext_config
|
jmp $
|
||||||
jmp .addr_found
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
131
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.ASM
Normal file
131
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.ASM
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
$Revision: 1598 $
|
||||||
|
|
||||||
|
SMBUS_PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx SMBus PCI Config Registers
|
||||||
|
LPC_PCIE_ADDR equ 0xF00A3000 ; bdf0:20.3 = SB7xx LPC ISA bridge Config Registers
|
||||||
|
|
||||||
|
SB_SIO_INDEX equ 0x2e
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
smbus_read_pciconfig:
|
||||||
|
; in: dl = reg# | out: eax = data
|
||||||
|
mov ebx, SMBUS_PCIE_ADDR
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov eax, dword [ebx+edx]
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
align 4
|
||||||
|
smbus_write_pciconfig:
|
||||||
|
; in: dl = reg#; eax = data
|
||||||
|
mov ebx, SMBUS_PCIE_ADDR
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov dword [ebx+edx], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
lpc_read_pciconfig:
|
||||||
|
; in: dl = reg# | out: eax = data
|
||||||
|
mov ebx, LPC_PCIE_ADDR
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov eax, dword [ebx+edx]
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
align 4
|
||||||
|
lpc_write_pciconfig:
|
||||||
|
; in: dl = reg#; eax = data
|
||||||
|
mov ebx, LPC_PCIE_ADDR
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov dword [ebx+edx], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
read_sio_cfg:
|
||||||
|
; in: al = reg# | out: al = data
|
||||||
|
mov dx, SB_SIO_INDEX
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
in al, dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
align 4
|
||||||
|
write_sio_cfg:
|
||||||
|
; in: al = reg#; ah = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_SIO_INDEX
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
xchg al, ah
|
||||||
|
out dx, al
|
||||||
|
xchg al, ah
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
align 4
|
||||||
|
enter_sio_cfg_mode:
|
||||||
|
; the magic sequence to unlock the port
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_SIO_INDEX
|
||||||
|
mov eax, 0x55550187 ; low byte first
|
||||||
|
out dx, al
|
||||||
|
shr eax, 8
|
||||||
|
out dx, al
|
||||||
|
shr eax, 8
|
||||||
|
out dx, al
|
||||||
|
shr eax, 8
|
||||||
|
out dx, al
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; ATTENTION: the functions assume that RESET# signals use pins 84 and 34
|
||||||
|
; of IT8712F SuperIO chip. These signals may be (and will be!) different
|
||||||
|
; for every particular motherboard and SIO. Please refer to your m/board
|
||||||
|
; documentation to define the correct pins and GPIO lines!
|
||||||
|
;
|
||||||
|
; Note this example DOES NOT PRETEND to be 100% correct implementation
|
||||||
|
; of PCIe hotplug techniques !!
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
init_pcie_slot_control:
|
||||||
|
;------------------------------------------------
|
||||||
|
call enter_sio_cfg_mode
|
||||||
|
mov ax, 0x0707 ; LDN = 07
|
||||||
|
call write_sio_cfg
|
||||||
|
mov al, 0x25
|
||||||
|
call read_sio_cfg ; ah = reg25h (Multy-function pin selector)
|
||||||
|
or ah, 3 ; set bits 0, 1 (GPIO)
|
||||||
|
call write_sio_cfg
|
||||||
|
mov al, 0x2A
|
||||||
|
call read_sio_cfg ; ah = reg2Ah (Extended fn pin selector)
|
||||||
|
or ah, 3 ; set bits 0, 1 (GPIO)
|
||||||
|
call write_sio_cfg
|
||||||
|
mov al, 0xB8
|
||||||
|
call read_sio_cfg ; ah = regB8h (internal pull-up enable)
|
||||||
|
or ah, 3 ; set bits 0, 1
|
||||||
|
call write_sio_cfg
|
||||||
|
mov al, 0xC0
|
||||||
|
call read_sio_cfg ; ah = regC0h (simple IO enable)
|
||||||
|
or ah, 3 ; set bits 0, 1
|
||||||
|
call write_sio_cfg
|
||||||
|
mov ax, 0x0202 ; Lock SIO config ports
|
||||||
|
call write_sio_cfg
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
reset_pcie_slot:
|
||||||
|
;------------------------------------------------
|
||||||
|
call enter_sio_cfg_mode
|
||||||
|
mov ax, 0x0707 ; LDN = 07
|
||||||
|
call write_sio_cfg
|
||||||
|
mov al, 0xB0
|
||||||
|
call read_sio_cfg ; ah = regB0h (Pin polarity)
|
||||||
|
and ah, 0xFC ; invert bits 0, 1
|
||||||
|
call write_sio_cfg
|
||||||
|
or ah, 3 ; restore bits 0, 1
|
||||||
|
call write_sio_cfg
|
||||||
|
mov ax, 0x0202 ; Lock SIO config ports
|
||||||
|
call write_sio_cfg
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
@ -94,3 +94,14 @@ pci_ext_config:
|
|||||||
call boot_log
|
call boot_log
|
||||||
ret ; <<<<<<<<< FAILURE >>>>>>>>>
|
ret ; <<<<<<<<< FAILURE >>>>>>>>>
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------------
|
||||||
|
; this routine is platform-specific and used to change some BIOS settengs
|
||||||
|
; pcie_init_gfx
|
||||||
|
; sets the GPP mode of GFX bus
|
||||||
|
|
||||||
|
|
||||||
|
; this option disables external graphics
|
||||||
|
pcie_init_gfx:
|
||||||
|
|
||||||
|
ret
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;;
|
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
@ -8,11 +8,13 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;; 32 bit PCI driver code ;;
|
;; 32 bit PCI driver code ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
|
;; Version 0.4 February 2nd, 2010 ;;
|
||||||
;; Version 0.3 April 9, 2007 ;;
|
;; Version 0.3 April 9, 2007 ;;
|
||||||
;; Version 0.2 December 21st, 2002 ;;
|
;; Version 0.2 December 21st, 2002 ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; Author: Victor Prodan, victorprodan@yahoo.com ;;
|
;; Author: Victor Prodan, victorprodan@yahoo.com ;;
|
||||||
;; Mihailov Ilia, ghost.nsk@gmail.com ;;
|
;; Mihailov Ilia, ghost.nsk@gmail.com ;;
|
||||||
|
;; Artem Jerdev, kolibri@jerdev.co.uk ;;
|
||||||
;; Credits: ;;
|
;; Credits: ;;
|
||||||
;; Ralf Brown ;;
|
;; Ralf Brown ;;
|
||||||
;; Mike Hibbett, mikeh@oceanfree.net ;;
|
;; Mike Hibbett, mikeh@oceanfree.net ;;
|
||||||
@ -30,116 +32,64 @@ $Revision$
|
|||||||
; Description
|
; Description
|
||||||
; entry point for system PCI calls
|
; entry point for system PCI calls
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
mmio_pci_addr equ 0x400 ; set actual PCI address here to activate user-MMIO
|
mmio_pci_addr dw 0x400 ; default PCI device bdf-address
|
||||||
|
|
||||||
iglobal
|
|
||||||
align 4
|
|
||||||
f62call:
|
|
||||||
dd pci_api.0
|
|
||||||
dd pci_api.1
|
|
||||||
dd pci_api.2
|
|
||||||
dd pci_api.not_support ;3
|
|
||||||
dd pci_read_reg ;4 byte
|
|
||||||
dd pci_read_reg ;5 word
|
|
||||||
dd pci_read_reg ;6 dword
|
|
||||||
dd pci_api.not_support ;7
|
|
||||||
dd pci_write_reg ;8 byte
|
|
||||||
dd pci_write_reg ;9 word
|
|
||||||
dd pci_write_reg ;10 dword
|
|
||||||
if defined mmio_pci_addr
|
|
||||||
dd pci_mmio_init ;11
|
|
||||||
dd pci_mmio_map ;12
|
|
||||||
dd pci_mmio_unmap ;13
|
|
||||||
end if
|
|
||||||
f62_rcall:
|
|
||||||
dd pci_read_reg.0 ;4 byte
|
|
||||||
dd pci_read_reg.1 ;5 word
|
|
||||||
dd pci_read_reg.2 ;6 dword
|
|
||||||
f62_rcall2:
|
|
||||||
dd pci_read_reg_2.0 ;4 byte
|
|
||||||
dd pci_read_reg_2.1 ;5 word
|
|
||||||
dd pci_read_reg_2.2 ;6 dword
|
|
||||||
f62_wcall:
|
|
||||||
dd pci_write_reg.0 ;4 byte
|
|
||||||
dd pci_write_reg.1 ;5 word
|
|
||||||
dd pci_write_reg.2 ;6 dword
|
|
||||||
f62_wcall2:
|
|
||||||
dd pci_write_reg_2.0 ;4 byte
|
|
||||||
dd pci_write_reg_2.1 ;5 word
|
|
||||||
dd pci_write_reg_2.2 ;6 dword
|
|
||||||
endg
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
pci_api:
|
pci_api:
|
||||||
movzx eax,bl
|
|
||||||
cmp [pci_access_enabled],1
|
cmp [pci_access_enabled],1
|
||||||
jne .no_pci_access_for_applications
|
jne no_pci_access_for_applications
|
||||||
|
|
||||||
if defined mmio_pci_addr
|
or al,al
|
||||||
cmp eax, 13
|
jnz pci_fn_1
|
||||||
jb .not_support
|
|
||||||
else
|
|
||||||
cmp eax, 10
|
|
||||||
jb .not_support
|
|
||||||
end if
|
|
||||||
call dword [f62call+eax*4]
|
|
||||||
mov dword [esp+32],eax
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; or al,al
|
|
||||||
; jnz pci_fn_1
|
|
||||||
; PCI function 0: get pci version (AH.AL)
|
; PCI function 0: get pci version (AH.AL)
|
||||||
.0:
|
movzx eax,word [BOOT_VAR+0x9022]
|
||||||
movzx eax, word [BOOT_VAR+0x9022]
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;pci_fn_1:
|
pci_fn_1:
|
||||||
; cmp al,1
|
cmp al,1
|
||||||
; jnz pci_fn_2
|
jnz pci_fn_2
|
||||||
|
|
||||||
; PCI function 1: get last bus in AL
|
; PCI function 1: get last bus in AL
|
||||||
.1:
|
mov al,[BOOT_VAR+0x9021]
|
||||||
movzx eax, byte [BOOT_VAR+0x9021]
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;pci_fn_2:
|
pci_fn_2:
|
||||||
; cmp al,2
|
cmp al,2
|
||||||
; jne pci_fn_3
|
jne pci_fn_3
|
||||||
; PCI function 2: get pci access mechanism
|
; PCI function 2: get pci access mechanism
|
||||||
.2:
|
mov al,[BOOT_VAR+0x9020]
|
||||||
movzx eax, byte [BOOT_VAR+0x9020]
|
|
||||||
ret
|
ret
|
||||||
;pci_fn_3:
|
pci_fn_3:
|
||||||
|
|
||||||
; cmp al,4
|
cmp al,4
|
||||||
; jz pci_read_reg ;byte
|
jz pci_read_reg ;byte
|
||||||
; cmp al,5
|
cmp al,5
|
||||||
; jz pci_read_reg ;word
|
jz pci_read_reg ;word
|
||||||
; cmp al,6
|
cmp al,6
|
||||||
; jz pci_read_reg ;dword
|
jz pci_read_reg ;dword
|
||||||
|
|
||||||
; cmp al,8
|
cmp al,8
|
||||||
; jz pci_write_reg ;byte
|
jz pci_write_reg ;byte
|
||||||
; cmp al,9
|
cmp al,9
|
||||||
; jz pci_write_reg ;word
|
jz pci_write_reg ;word
|
||||||
; cmp al,10
|
cmp al,10
|
||||||
; jz pci_write_reg ;dword
|
jz pci_write_reg ;dword
|
||||||
|
|
||||||
;if defined mmio_pci_addr
|
cmp al,11 ; user-level MMIO functions
|
||||||
; cmp al,11 ; user-level MMIO functions
|
jz pci_mmio_init
|
||||||
; jz pci_mmio_init
|
cmp al,12
|
||||||
; cmp al,12
|
jz pci_mmio_map
|
||||||
; jz pci_mmio_map
|
cmp al,13
|
||||||
; cmp al,13
|
jz pci_mmio_unmap
|
||||||
; jz pci_mmio_unmap
|
|
||||||
;end if
|
|
||||||
|
no_pci_access_for_applications:
|
||||||
|
|
||||||
.not_support:
|
|
||||||
.no_pci_access_for_applications:
|
|
||||||
or eax,-1
|
or eax,-1
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
@ -148,20 +98,20 @@ end if
|
|||||||
;
|
;
|
||||||
; Description
|
; Description
|
||||||
; creates a command dword for use with the PCI bus
|
; creates a command dword for use with the PCI bus
|
||||||
; bus # in bh;ah
|
; bus # in ah
|
||||||
; device+func in ch;bh (dddddfff)
|
; device+func in bh (dddddfff)
|
||||||
; register in cl;bl
|
; register in bl
|
||||||
;
|
;
|
||||||
; command dword returned in ebx;eax ( 10000000 bbbbbbbb dddddfff rrrrrr00 )
|
; command dword returned in eax ( 10000000 bbbbbbbb dddddfff rrrrrr00 )
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
pci_make_config_cmd:
|
pci_make_config_cmd:
|
||||||
shl ebx,8;eax,8 ; move bus to bits 16-23
|
shl eax,8 ; move bus to bits 16-23
|
||||||
mov bx,cx;ax,bx ; combine all
|
mov ax,bx ; combine all
|
||||||
and ebx,0xffffff;eax,0xffffff
|
and eax,0xffffff
|
||||||
or ebx,0x80000000;eax,0x80000000
|
or eax,0x80000000
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
@ -178,16 +128,12 @@ pci_make_config_cmd:
|
|||||||
align 4
|
align 4
|
||||||
|
|
||||||
pci_read_reg:
|
pci_read_reg:
|
||||||
cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use?
|
push esi ; save register size into ESI
|
||||||
je pci_read_reg_2
|
mov esi,eax
|
||||||
|
|
||||||
; mechanism 1
|
|
||||||
; push esi ; save register size into ESI
|
|
||||||
mov esi,ebx;eax
|
|
||||||
and esi,3
|
and esi,3
|
||||||
|
|
||||||
call pci_make_config_cmd
|
call pci_make_config_cmd
|
||||||
mov eax,ebx;ebx,eax
|
mov ebx,eax
|
||||||
; get current state
|
; get current state
|
||||||
mov dx,0xcf8
|
mov dx,0xcf8
|
||||||
in eax, dx
|
in eax, dx
|
||||||
@ -201,100 +147,37 @@ pci_read_reg:
|
|||||||
and bl,3
|
and bl,3
|
||||||
or dl,bl ; add to port address first 2 bits of register address
|
or dl,bl ; add to port address first 2 bits of register address
|
||||||
|
|
||||||
; or esi,esi
|
or esi,esi
|
||||||
; jz pci_read_byte1
|
jz pci_read_byte1
|
||||||
; cmp esi,1
|
cmp esi,1
|
||||||
; jz pci_read_word1
|
jz pci_read_word1
|
||||||
; cmp esi,2
|
cmp esi,2
|
||||||
; jz pci_read_dword1
|
jz pci_read_dword1
|
||||||
; jmp pci_fin_read1
|
jmp pci_fin_read1
|
||||||
jmp dword [f62_rcall+esi*4]
|
|
||||||
|
|
||||||
.0:
|
pci_read_byte1:
|
||||||
in al,dx
|
in al,dx
|
||||||
jmp .pci_fin_read1
|
jmp pci_fin_read1
|
||||||
.1:
|
pci_read_word1:
|
||||||
in ax,dx
|
in ax,dx
|
||||||
jmp .pci_fin_read1
|
jmp pci_fin_read1
|
||||||
.2:
|
pci_read_dword1:
|
||||||
in eax,dx
|
in eax,dx
|
||||||
; jmp pci_fin_read1
|
jmp pci_fin_read1
|
||||||
.pci_fin_read1:
|
pci_fin_read1:
|
||||||
; restore configuration control
|
; restore configuration control
|
||||||
xchg eax,[esp]
|
xchg eax,[esp]
|
||||||
mov dx,0xcf8
|
mov dx,0xcf8
|
||||||
out dx,eax
|
out dx,eax
|
||||||
|
|
||||||
pop eax
|
pop eax
|
||||||
;pop esi
|
pop esi
|
||||||
ret
|
|
||||||
pci_read_reg_2:
|
|
||||||
|
|
||||||
test ch,128;bh,128 ;mech#2 only supports 16 devices per bus
|
|
||||||
jnz pci_api.not_support
|
|
||||||
|
|
||||||
; push esi ; save register size into ESI
|
|
||||||
mov esi,ebx;eax
|
|
||||||
and esi,3
|
|
||||||
|
|
||||||
push ebx;eax
|
|
||||||
mov eax,ebx
|
|
||||||
;store current state of config space
|
|
||||||
mov dx,0xcf8
|
|
||||||
in al,dx
|
|
||||||
mov ah,al
|
|
||||||
mov dl,0xfa
|
|
||||||
in al,dx
|
|
||||||
|
|
||||||
xchg eax,[esp]
|
|
||||||
; out 0xcfa,bus
|
|
||||||
mov al,ah
|
|
||||||
out dx,al
|
|
||||||
; out 0xcf8,0x80
|
|
||||||
mov dl,0xf8
|
|
||||||
mov al,0x80
|
|
||||||
out dx,al
|
|
||||||
; compute addr
|
|
||||||
shr ch,3;bh,3 ; func is ignored in mechanism 2
|
|
||||||
or ch,0xc0;bh,0xc0
|
|
||||||
mov dx,cx;bx
|
|
||||||
|
|
||||||
; or esi,esi
|
|
||||||
; jz pci_read_byte2
|
|
||||||
; cmp esi,1
|
|
||||||
; jz pci_read_word2
|
|
||||||
; cmp esi,2
|
|
||||||
; jz pci_read_dword2
|
|
||||||
; jmp pci_fin_read2
|
|
||||||
jmp dword [f62_rcall2+esi*4]
|
|
||||||
|
|
||||||
.0:
|
|
||||||
in al,dx
|
|
||||||
jmp .pci_fin_read2
|
|
||||||
.1:
|
|
||||||
in ax,dx
|
|
||||||
jmp .pci_fin_read2
|
|
||||||
.2:
|
|
||||||
in eax,dx
|
|
||||||
; jmp pci_fin_read2
|
|
||||||
|
|
||||||
.pci_fin_read2:
|
|
||||||
|
|
||||||
; restore configuration space
|
|
||||||
xchg eax,[esp]
|
|
||||||
mov dx,0xcfa
|
|
||||||
out dx,al
|
|
||||||
mov dl,0xf8
|
|
||||||
mov al,ah
|
|
||||||
out dx,al
|
|
||||||
|
|
||||||
pop eax
|
|
||||||
; pop esi
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;pci_read_reg_err:
|
pci_read_reg_err:
|
||||||
; or dword [esp+32],-1
|
xor eax,eax
|
||||||
; ret
|
dec eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
@ -312,17 +195,12 @@ pci_read_reg_2:
|
|||||||
align 4
|
align 4
|
||||||
|
|
||||||
pci_write_reg:
|
pci_write_reg:
|
||||||
cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use?
|
push esi ; save register size into ESI
|
||||||
je pci_write_reg_2
|
mov esi,eax
|
||||||
|
and esi,3
|
||||||
; mechanism 1
|
|
||||||
; push esi ; save register size into ESI
|
|
||||||
mov esi,ebx;eax
|
|
||||||
and esi,3 ;not need
|
|
||||||
|
|
||||||
call pci_make_config_cmd
|
call pci_make_config_cmd
|
||||||
mov eax,ebx;ebx,eax
|
mov ebx,eax
|
||||||
mov ecx,edx ;cross registers
|
|
||||||
; get current state into ecx
|
; get current state into ecx
|
||||||
mov dx,0xcf8
|
mov dx,0xcf8
|
||||||
in eax, dx
|
in eax, dx
|
||||||
@ -337,121 +215,56 @@ pci_write_reg:
|
|||||||
or dl,bl
|
or dl,bl
|
||||||
mov eax,ecx
|
mov eax,ecx
|
||||||
|
|
||||||
; or esi,esi
|
or esi,esi
|
||||||
; jz pci_write_byte1
|
jz pci_write_byte1
|
||||||
; cmp esi,1
|
cmp esi,1
|
||||||
; jz pci_write_word1
|
jz pci_write_word1
|
||||||
; cmp esi,2
|
cmp esi,2
|
||||||
; jz pci_write_dword1
|
jz pci_write_dword1
|
||||||
; jmp pci_fin_write1
|
jmp pci_fin_write1
|
||||||
jmp dword [f62_wcall+esi*4]
|
|
||||||
.0:
|
|
||||||
out dx,al
|
|
||||||
jmp .pci_fin_write1
|
|
||||||
.1:
|
|
||||||
out dx,ax
|
|
||||||
jmp .pci_fin_write1
|
|
||||||
.2:
|
|
||||||
out dx,eax
|
|
||||||
.pci_fin_write1:
|
|
||||||
|
|
||||||
|
pci_write_byte1:
|
||||||
|
out dx,al
|
||||||
|
jmp pci_fin_write1
|
||||||
|
pci_write_word1:
|
||||||
|
out dx,ax
|
||||||
|
jmp pci_fin_write1
|
||||||
|
pci_write_dword1:
|
||||||
|
out dx,eax
|
||||||
|
jmp pci_fin_write1
|
||||||
|
pci_fin_write1:
|
||||||
; restore configuration control
|
; restore configuration control
|
||||||
pop eax
|
pop eax
|
||||||
mov dl,0xf8
|
mov dl,0xf8
|
||||||
out dx,eax
|
out dx,eax
|
||||||
|
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
;pop esi
|
pop esi
|
||||||
ret
|
ret
|
||||||
pci_write_reg_2:
|
|
||||||
|
|
||||||
test ch,128;bh,128 ;mech#2 only supports 16 devices per bus
|
|
||||||
jnz pci_api.not_support
|
|
||||||
|
|
||||||
|
|
||||||
; push esi ; save register size into ESI
|
|
||||||
mov esi,eax
|
|
||||||
and esi,3 ;not need
|
|
||||||
|
|
||||||
push eax
|
|
||||||
mov ecx,edx ;cross registers
|
|
||||||
;store current state of config space
|
|
||||||
mov dx,0xcf8
|
|
||||||
in al,dx
|
|
||||||
mov ah,al
|
|
||||||
mov dl,0xfa
|
|
||||||
in al,dx
|
|
||||||
xchg eax,[esp]
|
|
||||||
; out 0xcfa,bus
|
|
||||||
mov al,ah
|
|
||||||
out dx,al
|
|
||||||
; out 0xcf8,0x80
|
|
||||||
mov dl,0xf8
|
|
||||||
mov al,0x80
|
|
||||||
out dx,al
|
|
||||||
; compute addr
|
|
||||||
shr bh,3 ; func is ignored in mechanism 2
|
|
||||||
or bh,0xc0
|
|
||||||
mov dx,bx
|
|
||||||
; write register
|
|
||||||
mov eax,ecx
|
|
||||||
|
|
||||||
; or esi,esi
|
|
||||||
; jz pci_write_byte2
|
|
||||||
; cmp esi,1
|
|
||||||
; jz pci_write_word2
|
|
||||||
; cmp esi,2
|
|
||||||
; jz pci_write_dword2
|
|
||||||
; jmp pci_fin_write2
|
|
||||||
jmp dword [f62_wcall2+esi*4]
|
|
||||||
.0:
|
|
||||||
out dx,al
|
|
||||||
jmp .pci_fin_write2
|
|
||||||
.1:
|
|
||||||
out dx,ax
|
|
||||||
jmp .pci_fin_write2
|
|
||||||
.2:
|
|
||||||
out dx,eax
|
|
||||||
.pci_fin_write2:
|
|
||||||
; restore configuration space
|
|
||||||
pop eax
|
|
||||||
mov dx,0xcfa
|
|
||||||
out dx,al
|
|
||||||
mov dl,0xf8
|
|
||||||
mov al,ah
|
|
||||||
out dx,al
|
|
||||||
|
|
||||||
|
pci_write_reg_err:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
;pop esi
|
dec eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;pci_write_reg_err:
|
|
||||||
; xor eax,eax
|
|
||||||
; dec eax
|
|
||||||
; ret
|
|
||||||
|
|
||||||
if defined mmio_pci_addr ; must be set above
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
; Function
|
; Function
|
||||||
; pci_mmio_init
|
; pci_mmio_init
|
||||||
;
|
;
|
||||||
; Description
|
; Description
|
||||||
; IN: cx = device's PCI bus address (bbbbbbbbdddddfff)
|
; IN: bx = device's PCI bus address (bbbbbbbbdddddfff)
|
||||||
; Returns eax = user heap space available (bytes)
|
; Returns eax = phys. address of user-accessible DMA block
|
||||||
; Error codes
|
; Error codes
|
||||||
; eax = -1 : PCI user access blocked,
|
; eax = -1 : PCI user access blocked,
|
||||||
; eax = -2 : device not registered for uMMIO service
|
|
||||||
; eax = -3 : user heap initialization failure
|
; eax = -3 : user heap initialization failure
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
pci_mmio_init:
|
pci_mmio_init:
|
||||||
cmp cx, mmio_pci_addr
|
mov [mmio_pci_addr],bx
|
||||||
jz @f
|
|
||||||
mov eax,-2
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
call init_heap ; (if not initialized yet)
|
call init_heap ; (if not initialized yet)
|
||||||
or eax,eax
|
or eax,eax
|
||||||
jz @f
|
jz @f
|
||||||
|
mov eax, [UserDMAaddr]
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
mov eax,-3
|
mov eax,-3
|
||||||
@ -465,10 +278,9 @@ pci_mmio_init:
|
|||||||
; Description
|
; Description
|
||||||
; maps a block of PCI memory to user-accessible linear address
|
; maps a block of PCI memory to user-accessible linear address
|
||||||
;
|
;
|
||||||
; WARNING! This VERY EXPERIMENTAL service is for one chosen PCI device only!
|
|
||||||
; The target device address should be set in kernel var mmio_pci_addr
|
|
||||||
;
|
;
|
||||||
; IN: ah = BAR#;
|
; IN: ah = BAR#; or
|
||||||
|
; IN: ah = 0xDA for DMA-mapping requests;
|
||||||
; IN: ebx = block size (bytes);
|
; IN: ebx = block size (bytes);
|
||||||
; IN: ecx = offset in MMIO block (in 4K-pages, to avoid misaligned pages);
|
; IN: ecx = offset in MMIO block (in 4K-pages, to avoid misaligned pages);
|
||||||
;
|
;
|
||||||
@ -484,17 +296,21 @@ pci_mmio_init:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
|
|
||||||
pci_mmio_map:
|
pci_mmio_map:
|
||||||
;cross
|
|
||||||
mov eax,ebx
|
|
||||||
mov ebx,ecx
|
|
||||||
mov ecx,edx
|
|
||||||
;;;;;;;;;;;;;;;;;;;
|
|
||||||
and edx,0x0ffff
|
and edx,0x0ffff
|
||||||
|
cmp ah, 0xDA
|
||||||
|
jz .dma_map
|
||||||
cmp ah,6
|
cmp ah,6
|
||||||
jc .bar_0_5
|
jb .bar_0_5
|
||||||
jz .bar_rom
|
jz .bar_rom
|
||||||
mov eax,-2
|
mov eax,-2
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
.dma_map:
|
||||||
|
push ecx
|
||||||
|
mov ecx,ebx
|
||||||
|
mov eax,[UserDMAaddr]
|
||||||
|
jmp .allocate_block
|
||||||
|
|
||||||
.bar_rom:
|
.bar_rom:
|
||||||
mov ah, 8 ; bar6 = Expansion ROM base address
|
mov ah, 8 ; bar6 = Expansion ROM base address
|
||||||
.bar_0_5:
|
.bar_0_5:
|
||||||
@ -506,7 +322,7 @@ pci_mmio_map:
|
|||||||
shl bl, 1
|
shl bl, 1
|
||||||
shl bl, 1
|
shl bl, 1
|
||||||
add bl, 0x10 ; now bl = BAR offset in PCI config. space
|
add bl, 0x10 ; now bl = BAR offset in PCI config. space
|
||||||
mov ax, mmio_pci_addr
|
mov ax, [mmio_pci_addr]
|
||||||
mov bh, al ; bh = dddddfff
|
mov bh, al ; bh = dddddfff
|
||||||
mov al, 2 ; al : DW to read
|
mov al, 2 ; al : DW to read
|
||||||
call pci_read_reg
|
call pci_read_reg
|
||||||
@ -523,7 +339,9 @@ pci_mmio_map:
|
|||||||
pop ecx ; ecx = block size, bytes (expanded to whole page)
|
pop ecx ; ecx = block size, bytes (expanded to whole page)
|
||||||
mov ebx, ecx ; user_alloc destroys eax, ecx, edx, but saves ebx
|
mov ebx, ecx ; user_alloc destroys eax, ecx, edx, but saves ebx
|
||||||
and eax, 0xFFFFFFF0
|
and eax, 0xFFFFFFF0
|
||||||
push eax ; store MMIO physical address + keep 2DWords in the stack
|
|
||||||
|
.allocate_block:
|
||||||
|
push eax ; store MMIO physical address + keep the stack 2x4b deep
|
||||||
stdcall user_alloc, ecx
|
stdcall user_alloc, ecx
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jnz mmio_map_over
|
jnz mmio_map_over
|
||||||
@ -542,9 +360,7 @@ mmio_map_over:
|
|||||||
pop edx ; edx = MMIO shift (pages)
|
pop edx ; edx = MMIO shift (pages)
|
||||||
shl edx, 12 ; edx = MMIO shift (bytes)
|
shl edx, 12 ; edx = MMIO shift (bytes)
|
||||||
add eax, edx ; eax = uMMIO physical address
|
add eax, edx ; eax = uMMIO physical address
|
||||||
or eax, PG_SHARED
|
or eax, (PG_SHARED+PG_UW+PG_NOCACHE)
|
||||||
or eax, PG_UW
|
|
||||||
or eax, PG_NOCACHE
|
|
||||||
mov edi, ebx
|
mov edi, ebx
|
||||||
call commit_pages
|
call commit_pages
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
@ -566,11 +382,9 @@ mmio_map_over:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
|
|
||||||
pci_mmio_unmap:
|
pci_mmio_unmap:
|
||||||
stdcall user_free, ecx;ebx
|
stdcall user_free, ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
end if
|
|
||||||
|
|
||||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
uglobal
|
uglobal
|
||||||
align 4
|
align 4
|
||||||
|
@ -337,41 +337,36 @@ endp
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc init_LFB
|
proc init_LFB
|
||||||
locals
|
; cmp dword [LFBAddress], -1
|
||||||
pg_count dd ?
|
; jne @f
|
||||||
endl
|
;
|
||||||
|
; mov esi, boot_framebuf
|
||||||
cmp dword [LFBAddress], -1
|
; call boot_log
|
||||||
jne @f
|
;
|
||||||
mov [BOOT_VAR+0x901c],byte 2
|
; mov [BOOT_VAR+0x901c],byte 2
|
||||||
stdcall alloc_pages, (0x280000 / 4096)
|
; stdcall alloc_pages, (0x280000 / 4096)
|
||||||
|
;
|
||||||
push eax
|
; push eax
|
||||||
call alloc_page
|
; call alloc_page
|
||||||
stdcall map_page_table, LFB_BASE, eax
|
; stdcall map_page_table, LFB_BASE, eax
|
||||||
pop eax
|
; pop eax
|
||||||
or eax, PG_UW
|
; or eax, PG_UW
|
||||||
mov ebx, LFB_BASE
|
; mov ebx, LFB_BASE
|
||||||
mov ecx, 0x280000 / 4096
|
; mov ecx, 0x280000 / 4096
|
||||||
call commit_pages
|
; call commit_pages
|
||||||
mov [LFBAddress], dword LFB_BASE
|
; mov [LFBAddress], dword LFB_BASE
|
||||||
ret
|
; ret
|
||||||
@@:
|
;@@:
|
||||||
test [SCR_MODE],word 0100000000000000b
|
|
||||||
jnz @f
|
|
||||||
mov [BOOT_VAR+0x901c],byte 2
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
call init_mtrr
|
call init_mtrr
|
||||||
|
|
||||||
mov edx, LFB_BASE
|
mov edx, LFB_BASE
|
||||||
mov esi, [LFBAddress]
|
mov esi, [LFBAddress]
|
||||||
mov edi, 0x00C00000
|
mov edi, 0x00C00000 ; 12Mb
|
||||||
mov dword [exp_lfb+4], edx
|
mov dword [exp_lfb+4], edx
|
||||||
|
|
||||||
shr edi, 12
|
shr edi, 12 ; C00
|
||||||
mov [pg_count], edi
|
; mov [pg_count], edi
|
||||||
shr edi, 10
|
shr edi, 10 ; 3
|
||||||
|
|
||||||
or esi, PG_GLOBAL+PG_LARGE+PG_UW
|
or esi, PG_GLOBAL+PG_LARGE+PG_UW
|
||||||
mov edx, sys_pgdir+(LFB_BASE shr 20)
|
mov edx, sys_pgdir+(LFB_BASE shr 20)
|
||||||
@ -389,24 +384,20 @@ proc init_LFB
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc init_userDMA
|
init_userDMA:
|
||||||
stdcall alloc_pages, 4096 ; 16M <<<<<<<<<<+++++++++++++++++++++++++++++++++
|
stdcall alloc_pages, 4096 ; 16M <<<<<<<<<<+++++++++++++++++++++++++++++++++
|
||||||
add eax, 0x007FFFF0
|
add eax, 0x007FFFF0 ; terrible mess, sorry ...
|
||||||
and eax, 0xFF800000 ; align at 8M boundary
|
and eax, 0xFF800000 ; align at 8M boundary
|
||||||
mov [UserDMAaddr], eax
|
mov [UserDMAaddr], eax
|
||||||
; or eax, PG_UW + PG_NOCACHE
|
|
||||||
; mov ebx, USER_DMA_BUFFER
|
|
||||||
; mov ecx, 2048 ; 8M, to be sure
|
|
||||||
; call commit_pages
|
|
||||||
; mov eax, [UserDMAaddr]
|
|
||||||
or eax, PG_LARGE + PG_UW + PG_NOCACHE
|
or eax, PG_LARGE + PG_UW + PG_NOCACHE
|
||||||
mov ebx, sys_pgdir + (USER_DMA_BUFFER shr 20)
|
mov ebx, sys_pgdir + (USER_DMA_BUFFER shr 20)
|
||||||
mov [ebx], eax
|
mov [ebx], eax
|
||||||
add ebx, 4
|
add ebx, 4
|
||||||
add eax, 0x00400000
|
add eax, 0x00400000
|
||||||
mov [ebx], eax
|
mov [ebx], eax
|
||||||
|
mov eax, cr3 ;flush TLB
|
||||||
|
mov cr3, eax
|
||||||
ret
|
ret
|
||||||
endp
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc new_mem_resize stdcall, new_size:dword
|
proc new_mem_resize stdcall, new_size:dword
|
||||||
|
@ -99,7 +99,7 @@ iglobal
|
|||||||
dd 0
|
dd 0
|
||||||
dd 0
|
dd 0
|
||||||
dd 0
|
dd 0
|
||||||
dd 0;sys_pci ; 62-PCI functions
|
dd sys_pci ; 62-PCI functions
|
||||||
dd sys_msg_board ; 63-System message board
|
dd sys_msg_board ; 63-System message board
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@ -170,7 +170,7 @@ iglobal
|
|||||||
dd undefined_syscall ; 59-reserved
|
dd undefined_syscall ; 59-reserved
|
||||||
dd sys_IPC ; 60-Inter Process Communication
|
dd sys_IPC ; 60-Inter Process Communication
|
||||||
dd sys_gs ; 61-Direct graphics access
|
dd sys_gs ; 61-Direct graphics access
|
||||||
dd pci_api;cross_order ; 62-PCI functions
|
dd cross_order ; 62-PCI functions
|
||||||
dd cross_order ; 63-System message board
|
dd cross_order ; 63-System message board
|
||||||
dd sys_resize_app_memory ; 64-Resize application memory usage
|
dd sys_resize_app_memory ; 64-Resize application memory usage
|
||||||
dd sys_putimage_palette ; 65-PutImagePalette
|
dd sys_putimage_palette ; 65-PutImagePalette
|
||||||
|
@ -4253,11 +4253,11 @@ sys_gs: ; direct screen access
|
|||||||
|
|
||||||
;align 4 ; PCI functions
|
;align 4 ; PCI functions
|
||||||
;
|
;
|
||||||
;sys_pci:
|
sys_pci:
|
||||||
;
|
|
||||||
; call pci_api
|
call pci_api
|
||||||
; mov [esp+36],eax
|
mov [esp+36],eax
|
||||||
; ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4 ; system functions
|
align 4 ; system functions
|
||||||
|
345
kernel/branches/Kolibri-A/utilities/SB700/LPC_REG.ASM
Normal file
345
kernel/branches/Kolibri-A/utilities/SB700/LPC_REG.ASM
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
;; ZiS test -- Art J ;;
|
||||||
|
|
||||||
|
|
||||||
|
use32 ;
|
||||||
|
org 0x0 ;
|
||||||
|
|
||||||
|
db 'MENUET01' ;
|
||||||
|
dd 0x01 ;
|
||||||
|
dd START ;
|
||||||
|
dd I_END ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
|
||||||
|
include 'MACROS.INC' ;
|
||||||
|
|
||||||
|
PCIE_SPACE equ 0xF0000000
|
||||||
|
PCIE_ADDR equ 0xF00A3000 ; bdf0:20.3 = SB7xx LPC Config Registers
|
||||||
|
BOX_COLOR equ 0xE0D8D0
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
mov edx, 0x88
|
||||||
|
add edx, PCIE_ADDR
|
||||||
|
mov eax, 0x00010101
|
||||||
|
mov [edx], eax
|
||||||
|
|
||||||
|
|
||||||
|
red:
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; event waiting
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw window
|
||||||
|
je red ;
|
||||||
|
cmp eax,2 ; key pressed?
|
||||||
|
je key ;
|
||||||
|
cmp eax,3 ; button hit?
|
||||||
|
je button ;
|
||||||
|
|
||||||
|
jmp still ; none of that
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
key: ; key pressed
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; get the button ID
|
||||||
|
cmp ah, 1
|
||||||
|
jne .bt2
|
||||||
|
mcall -1
|
||||||
|
.bt2:
|
||||||
|
cmp ah, 2
|
||||||
|
jne .bt3
|
||||||
|
sub [Reg],4 ; Rg# decrement
|
||||||
|
jmp red
|
||||||
|
.bt3:
|
||||||
|
cmp ah, 3
|
||||||
|
jne .bt4
|
||||||
|
add [Reg],4 ; Rg# increment
|
||||||
|
jmp red
|
||||||
|
.bt4:
|
||||||
|
cmp ah, 4
|
||||||
|
jne .bt5
|
||||||
|
add [Reg],4*16 ; PgDn
|
||||||
|
jmp red
|
||||||
|
.bt5:
|
||||||
|
cmp ah, 5
|
||||||
|
jne .bt6
|
||||||
|
mov edx, [Reg]
|
||||||
|
cmp edx, 4*16
|
||||||
|
jb @f
|
||||||
|
sub edx, 4*16
|
||||||
|
mov [Reg],edx ; PgUp
|
||||||
|
jmp red
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
mov [Reg], edx
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
.bt6:
|
||||||
|
cmp ah, 6
|
||||||
|
jne still
|
||||||
|
mcall 37, 1 ; get the mouse pointer
|
||||||
|
shr eax, 16 ; only X needed
|
||||||
|
sub eax, 124 ; check the left border
|
||||||
|
jb red
|
||||||
|
xor edx, edx
|
||||||
|
mov ebx, 12
|
||||||
|
div ebx
|
||||||
|
cmp eax, 32 ; check the right border
|
||||||
|
jnb red
|
||||||
|
mov ecx, 31
|
||||||
|
sub ecx, eax ; reverse the bit order
|
||||||
|
mov ebx, [Rct]
|
||||||
|
btc ebx, ecx ; invert the bit
|
||||||
|
mov eax, [Reg]
|
||||||
|
add eax, PCIE_ADDR
|
||||||
|
mov [Rct], ebx
|
||||||
|
mov [eax], ebx
|
||||||
|
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
print_config_reg:
|
||||||
|
;------------------------------------------------
|
||||||
|
mov eax, [reg]
|
||||||
|
and eax, 0x0FFC
|
||||||
|
mov ebx, 4*65536+256 ; 4 hex digits
|
||||||
|
mov ecx, eax
|
||||||
|
mov dx,[stX]
|
||||||
|
shl edx,16 ; = X*65536
|
||||||
|
mov dx,[stY] ; = edx + Y
|
||||||
|
mov esi,0
|
||||||
|
mcall 47 ; print reg#
|
||||||
|
mov eax, [reg]
|
||||||
|
add eax, PCIE_ADDR
|
||||||
|
mov ecx, [eax]
|
||||||
|
add edx, 36*65536 ; right column
|
||||||
|
mov ebx, 8*65536+256 ; 8 hex digits
|
||||||
|
mcall 47 ; print config data
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
read_nbconfig:
|
||||||
|
; in: dl = reg# | out: eax = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov ebx, 0xF0000000
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov eax, dword [ebx+edx]
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
write_nbconfig:
|
||||||
|
; in: dl = reg#; eax = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov ebx, 0xF0000000
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov dword [ebx+edx], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
;read_htiunbind:
|
||||||
|
; in: [HTr] = reg# | out: eax = data
|
||||||
|
;------------------------------------------------
|
||||||
|
; mov dl, 0x94
|
||||||
|
; mov al, byte[HTr]
|
||||||
|
; and eax, 0x07C
|
||||||
|
; call write_nbconfig
|
||||||
|
; add dl, 4
|
||||||
|
; call read_nbconfig
|
||||||
|
; ret
|
||||||
|
;------------------------------------------------
|
||||||
|
;write_htiunbind:
|
||||||
|
; in: [HTr] = reg#; ecx = data
|
||||||
|
;------------------------------------------------
|
||||||
|
; mov dl, 0x94
|
||||||
|
; mov al, byte[Reg]
|
||||||
|
; and eax, 0x017C
|
||||||
|
; call write_nbconfig
|
||||||
|
; add dl, 4
|
||||||
|
; mov ecx, eax
|
||||||
|
; call write_nbconfig
|
||||||
|
; sub dl, 4
|
||||||
|
; mov eax, 0x0
|
||||||
|
; call write_nbconfig
|
||||||
|
; ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
draw_window:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 1
|
||||||
|
mcall 0, 600*65536+530, 120*65536+290, 0x1499AAA0,,title
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||||
|
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x99AABB ; <<
|
||||||
|
mcall , , 51*65536+ 18, 3, ; >>
|
||||||
|
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; PCIe Cfg
|
||||||
|
mcall , , 51*65536+ 18, 5, ; NB config
|
||||||
|
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||||
|
|
||||||
|
mov edx, [Reg]
|
||||||
|
add edx, PCIE_ADDR ; reading the current reg content
|
||||||
|
mov ecx, [edx]
|
||||||
|
mov [Rct], ecx
|
||||||
|
|
||||||
|
mov ebx, bitstr2
|
||||||
|
inc ebx
|
||||||
|
mov edx, [Rct]
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
xor eax, eax
|
||||||
|
.stringtest:
|
||||||
|
test edx, ecx
|
||||||
|
jz @f
|
||||||
|
mov byte [ebx+eax*2],'I' ; bit dump
|
||||||
|
jmp .nextbit
|
||||||
|
@@:
|
||||||
|
mov byte [ebx+eax*2],'0'
|
||||||
|
.nextbit:
|
||||||
|
inc eax
|
||||||
|
shr ecx, 1
|
||||||
|
jnz .stringtest
|
||||||
|
|
||||||
|
; button txt: X *65536+ Y
|
||||||
|
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||||
|
mcall , 378*65536+57 , , butstr3,
|
||||||
|
mcall , 436*65536+32 , , butstr4,9
|
||||||
|
mcall , 436*65536+57 , , butstr5,
|
||||||
|
|
||||||
|
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||||
|
mcall , 122*65536+110,0 , bitstr1,65
|
||||||
|
mcall , 122*65536+117,0 , bitstr2,65
|
||||||
|
mcall , 122*65536+126,0 , bitstr3,65
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; draw the reg-value box
|
||||||
|
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||||
|
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||||
|
mov edx, BOX_COLOR
|
||||||
|
mcall 13
|
||||||
|
; draw the reg-address box
|
||||||
|
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||||
|
mov cx, 44 ; Yheight only
|
||||||
|
mcall 13
|
||||||
|
; draw ZiS status box
|
||||||
|
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||||
|
; mov ecx, 84*65536+ 64 ; Ytop | Yheight
|
||||||
|
; mcall 13
|
||||||
|
; draw the dump box
|
||||||
|
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||||
|
; mov ecx, 190*65536+232 ; Ytop | Yheight
|
||||||
|
; mcall 13
|
||||||
|
|
||||||
|
; fill the data box
|
||||||
|
mov ebx, [Reg]
|
||||||
|
mov [reg],ebx
|
||||||
|
mov bx, 40 ; upper position
|
||||||
|
mov [stY],bx
|
||||||
|
.print_reg_names:
|
||||||
|
call print_config_reg
|
||||||
|
add [stY],14
|
||||||
|
add [reg], 4
|
||||||
|
mov edx,[Reg]
|
||||||
|
add edx,16*4
|
||||||
|
cmp edx,[reg]
|
||||||
|
ja .print_reg_names
|
||||||
|
|
||||||
|
; fill the status box
|
||||||
|
mcall 4, 210*65536+30,0,str1,12
|
||||||
|
mcall , 210*65536+44, ,str2,
|
||||||
|
mcall , 210*65536+56, ,str3,
|
||||||
|
mov ecx, PCIE_ADDR
|
||||||
|
mov edx, 300*65536+30
|
||||||
|
mov ebx, 8*65536+256
|
||||||
|
mcall 47
|
||||||
|
add dx, 14
|
||||||
|
mov ecx,[Reg]
|
||||||
|
mov esi, 0
|
||||||
|
mcall 47
|
||||||
|
add dx,14
|
||||||
|
mov ecx, [Rct]
|
||||||
|
mcall 47
|
||||||
|
|
||||||
|
; print extra info
|
||||||
|
mov ebx, 120*65536+180
|
||||||
|
xor ecx, ecx
|
||||||
|
mov edx, info1
|
||||||
|
@@:
|
||||||
|
mcall 4,,,,66
|
||||||
|
add edx, 66
|
||||||
|
add ebx, 14
|
||||||
|
cmp edx, info_end
|
||||||
|
jb @b
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;-------------------------------------------------
|
||||||
|
|
||||||
|
pix dd 0x55AACC33
|
||||||
|
pxX dd 200
|
||||||
|
pxY dd 160
|
||||||
|
stX dw 18
|
||||||
|
stY dw 0
|
||||||
|
reg dd 0
|
||||||
|
|
||||||
|
Rct dd 0 ; reg content
|
||||||
|
Reg dd 0x00 ; reg number
|
||||||
|
|
||||||
|
|
||||||
|
title db ' SB710 LPC Config Registers - LPC_Reg ',0
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
reg_str db 'Reg#| hex.Value '
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
str1 db 'bdf address:'
|
||||||
|
str2 db 'Reg. number:'
|
||||||
|
str3 db 'Reg.content:'
|
||||||
|
|
||||||
|
butstr2 db ' << '
|
||||||
|
butstr3 db ' >> '
|
||||||
|
butstr4 db 'Next Page'
|
||||||
|
butstr5 db 'Prev Page'
|
||||||
|
|
||||||
|
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||||
|
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||||
|
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||||
|
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||||
|
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||||
|
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||||
|
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||||
|
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,190
|
||||||
|
|
||||||
|
info1 db '--------------------------- extra info ---------------------------'
|
||||||
|
info2 db '| reg 00[31:16] (DeviceID): 439D = SB7100/710/750 LPC bus |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '------------------------------------------------------------------'
|
||||||
|
info_end:
|
||||||
|
|
||||||
|
I_END: ; end of program
|
||||||
|
|
||||||
|
rd 256
|
||||||
|
|
||||||
|
align 256
|
||||||
|
st_0:
|
344
kernel/branches/Kolibri-A/utilities/SB700/PCI_REG.ASM
Normal file
344
kernel/branches/Kolibri-A/utilities/SB700/PCI_REG.ASM
Normal file
@ -0,0 +1,344 @@
|
|||||||
|
$Revision: 1598 $
|
||||||
|
|
||||||
|
use32 ;
|
||||||
|
org 0x0 ;
|
||||||
|
|
||||||
|
db 'MENUET01' ;
|
||||||
|
dd 0x01 ;
|
||||||
|
dd START ;
|
||||||
|
dd I_END ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
|
||||||
|
include 'MACROS.INC' ;
|
||||||
|
|
||||||
|
PCIE_SPACE equ 0xF0000000
|
||||||
|
PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx PCI Config Registers
|
||||||
|
BOX_COLOR equ 0xE0D8D0
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
mov edx, 0x88
|
||||||
|
add edx, PCIE_ADDR
|
||||||
|
mov eax, 0x00010101
|
||||||
|
mov [edx], eax
|
||||||
|
|
||||||
|
|
||||||
|
red:
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; event waiting
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw window
|
||||||
|
je red ;
|
||||||
|
cmp eax,2 ; key pressed?
|
||||||
|
je key ;
|
||||||
|
cmp eax,3 ; button hit?
|
||||||
|
je button ;
|
||||||
|
|
||||||
|
jmp still ; none of that
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
key: ; key pressed
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; get the button ID
|
||||||
|
cmp ah, 1
|
||||||
|
jne .bt2
|
||||||
|
mcall -1
|
||||||
|
.bt2:
|
||||||
|
cmp ah, 2
|
||||||
|
jne .bt3
|
||||||
|
sub [Reg],4 ; Rg# decrement
|
||||||
|
jmp red
|
||||||
|
.bt3:
|
||||||
|
cmp ah, 3
|
||||||
|
jne .bt4
|
||||||
|
add [Reg],4 ; Rg# increment
|
||||||
|
jmp red
|
||||||
|
.bt4:
|
||||||
|
cmp ah, 4
|
||||||
|
jne .bt5
|
||||||
|
add [Reg],4*16 ; PgDn
|
||||||
|
jmp red
|
||||||
|
.bt5:
|
||||||
|
cmp ah, 5
|
||||||
|
jne .bt6
|
||||||
|
mov edx, [Reg]
|
||||||
|
cmp edx, 4*16
|
||||||
|
jb @f
|
||||||
|
sub edx, 4*16
|
||||||
|
mov [Reg],edx ; PgUp
|
||||||
|
jmp red
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
mov [Reg], edx
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
.bt6:
|
||||||
|
cmp ah, 6
|
||||||
|
jne still
|
||||||
|
mcall 37, 1 ; get the mouse pointer
|
||||||
|
shr eax, 16 ; only X needed
|
||||||
|
sub eax, 124 ; check the left border
|
||||||
|
jb red
|
||||||
|
xor edx, edx
|
||||||
|
mov ebx, 12
|
||||||
|
div ebx
|
||||||
|
cmp eax, 32 ; check the right border
|
||||||
|
jnb red
|
||||||
|
mov ecx, 31
|
||||||
|
sub ecx, eax ; reverse the bit order
|
||||||
|
mov ebx, [Rct]
|
||||||
|
btc ebx, ecx ; invert the bit
|
||||||
|
mov eax, [Reg]
|
||||||
|
add eax, PCIE_ADDR
|
||||||
|
mov [Rct], ebx
|
||||||
|
mov [eax], ebx
|
||||||
|
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
print_config_reg:
|
||||||
|
;------------------------------------------------
|
||||||
|
mov eax, [reg]
|
||||||
|
and eax, 0x0FFC
|
||||||
|
mov ebx, 4*65536+256 ; 4 hex digits
|
||||||
|
mov ecx, eax
|
||||||
|
mov dx,[stX]
|
||||||
|
shl edx,16 ; = X*65536
|
||||||
|
mov dx,[stY] ; = edx + Y
|
||||||
|
mov esi,0
|
||||||
|
mcall 47 ; print reg#
|
||||||
|
mov eax, [reg]
|
||||||
|
add eax, PCIE_ADDR
|
||||||
|
mov ecx, [eax]
|
||||||
|
add edx, 36*65536 ; right column
|
||||||
|
mov ebx, 8*65536+256 ; 8 hex digits
|
||||||
|
mcall 47 ; print config data
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
read_nbconfig:
|
||||||
|
; in: dl = reg# | out: eax = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov ebx, 0xF0000000
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov eax, dword [ebx+edx]
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
write_nbconfig:
|
||||||
|
; in: dl = reg#; eax = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov ebx, 0xF0000000
|
||||||
|
and edx, 0x0FC
|
||||||
|
mov dword [ebx+edx], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
;read_htiunbind:
|
||||||
|
; in: [HTr] = reg# | out: eax = data
|
||||||
|
;------------------------------------------------
|
||||||
|
; mov dl, 0x94
|
||||||
|
; mov al, byte[HTr]
|
||||||
|
; and eax, 0x07C
|
||||||
|
; call write_nbconfig
|
||||||
|
; add dl, 4
|
||||||
|
; call read_nbconfig
|
||||||
|
; ret
|
||||||
|
;------------------------------------------------
|
||||||
|
;write_htiunbind:
|
||||||
|
; in: [HTr] = reg#; ecx = data
|
||||||
|
;------------------------------------------------
|
||||||
|
; mov dl, 0x94
|
||||||
|
; mov al, byte[Reg]
|
||||||
|
; and eax, 0x017C
|
||||||
|
; call write_nbconfig
|
||||||
|
; add dl, 4
|
||||||
|
; mov ecx, eax
|
||||||
|
; call write_nbconfig
|
||||||
|
; sub dl, 4
|
||||||
|
; mov eax, 0x0
|
||||||
|
; call write_nbconfig
|
||||||
|
; ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
draw_window:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 1
|
||||||
|
mcall 0, 600*65536+530, 120*65536+290, 0x1499AABB,,title
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||||
|
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x99AABB ; <<
|
||||||
|
mcall , , 51*65536+ 18, 3, ; >>
|
||||||
|
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; PCIe Cfg
|
||||||
|
mcall , , 51*65536+ 18, 5, ; NB config
|
||||||
|
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||||
|
|
||||||
|
mov edx, [Reg]
|
||||||
|
add edx, PCIE_ADDR ; reading the current reg content
|
||||||
|
mov ecx, [edx]
|
||||||
|
mov [Rct], ecx
|
||||||
|
|
||||||
|
mov ebx, bitstr2
|
||||||
|
inc ebx
|
||||||
|
mov edx, [Rct]
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
xor eax, eax
|
||||||
|
.stringtest:
|
||||||
|
test edx, ecx
|
||||||
|
jz @f
|
||||||
|
mov byte [ebx+eax*2],'I' ; bit dump
|
||||||
|
jmp .nextbit
|
||||||
|
@@:
|
||||||
|
mov byte [ebx+eax*2],'0'
|
||||||
|
.nextbit:
|
||||||
|
inc eax
|
||||||
|
shr ecx, 1
|
||||||
|
jnz .stringtest
|
||||||
|
|
||||||
|
; button txt: X *65536+ Y
|
||||||
|
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||||
|
mcall , 378*65536+57 , , butstr3,
|
||||||
|
mcall , 436*65536+32 , , butstr4,9
|
||||||
|
mcall , 436*65536+57 , , butstr5,
|
||||||
|
|
||||||
|
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||||
|
mcall , 122*65536+110,0 , bitstr1,65
|
||||||
|
mcall , 122*65536+117,0 , bitstr2,65
|
||||||
|
mcall , 122*65536+126,0 , bitstr3,65
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; draw the reg-value box
|
||||||
|
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||||
|
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||||
|
mov edx, BOX_COLOR
|
||||||
|
mcall 13
|
||||||
|
; draw the reg-address box
|
||||||
|
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||||
|
mov cx, 44 ; Yheight only
|
||||||
|
mcall 13
|
||||||
|
; draw ZiS status box
|
||||||
|
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||||
|
; mov ecx, 84*65536+ 64 ; Ytop | Yheight
|
||||||
|
; mcall 13
|
||||||
|
; draw the dump box
|
||||||
|
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||||
|
; mov ecx, 190*65536+232 ; Ytop | Yheight
|
||||||
|
; mcall 13
|
||||||
|
|
||||||
|
; fill the data box
|
||||||
|
mov ebx, [Reg]
|
||||||
|
mov [reg],ebx
|
||||||
|
mov bx, 40 ; upper position
|
||||||
|
mov [stY],bx
|
||||||
|
.print_reg_names:
|
||||||
|
call print_config_reg
|
||||||
|
add [stY],14
|
||||||
|
add [reg], 4
|
||||||
|
mov edx,[Reg]
|
||||||
|
add edx,16*4
|
||||||
|
cmp edx,[reg]
|
||||||
|
ja .print_reg_names
|
||||||
|
|
||||||
|
; fill the status box
|
||||||
|
mcall 4, 210*65536+30,0,str1,12
|
||||||
|
mcall , 210*65536+44, ,str2,
|
||||||
|
mcall , 210*65536+56, ,str3,
|
||||||
|
mov ecx, PCIE_ADDR
|
||||||
|
mov edx, 300*65536+30
|
||||||
|
mov ebx, 8*65536+256
|
||||||
|
mcall 47
|
||||||
|
add dx, 14
|
||||||
|
mov ecx,[Reg]
|
||||||
|
mov esi, 0
|
||||||
|
mcall 47
|
||||||
|
add dx,14
|
||||||
|
mov ecx, [Rct]
|
||||||
|
mcall 47
|
||||||
|
|
||||||
|
; print extra info
|
||||||
|
mov ebx, 120*65536+180
|
||||||
|
xor ecx, ecx
|
||||||
|
mov edx, info1
|
||||||
|
@@:
|
||||||
|
mcall 4,,,,66
|
||||||
|
add edx, 66
|
||||||
|
add ebx, 14
|
||||||
|
cmp edx, info_end
|
||||||
|
jb @b
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;-------------------------------------------------
|
||||||
|
|
||||||
|
pix dd 0x55AACC33
|
||||||
|
pxX dd 200
|
||||||
|
pxY dd 160
|
||||||
|
stX dw 18
|
||||||
|
stY dw 0
|
||||||
|
reg dd 0
|
||||||
|
|
||||||
|
Rct dd 0 ; reg content
|
||||||
|
Reg dd 0x00 ; reg number
|
||||||
|
|
||||||
|
|
||||||
|
title db ' SB710 PCI Config Registers - PCI_Reg ',0
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
reg_str db 'Reg#| hex.Value '
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
str1 db 'bdf address:'
|
||||||
|
str2 db 'Reg. number:'
|
||||||
|
str3 db 'Reg.content:'
|
||||||
|
|
||||||
|
butstr2 db ' << '
|
||||||
|
butstr3 db ' >> '
|
||||||
|
butstr4 db 'Next Page'
|
||||||
|
butstr5 db 'Prev Page'
|
||||||
|
|
||||||
|
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||||
|
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||||
|
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||||
|
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||||
|
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||||
|
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||||
|
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||||
|
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,190
|
||||||
|
|
||||||
|
info1 db '--------------------------- extra info ---------------------------'
|
||||||
|
info2 db '| reg 00[31:16] (DeviceID): 4385=SB7100/710/750 SMBus module |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '------------------------------------------------------------------'
|
||||||
|
info_end:
|
||||||
|
|
||||||
|
I_END: ; end of program
|
||||||
|
|
||||||
|
rd 256
|
||||||
|
|
||||||
|
align 256
|
||||||
|
st_0:
|
314
kernel/branches/Kolibri-A/utilities/SB700/SB_CM_RG.ASM
Normal file
314
kernel/branches/Kolibri-A/utilities/SB700/SB_CM_RG.ASM
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
$Revision: 1598 $
|
||||||
|
|
||||||
|
use32 ;
|
||||||
|
org 0x0 ;
|
||||||
|
|
||||||
|
db 'MENUET01' ;
|
||||||
|
dd 0x01 ;
|
||||||
|
dd START ;
|
||||||
|
dd I_END ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
|
||||||
|
include 'MACROS.INC' ;
|
||||||
|
|
||||||
|
SB_PM_INDEX equ 0xC50
|
||||||
|
SB_PM_DATA equ 0xC51
|
||||||
|
BOX_COLOR equ 0xD0C8C0
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
red:
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; event waiting
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw window
|
||||||
|
je red ;
|
||||||
|
cmp eax,2 ; key pressed?
|
||||||
|
je key ;
|
||||||
|
cmp eax,3 ; button hit?
|
||||||
|
je button ;
|
||||||
|
|
||||||
|
jmp still ; none of that
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
key: ; key pressed
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; get the button ID
|
||||||
|
cmp ah, 1
|
||||||
|
jne .bt2
|
||||||
|
mcall -1
|
||||||
|
.bt2:
|
||||||
|
cmp ah, 2
|
||||||
|
jne .bt3
|
||||||
|
dec [Reg] ; Rg# decrement
|
||||||
|
jmp red
|
||||||
|
.bt3:
|
||||||
|
cmp ah, 3
|
||||||
|
jne .bt4
|
||||||
|
inc [Reg] ; Rg# increment
|
||||||
|
jmp red
|
||||||
|
.bt4:
|
||||||
|
cmp ah, 4
|
||||||
|
jne .bt5
|
||||||
|
add [Reg],16 ; PgDn
|
||||||
|
jmp red
|
||||||
|
.bt5:
|
||||||
|
cmp ah, 5
|
||||||
|
jne .bt6
|
||||||
|
mov edx, [Reg]
|
||||||
|
cmp edx, 16
|
||||||
|
jb @f
|
||||||
|
sub edx, 16
|
||||||
|
mov [Reg],edx ; PgUp
|
||||||
|
jmp red
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
mov [Reg], edx
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
.bt6:
|
||||||
|
cmp ah, 6
|
||||||
|
jne still
|
||||||
|
mcall 37, 1 ; get the mouse pointer
|
||||||
|
shr eax, 16 ; only X needed
|
||||||
|
sub eax, 124 ; check the left border
|
||||||
|
jb red
|
||||||
|
xor edx, edx
|
||||||
|
mov ebx, 12
|
||||||
|
div ebx
|
||||||
|
cmp eax, 32 ; check the right border
|
||||||
|
jnb red
|
||||||
|
mov ecx, 31
|
||||||
|
sub ecx, eax ; reverse the bit order
|
||||||
|
mov ebx, [Rct]
|
||||||
|
btc ebx, ecx ; invert the bit
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [Rct], ebx
|
||||||
|
call write_sb_pm_reg
|
||||||
|
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
print_config_reg:
|
||||||
|
;------------------------------------------------
|
||||||
|
mov eax, [Reg]
|
||||||
|
; and eax, 0x0FF
|
||||||
|
mov ebx, 3*65536+256 ; 3 hex digits
|
||||||
|
mov ecx, eax
|
||||||
|
mov dx,[stX]
|
||||||
|
shl edx,16 ; = X*65536
|
||||||
|
mov dx,[stY] ; = edx + Y
|
||||||
|
mov esi,0
|
||||||
|
mcall 47 ; print reg#
|
||||||
|
mov ecx, edx
|
||||||
|
call read_sb_pm_reg
|
||||||
|
mov edx, ecx
|
||||||
|
mov ecx, eax
|
||||||
|
add edx, 36*65536 ; right column
|
||||||
|
mov ebx, 8*65536+256 ; 8 hex digits
|
||||||
|
mcall 47 ; print config data
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
read_sb_pm_reg:
|
||||||
|
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_PM_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
in al, dx
|
||||||
|
mov [Rct], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
write_sb_pm_reg:
|
||||||
|
; in: [Reg] = reg#; [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_PM_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
mov eax, [Rct]
|
||||||
|
out dx, al
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
draw_window:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 1
|
||||||
|
mcall 0, 600*65536+530, 410*65536+290, 0x14748090,,title
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||||
|
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||||
|
mcall , , 51*65536+ 18, 3, ; >>
|
||||||
|
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||||
|
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||||
|
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||||
|
|
||||||
|
call read_sb_pm_reg
|
||||||
|
|
||||||
|
mov ebx, bitstr2
|
||||||
|
inc ebx
|
||||||
|
mov edx, [Rct]
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
xor eax, eax
|
||||||
|
.stringtest:
|
||||||
|
test edx, ecx
|
||||||
|
jz @f
|
||||||
|
mov byte [ebx+eax*2],'I' ; bit dump
|
||||||
|
jmp .nextbit
|
||||||
|
@@:
|
||||||
|
mov byte [ebx+eax*2],'0'
|
||||||
|
.nextbit:
|
||||||
|
inc eax
|
||||||
|
shr ecx, 1
|
||||||
|
jnz .stringtest
|
||||||
|
|
||||||
|
; button txt: X *65536+ Y
|
||||||
|
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||||
|
mcall , 378*65536+57 , , butstr3,
|
||||||
|
mcall , 436*65536+32 , , butstr4,9
|
||||||
|
mcall , 436*65536+57 , , butstr5,
|
||||||
|
|
||||||
|
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||||
|
mcall , 122*65536+110,0 , bitstr1,65
|
||||||
|
mcall , 122*65536+117,0 , bitstr2,65
|
||||||
|
mcall , 122*65536+126,0 , bitstr3,65
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; draw the reg-value box
|
||||||
|
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||||
|
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||||
|
mov edx, BOX_COLOR
|
||||||
|
mcall 13
|
||||||
|
; draw the reg-address box
|
||||||
|
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||||
|
mov cx, 44 ; Yheight only
|
||||||
|
mcall 13
|
||||||
|
|
||||||
|
; fill the data box
|
||||||
|
mov bx, 40 ; upper position
|
||||||
|
mov [stY],bx
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [reg], eax ; store original#
|
||||||
|
.print_reg_names:
|
||||||
|
call print_config_reg
|
||||||
|
add [stY],14
|
||||||
|
inc [Reg]
|
||||||
|
mov edx,[reg]
|
||||||
|
mov eax, 16
|
||||||
|
add eax, edx
|
||||||
|
cmp eax,[Reg]
|
||||||
|
ja .print_reg_names
|
||||||
|
mov [Reg], edx ; restore original#
|
||||||
|
|
||||||
|
; fill the status box
|
||||||
|
mcall 4, 210*65536+30,0,str1,12
|
||||||
|
mcall , 210*65536+44, ,str2,
|
||||||
|
mcall , 210*65536+56, ,str3,
|
||||||
|
call read_sb_pm_reg
|
||||||
|
mov ecx, SB_PM_DATA
|
||||||
|
mov edx, 300*65536+30
|
||||||
|
mov ebx, 8*65536+256
|
||||||
|
mcall 47
|
||||||
|
add dx, 14
|
||||||
|
mov ecx,[Reg]
|
||||||
|
mov esi, 0
|
||||||
|
mcall 47
|
||||||
|
add dx,14
|
||||||
|
mov ecx, [Rct]
|
||||||
|
mcall 47
|
||||||
|
|
||||||
|
; print extra info
|
||||||
|
mov ebx, 120*65536+170
|
||||||
|
xor ecx, ecx
|
||||||
|
mov edx, info1
|
||||||
|
@@:
|
||||||
|
mcall 4,,,,66
|
||||||
|
add edx, 66
|
||||||
|
add ebx, 14
|
||||||
|
cmp edx, info_end
|
||||||
|
jb @b
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;-------------------------------------------------
|
||||||
|
|
||||||
|
pix dd 0x55AACC33
|
||||||
|
pxX dd 200
|
||||||
|
pxY dd 160
|
||||||
|
stX dw 18
|
||||||
|
stY dw 0
|
||||||
|
reg dd 0
|
||||||
|
|
||||||
|
Rct dd 0 ; reg content
|
||||||
|
Reg dd 0x00 ; reg number
|
||||||
|
|
||||||
|
|
||||||
|
title db ' SB710 Client Management Registers - IO_CM_Reg',0
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
reg_str db 'Reg#| hex.Value '
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
str1 db 'bdf address:'
|
||||||
|
str2 db 'Reg. number:'
|
||||||
|
str3 db 'Reg.content:'
|
||||||
|
|
||||||
|
butstr2 db ' << '
|
||||||
|
butstr3 db ' >> '
|
||||||
|
butstr4 db 'Next Page'
|
||||||
|
butstr5 db 'Prev Page'
|
||||||
|
|
||||||
|
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||||
|
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||||
|
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||||
|
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||||
|
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||||
|
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||||
|
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||||
|
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,190
|
||||||
|
|
||||||
|
info1 db '------------- PM REG -------------'
|
||||||
|
db '| see AMD SB700/710/750 Register Reference Guide, pp.172-173 |'
|
||||||
|
info2 db '| reg 00 - IdRegister |'
|
||||||
|
db '| reg 02 [0]: logical status of TALERT/GPIO64 input (read-clears)|'
|
||||||
|
db '| reg 03 [1]: generate SMI# ipon TALERT |'
|
||||||
|
db '| reg 12 - I2C Control |'
|
||||||
|
db '| reg 13 [7:6]: GpmPortStatus (00=read; 01=OE; 10=output) |'
|
||||||
|
db '------------------------------------------------------------------'
|
||||||
|
info_end:
|
||||||
|
|
||||||
|
I_END: ; end of program
|
||||||
|
|
||||||
|
rd 256
|
||||||
|
|
||||||
|
align 256
|
||||||
|
st_0:
|
331
kernel/branches/Kolibri-A/utilities/SB700/SB_IO_RG.ASM
Normal file
331
kernel/branches/Kolibri-A/utilities/SB700/SB_IO_RG.ASM
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
$Revision: 1598 $
|
||||||
|
|
||||||
|
use32 ;
|
||||||
|
org 0x0 ;
|
||||||
|
|
||||||
|
db 'MENUET01' ;
|
||||||
|
dd 0x01 ;
|
||||||
|
dd START ;
|
||||||
|
dd I_END ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
|
||||||
|
include 'MACROS.INC' ;
|
||||||
|
|
||||||
|
SB_SIO_INDEX equ 0x2e
|
||||||
|
SB_SIO_DATA equ 0x2f
|
||||||
|
BOX_COLOR equ 0xD0C8C0
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
call enter_cfg_mode ; call this once
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
red:
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; event waiting
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw window
|
||||||
|
je red ;
|
||||||
|
cmp eax,2 ; key pressed?
|
||||||
|
je key ;
|
||||||
|
cmp eax,3 ; button hit?
|
||||||
|
je button ;
|
||||||
|
|
||||||
|
jmp still ; none of that
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
key: ; key pressed
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; get the button ID
|
||||||
|
cmp ah, 1
|
||||||
|
jne .bt2
|
||||||
|
|
||||||
|
mov byte[Reg], 2
|
||||||
|
mov byte[Rct], 2
|
||||||
|
call write_sio_cfg ; exit config-mode on exit
|
||||||
|
mcall -1
|
||||||
|
; --------------
|
||||||
|
.bt2:
|
||||||
|
cmp ah, 2
|
||||||
|
jne .bt3
|
||||||
|
dec [Reg] ; Rg# decrement
|
||||||
|
jmp red
|
||||||
|
.bt3:
|
||||||
|
cmp ah, 3
|
||||||
|
jne .bt4
|
||||||
|
inc [Reg] ; Rg# increment
|
||||||
|
jmp red
|
||||||
|
.bt4:
|
||||||
|
cmp ah, 4
|
||||||
|
jne .bt5
|
||||||
|
add [Reg],16 ; PgDn
|
||||||
|
jmp red
|
||||||
|
.bt5:
|
||||||
|
cmp ah, 5
|
||||||
|
jne .bt6
|
||||||
|
mov edx, [Reg]
|
||||||
|
cmp edx, 16
|
||||||
|
jb @f
|
||||||
|
sub edx, 16
|
||||||
|
mov [Reg],edx ; PgUp
|
||||||
|
jmp red
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
mov [Reg], edx
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
.bt6:
|
||||||
|
cmp ah, 6
|
||||||
|
jne still
|
||||||
|
mcall 37, 1 ; get the mouse pointer
|
||||||
|
shr eax, 16 ; only X needed
|
||||||
|
sub eax, 124 ; check the left border
|
||||||
|
jb red
|
||||||
|
xor edx, edx
|
||||||
|
mov ebx, 12
|
||||||
|
div ebx
|
||||||
|
cmp eax, 32 ; check the right border
|
||||||
|
jnb red
|
||||||
|
mov ecx, 31
|
||||||
|
sub ecx, eax ; reverse the bit order
|
||||||
|
mov ebx, [Rct]
|
||||||
|
btc ebx, ecx ; invert the bit
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [Rct], ebx
|
||||||
|
call write_sio_cfg
|
||||||
|
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
print_config_reg:
|
||||||
|
;------------------------------------------------
|
||||||
|
mov eax, [Reg]
|
||||||
|
; and eax, 0x0FF
|
||||||
|
mov ebx, 3*65536+256 ; 3 hex digits
|
||||||
|
mov ecx, eax
|
||||||
|
mov dx,[stX]
|
||||||
|
shl edx,16 ; = X*65536
|
||||||
|
mov dx,[stY] ; = edx + Y
|
||||||
|
mov esi,0
|
||||||
|
mcall 47 ; print reg#
|
||||||
|
mov ecx, edx
|
||||||
|
call read_sio_cfg
|
||||||
|
mov edx, ecx
|
||||||
|
mov ecx, eax
|
||||||
|
add edx, 36*65536 ; right column
|
||||||
|
mov ebx, 8*65536+256 ; 8 hex digits
|
||||||
|
mcall 47 ; print config data
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
read_sio_cfg:
|
||||||
|
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_SIO_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
in al, dx
|
||||||
|
mov [Rct], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
write_sio_cfg:
|
||||||
|
; in: [Reg] = reg#; [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_SIO_INDEX
|
||||||
|
mov eax, [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
mov eax, [Rct]
|
||||||
|
out dx, al
|
||||||
|
ret
|
||||||
|
;------------------------------------------------
|
||||||
|
enter_cfg_mode:
|
||||||
|
; the magic sequence to unlock the port
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_SIO_INDEX
|
||||||
|
mov eax, 0x55550187 ; low byte first
|
||||||
|
out dx, al
|
||||||
|
shr eax, 8
|
||||||
|
out dx, al
|
||||||
|
shr eax, 8
|
||||||
|
out dx, al
|
||||||
|
shr eax, 8
|
||||||
|
out dx, al
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
draw_window:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 1
|
||||||
|
mcall 0, 600*65536+530, 410*65536+290, 0x14748090,,title
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||||
|
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||||
|
mcall , , 51*65536+ 18, 3, ; >>
|
||||||
|
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||||
|
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||||
|
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||||
|
|
||||||
|
call read_sio_cfg
|
||||||
|
|
||||||
|
mov ebx, bitstr2
|
||||||
|
inc ebx
|
||||||
|
mov edx, [Rct]
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
xor eax, eax
|
||||||
|
.stringtest:
|
||||||
|
test edx, ecx
|
||||||
|
jz @f
|
||||||
|
mov byte [ebx+eax*2],'I' ; bit dump
|
||||||
|
jmp .nextbit
|
||||||
|
@@:
|
||||||
|
mov byte [ebx+eax*2],'0'
|
||||||
|
.nextbit:
|
||||||
|
inc eax
|
||||||
|
shr ecx, 1
|
||||||
|
jnz .stringtest
|
||||||
|
|
||||||
|
; button txt: X *65536+ Y
|
||||||
|
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||||
|
mcall , 378*65536+57 , , butstr3,
|
||||||
|
mcall , 436*65536+32 , , butstr4,9
|
||||||
|
mcall , 436*65536+57 , , butstr5,
|
||||||
|
|
||||||
|
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||||
|
mcall , 122*65536+110,0 , bitstr1,65
|
||||||
|
mcall , 122*65536+117,0 , bitstr2,65
|
||||||
|
mcall , 122*65536+126,0 , bitstr3,65
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; draw the reg-value box
|
||||||
|
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||||
|
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||||
|
mov edx, BOX_COLOR
|
||||||
|
mcall 13
|
||||||
|
; draw the reg-address box
|
||||||
|
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||||
|
mov cx, 44 ; Yheight only
|
||||||
|
mcall 13
|
||||||
|
|
||||||
|
; fill the data box
|
||||||
|
mov bx, 40 ; upper position
|
||||||
|
mov [stY],bx
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [reg], eax ; store original#
|
||||||
|
.print_reg_names:
|
||||||
|
call print_config_reg
|
||||||
|
add [stY],14
|
||||||
|
inc [Reg]
|
||||||
|
mov edx,[reg]
|
||||||
|
mov eax, 16
|
||||||
|
add eax, edx
|
||||||
|
cmp eax,[Reg]
|
||||||
|
ja .print_reg_names
|
||||||
|
mov [Reg], edx ; restore original#
|
||||||
|
|
||||||
|
; fill the status box
|
||||||
|
mcall 4, 210*65536+30,0,str1,12
|
||||||
|
mcall , 210*65536+44, ,str2,
|
||||||
|
mcall , 210*65536+56, ,str3,
|
||||||
|
call read_sio_cfg
|
||||||
|
mov ecx, SB_SIO_DATA
|
||||||
|
mov edx, 300*65536+30
|
||||||
|
mov ebx, 8*65536+256
|
||||||
|
mcall 47
|
||||||
|
add dx, 14
|
||||||
|
mov ecx,[Reg]
|
||||||
|
mov esi, 0
|
||||||
|
mcall 47
|
||||||
|
add dx,14
|
||||||
|
mov ecx, [Rct]
|
||||||
|
mcall 47
|
||||||
|
|
||||||
|
; print extra info
|
||||||
|
mov ebx, 120*65536+170
|
||||||
|
xor ecx, ecx
|
||||||
|
mov edx, info1
|
||||||
|
@@:
|
||||||
|
mcall 4,,,,66
|
||||||
|
add edx, 66
|
||||||
|
add ebx, 14
|
||||||
|
cmp edx, info_end
|
||||||
|
jb @b
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;-------------------------------------------------
|
||||||
|
|
||||||
|
pix dd 0x55AACC33
|
||||||
|
pxX dd 200
|
||||||
|
pxY dd 160
|
||||||
|
stX dw 18
|
||||||
|
stY dw 0
|
||||||
|
reg dd 0
|
||||||
|
|
||||||
|
Rct dd 0 ; reg content
|
||||||
|
Reg dd 0x00 ; reg number
|
||||||
|
|
||||||
|
|
||||||
|
title db ' IT8712F -- Super IO control - SIO_Reg',0
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
reg_str db 'Reg#| hex.Value '
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
str1 db 'bdf address:'
|
||||||
|
str2 db 'Reg. number:'
|
||||||
|
str3 db 'Reg.content:'
|
||||||
|
|
||||||
|
butstr2 db ' << '
|
||||||
|
butstr3 db ' >> '
|
||||||
|
butstr4 db 'Next Page'
|
||||||
|
butstr5 db 'Prev Page'
|
||||||
|
|
||||||
|
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||||
|
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||||
|
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||||
|
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||||
|
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||||
|
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||||
|
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||||
|
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,190
|
||||||
|
|
||||||
|
info1 db '------------- SIO REG -------------'
|
||||||
|
db '| see AMD SB700/710/750 Register Reference Guide, pp. |'
|
||||||
|
info2 db '| |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '------------------------------------------------------------------'
|
||||||
|
info_end:
|
||||||
|
|
||||||
|
I_END: ; end of program
|
||||||
|
|
||||||
|
rd 256
|
||||||
|
|
||||||
|
align 256
|
||||||
|
st_0:
|
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM2RG.ASM
Normal file
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM2RG.ASM
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
$Revision: 1598 $
|
||||||
|
|
||||||
|
use32 ;
|
||||||
|
org 0x0 ;
|
||||||
|
|
||||||
|
db 'MENUET01' ;
|
||||||
|
dd 0x01 ;
|
||||||
|
dd START ;
|
||||||
|
dd I_END ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
|
||||||
|
include 'MACROS.INC' ;
|
||||||
|
|
||||||
|
SB_PM2_INDEX equ 0xCD0
|
||||||
|
SB_PM2_DATA equ 0xCD1
|
||||||
|
BOX_COLOR equ 0xD0C8C0
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
red:
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; event waiting
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw window
|
||||||
|
je red ;
|
||||||
|
cmp eax,2 ; key pressed?
|
||||||
|
je key ;
|
||||||
|
cmp eax,3 ; button hit?
|
||||||
|
je button ;
|
||||||
|
|
||||||
|
jmp still ; none of that
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
key: ; key pressed
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; get the button ID
|
||||||
|
cmp ah, 1
|
||||||
|
jne .bt2
|
||||||
|
mcall -1
|
||||||
|
.bt2:
|
||||||
|
cmp ah, 2
|
||||||
|
jne .bt3
|
||||||
|
dec [Reg] ; Rg# decrement
|
||||||
|
jmp red
|
||||||
|
.bt3:
|
||||||
|
cmp ah, 3
|
||||||
|
jne .bt4
|
||||||
|
inc [Reg] ; Rg# increment
|
||||||
|
jmp red
|
||||||
|
.bt4:
|
||||||
|
cmp ah, 4
|
||||||
|
jne .bt5
|
||||||
|
add [Reg],16 ; PgDn
|
||||||
|
jmp red
|
||||||
|
.bt5:
|
||||||
|
cmp ah, 5
|
||||||
|
jne .bt6
|
||||||
|
mov edx, [Reg]
|
||||||
|
cmp edx, 16
|
||||||
|
jb @f
|
||||||
|
sub edx, 16
|
||||||
|
mov [Reg],edx ; PgUp
|
||||||
|
jmp red
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
mov [Reg], edx
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
.bt6:
|
||||||
|
cmp ah, 6
|
||||||
|
jne still
|
||||||
|
mcall 37, 1 ; get the mouse pointer
|
||||||
|
shr eax, 16 ; only X needed
|
||||||
|
sub eax, 124 ; check the left border
|
||||||
|
jb red
|
||||||
|
xor edx, edx
|
||||||
|
mov ebx, 12
|
||||||
|
div ebx
|
||||||
|
cmp eax, 32 ; check the right border
|
||||||
|
jnb red
|
||||||
|
mov ecx, 31
|
||||||
|
sub ecx, eax ; reverse the bit order
|
||||||
|
mov ebx, [Rct]
|
||||||
|
btc ebx, ecx ; invert the bit
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [Rct], ebx
|
||||||
|
call write_sb_pm2_reg
|
||||||
|
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
print_config_reg:
|
||||||
|
;------------------------------------------------
|
||||||
|
mov eax, [Reg]
|
||||||
|
; and eax, 0x0FF
|
||||||
|
mov ebx, 3*65536+256 ; 3 hex digits
|
||||||
|
mov ecx, eax
|
||||||
|
mov dx,[stX]
|
||||||
|
shl edx,16 ; = X*65536
|
||||||
|
mov dx,[stY] ; = edx + Y
|
||||||
|
mov esi,0
|
||||||
|
mcall 47 ; print reg#
|
||||||
|
mov ecx, edx
|
||||||
|
call read_sb_pm2_reg
|
||||||
|
mov edx, ecx
|
||||||
|
mov ecx, eax
|
||||||
|
add edx, 36*65536 ; right column
|
||||||
|
mov ebx, 8*65536+256 ; 8 hex digits
|
||||||
|
mcall 47 ; print config data
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
read_sb_pm2_reg:
|
||||||
|
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_PM2_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
in al, dx
|
||||||
|
mov [Rct], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
write_sb_pm2_reg:
|
||||||
|
; in: [Reg] = reg#; [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_PM2_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
mov eax, [Rct]
|
||||||
|
out dx, al
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
draw_window:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 1
|
||||||
|
mcall 0, 600*65536+530, 410*65536+290, 0x14848090,,title
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||||
|
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||||
|
mcall , , 51*65536+ 18, 3, ; >>
|
||||||
|
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||||
|
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||||
|
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||||
|
|
||||||
|
call read_sb_pm2_reg
|
||||||
|
|
||||||
|
mov ebx, bitstr2
|
||||||
|
inc ebx
|
||||||
|
mov edx, [Rct]
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
xor eax, eax
|
||||||
|
.stringtest:
|
||||||
|
test edx, ecx
|
||||||
|
jz @f
|
||||||
|
mov byte [ebx+eax*2],'I' ; bit dump
|
||||||
|
jmp .nextbit
|
||||||
|
@@:
|
||||||
|
mov byte [ebx+eax*2],'0'
|
||||||
|
.nextbit:
|
||||||
|
inc eax
|
||||||
|
shr ecx, 1
|
||||||
|
jnz .stringtest
|
||||||
|
|
||||||
|
; button txt: X *65536+ Y
|
||||||
|
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||||
|
mcall , 378*65536+57 , , butstr3,
|
||||||
|
mcall , 436*65536+32 , , butstr4,9
|
||||||
|
mcall , 436*65536+57 , , butstr5,
|
||||||
|
|
||||||
|
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||||
|
mcall , 122*65536+110,0 , bitstr1,65
|
||||||
|
mcall , 122*65536+117,0 , bitstr2,65
|
||||||
|
mcall , 122*65536+126,0 , bitstr3,65
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; draw the reg-value box
|
||||||
|
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||||
|
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||||
|
mov edx, BOX_COLOR
|
||||||
|
mcall 13
|
||||||
|
; draw the reg-address box
|
||||||
|
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||||
|
mov cx, 44 ; Yheight only
|
||||||
|
mcall 13
|
||||||
|
|
||||||
|
; fill the data box
|
||||||
|
mov bx, 40 ; upper position
|
||||||
|
mov [stY],bx
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [reg], eax ; store original#
|
||||||
|
.print_reg_names:
|
||||||
|
call print_config_reg
|
||||||
|
add [stY],14
|
||||||
|
inc [Reg]
|
||||||
|
mov edx,[reg]
|
||||||
|
mov eax, 16
|
||||||
|
add eax, edx
|
||||||
|
cmp eax,[Reg]
|
||||||
|
ja .print_reg_names
|
||||||
|
mov [Reg], edx ; restore original#
|
||||||
|
|
||||||
|
; fill the status box
|
||||||
|
mcall 4, 210*65536+30,0,str1,12
|
||||||
|
mcall , 210*65536+44, ,str2,
|
||||||
|
mcall , 210*65536+56, ,str3,
|
||||||
|
call read_sb_pm2_reg
|
||||||
|
mov ecx, SB_PM2_DATA
|
||||||
|
mov edx, 300*65536+30
|
||||||
|
mov ebx, 8*65536+256
|
||||||
|
mcall 47
|
||||||
|
add dx, 14
|
||||||
|
mov ecx,[Reg]
|
||||||
|
mov esi, 0
|
||||||
|
mcall 47
|
||||||
|
add dx,14
|
||||||
|
mov ecx, [Rct]
|
||||||
|
mcall 47
|
||||||
|
|
||||||
|
; print extra info
|
||||||
|
mov ebx, 120*65536+170
|
||||||
|
xor ecx, ecx
|
||||||
|
mov edx, info1
|
||||||
|
@@:
|
||||||
|
mcall 4,,,,66
|
||||||
|
add edx, 66
|
||||||
|
add ebx, 14
|
||||||
|
cmp edx, info_end
|
||||||
|
jb @b
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;-------------------------------------------------
|
||||||
|
|
||||||
|
pix dd 0x55AACC33
|
||||||
|
pxX dd 200
|
||||||
|
pxY dd 160
|
||||||
|
stX dw 18
|
||||||
|
stY dw 0
|
||||||
|
reg dd 0
|
||||||
|
|
||||||
|
Rct dd 0 ; reg content
|
||||||
|
Reg dd 0x00 ; reg number
|
||||||
|
|
||||||
|
|
||||||
|
title db ' SB710 PowerManagement (Block2) registers - PM2_Reg',0
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
reg_str db 'Reg#| hex.Value '
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
str1 db 'bdf address:'
|
||||||
|
str2 db 'Reg. number:'
|
||||||
|
str3 db 'Reg.content:'
|
||||||
|
|
||||||
|
butstr2 db ' << '
|
||||||
|
butstr3 db ' >> '
|
||||||
|
butstr4 db 'Next Page'
|
||||||
|
butstr5 db 'Prev Page'
|
||||||
|
|
||||||
|
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||||
|
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||||
|
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||||
|
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||||
|
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||||
|
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||||
|
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||||
|
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,190
|
||||||
|
|
||||||
|
info1 db '------------- PM2 REG ------------'
|
||||||
|
db '| see AMD SB700/710/750 Register Reference Guide, pp.228-258 |'
|
||||||
|
info2 db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg F6: Gpm3-0pull; F7: Gpm7-4pull; F8: Gpm9-8pull |'
|
||||||
|
db '------------------------------------------------------------------'
|
||||||
|
info_end:
|
||||||
|
|
||||||
|
I_END: ; end of program
|
||||||
|
|
||||||
|
rd 256
|
||||||
|
|
||||||
|
align 256
|
||||||
|
st_0:
|
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM_RG.ASM
Normal file
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM_RG.ASM
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
$Revision: 1598 $
|
||||||
|
|
||||||
|
use32 ;
|
||||||
|
org 0x0 ;
|
||||||
|
|
||||||
|
db 'MENUET01' ;
|
||||||
|
dd 0x01 ;
|
||||||
|
dd START ;
|
||||||
|
dd I_END ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x1000 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
dd 0x0 ;
|
||||||
|
|
||||||
|
include 'MACROS.INC' ;
|
||||||
|
|
||||||
|
SB_PM_INDEX equ 0xCD6
|
||||||
|
SB_PM_DATA equ 0xCD7
|
||||||
|
BOX_COLOR equ 0xD0C8C0
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
red:
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; event waiting
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw window
|
||||||
|
je red ;
|
||||||
|
cmp eax,2 ; key pressed?
|
||||||
|
je key ;
|
||||||
|
cmp eax,3 ; button hit?
|
||||||
|
je button ;
|
||||||
|
|
||||||
|
jmp still ; none of that
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
key: ; key pressed
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; get the button ID
|
||||||
|
cmp ah, 1
|
||||||
|
jne .bt2
|
||||||
|
mcall -1
|
||||||
|
.bt2:
|
||||||
|
cmp ah, 2
|
||||||
|
jne .bt3
|
||||||
|
dec [Reg] ; Rg# decrement
|
||||||
|
jmp red
|
||||||
|
.bt3:
|
||||||
|
cmp ah, 3
|
||||||
|
jne .bt4
|
||||||
|
inc [Reg] ; Rg# increment
|
||||||
|
jmp red
|
||||||
|
.bt4:
|
||||||
|
cmp ah, 4
|
||||||
|
jne .bt5
|
||||||
|
add [Reg],16 ; PgDn
|
||||||
|
jmp red
|
||||||
|
.bt5:
|
||||||
|
cmp ah, 5
|
||||||
|
jne .bt6
|
||||||
|
mov edx, [Reg]
|
||||||
|
cmp edx, 16
|
||||||
|
jb @f
|
||||||
|
sub edx, 16
|
||||||
|
mov [Reg],edx ; PgUp
|
||||||
|
jmp red
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
mov [Reg], edx
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
.bt6:
|
||||||
|
cmp ah, 6
|
||||||
|
jne still
|
||||||
|
mcall 37, 1 ; get the mouse pointer
|
||||||
|
shr eax, 16 ; only X needed
|
||||||
|
sub eax, 124 ; check the left border
|
||||||
|
jb red
|
||||||
|
xor edx, edx
|
||||||
|
mov ebx, 12
|
||||||
|
div ebx
|
||||||
|
cmp eax, 32 ; check the right border
|
||||||
|
jnb red
|
||||||
|
mov ecx, 31
|
||||||
|
sub ecx, eax ; reverse the bit order
|
||||||
|
mov ebx, [Rct]
|
||||||
|
btc ebx, ecx ; invert the bit
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [Rct], ebx
|
||||||
|
call write_sb_pm_reg
|
||||||
|
|
||||||
|
jmp red
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
print_config_reg:
|
||||||
|
;------------------------------------------------
|
||||||
|
mov eax, [Reg]
|
||||||
|
; and eax, 0x0FF
|
||||||
|
mov ebx, 3*65536+256 ; 3 hex digits
|
||||||
|
mov ecx, eax
|
||||||
|
mov dx,[stX]
|
||||||
|
shl edx,16 ; = X*65536
|
||||||
|
mov dx,[stY] ; = edx + Y
|
||||||
|
mov esi,0
|
||||||
|
mcall 47 ; print reg#
|
||||||
|
mov ecx, edx
|
||||||
|
call read_sb_pm_reg
|
||||||
|
mov edx, ecx
|
||||||
|
mov ecx, eax
|
||||||
|
add edx, 36*65536 ; right column
|
||||||
|
mov ebx, 8*65536+256 ; 8 hex digits
|
||||||
|
mcall 47 ; print config data
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
read_sb_pm_reg:
|
||||||
|
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_PM_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
in al, dx
|
||||||
|
mov [Rct], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
write_sb_pm_reg:
|
||||||
|
; in: [Reg] = reg#; [Rct] = data
|
||||||
|
;------------------------------------------------
|
||||||
|
mov dx, SB_PM_INDEX
|
||||||
|
xor eax, eax
|
||||||
|
mov al, byte [Reg]
|
||||||
|
out dx, al
|
||||||
|
inc dl
|
||||||
|
mov eax, [Rct]
|
||||||
|
out dx, al
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------
|
||||||
|
draw_window:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 1
|
||||||
|
mcall 0, 600*65536+530, 410*65536+290, 0x14748090,,title
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||||
|
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||||
|
mcall , , 51*65536+ 18, 3, ; >>
|
||||||
|
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||||
|
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||||
|
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||||
|
|
||||||
|
call read_sb_pm_reg
|
||||||
|
|
||||||
|
mov ebx, bitstr2
|
||||||
|
inc ebx
|
||||||
|
mov edx, [Rct]
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
xor eax, eax
|
||||||
|
.stringtest:
|
||||||
|
test edx, ecx
|
||||||
|
jz @f
|
||||||
|
mov byte [ebx+eax*2],'I' ; bit dump
|
||||||
|
jmp .nextbit
|
||||||
|
@@:
|
||||||
|
mov byte [ebx+eax*2],'0'
|
||||||
|
.nextbit:
|
||||||
|
inc eax
|
||||||
|
shr ecx, 1
|
||||||
|
jnz .stringtest
|
||||||
|
|
||||||
|
; button txt: X *65536+ Y
|
||||||
|
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||||
|
mcall , 378*65536+57 , , butstr3,
|
||||||
|
mcall , 436*65536+32 , , butstr4,9
|
||||||
|
mcall , 436*65536+57 , , butstr5,
|
||||||
|
|
||||||
|
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||||
|
mcall , 122*65536+110,0 , bitstr1,65
|
||||||
|
mcall , 122*65536+117,0 , bitstr2,65
|
||||||
|
mcall , 122*65536+126,0 , bitstr3,65
|
||||||
|
; -----------------------------------------------------------------
|
||||||
|
; draw the reg-value box
|
||||||
|
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||||
|
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||||
|
mov edx, BOX_COLOR
|
||||||
|
mcall 13
|
||||||
|
; draw the reg-address box
|
||||||
|
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||||
|
mov cx, 44 ; Yheight only
|
||||||
|
mcall 13
|
||||||
|
|
||||||
|
; fill the data box
|
||||||
|
mov bx, 40 ; upper position
|
||||||
|
mov [stY],bx
|
||||||
|
mov eax, [Reg]
|
||||||
|
mov [reg], eax ; store original#
|
||||||
|
.print_reg_names:
|
||||||
|
call print_config_reg
|
||||||
|
add [stY],14
|
||||||
|
inc [Reg]
|
||||||
|
mov edx,[reg]
|
||||||
|
mov eax, 16
|
||||||
|
add eax, edx
|
||||||
|
cmp eax,[Reg]
|
||||||
|
ja .print_reg_names
|
||||||
|
mov [Reg], edx ; restore original#
|
||||||
|
|
||||||
|
; fill the status box
|
||||||
|
mcall 4, 210*65536+30,0,str1,12
|
||||||
|
mcall , 210*65536+44, ,str2,
|
||||||
|
mcall , 210*65536+56, ,str3,
|
||||||
|
call read_sb_pm_reg
|
||||||
|
mov ecx, SB_PM_DATA
|
||||||
|
mov edx, 300*65536+30
|
||||||
|
mov ebx, 8*65536+256
|
||||||
|
mcall 47
|
||||||
|
add dx, 14
|
||||||
|
mov ecx,[Reg]
|
||||||
|
mov esi, 0
|
||||||
|
mcall 47
|
||||||
|
add dx,14
|
||||||
|
mov ecx, [Rct]
|
||||||
|
mcall 47
|
||||||
|
|
||||||
|
; print extra info
|
||||||
|
mov ebx, 120*65536+170
|
||||||
|
xor ecx, ecx
|
||||||
|
mov edx, info1
|
||||||
|
@@:
|
||||||
|
mcall 4,,,,66
|
||||||
|
add edx, 66
|
||||||
|
add ebx, 14
|
||||||
|
cmp edx, info_end
|
||||||
|
jb @b
|
||||||
|
|
||||||
|
|
||||||
|
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;-------------------------------------------------
|
||||||
|
|
||||||
|
pix dd 0x55AACC33
|
||||||
|
pxX dd 200
|
||||||
|
pxY dd 160
|
||||||
|
stX dw 18
|
||||||
|
stY dw 0
|
||||||
|
reg dd 0
|
||||||
|
|
||||||
|
Rct dd 0 ; reg content
|
||||||
|
Reg dd 0x00 ; reg number
|
||||||
|
|
||||||
|
|
||||||
|
title db ' SB710 PowerManagement registers - PM_Reg',0
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
reg_str db 'Reg#| hex.Value '
|
||||||
|
;------------------------------------------------------------------------------------
|
||||||
|
str1 db 'bdf address:'
|
||||||
|
str2 db 'Reg. number:'
|
||||||
|
str3 db 'Reg.content:'
|
||||||
|
|
||||||
|
butstr2 db ' << '
|
||||||
|
butstr3 db ' >> '
|
||||||
|
butstr4 db 'Next Page'
|
||||||
|
butstr5 db 'Prev Page'
|
||||||
|
|
||||||
|
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||||
|
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||||
|
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||||
|
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||||
|
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||||
|
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||||
|
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||||
|
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||||
|
205,207,205,207,205,207,205,207,205,207,205,190
|
||||||
|
|
||||||
|
info1 db '------------- PM REG -------------'
|
||||||
|
db '| see AMD SB700/710/750 Register Reference Guide, pp.174-223 |'
|
||||||
|
info2 db '| |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '| reg |'
|
||||||
|
db '------------------------------------------------------------------'
|
||||||
|
info_end:
|
||||||
|
|
||||||
|
I_END: ; end of program
|
||||||
|
|
||||||
|
rd 256
|
||||||
|
|
||||||
|
align 256
|
||||||
|
st_0:
|
Loading…
Reference in New Issue
Block a user