Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 11:10   #1
vova65
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 48
По умолчанию Драйвер RTL8139

Здравствуйте! Поморите пожалуйста разобраться в проблеме!
Почему при срабатывании такого:
Код:
test    byte [r11], (1 shl 0)
jz    reset_o
условия перестают срабатывать прерывания от RTL8139? как это исключение правильно обрабатывать? где я накосячил своими кривыми руками???

инициализация устройства:
Код:
NET:
mov ebx,3;2;2;3h
mov ecx,8h
mov edx,3Ch
mov esi,2
call pci_read_reg

mov al,23h

mov ebx,3;2;2;3h
mov ecx,8h
mov edx,3Ch
mov esi,2
call pci_write_reg


mov    ebx,3;2;3h
mov    ecx,8h
mov    edx,04h
mov    esi,2
call   pci_read_reg
;меняем значенние регистра 
or     al, (1 shl 2) or (1 shl 0)
and    al, not (1 shl 1)
;Записываем в конфигурацыоное пространство
mov    ebx,3;2;3h
mov    ecx,8h
mov    edx,04h
mov    esi,2
call   pci_write_reg

;Чтение MAC адреса
mov ecx,6
mov edx,[pci_bus]
xor ebx,ebx
@@:
in al,dx
mov [node_addr+ebx],al
inc ebx
add edx,1
loop @b

;Сброс сетивого адаптера
mov    edx,[pci_bus]
add    edx,37h
mov    al,1 shl 4 ; установка RST в 1
out    dx,al
mov       ecx,1000 ; ждать уже не для сброса
@@:
in       al,dx
test     al, 1 shl 4
jz       @f ; RST остается 1 во время сброса
dec       cx
jns       @b
mov eax,ecx     
@@:

;отопираем регистры BMCR и config
mov    edx,[pci_bus]
add    edx,50h
mov    al,(1 shl 7) or (1 shl 6)
out    dx,al 
; включение Tx/Rx
mov    edx, [pci_bus]
mov    al, (1 shl 3) or (1 shl 2)
add    edx, 37h
out    dx, al    
;32 k Rxbuffer, неограниченного пакета dma, никакого обертывания, никакого rx порога
; принимаем широковещательные пакеты, принимаем физические пакеты соответствия
mov    edx,[pci_bus]
add       edx,44h
mov     ax,0E7BEh
out       dx, ax
; 1024-байтовый пакет DMA
mov     ax, (6 shl 8) \
                    or (8 shl 4)
mov    edx,[pci_bus]
add       edx,40h
out       dx,ax
; блокируем регистры BMCR и конфигурация
xor       al,al
mov    edx,[pci_bus]
add       edx,50h
out       dx,al
; чистим недостающий пакетный счетчик
mov    edx,[pci_bus]
add       edx,4Ch
xor       eax,eax
out       dx,eax   
; включаем все прерывания
mov edx,[pci_bus]
add    edx,3Ch
mov ax,0FFFFh
out       dx,ax
; устанавливаем адрес RxBuffer
mov    eax,rtl8139_rx_buff
mov    edx,[pci_bus]
add     edx,30h
out     dx,eax
ret
обработчик прерывания:
Код:
exit1:
push rax rcx rdx r11 r10 rbx rsi
;разрешить преривания с более низким приорететом
mov al,20h
out 20h,al

;начинаем обработку полученого пакета
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;считаем базовый адрес принятого пакета
mov r11,rtl8139_rx_buff
mov r10,[rtl8139_rx_buff_offset]
add r11,r10
;проверяем правильно ли принят пакет
test    byte [r11], (1 shl 0)
jz    reset_o
;сохраняем размер пакета в r9
movzx r9, word [r11+2]
sub r9,4
;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;
;обновляем rtl8139_rx_buff_offset
add r10,r9
add    r10,8 
cmp    r10,RTL8139_RX_BUFFER_SIZE
jl    @f
sub r10,RTL8139_RX_BUFFER_SIZE
@@:
mov    [rtl8139_rx_buff_offset],r10

; обновляем CAPR 
sub    r10, 0x10 
mov rax,r10
mov edx,[pci_bus]
add    edx,38h
out    dx, ax

;Сбросить заявку приревания
mov    edx,[pci_bus]
add       edx,3Eh
in     ax,dx
out       dx,ax

pop rsi rbx r10 r11 rdx rcx rax
iret
reset_o:
mov    edx,[pci_bus]
add    edx, 37h
in       al,dx
push   rax
and       al, not (1 shl 3)
out       dx, al
pop    rax
out       dx, al

mov    edx,[pci_bus]
add       edx,44h
mov     ax,0E7BEh
out       dx, ax

pop rsi rbx r10 r11 rdx rcx rax
iret
vova65 вне форума Ответить с цитированием
Старый 12.05.2012, 14:17   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

не знаю чем компилите, но этот каст кажется мне странным
Цитата:
test byte [r11], (1 shl 0)
может BYTE PTR?
f.hump вне форума Ответить с цитированием
Старый 12.05.2012, 15:44   #3
vova65
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 48
По умолчанию

компилю фасмом.. все нормально компилится.. запускается и работает до перехода выполнения этого кода

Код:
reset_o:
mov    edx,[pci_bus]
add    edx, 37h
in       al,dx
push   rax
and       al, not (1 shl 3)
out       dx, al
pop    rax
out       dx, al

mov    edx,[pci_bus]
add       edx,44h
mov     ax,0E7BEh
out       dx, ax

pop rsi rbx r10 r11 rdx rcx rax
iret
и даже этот код выполняется и все остальное дальше работает как работало.. только что-то происходит с rtl8139 и от него больше не срабатывают прерывания..

и я пока еще невехал полностю что происходит и как его прававильно обрабатывать.. чтоб он дальше нормально работал...
vova65 вне форума Ответить с цитированием
Старый 12.05.2012, 22:58   #4
vova65
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 48
По умолчанию

решение смотрите http://www.wasm.ru/forum/viewtopic.php?id=44845
vova65 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер kazah Компьютерное железо 1 22.12.2011 11:03
драйвер rtl8139 vova65 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.12.2011 20:20
Guardant драйвер Ринат820 Софт 0 27.04.2011 01:07
Драйвер Sting12 Помощь студентам 3 27.12.2009 18:16
Драйвер milancrash Фриланс 1 01.04.2009 08:22