Page 17 of 23

Re: Колибри 0.7.5.0

Posted: Thu Nov 19, 2009 10:24 pm
by hidnplayr
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.

Re: Колибри 0.7.5.0

Posted: Thu Nov 19, 2009 10:56 pm
by tsdima
Статическая конфигурация не вешает систему, но сеть не работает - в программе "статус сети" количество пакетов везде ноль.

Re: Колибри 0.7.5.0

Posted: Thu Nov 19, 2009 11:07 pm
by tsdima
Поставил до и после eth.write_udp сообщения Sending... и ОК. Первое сообщение напечаталось, от второго успело напечататься только О.

Re: Колибри 0.7.5.0

Posted: Thu Nov 19, 2009 11:20 pm
by tsdima
Yes, all network programms crashes system, always at addr 80024D1C.
I suppose it is in e3c59x_boomerang_transmit after

Code: Select all

; program DPD
        mov     edi, eax
        pop     eax

Re: Колибри 0.7.5.0

Posted: Fri Nov 20, 2009 12:39 am
by tsdima
Насколько я понял, макросы:

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?

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

Re: Колибри 0.7.5.0

Posted: Fri Nov 20, 2009 10:14 am
by <Lrz>
В ревизии 1276 я допустил ошибку, я ее уже исправил, залью на свн вечером, сейчас нет возможности.

Re: Колибри 0.7.5.0

Posted: Fri Nov 20, 2009 1:32 pm
by hidnplayr
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.

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 12:20 am
by tsdima
Ну хорошо, с драйвером я разобрался, сделал такие изменения:

Code: Select all

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 не коннектится, серверные проги тоже молчат. Куда теперь копать?

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 1:06 am
by tsdima
Сразу после перезагрузки, если вызвать конфигурацию сети и поставить галочку напротив "Фикс.", где уже стоит статический адрес (изначально галочка почему-то напротив "Назначенный"), то телнет коннектится, и даже несколько символов успешно туда-сюда пересылаются, но потом начинаются какие-то задержки, а потом и вовсе ничего не передаётся. Хотя пингуется по прежнему нормально. Это глюки реализации TCP/IP?

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 2:43 pm
by tsdima
По поводу второй части изменений, лучше исправить ошибку, а не инициализировать переменные:

Code: Select all

; 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:
Если команда выполнилась без таймаута, то без этого исправления переменные не инициализировались.

Re: Колибри 0.7.5.0

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

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 5:20 pm
by hidnplayr
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: Select all

or      ebx, (1 shl 26) ; set AddTcpChecksum

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 5:26 pm
by tsdima
I think, my card is a 'boomerang' type, 'vortex' procedures don't uses descriptor lists.

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 5:31 pm
by tsdima
hidnplayr wrote:the TCP checksum of some sent packets is incorrect!
May be it is the problem, while ARP and ICMP-echo works properly.

Re: Колибри 0.7.5.0

Posted: Sun Nov 22, 2009 5:58 pm
by tsdima
Yes, now it works.
But disconnect in telnet does nothing, another host remain "connected".