forked from KolibriOS/kolibrios
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 ;;
|
||||
;; ;;
|
||||
;; art_zh <artem@jerdev.co.uk> ;;
|
||||
;; art_zh <kolibri@jerdev.co.uk> ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$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
|
||||
|
||||
;------------------------------------------
|
||||
; params: al = nbconfig register#
|
||||
; ebx = register content
|
||||
;
|
||||
rs7xx_nbconfig_write_pci:
|
||||
and eax, 0x0FC ; leave register# only
|
||||
or eax, 0x80000000 ; bdf = 0:0.0
|
||||
@ -54,6 +61,138 @@ rs7xx_nbconfig_write_pci:
|
||||
out dx, eax
|
||||
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
|
||||
; rs7xx_pcie_init:
|
||||
@ -66,6 +205,7 @@ rs7xx_nbconfig_write_pci:
|
||||
align 4
|
||||
|
||||
rs7xx_pcie_init:
|
||||
call rs7xx_unlock_bar3
|
||||
mov al, 0x7C ; NB_IOC_CFG_CNTL
|
||||
call rs7xx_nbconfig_read_pci
|
||||
mov ebx, eax
|
||||
@ -120,7 +260,6 @@ rs7xx_pcie_init:
|
||||
xor dx, dx ; PDEs counter
|
||||
@@:
|
||||
mov dword[ebx], eax ; map 4 buses
|
||||
invlpg [ecx] ; next PgDir entry
|
||||
add bx, 4 ; new PDE
|
||||
add eax, 0x400000 ; +4M phys.
|
||||
add ecx, 0x400000 ; +4M lin.
|
||||
@ -128,6 +267,8 @@ rs7xx_pcie_init:
|
||||
jnc .pcie_cfg_mapped
|
||||
inc dl
|
||||
jmp @b
|
||||
mov eax, cr3
|
||||
mov cr3, eax ; flush TLB
|
||||
.pcie_cfg_mapped:
|
||||
mov esi, boot_pcie_ok
|
||||
call boot_log
|
||||
@ -135,13 +276,11 @@ rs7xx_pcie_init:
|
||||
.rs7xx_pcie_fail:
|
||||
mov esi, boot_rs7xx_fail
|
||||
call boot_log
|
||||
ret
|
||||
jmp $
|
||||
.rs7xx_pcie_blocked:
|
||||
mov esi, boot_rs7xx_blkd
|
||||
call boot_log
|
||||
call pci_ext_config
|
||||
jmp .addr_found
|
||||
ret
|
||||
jmp $
|
||||
|
||||
|
||||
|
||||
|
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
|
||||
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 ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
@ -8,11 +8,13 @@
|
||||
;; ;;
|
||||
;; 32 bit PCI driver code ;;
|
||||
;; ;;
|
||||
;; Version 0.4 February 2nd, 2010 ;;
|
||||
;; Version 0.3 April 9, 2007 ;;
|
||||
;; Version 0.2 December 21st, 2002 ;;
|
||||
;; ;;
|
||||
;; Author: Victor Prodan, victorprodan@yahoo.com ;;
|
||||
;; Mihailov Ilia, ghost.nsk@gmail.com ;;
|
||||
;; Artem Jerdev, kolibri@jerdev.co.uk ;;
|
||||
;; Credits: ;;
|
||||
;; Ralf Brown ;;
|
||||
;; Mike Hibbett, mikeh@oceanfree.net ;;
|
||||
@ -30,116 +32,64 @@ $Revision$
|
||||
; Description
|
||||
; entry point for system PCI calls
|
||||
;***************************************************************************
|
||||
mmio_pci_addr equ 0x400 ; set actual PCI address here to activate user-MMIO
|
||||
|
||||
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
|
||||
mmio_pci_addr dw 0x400 ; default PCI device bdf-address
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
pci_api:
|
||||
movzx eax,bl
|
||||
|
||||
cmp [pci_access_enabled],1
|
||||
jne .no_pci_access_for_applications
|
||||
jne no_pci_access_for_applications
|
||||
|
||||
if defined mmio_pci_addr
|
||||
cmp eax, 13
|
||||
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
|
||||
or al,al
|
||||
jnz pci_fn_1
|
||||
; PCI function 0: get pci version (AH.AL)
|
||||
.0:
|
||||
movzx eax,word [BOOT_VAR+0x9022]
|
||||
ret
|
||||
|
||||
;pci_fn_1:
|
||||
; cmp al,1
|
||||
; jnz pci_fn_2
|
||||
pci_fn_1:
|
||||
cmp al,1
|
||||
jnz pci_fn_2
|
||||
|
||||
; PCI function 1: get last bus in AL
|
||||
.1:
|
||||
movzx eax, byte [BOOT_VAR+0x9021]
|
||||
mov al,[BOOT_VAR+0x9021]
|
||||
ret
|
||||
|
||||
;pci_fn_2:
|
||||
; cmp al,2
|
||||
; jne pci_fn_3
|
||||
pci_fn_2:
|
||||
cmp al,2
|
||||
jne pci_fn_3
|
||||
; PCI function 2: get pci access mechanism
|
||||
.2:
|
||||
movzx eax, byte [BOOT_VAR+0x9020]
|
||||
mov al,[BOOT_VAR+0x9020]
|
||||
ret
|
||||
;pci_fn_3:
|
||||
pci_fn_3:
|
||||
|
||||
; cmp al,4
|
||||
; jz pci_read_reg ;byte
|
||||
; cmp al,5
|
||||
; jz pci_read_reg ;word
|
||||
; cmp al,6
|
||||
; jz pci_read_reg ;dword
|
||||
cmp al,4
|
||||
jz pci_read_reg ;byte
|
||||
cmp al,5
|
||||
jz pci_read_reg ;word
|
||||
cmp al,6
|
||||
jz pci_read_reg ;dword
|
||||
|
||||
; cmp al,8
|
||||
; jz pci_write_reg ;byte
|
||||
; cmp al,9
|
||||
; jz pci_write_reg ;word
|
||||
; cmp al,10
|
||||
; jz pci_write_reg ;dword
|
||||
cmp al,8
|
||||
jz pci_write_reg ;byte
|
||||
cmp al,9
|
||||
jz pci_write_reg ;word
|
||||
cmp al,10
|
||||
jz pci_write_reg ;dword
|
||||
|
||||
;if defined mmio_pci_addr
|
||||
; cmp al,11 ; user-level MMIO functions
|
||||
; jz pci_mmio_init
|
||||
; cmp al,12
|
||||
; jz pci_mmio_map
|
||||
; cmp al,13
|
||||
; jz pci_mmio_unmap
|
||||
;end if
|
||||
cmp al,11 ; user-level MMIO functions
|
||||
jz pci_mmio_init
|
||||
cmp al,12
|
||||
jz pci_mmio_map
|
||||
cmp al,13
|
||||
jz pci_mmio_unmap
|
||||
|
||||
|
||||
no_pci_access_for_applications:
|
||||
|
||||
.not_support:
|
||||
.no_pci_access_for_applications:
|
||||
or eax,-1
|
||||
|
||||
ret
|
||||
|
||||
;***************************************************************************
|
||||
@ -148,20 +98,20 @@ end if
|
||||
;
|
||||
; Description
|
||||
; creates a command dword for use with the PCI bus
|
||||
; bus # in bh;ah
|
||||
; device+func in ch;bh (dddddfff)
|
||||
; register in cl;bl
|
||||
; bus # in ah
|
||||
; device+func in bh (dddddfff)
|
||||
; register in bl
|
||||
;
|
||||
; command dword returned in ebx;eax ( 10000000 bbbbbbbb dddddfff rrrrrr00 )
|
||||
; command dword returned in eax ( 10000000 bbbbbbbb dddddfff rrrrrr00 )
|
||||
;***************************************************************************
|
||||
|
||||
align 4
|
||||
|
||||
pci_make_config_cmd:
|
||||
shl ebx,8;eax,8 ; move bus to bits 16-23
|
||||
mov bx,cx;ax,bx ; combine all
|
||||
and ebx,0xffffff;eax,0xffffff
|
||||
or ebx,0x80000000;eax,0x80000000
|
||||
shl eax,8 ; move bus to bits 16-23
|
||||
mov ax,bx ; combine all
|
||||
and eax,0xffffff
|
||||
or eax,0x80000000
|
||||
ret
|
||||
|
||||
;***************************************************************************
|
||||
@ -178,16 +128,12 @@ pci_make_config_cmd:
|
||||
align 4
|
||||
|
||||
pci_read_reg:
|
||||
cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use?
|
||||
je pci_read_reg_2
|
||||
|
||||
; mechanism 1
|
||||
; push esi ; save register size into ESI
|
||||
mov esi,ebx;eax
|
||||
push esi ; save register size into ESI
|
||||
mov esi,eax
|
||||
and esi,3
|
||||
|
||||
call pci_make_config_cmd
|
||||
mov eax,ebx;ebx,eax
|
||||
mov ebx,eax
|
||||
; get current state
|
||||
mov dx,0xcf8
|
||||
in eax, dx
|
||||
@ -201,100 +147,37 @@ pci_read_reg:
|
||||
and bl,3
|
||||
or dl,bl ; add to port address first 2 bits of register address
|
||||
|
||||
; or esi,esi
|
||||
; jz pci_read_byte1
|
||||
; cmp esi,1
|
||||
; jz pci_read_word1
|
||||
; cmp esi,2
|
||||
; jz pci_read_dword1
|
||||
; jmp pci_fin_read1
|
||||
jmp dword [f62_rcall+esi*4]
|
||||
or esi,esi
|
||||
jz pci_read_byte1
|
||||
cmp esi,1
|
||||
jz pci_read_word1
|
||||
cmp esi,2
|
||||
jz pci_read_dword1
|
||||
jmp pci_fin_read1
|
||||
|
||||
.0:
|
||||
pci_read_byte1:
|
||||
in al,dx
|
||||
jmp .pci_fin_read1
|
||||
.1:
|
||||
jmp pci_fin_read1
|
||||
pci_read_word1:
|
||||
in ax,dx
|
||||
jmp .pci_fin_read1
|
||||
.2:
|
||||
jmp pci_fin_read1
|
||||
pci_read_dword1:
|
||||
in eax,dx
|
||||
; jmp pci_fin_read1
|
||||
.pci_fin_read1:
|
||||
jmp pci_fin_read1
|
||||
pci_fin_read1:
|
||||
; restore configuration control
|
||||
xchg eax,[esp]
|
||||
mov dx,0xcf8
|
||||
out dx,eax
|
||||
|
||||
pop eax
|
||||
;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
|
||||
pop esi
|
||||
ret
|
||||
|
||||
;pci_read_reg_err:
|
||||
; or dword [esp+32],-1
|
||||
; ret
|
||||
pci_read_reg_err:
|
||||
xor eax,eax
|
||||
dec eax
|
||||
ret
|
||||
|
||||
|
||||
;***************************************************************************
|
||||
@ -312,17 +195,12 @@ pci_read_reg_2:
|
||||
align 4
|
||||
|
||||
pci_write_reg:
|
||||
cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use?
|
||||
je pci_write_reg_2
|
||||
|
||||
; mechanism 1
|
||||
; push esi ; save register size into ESI
|
||||
mov esi,ebx;eax
|
||||
and esi,3 ;not need
|
||||
push esi ; save register size into ESI
|
||||
mov esi,eax
|
||||
and esi,3
|
||||
|
||||
call pci_make_config_cmd
|
||||
mov eax,ebx;ebx,eax
|
||||
mov ecx,edx ;cross registers
|
||||
mov ebx,eax
|
||||
; get current state into ecx
|
||||
mov dx,0xcf8
|
||||
in eax, dx
|
||||
@ -337,121 +215,56 @@ pci_write_reg:
|
||||
or dl,bl
|
||||
mov eax,ecx
|
||||
|
||||
; or esi,esi
|
||||
; jz pci_write_byte1
|
||||
; cmp esi,1
|
||||
; jz pci_write_word1
|
||||
; cmp esi,2
|
||||
; jz pci_write_dword1
|
||||
; 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:
|
||||
or esi,esi
|
||||
jz pci_write_byte1
|
||||
cmp esi,1
|
||||
jz pci_write_word1
|
||||
cmp esi,2
|
||||
jz pci_write_dword1
|
||||
jmp 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
|
||||
pop eax
|
||||
mov dl,0xf8
|
||||
out dx,eax
|
||||
|
||||
xor eax,eax
|
||||
;pop esi
|
||||
pop esi
|
||||
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
|
||||
;pop esi
|
||||
dec eax
|
||||
ret
|
||||
|
||||
;pci_write_reg_err:
|
||||
; xor eax,eax
|
||||
; dec eax
|
||||
; ret
|
||||
|
||||
if defined mmio_pci_addr ; must be set above
|
||||
;***************************************************************************
|
||||
; Function
|
||||
; pci_mmio_init
|
||||
;
|
||||
; Description
|
||||
; IN: cx = device's PCI bus address (bbbbbbbbdddddfff)
|
||||
; Returns eax = user heap space available (bytes)
|
||||
; IN: bx = device's PCI bus address (bbbbbbbbdddddfff)
|
||||
; Returns eax = phys. address of user-accessible DMA block
|
||||
; Error codes
|
||||
; eax = -1 : PCI user access blocked,
|
||||
; eax = -2 : device not registered for uMMIO service
|
||||
; eax = -3 : user heap initialization failure
|
||||
;***************************************************************************
|
||||
pci_mmio_init:
|
||||
cmp cx, mmio_pci_addr
|
||||
jz @f
|
||||
mov eax,-2
|
||||
ret
|
||||
@@:
|
||||
mov [mmio_pci_addr],bx
|
||||
|
||||
call init_heap ; (if not initialized yet)
|
||||
or eax,eax
|
||||
jz @f
|
||||
mov eax, [UserDMAaddr]
|
||||
ret
|
||||
@@:
|
||||
mov eax,-3
|
||||
@ -465,10 +278,9 @@ pci_mmio_init:
|
||||
; Description
|
||||
; 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: ecx = offset in MMIO block (in 4K-pages, to avoid misaligned pages);
|
||||
;
|
||||
@ -484,17 +296,21 @@ pci_mmio_init:
|
||||
;***************************************************************************
|
||||
|
||||
pci_mmio_map:
|
||||
;cross
|
||||
mov eax,ebx
|
||||
mov ebx,ecx
|
||||
mov ecx,edx
|
||||
;;;;;;;;;;;;;;;;;;;
|
||||
and edx,0x0ffff
|
||||
cmp ah, 0xDA
|
||||
jz .dma_map
|
||||
cmp ah,6
|
||||
jc .bar_0_5
|
||||
jb .bar_0_5
|
||||
jz .bar_rom
|
||||
mov eax,-2
|
||||
ret
|
||||
|
||||
.dma_map:
|
||||
push ecx
|
||||
mov ecx,ebx
|
||||
mov eax,[UserDMAaddr]
|
||||
jmp .allocate_block
|
||||
|
||||
.bar_rom:
|
||||
mov ah, 8 ; bar6 = Expansion ROM base address
|
||||
.bar_0_5:
|
||||
@ -506,7 +322,7 @@ pci_mmio_map:
|
||||
shl bl, 1
|
||||
shl bl, 1
|
||||
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 al, 2 ; al : DW to read
|
||||
call pci_read_reg
|
||||
@ -523,7 +339,9 @@ pci_mmio_map:
|
||||
pop ecx ; ecx = block size, bytes (expanded to whole page)
|
||||
mov ebx, ecx ; user_alloc destroys eax, ecx, edx, but saves ebx
|
||||
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
|
||||
or eax, eax
|
||||
jnz mmio_map_over
|
||||
@ -542,9 +360,7 @@ mmio_map_over:
|
||||
pop edx ; edx = MMIO shift (pages)
|
||||
shl edx, 12 ; edx = MMIO shift (bytes)
|
||||
add eax, edx ; eax = uMMIO physical address
|
||||
or eax, PG_SHARED
|
||||
or eax, PG_UW
|
||||
or eax, PG_NOCACHE
|
||||
or eax, (PG_SHARED+PG_UW+PG_NOCACHE)
|
||||
mov edi, ebx
|
||||
call commit_pages
|
||||
mov eax, edi
|
||||
@ -566,11 +382,9 @@ mmio_map_over:
|
||||
;***************************************************************************
|
||||
|
||||
pci_mmio_unmap:
|
||||
stdcall user_free, ecx;ebx
|
||||
stdcall user_free, ebx
|
||||
ret
|
||||
|
||||
end if
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
uglobal
|
||||
align 4
|
||||
|
@ -337,41 +337,36 @@ endp
|
||||
|
||||
align 4
|
||||
proc init_LFB
|
||||
locals
|
||||
pg_count dd ?
|
||||
endl
|
||||
|
||||
cmp dword [LFBAddress], -1
|
||||
jne @f
|
||||
mov [BOOT_VAR+0x901c],byte 2
|
||||
stdcall alloc_pages, (0x280000 / 4096)
|
||||
|
||||
push eax
|
||||
call alloc_page
|
||||
stdcall map_page_table, LFB_BASE, eax
|
||||
pop eax
|
||||
or eax, PG_UW
|
||||
mov ebx, LFB_BASE
|
||||
mov ecx, 0x280000 / 4096
|
||||
call commit_pages
|
||||
mov [LFBAddress], dword LFB_BASE
|
||||
ret
|
||||
@@:
|
||||
test [SCR_MODE],word 0100000000000000b
|
||||
jnz @f
|
||||
mov [BOOT_VAR+0x901c],byte 2
|
||||
ret
|
||||
@@:
|
||||
; cmp dword [LFBAddress], -1
|
||||
; jne @f
|
||||
;
|
||||
; mov esi, boot_framebuf
|
||||
; call boot_log
|
||||
;
|
||||
; mov [BOOT_VAR+0x901c],byte 2
|
||||
; stdcall alloc_pages, (0x280000 / 4096)
|
||||
;
|
||||
; push eax
|
||||
; call alloc_page
|
||||
; stdcall map_page_table, LFB_BASE, eax
|
||||
; pop eax
|
||||
; or eax, PG_UW
|
||||
; mov ebx, LFB_BASE
|
||||
; mov ecx, 0x280000 / 4096
|
||||
; call commit_pages
|
||||
; mov [LFBAddress], dword LFB_BASE
|
||||
; ret
|
||||
;@@:
|
||||
call init_mtrr
|
||||
|
||||
mov edx, LFB_BASE
|
||||
mov esi, [LFBAddress]
|
||||
mov edi, 0x00C00000
|
||||
mov edi, 0x00C00000 ; 12Mb
|
||||
mov dword [exp_lfb+4], edx
|
||||
|
||||
shr edi, 12
|
||||
mov [pg_count], edi
|
||||
shr edi, 10
|
||||
shr edi, 12 ; C00
|
||||
; mov [pg_count], edi
|
||||
shr edi, 10 ; 3
|
||||
|
||||
or esi, PG_GLOBAL+PG_LARGE+PG_UW
|
||||
mov edx, sys_pgdir+(LFB_BASE shr 20)
|
||||
@ -389,24 +384,20 @@ proc init_LFB
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc init_userDMA
|
||||
init_userDMA:
|
||||
stdcall alloc_pages, 4096 ; 16M <<<<<<<<<<+++++++++++++++++++++++++++++++++
|
||||
add eax, 0x007FFFF0
|
||||
add eax, 0x007FFFF0 ; terrible mess, sorry ...
|
||||
and eax, 0xFF800000 ; align at 8M boundary
|
||||
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
|
||||
mov ebx, sys_pgdir + (USER_DMA_BUFFER shr 20)
|
||||
mov [ebx], eax
|
||||
add ebx, 4
|
||||
add eax, 0x00400000
|
||||
mov [ebx], eax
|
||||
mov eax, cr3 ;flush TLB
|
||||
mov cr3, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc new_mem_resize stdcall, new_size:dword
|
||||
|
@ -99,7 +99,7 @@ iglobal
|
||||
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
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -170,7 +170,7 @@ iglobal
|
||||
dd undefined_syscall ; 59-reserved
|
||||
dd sys_IPC ; 60-Inter Process Communication
|
||||
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 sys_resize_app_memory ; 64-Resize application memory usage
|
||||
dd sys_putimage_palette ; 65-PutImagePalette
|
||||
|
@ -4253,11 +4253,11 @@ sys_gs: ; direct screen access
|
||||
|
||||
;align 4 ; PCI functions
|
||||
;
|
||||
;sys_pci:
|
||||
;
|
||||
; call pci_api
|
||||
; mov [esp+36],eax
|
||||
; ret
|
||||
sys_pci:
|
||||
|
||||
call pci_api
|
||||
mov [esp+36],eax
|
||||
ret
|
||||
|
||||
|
||||
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