Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1350 → Rev 1351

/programs/system/pcidev/trunk/PCIDEV.ASM
1,12 → 1,13
;***************************************************************
;***************************************************************
; project name: PCI Device Enumeration
; target platform: KolibriOS
; compiler: flat assmebler 1.66
; version: 2.1
; last update: April 2007
; compiler: flat assembler 1.68
; version: 2.2
; last update: December 2007
; maintained by: Jason Delozier (cordata51@hotmail.com)
; Sergey Kuzmin (kuzmin_serg@list.ru)
; Mihailov Ilia (ghost.nsk@gmail.com)
; Artem Jerdev (art_zh@yahoo.com)
; project site: http://www.coolthemes.narod.ru/pcidev.html
;***************************************************************
;Summary: This program will attempt to scan the PCI Bus
25,11 → 26,22
; Full device detection (like "ATI Radeon 9200") will increase app
; size a lot and probably it is function of particular drivers
;----------------------------------------------------------------
;2.2: PCIDEV 31/12/2009
;Author: Artem Jerdev <art_zh@yahoo.com>
;Features:
; fixed
; * English in some comments ;)
; added
; * ! user-accessible PCI memory channels detection
; * ! ASCII-dump as PCI memory access demonstration
; optimization
; * (yet needed)
;----------------------------------------------------------------
;2.1: PCIDEV ??/04/2007
;Author: Mihailov Ilia aka Ghost <ghost.nsk@gmail.com>
;Features:
; fixed
; * Same little bugs
; * Some little bugs
; * Source code formating
; * PCI version normalized 0210 -> 2.10
; added
136,7 → 148,9
; * detect Revision, Class and Subclass of Device,
; * and make Description based on Class
;-------------------------------------------------------------
include '..\..\..\macros.inc'
;include '..\..\macros.inc'
include 'macros.inc'
 
MEOS_APP_START
CODE
call draw_window
202,15 → 216,15
; Window inteface
mov cx, [PCI_Version]
add ch, '0'
mov [PCIWin + 85], ch ; 0xBADCODE but it work !
mov [PCIWin + 85], ch ; 0xBADCODE but it works !
mov ch, cl
shr cl, 4
and ch, 0x0f
add cx, '00'
mov [PCIWin + 87], cx
mov cl, [PCI_LastBus]
mov cl, [PCI_LastBus] ; will only work if [PCI_LastBus] < 10
add cl, '0'
mov [PCIWin + 105], cl
mov [PCIWin + 106], cl
mov edx, PCIWin
mov ebx, 20 * 65536 + 25 ; x start, ystart of text
227,6 → 241,7
movzx ecx, byte [total] ; number to draw
mcall 47, 0x00020000,,150 * 65536 + 65, 0x224466
 
call Try_MMIO
mcall 12, 2 ; end of draw
ret
 
274,12 → 289,12
mov cl, 0x0a ; Register to read (Get Subclass)
mcall 62 ; Read it
mov byte [PCI_SubClass], al; Save it
; from Mario79 august 2006
; by Mario79 august 2006
mov cl, 0x09 ; Register to read (Get Interface)
mcall 62 ; Read it
mov [PCI_Interface], al ; Save it
;
; from Ghost april 2007
; by Ghost april 2007
mov cl, 0x3c ; Register to read (Get IRQ)
@@: mcall 62 ; Read it
mov [PCI_IRQ], al ; Save it
300,7 → 315,31
;------------------------------------------------------------------
;* Print device info to screen
Print_New_Device:
xor esi, esi ; Color of text
xor esi, esi ; default text color
; by art_zh December 2009
mov ch, byte [V_Bus]
mov cl, byte [V_Dev]
mcall 62, 11 ; detect uMMIO
cmp eax, -2
je no_ummio_here
mov esi, 0x990033 ; highlighted text color
mov bh, byte [V_Bus]
mov bl, byte [V_Dev]
mov byte [MMIO_Bus], bh
mov byte [MMIO_Dev], bl
add bh,'0'
mov [PCIWin + 129], bh ; uMMIO bus
mov al, bl
shr al, 1
shr al, 1
shr al, 1
add al,'0'
mov [PCIWin + 131], al ; uMMIO device
and bl, 7
add bl, '0'
mov [PCIWin + 133], bl ; uMMIO function
 
