This shows you the differences between two versions of the page.
so2:teme:tema6 [2018/05/19 14:29] daniel.baluta |
so2:teme:tema6 [2019/05/22 21:08] (current) daniel.baluta [e100 - driver de rețea] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== e100 - driver de rețea ==== | ===== e100 - driver de rețea ==== | ||
- | * Termen de predare: **Miercuri, 23 Mai 2018, ora 23:00 ** \\ | + | * Termen de predare: <tema nu intra in lista oficiala de teme pentru 2019> |
===== Scopul temei ===== | ===== Scopul temei ===== | ||
Line 10: | Line 10: | ||
===== Enunț ===== | ===== Enunț ===== | ||
- | Să se scrie un driver pentru placa de rețea **Intel 82559ER** (device întâlnit şi sub numele de **e100** sau **eepro100**). Modulul va trebui să suporte device-urile de rețea configurate în maşina virtuală qemu. Specificațiile acestora le găsiți în următoarele documente: | + | Să se scrie un driver pentru placa de rețea **Intel 82559ER** (device întâlnit şi sub numele de **e100** sau **eepro100**). Modulul va trebui să suporte device-urile de rețea configurate în maşina virtuală qemu. Specificațiile se gasesc in documentul: |
- | * [[ http://application-notes.digchip.com/027/27-45688.pdf | Intel 8255x 10/100 Mbps Ethernet Controller Family Open Source Software Developer Manual ]] | + | |
- | * [[http://www.intel.com/content/www/us/en/ethernet-controllers/82559er-fast-ethernet-pci-datasheet.html | 82559ER Fast Ethernet PCI Controller Datasheet]] | + | |
- | Nu va trebui să ciți în întregime documentele de mai sus, ci doar secțiunile indicate în enunț. | + | * [[http://application-notes.digchip.com/027/27-45688.pdf| 82559ER Fast Ethernet PCI Controller Software Developer Manual]] |
+ | |||
+ | Nu va trebui să ciți în întregime documentul de mai sus, ci doar secțiunile indicate în enunț. | ||
+ | |||
+ | <note important>Puteți porni implementarea de la zero sau folosi scheletul de cod generat: | ||
+ | $ LABS=assignments/6-e100 make skels | ||
+ | </note> | ||
==== Precizări ==== | ==== Precizări ==== | ||
Line 41: | Line 45: | ||
Urmăriți comentariile marcate cu TODO 2: | Urmăriți comentariile marcate cu TODO 2: | ||
- | * inițializați device-ul PCI folosind funcția ''pci_device_enable'' (activeaza I/O și memoria și trezește device-ul dacă era suspendat) | + | * inițializați device-ul PCI folosind funcția ''pci_enable_device'' (activeaza I/O și memoria și trezește device-ul dacă era suspendat) |
* rezervați zonele de memorie si I/O pentru device-ul PCI folosind funcția pci_request_regions | * rezervați zonele de memorie si I/O pentru device-ul PCI folosind funcția pci_request_regions | ||
* device-ul e100 suporta urmatoarele zone (chapter 4.1.10) | * device-ul e100 suporta urmatoarele zone (chapter 4.1.10) | ||
Line 51: | Line 55: | ||
==== e100 private data ==== | ==== e100 private data ==== | ||
- | Structura ''e100_priv_data'' va contine informatii specifice fiecarui device de retea gestionat de driver. În primul rând va conține informații despre pci_dev și netdevice-ul curent, apoi informatii de stare, registre, unitatea de transmisie, unitatea de recepție, etc. Spațiul de memorie pentru ''e100_priv_data'' se va aloca în funcția ''alloc_etherdev'' urmăriți capitolul [[so2:teme:tema6#structura_net_device]]. | + | Structura ''e100_priv_data'' va contine informatii specifice fiecarui device de retea gestionat de driver. În primul rând va conține informații despre pci_dev și netdevice-ul curent, apoi informatii de stare, registre, unitatea de transmisie, unitatea de recepție, etc. Spațiul de memorie pentru ''e100_priv_data'' se va aloca în funcția ''alloc_etherdev'' urmăriți sectiunea [[so2:teme:tema6#structura_net_device]]. |
Line 93: | Line 97: | ||
+--------------+--------------+ | +--------------+--------------+ | ||
- | Mai multe detalii despre trimiterea pachetelor citiți in secțiunea ''Transmitting Packets'' de [[https://pdos.csail.mit.edu/6.828/2010/labs/lab6/ | aici]]. | + | Mai multe detalii despre trimiterea pachetelor citiți in secțiunea ''Transmitting Packets'' de [[https://pdos.csail.mit.edu/6.828/2010/labs/lab6/ | aici]]. Urmăriți comentariile marcate cu TODO 5. |
==== Recepționarea pachetelor ==== | ==== Recepționarea pachetelor ==== | ||
Line 104: | Line 108: | ||
Unitatea de recepție (RU) se ocupă de primirea pachetelor. La primirea unui pachet din rețea, copiaza pachetul în urmator-ul RFD liber, marchează RFD-ul valid și se mută la următorul RFD. | Unitatea de recepție (RU) se ocupă de primirea pachetelor. La primirea unui pachet din rețea, copiaza pachetul în urmator-ul RFD liber, marchează RFD-ul valid și se mută la următorul RFD. | ||
- | Mai multe detalii despre trimiterea pachetelor citiți in secțiunea ''Receiving Packets'' de [[https://pdos.csail.mit.edu/6.828/2010/labs/lab6/ | aici]]. | + | Mai multe detalii despre trimiterea pachetelor citiți in secțiunea ''Receiving Packets'' de [[https://pdos.csail.mit.edu/6.828/2010/labs/lab6/ | aici]]. Urmăriți comentariile cu TODO 6. |
+ | ===== e100 header ===== | ||
+ | |||
+ | Antetul e100 conține descrierea in memorie a structurilor importante expuse de device-ul e100. | ||
+ | |||
+ | * ''struct csr'', Control/Status Register descris in secțiunea 6.3.1 | ||
+ | * ''struct tcb'', Transmit Command Block descris in secțiunea 6.4.2.5 | ||
+ | * ''struct cb'', descrie un Command Block generic. | ||
===== Testare ===== | ===== Testare ===== |