Board.KolibriOS.org
http://board.kolibrios.org/

Колибри 0.7.5.0
http://board.kolibrios.org/viewtopic.php?f=5&t=1206
Page 17 of 23

Author:  hidnplayr [ Thu Nov 19, 2009 10:24 pm ]
Post subject:  Re: Колибри 0.7.5.0

Sounds like a bug in 3c905b driver.
Try to initialise stack manually (through stackcfg) and run some program that uses network, if it also crashed, i'm pretty sure its a problem in driver.

Author:  tsdima [ Thu Nov 19, 2009 10:56 pm ]
Post subject:  Re: Колибри 0.7.5.0

Статическая конфигурация не вешает систему, но сеть не работает - в программе "статус сети" количество пакетов везде ноль.

Author:  tsdima [ Thu Nov 19, 2009 11:07 pm ]
Post subject:  Re: Колибри 0.7.5.0

Поставил до и после eth.write_udp сообщения Sending... и ОК. Первое сообщение напечаталось, от второго успело напечататься только О.

Author:  tsdima [ Thu Nov 19, 2009 11:20 pm ]
Post subject:  Re: Колибри 0.7.5.0

Yes, all network programms crashes system, always at addr 80024D1C.
I suppose it is in e3c59x_boomerang_transmit after
Code:
; program DPD
        mov     edi, eax
        pop     eax

Author:  tsdima [ Fri Nov 20, 2009 12:39 am ]
Post subject:  Re: Колибри 0.7.5.0

Насколько я понял, макросы:

virt_to_dma reg
dma_to_virt reg
zero_to_virt reg
virt_to_zero reg
zero_to_dma reg
dma_to_zero reg

оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?

И судя по всему это не единственная ошибка в драйвере. Неужели у кого-то работает?
Вот когда ось была по нулевому адресу, то это наверное работало...

Author:  <Lrz> [ Fri Nov 20, 2009 10:14 am ]
Post subject:  Re: Колибри 0.7.5.0

В ревизии 1276 я допустил ошибку, я ее уже исправил, залью на свн вечером, сейчас нет возможности.

Attachments:
kernel.7z [68.79 KiB]
Downloaded 79 times

Author:  hidnplayr [ Fri Nov 20, 2009 1:32 pm ]
Post subject:  Re: Колибри 0.7.5.0

tsdima wrote:
Насколько я понял, макросы:
оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?


Indeed, I have just checked the SVN history of the driver, and it has never been updated to work with the newer kernel memory management system.

It is possible you can fix the driver by adding the code as you mentioned, in some places.

Author:  tsdima [ Sun Nov 22, 2009 12:20 am ]
Post subject:  Re: Колибри 0.7.5.0

Ну хорошо, с драйвером я разобрался, сделал такие изменения:
Code:
macro virt_to_dma reg
{
if defined E3C59X_LINUX
        sub     reg, [virt_addr]
        add     reg, [dma_addr]
else
   sub   reg, OS_BASE
end if
}

macro dma_to_virt reg
{
if defined E3C59X_LINUX
        sub     reg, [dma_addr]
        add     reg, [virt_addr]
else
   add   reg, OS_BASE
end if
}

macro zero_to_virt reg
{
if defined E3C59X_LINUX
        add     reg, [virt_addr]
end if
}

macro virt_to_zero reg
{
if defined E3C59X_LINUX
        sub     reg, [virt_addr]
end if
}

macro zero_to_dma reg
{
if defined E3C59X_LINUX
        add     reg, [dma_addr]
else
   sub   reg, OS_BASE
end if
}

macro dma_to_zero reg
{
if defined E3C59X_LINUX
        sub     reg, [dma_addr]
else
   add   reg, OS_BASE
end if
}


и

второе изменение ниже

Теперь не виснет, система пингуется, в таблице ARP правильный MAC-адрес другого хоста, с которого я пинговал.

Однако сетевые программы не работают, telnet не коннектится, серверные проги тоже молчат. Куда теперь копать?

Author:  tsdima [ Sun Nov 22, 2009 1:06 am ]
Post subject:  Re: Колибри 0.7.5.0

Сразу после перезагрузки, если вызвать конфигурацию сети и поставить галочку напротив "Фикс.", где уже стоит статический адрес (изначально галочка почему-то напротив "Назначенный"), то телнет коннектится, и даже несколько символов успешно туда-сюда пересылаются, но потом начинаются какие-то задержки, а потом и вовсе ничего не передаётся. Хотя пингуется по прежнему нормально. Это глюки реализации TCP/IP?

Author:  tsdima [ Sun Nov 22, 2009 2:43 pm ]
Post subject:  Re: Колибри 0.7.5.0

По поводу второй части изменений, лучше исправить ошибку, а не инициализировать переменные:
Code:
; wait for TxReset to complete
        mov     ecx, 200000
.tx_reset_loop:
        in      ax, dx
        test    ah, 10000b ; check CmdInProgress
        jz      .tx_set_prev
        dec     ecx
        jns     .tx_reset_loop
.tx_set_prev:

Если команда выполнилась без таймаута, то без этого исправления переменные не инициализировались.

Author:  tsdima [ Sun Nov 22, 2009 2:50 pm ]
Post subject:  Re: Колибри 0.7.5.0

Такой вопрос: теоретически, драйвер сетевухи может и не отправить пакет (занят, нет свободных буферов или ошибочное состояние, требующее сброса), но это никак не анализируется вызывающей процедурой eth_tx. То есть пакет просто пропадёт. Не является ли это причиной нестабильной работы TCP?

Author:  hidnplayr [ Sun Nov 22, 2009 5:20 pm ]
Post subject:  Re: Колибри 0.7.5.0

There seems to be a problem with the driver receive function
(I used a sniffer on another computer, and all packets are sent correctly)

Also, i managed to connect to irc, and a couple of packets arrived, 2 minutes too late!
Others did not arrive at all.

Is your 3com card also a 'boomerang' type, or is it a 'vortex' ?

EDIT: the TCP checksum of some sent packets is incorrect!
EDIT2: solution: comment out the line
Code:
or      ebx, (1 shl 26) ; set AddTcpChecksum

Author:  tsdima [ Sun Nov 22, 2009 5:26 pm ]
Post subject:  Re: Колибри 0.7.5.0

I think, my card is a 'boomerang' type, 'vortex' procedures don't uses descriptor lists.

Author:  tsdima [ Sun Nov 22, 2009 5:31 pm ]
Post subject:  Re: Колибри 0.7.5.0

hidnplayr wrote:
the TCP checksum of some sent packets is incorrect!

May be it is the problem, while ARP and ICMP-echo works properly.

Author:  tsdima [ Sun Nov 22, 2009 5:58 pm ]
Post subject:  Re: Колибри 0.7.5.0

Yes, now it works.
But disconnect in telnet does nothing, another host remain "connected".

Page 17 of 23 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/