no_ummio_here:
movzx ecx,word [PCI_Vendor] ; Pointer to number to be written
mcall 47, 0x00040100 ; Write Vendor ID
and edx, 0xFFFF ;*****************************************
401,8 → 440,68
mcall 4,, 0x80000000,, 32 ; draw the text
movzx edx, bx ; get y coordinate
add edx, 0x0014000A ; add 10 to y coordinate and set x coordinate to 20
mov [gr_pos], edx
ret
;------------------------------------------------------------------
; Get the user-MMIO related info
;
; Added on ??-12-2009 by art_zh
;------------------------------------------------------------------
Try_MMIO:
xor ebx, ebx
mov edx, ebx
mov bh, byte [MMIO_BAR]
or bx, 12 ; function 12
mov ecx, 4096 ; =1 page to map
mcall 62
mov ecx, 0x80990022 ; print color : red
mov bh, byte [MMIO_BAR]
add bh, '0'
cmp eax, -3
jne @f
mov [bar_um+3], bh
mov ebx, [gr_pos]
mov edx, bar_um
mcall 4
jmp mmio_next_bar
@@:
cmp eax, -4
jne @f
mov [bar_io+3], bh
mov ebx, [gr_pos]
mov edx, bar_io
mcall 4
jmp mmio_next_bar
@@:
mov [bar_ram+3], bh
mov ebx, [gr_pos]
mov edx, bar_ram
mcall 4
 
mov edx, eax
mov esi, 64
mov ecx, 0x099 ; dump color : blue
add ebx, 10
mov [gr_pos], ebx
mcall 4
mov ecx, eax ; release the tried page
mcall 62,13
 
mmio_next_bar:
mov bh, [MMIO_BAR]
inc bh
cmp bh,6
je @f
mov [MMIO_BAR], bh
add [gr_pos], 10
jmp Try_MMIO
 
@@:
xor bh,bh
mov [MMIO_BAR], bh
ret
 
 
include 'VENDORS.INC'
;------------------------------------------------------------------
; DATA AREA
414,19 → 513,24
dw 420 ; window height
dw 100 ; window y start
 
title db 'PCI Device Enumeration v 2.1 by J. Delozier, S. Kuzmin, V. Hanla, M. Zakiyanov', 0
title db 'PCI Device Enumerator v 2.2 by J.Delozier, S.Kuzmin, V.Hanla, M.Zakiyanov, A.Jerdev', 0
 
PCIWin mls \
'Please remember to enable PCI Access to Applications in Setup Menu.',\
' Don`t forget to enable PCI Access to Applications in Setup Menu.',\
'',\
'PCI Version = x.xx',\
'Last PCI Bus = x',\
'Quantity of devices =',\
'PCI Version = x.xx; Last PCI Bus = x',\
'User MMIO channel = 0F.F:F ',\
'Number of PCI units =',\
'',\
'VenID DevID Bus# Dev# Fnc Rev Class Subclass/ IRQ Company Description',\
' Interface',\
'----- ----- ---- ---- --- --- ----- --------- --- ------------------------------------------ ----------------'
 
bar_ram db 'BARx: MMIO block', 0
bar_io db 'BARx: IO ports',0
bar_um db 'BARx: unmapped',0
bar_rom db 'BAR6: Onboard ROM', 0 ; << no ROM test yet
 
;------------------------------------------------------------------
; UNINITIALIZED DATA AREA
UDATA
447,5 → 551,15
PCI_Interface db ?
PCI_IRQ db ?
 
align 4
MMIO_Bus db ?
MMIO_Dev db ?
MMIO_BAR db 0
MMIO_Blk db 0
MMIO_Map rd 8
 
gr_pos dd ?
 
Proc_Info process_information
MEOS_APP_END