OpenNet
Hardware.h
Aller à la documentation de ce fichier.
1 
2 // Product OpenNet
3 
8 
9 #pragma once
10 
11 // Includes
13 
14 // ===== Includes ===========================================================
15 #include <OpenNetK/Adapter.h>
16 #include <OpenNetK/Adapter_Types.h>
17 #include <OpenNetK/SpinLock.h>
18 #include <OpenNetK/Types.h>
19 
20 namespace OpenNetK
21 {
22 
23  class Packet;
24 
25  // Class
27 
37  class Hardware
38  {
39 
40  public:
41 
53  void * operator new(size_t aSize_byte, void * aAddress);
54 
67  unsigned int GetCommonBufferSize() const;
68 
79  unsigned int GetPacketSize() const;
80 
90  virtual void GetState(Adapter_State * aState) = 0;
91 
100  virtual void ResetMemory();
101 
111  virtual void SetAdapter(Adapter * aAdapter);
112 
126  virtual void SetCommonBuffer(uint64_t aCommon_PA, void * aCommon_CA);
127 
137  virtual void SetConfig(const Adapter_Config & aConfig);
138 
156  virtual bool SetMemory(unsigned int aIndex, void * aMemory_MA, unsigned int aSize_byte);
157 
166  virtual void D0_Entry();
167 
179  virtual bool D0_Exit();
180 
188  virtual void Interrupt_Disable();
189 
197  virtual void Interrupt_Enable();
198 
218  virtual bool Interrupt_Process(unsigned int aMessageId, bool * aNeedMoreProcessing);
219 
231  virtual void Interrupt_Process2(bool * aNeedMoreProcessing);
232 
240  virtual void Interrupt_Process3();
241 
242  // TODO OpenNetK.Hardware
243  // Normal (Optimisation) - Use two lock, one for Rx and one for
244  // Tx
245 
257  void Lock();
258 
259  // TODO OpenNet.Hardware
260  // Normal (Feature) - Ajouter Lock_BeforeSend en passant un
261  // nombre de descripteurs necessaires. Cette fonction echouera
262  // s'il n'y a pas assez de descripteur disponible.
263 
273  void Unlock();
274 
291  void Unlock_AfterReceive_FromThread(volatile long * aCounter, unsigned int aPacketQty, uint32_t aFlags );
292 
309  void Unlock_AfterSend_FromThread(volatile long * aCounter, unsigned int aPacketQty, uint32_t aFlags );
310 
321  virtual bool Packet_Drop() = 0;
322 
323  // TODO OpenNetK.Adapter
324  // Normal (Cleanup) - Pass the aCounter to Lock rather than at
325  // Packet_Receive_NoLock and Unlock_AfterSend and do not pass
326  // aPacketQty to Unlock_AfterSend. Replace it by an internal
327  // counter.
328 
342  virtual void Packet_Receive_NoLock(Packet * aPacket, volatile long * aCounter) = 0;
343 
361  virtual void Packet_Send_NoLock(uint64_t aPacket_PA, const void * aPacket_XA, unsigned int aSize_byte, volatile long * aCounter) = 0;
362 
381  virtual bool Packet_Send(const void * aPacket, unsigned int aSize_byte, bool aPriority, unsigned int aRepeatCount = 1) = 0;
382 
402  virtual unsigned int Statistics_Get(uint32_t * aOut, unsigned int aOutSize_byte, bool aReset);
403 
411  virtual void Statistics_Reset();
412 
422  bool Tx_IsEnabled() const;
423 
431  virtual void Tx_Disable();
432 
440  virtual void Tx_Enable();
441 
442  // internal:
443 
444  void Init(SpinLock * aZone0);
445 
446  void GetConfig(Adapter_Config * aConfig);
447  void GetInfo (Adapter_Info * aInfo );
448 
449  void Tick();
450 
451  void Unlock_AfterReceive(volatile long * aCounter, unsigned int aPacketQty);
452  void Unlock_AfterSend (volatile long * aCounter, unsigned int aPacketQty);
453 
454  protected:
455 
473  static void SkipDangerousBoundary(uint64_t * aIn_PA, uint8_t ** aIn_XA, unsigned int aSize_byte, uint64_t * aOut_PA, uint8_t ** aOut_XA);
474 
488  Hardware(OpenNetK::Adapter_Type aType, unsigned int aPacketSize_byte);
489 
499  virtual void Unlock_AfterReceive_Internal() = 0;
500 
510  virtual void Unlock_AfterSend_Internal() = 0;
511 
519 
527 
534  mutable uint32_t mStatistics[64];
535 
536  // ===== Zone 0 =====================================================
537 
546 
547  private:
548 
549  Hardware(const Hardware &);
550 
551  const Hardware & operator = (const Hardware &);
552 
553  Adapter * mAdapter;
554 
555  bool mTx_Enabled;
556 
557  };
558 
559  // Public
561 
562  inline void Hardware::Lock()
563  {
564  mZone0->Lock();
565  }
566 
567  inline void Hardware::Unlock()
568  {
569  mZone0->Unlock();
570  }
571 
572  inline bool Hardware::Tx_IsEnabled() const
573  {
574  return mTx_Enabled;
575  }
576 
577  // Internal
579 
580  inline void Hardware::Tick()
581  {
582  mAdapter->Tick();
583  }
584 
585 }
Cette structure est utilisée pour retourner les informations au sujet d'un adaptateur.
Definition: Adapter_Types.h:227
unsigned int GetCommonBufferSize() const
Obtenir la taille de l'espace mémoire partagé avec le matériel.
virtual void Interrupt_Enable()
Activer les interruptions.
void Unlock_AfterReceive_FromThread(volatile long *aCounter, unsigned int aPacketQty, uint32_t aFlags)
Déverouiller l'accès au matériel après avoir programmé des descripteurs de réception.
OpenNet_BufferHeader, OpenNet_PacketInfo (RT)
virtual void ResetMemory()
Réinitialiser toutes les regions de mémoire.
Cette classe cache les information d'un paquet.
Definition: Packet.h:30
Hardware(OpenNetK::Adapter_Type aType, unsigned int aPacketSize_byte)
Le constructeur par défaut.
virtual void Unlock_AfterSend_Internal()=0
La partie de Unlock_AfterSend qui dépend du matériel.
virtual void Interrupt_Disable()
Désactiver les interruptions.
virtual void Tx_Enable()
Activer la transmission.
unsigned int GetPacketSize() const
Obtenir la taille maximum des paquets configuré.
virtual bool Packet_Drop()=0
Ajouter un espace mémoire à la queue de réception.
virtual bool Interrupt_Process(unsigned int aMessageId, bool *aNeedMoreProcessing)
Traiter une interruption.
Cette structure est utilisée pour passer la configuration.
Definition: Adapter_Types.h:198
virtual void Interrupt_Process3()
Traiter une interruption au troisième niveau.
virtual void Statistics_Reset()
Remettre les statistiques à zéro.
void Unlock_AfterSend_FromThread(volatile long *aCounter, unsigned int aPacketQty, uint32_t aFlags)
Déverouiller l'accès au matériel après avoir programmé des descripteurs de transmission.
void Lock()
Verouiller l'accès au matériel.
Definition: Hardware.h:562
Adapter_Config mConfig
La configuration de l'adapteur.
Definition: Hardware.h:518
OpenNetK::SpinLock.
void Unlock()
Déverouiller.
Definition: SpinLock.h:118
Cette structure est utilisée pour retourner l'etat.
Definition: Adapter_Types.h:260
Interface d'un spinlock.
Definition: SpinLock.h:36
Cette classe déclare l'interface du materiel.
Definition: Hardware.h:37
virtual bool Packet_Send(const void *aPacket, unsigned int aSize_byte, bool aPriority, unsigned int aRepeatCount=1)=0
Ajouter le paquet à la queue de transmission.
Definition: Adapter.h:26
virtual unsigned int Statistics_Get(uint32_t *aOut, unsigned int aOutSize_byte, bool aReset)
Obtenir les statistiques.
void Lock()
Verouiller.
Definition: SpinLock.h:113
void Unlock()
Déverouiller l'accès au matériel.
Definition: Hardware.h:567
OpenNetK::Adapter_Config, OpenNetK::Adapter_Info, OpenNetK::Adapter_State, OpenNetK::Buffer, OpenNetK::EthernetAddress, OpenNetK::IPv4Address, OpenNetK::VersionInfo (SDK)
virtual void SetConfig(const Adapter_Config &aConfig)
Changer la configuration.
virtual void Packet_Receive_NoLock(Packet *aPacket, volatile long *aCounter)=0
Ajouter le paquet à la queue de réception.
virtual void GetState(Adapter_State *aState)=0
Obtenir l'etat courant.
OpenNetK::Adapter (DDK)
virtual bool D0_Exit()
Sortir de l'état D0.
virtual void D0_Entry()
Entrer dans l'état D0.
virtual bool SetMemory(unsigned int aIndex, void *aMemory_MA, unsigned int aSize_byte)
Indique une région de mémoire.
virtual void Unlock_AfterReceive_Internal()=0
La partie de Unlock_AfterReceive qui dépend du matériel.
virtual void Packet_Send_NoLock(uint64_t aPacket_PA, const void *aPacket_XA, unsigned int aSize_byte, volatile long *aCounter)=0
Ajouter le paquet à la queue de transmission.
virtual void SetAdapter(Adapter *aAdapter)
Connecter l'Adaptateur.
bool Tx_IsEnabled() const
La transmission est-elle active?
Definition: Hardware.h:572
virtual void Interrupt_Process2(bool *aNeedMoreProcessing)
Traiter une interruption au second niveau.
Cette classe maintien les informations concernant un adaptateur sur le réseau interne OpenNet...
Definition: Adapter.h:51
static void SkipDangerousBoundary(uint64_t *aIn_PA, uint8_t **aIn_XA, unsigned int aSize_byte, uint64_t *aOut_PA, uint8_t **aOut_XA)
Passer les dangereuses barriere de 64 Kio.
virtual void Tx_Disable()
Désactiver la transmission.
uint32_t mStatistics[64]
La configuration de l'adapteur.
Definition: Hardware.h:534
Adapter_Info mInfo
L'information au sujet de l'adapteur.
Definition: Hardware.h:526
SpinLock * mZone0
Le SpinLock utilisé pour verouille l'accès au matériel.
Definition: Hardware.h:545
virtual void SetCommonBuffer(uint64_t aCommon_PA, void *aCommon_CA)
Associe l'espace de memoire contigue.