X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=dev%2Fns_gige.hh;h=82f640db176b61dfd4f186c13443ee9d7ec01d2d;hb=239183cfe675684aeca1a2b24362ca5e0a82809d;hp=79ae00e6496ec42ece855d16404233d11bb54393;hpb=13f8dc981fc898e6e200689d305b39f0718f8c83;p=gem5.git diff --git a/dev/ns_gige.hh b/dev/ns_gige.hh index 79ae00e64..82f640db1 100644 --- a/dev/ns_gige.hh +++ b/dev/ns_gige.hh @@ -34,21 +34,15 @@ #ifndef __NS_GIGE_HH__ #define __NS_GIGE_HH__ -//#include "base/range.hh" +#include "base/statistics.hh" #include "dev/etherint.hh" #include "dev/etherpkt.hh" -#include "sim/eventq.hh" +#include "dev/io_device.hh" #include "dev/ns_gige_reg.h" -#include "base/statistics.hh" #include "dev/pcidev.hh" #include "dev/tsunami.hh" -#include "dev/io_device.hh" #include "mem/bus/bus.hh" - -/** defined by the NS83820 data sheet */ -//these are now params for the device -//#define MAX_TX_FIFO_SIZE 8192 -//#define MAX_RX_FIFO_SIZE 32768 +#include "sim/eventq.hh" /** length of ethernet address in bytes */ #define EADDR_LEN 6 @@ -92,7 +86,10 @@ struct dp_regs { }; struct dp_rom { - /** for perfect match memory. the linux driver doesn't use any other ROM */ + /** + * for perfect match memory. + * the linux driver doesn't use any other ROM + */ uint8_t perfectMatch[EADDR_LEN]; }; @@ -189,6 +186,8 @@ class NSGigE : public PciDev /* tx State Machine */ TxState txState; + bool txEnable; + /** Current Transmit Descriptor Done */ bool CTDD; /** current amt of free space in txDataFifo in bytes */ @@ -203,6 +202,8 @@ class NSGigE : public PciDev /** rx State Machine */ RxState rxState; + bool rxEnable; + /** Current Receive Descriptor Done */ bool CRDD; /** num of bytes in the current packet being drained from rxDataFifo */ @@ -284,7 +285,13 @@ class NSGigE : public PciDev * Retransmit event */ void transmit(); - typedef EventWrapper TxEvent; + void txEventTransmit() + { + transmit(); + if (txState == txFifoBlock) + txKick(); + } + typedef EventWrapper TxEvent; friend class TxEvent; TxEvent txEvent;