Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Nov 15, 2019 11:02 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 5 posts ] 
Author Message
 Post subject: Вопрос по pci
PostPosted: Wed Jun 01, 2005 8:10 pm 
помогите пожалуста разобраться с pci:

пусть в eax имеется маска формата
[ 1000 0000 . bbbb bbbb . dddd dfff . 0000 0000 ]
где b = bus - номер шины
d = device
f = function
т.е. номер pci регистра = 0
все три парасметра перебираются в цикле...цикл работает, маска тоже верна,
сомнение вызывает код:
Code:
mov   dx,   0xcf8
out   dx,   eax
        
mov   dx,   0xcfc
in    eax,  dx

на выходе в eax ысегда 0xffff ffff
при любых bus:device:function... то есть не находит не одно устройство.... :mrgreen:


Top
   
 Post subject:
PostPosted: Thu Jun 02, 2005 12:29 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Привет!
Голову ты бы себе не морочил с такими изысканиями... такие вещи надо изучить, а потом ваять, а не тыкать пальцем в небо. ТОлько в MeOS несколько кусков исходника посвящены PCI..., я уже как то говорил про кусок отвечающий за Ethernet как пример...
Ладно, держи готовую прогу COM вида под ДОС, которая выуживает PCI устройства. Все проверено, выверено и сравнено с... массой других.... по ReadPCI. Тебе осталось только проглотить :)


org 0x100

call cls
xor bx, bx ; BH = bus, BL = device
xor cx, cx ; CH = function, CL = register
@nextReadPCI:
call ReadPCI
cmp eax, 0xFFFFFFFF
je @nextElementPCI
call device_found
@nextElementPCI:
inc ch ; б«Ґ¤гой п дг­ЄжЁп нв®Ј® гбва®©бвў  PCI
cmp ch, 8
jne @nextReadPCI
xor ch, ch

inc bl ; б«Ґ¤го饥 гбва®©бвў® PCI ­  н⮬ б®ЄҐвҐ
cmp bl, 32
jne @nextReadPCI
xor bl, bl

inc bh ; б«Ґ¤гойЁ© б®ЄҐв PCI
cmp bh, 255 ;
jne @nextReadPCI

call @cls
int 0x20



device_found:
pusha
mov si, PCIbusTxt
call prtString
popa
pusha
mov al, bh
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ­  ¤ЁбЇ«Ґ©
mov si, PCIdevTxt
call prtString
popa
pusha
mov al, bl
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ­  ¤ЁбЇ«Ґ©
mov si, PCIfunTxt
call prtString
popa
pusha
mov al, ch
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ­  ¤ЁбЇ«Ґ©
mov si, PCIregTxt
call prtString
popa
pusha
mov al, cl
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ­  ¤ЁбЇ«Ґ©
inc [ScreenString]
mov [ScreenColumn], 0
mov si, PCIvendorTxt
call prtString
popa
pusha
call ShowHexWord ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ­  ¤ЁбЇ«Ґ©
inc [ScreenString]
mov [ScreenColumn], 0
mov si, PCIdeviceTxt
call prtString
popa
pusha
shr eax, 16
call ShowHexWord ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ­  ¤ЁбЇ«Ґ©
mov [ScreenColumn], 0
add [ScreenString], 2
cmp [ScreenString], 24
jc @nnn
call @cls
@nnn: popa
RET



ReadPCI:
; BH - bus, BL - device, CH - function, CL - register
xor eax, eax
mov al, bh
or ah, 0x80
shl eax, 16
mov ah, bl
shl ah, 3
or ah, ch
mov al, cl
and al, 0xFC
mov dx, 0x0CF8
out dx, eax
mov dl, 0xFC
in eax, dx
RET


PCIbusTxt DB "PCI bus: ", 0
PCIdevTxt DB " device: ", 0
PCIfunTxt DB " function: ", 0
PCIregTxt DB " register: ", 0
PCIvendorTxt DB "Vendor code: ", 0
PCIdeviceTxt DB "Device code: ", 0


INCLUDE 'CVSTRING.INC'


Top
   
 Post subject:
PostPosted: Thu Jun 02, 2005 12:37 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
А вообще сейчас в ступени 1 АТОМ ОС я применяю следующее...
Более прозрачно, понятно и оптимально, с "моей колокольни".

PCI_CFG_ADDR = 0x0CF8

WriteIdxPCI:
; BH - bus, BL - dev, CH - func, CL - register
push eax
xor eax, eax
mov al, bh
or ah, 0x80
shl eax, 16
mov ah, bl
shl ah, 3
or ah, ch
mov al, cl
and al, 0xFC
mov dx, PCI_CFG_ADDR
out dx, eax
mov dl, 0xFC
or dl, cl
pop eax
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SetCfgSpaceDword:
push dx
call WriteIdxPCI
out dx, eax ;write dword
pop dx
RET
SetCfgSpaceWord:
push dx
call WriteIdxPCI
out dx, ax ;write word
pop dx
RET
SetCfgSpaceByte:
push dx
call WriteIdxPCI
or dl, cl
out dx, al ;write byte
pop dx
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GetCfgSpaceDword:
push dx
call WriteIdxPCI
in eax, dx ;read dword
pop dx
RET
GetCfgSpaceWord:
push dx
call WriteIdxPCI
in ax, dx ;read word
pop dx
RET
GetCfgSpaceByte:
push dx
call WriteIdxPCI
in al, dx ;read byte
pop dx
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Успехов PCI`ях! ;)


Top
   
 Post subject:
PostPosted: Thu Jun 09, 2005 3:20 pm 
очень странно: я пробовал даже тупо копировать твой код: НЕ РАБОТАЕТ :shock:
вероятно у меня тоже все было написано правильно.... есть мысли? :cry:


Top
   
 Post subject:
PostPosted: Fri Jun 10, 2005 9:44 am 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Мыслей вогон и маленькая тележка. Идей тоже.... Тебе какую?
Программирование любит АБСОЛЮТНУЮ конкретику и точность, а в твоем вопросе сего нет.
Я тебе дал проверенное и опробованное и .... и конкретно, между прочим. Т.к. указал главное - среду, где живёт код. А ведь сказал ДОС. И это незря. Именно ДОС а не какое то там виртуальное и ли еще какое посредниковое детище. ДОС максимально близок к железу и реалиям жизни аппарата! Он без всяких проволочек и принципов(защита и пр.) позволяет пощупать и попробовать и отладить и выловить, особенно, подчеркиваю, ОСОБЕННО при работе с портами! Т.е. такие темы и темы реальных драйверов, я, как впрочем и многие другие реально мыслящие кодеры железа строгают там...
Предполагаю, что у тебя рубит "среда". Наверное в PM юзаешь, а политика безопасности и доступа к портам... того... посылает тебя. Или нечно вроде этого. Ищи, думай. Почву я тебе для этого дал, считаю. Успехов!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 5 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited