etherbus.hh revision 56
19241Sandreas.hansson@arm.com/*
29717Sandreas.hansson@arm.com * Copyright (c) 2003 The Regents of The University of Michigan
39241Sandreas.hansson@arm.com * All rights reserved.
49241Sandreas.hansson@arm.com *
59241Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without
69241Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are
79241Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright
89241Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer;
99241Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright
109241Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the
119241Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution;
129241Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its
139241Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from
149241Sandreas.hansson@arm.com * this software without specific prior written permission.
159241Sandreas.hansson@arm.com *
169241Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
179241Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
189241Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
199241Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
209241Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
219241Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
229241Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
239241Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
249241Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
259241Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
269241Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
279241Sandreas.hansson@arm.com */
289241Sandreas.hansson@arm.com
299241Sandreas.hansson@arm.com/* @file
309241Sandreas.hansson@arm.com * Device module for modelling an ethernet hub
319241Sandreas.hansson@arm.com */
329241Sandreas.hansson@arm.com
339241Sandreas.hansson@arm.com#ifndef __ETHERBUS_H__
349241Sandreas.hansson@arm.com#define __ETHERBUS_H__
359241Sandreas.hansson@arm.com
369241Sandreas.hansson@arm.com#include "sim/eventq.hh"
379241Sandreas.hansson@arm.com#include "dev/etherpkt.hh"
389241Sandreas.hansson@arm.com#include "sim/sim_object.hh"
399241Sandreas.hansson@arm.com
409241Sandreas.hansson@arm.comclass EtherDump;
419241Sandreas.hansson@arm.comclass EtherInt;
429241Sandreas.hansson@arm.comclass EtherBus : public SimObject
439241Sandreas.hansson@arm.com{
4410138Sneha.agarwal@arm.com  protected:
459241Sandreas.hansson@arm.com    typedef std::list<EtherInt *> devlist_t;
469241Sandreas.hansson@arm.com    devlist_t devlist;
479241Sandreas.hansson@arm.com    double ticks_per_byte;
489241Sandreas.hansson@arm.com    bool loopback;
499241Sandreas.hansson@arm.com
509241Sandreas.hansson@arm.com  protected:
519241Sandreas.hansson@arm.com    class DoneEvent : public Event
529241Sandreas.hansson@arm.com    {
539241Sandreas.hansson@arm.com      protected:
549241Sandreas.hansson@arm.com        EtherBus *bus;
559241Sandreas.hansson@arm.com
569241Sandreas.hansson@arm.com      public:
579241Sandreas.hansson@arm.com        DoneEvent(EventQueue *q, EtherBus *b)
589718Sandreas.hansson@arm.com            : Event(q), bus(b) {}
599720Sandreas.hansson@arm.com        virtual void process() { bus->txDone(); }
609717Sandreas.hansson@arm.com        virtual const char *description() { return "ethernet bus completion"; }
619719Sandreas.hansson@arm.com    };
6210360Sandreas.hansson@arm.com
639241Sandreas.hansson@arm.com    DoneEvent event;
649719Sandreas.hansson@arm.com    PacketPtr packet;
659719Sandreas.hansson@arm.com    EtherInt *sender;
669719Sandreas.hansson@arm.com    EtherDump *dump;
679719Sandreas.hansson@arm.com
689241Sandreas.hansson@arm.com  public:
699241Sandreas.hansson@arm.com    EtherBus(const std::string &name, double ticks_per_byte, bool loopback,
709241Sandreas.hansson@arm.com             EtherDump *dump);
719241Sandreas.hansson@arm.com    virtual ~EtherBus() {}
729241Sandreas.hansson@arm.com
739241Sandreas.hansson@arm.com    void txDone();
749241Sandreas.hansson@arm.com    void reg(EtherInt *dev);
759241Sandreas.hansson@arm.com    bool busy() const { return (bool)packet; }
769241Sandreas.hansson@arm.com    bool send(EtherInt *sender, PacketPtr packet);
779294Sandreas.hansson@arm.com};
789294Sandreas.hansson@arm.com
799241Sandreas.hansson@arm.com#endif // __ETHERBUS_H__
809241Sandreas.hansson@arm.com