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