[so2] Comunicarea cu placa de retea
Vlad-Stefan GRIGORITA
vlad.grigorita at cti.pub.ro
Sun Mar 23 15:12:46 EET 2014
Salut,
Am reusit sa configurez pci device si net device (in functia probe), insa am aceeasi problema ca si Andrei, nu reusesc sa comunic cu dispozitivul(sa ii dau reset, sa ii stabilesc base CU si RU, si pointerii catre lista de buffere din care sa trimita/in care sa primeasca).
In momentul in care se apeleaza ndo_open (pentru ca i-am atribuit un ip, si am dat link up), eu iau registrul care contine adresa de I/O mapping si in cazul meu are valoarea C201 (conform documentatiei, acel 1 trebuie considerat 0, deci placa de retea are mapat spatiul I/O C200-C23f). Aceeasi valoare se afla si in pci device -> resource[1].start (si anume C201).
Continutul primilor 16 octeti din CSR (exact cum se afla in memorie, octetul de la adresa 0, de la adresa 1, etc) :
00 01 00 01 | 00 00 00 00 | 00 00 00 00 | 00 00 08 00
In qemu (nu in masina virtuala) am mesajul
qemu-system-i386 : pci_add_option_rom: failed to find romfile "pxe-eepro100.rom"
iar la fiecare citire de octet afiseaza (la fel, in qemu, nu in masina virtuala)
eepro100 : feature is missing in this emulation : unknown byte read
Folosesc outb/w/l ca sa pun in general pointer si in control register comanda (de exemplu, set base CU), si imi apare in masina virtuala "attkbd serio0 : Spurious ACK on isa0060/serio0. Some program might be trying to access hardware directly.". Cand citesc sa vad daca s-au modificat octetii, la citire se afiseaza acelasi lucru ca mai sus (ca si cum nu s-ar fi scris nimic).
Cum as putea sa comunic cu dispozitivul (ca sa ii dau comenzi) avand in vedere ca primesc aceste erori?
Mentionez ca am incercat sa folosesc si pc_iomap (folosind adresa unde este mapat in memorie dispozitivul, nu in I/O), daca citesc direct din memorie (fara inb/w/l) obtin exact acelasi output si exact acelasi erori in qemu, iar la scriere nu se intampla nimic.
Daca dau cat /proc/ioports, am intrarile
c200-c23f : 0000:00:05.0
c200-c20f : Ixia net device.(numele pe care l-am inregistat cand am mapat doar primele 16 porturi).
Cand ma refer ca se afiseaza in qemu, ma refer in fereastra de terminal, unde am introdus comanda "make" ca sa porneasca masina virtuala. Cand zic ca se afiseaza in masina virtuala, ma refer la fereastra numita QEMU, care reprezinta efectiv masina virtuala.
Vlad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20140323/f57c645e/attachment.html>
More information about the so2
mailing list