Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so2:teme:tema6 [2018/05/19 13:59]
daniel.baluta [Transmiterea pachetelor]
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 82: Line 86:
  
 Driverul trebuie sa construiasca un ring DMA in RAM pentru a instrui device-ul e100 unde se găsesc pachetele pe care dorește să le trimită. Secțiunea 6.4 din manual descrie formatul unui DMA ring. Driverul trebuie sa construiasca un ring DMA in RAM pentru a instrui device-ul e100 unde se găsesc pachetele pe care dorește să le trimită. Secțiunea 6.4 din manual descrie formatul unui DMA ring.
- 
- Your driver must construct a DMA ring in main memory in order to tell the 82559ER where to find the packets you wish to send. Section 6.4 describes the precise format of the DMA ring. 
  
 Un ring DMA de control este alcătuit din buffere denumite Control Blocks (CB). Un CB generic arată astfel: Un ring DMA de control este alcătuit din buffere denumite Control Blocks (CB). Un CB generic arată astfel:
Line 95: 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 ====
   * recepționarea pachetelor se va face în handlerul de întrerupere   * recepționarea pachetelor se va face în handlerul de întrerupere
   * la primirea unui pachet device-ul ''​e100''​ copiază datele într-o zonă DMA şi generează o întrerupere pentru a informa procesorul de sosirea unui nou pachet.   * la primirea unui pachet device-ul ''​e100''​ copiază datele într-o zonă DMA şi generează o întrerupere pentru a informa procesorul de sosirea unui nou pachet.
- + 
 +Un al doilea DMA ring este necesar pentru recepționarea pachetelor. Fiecare buffer din DMA ring-ul de recepție este denumit 
 +RFD (Receive Frame Descriptor). 
 + 
 +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]]. 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 =====
  
so2/teme/tema6.1526727581.txt.gz · Last modified: 2018/05/19 13:59 by daniel.baluta
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0