etherint.hh revision 13770
17639Sgblack@eecs.umich.edu/* 27639Sgblack@eecs.umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan 310829Sandreas.hansson@arm.com * All rights reserved. 47639Sgblack@eecs.umich.edu * 57639Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 67639Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 77639Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 87639Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 97639Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 107639Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 117639Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 127639Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 137639Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 147639Sgblack@eecs.umich.edu * this software without specific prior written permission. 157639Sgblack@eecs.umich.edu * 167639Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177639Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187639Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197639Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207639Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217639Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227639Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237639Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247639Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257639Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267639Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277639Sgblack@eecs.umich.edu * 287639Sgblack@eecs.umich.edu * Authors: Nathan Binkert 297639Sgblack@eecs.umich.edu */ 307639Sgblack@eecs.umich.edu 317639Sgblack@eecs.umich.edu/* @file 327639Sgblack@eecs.umich.edu * Class representing the actual interface between two ethernet 337639Sgblack@eecs.umich.edu * components. 347639Sgblack@eecs.umich.edu */ 357639Sgblack@eecs.umich.edu 367639Sgblack@eecs.umich.edu#ifndef __DEV_NET_ETHERINT_HH__ 377639Sgblack@eecs.umich.edu#define __DEV_NET_ETHERINT_HH__ 387639Sgblack@eecs.umich.edu 397639Sgblack@eecs.umich.edu#include <string> 407639Sgblack@eecs.umich.edu 417639Sgblack@eecs.umich.edu#include "dev/net/etherpkt.hh" 427639Sgblack@eecs.umich.edu#include "mem/port.hh" 437639Sgblack@eecs.umich.edu 447639Sgblack@eecs.umich.edu/* 457639Sgblack@eecs.umich.edu * Class representing the actual interface between two ethernet 467639Sgblack@eecs.umich.edu * components. These components are intended to attach to another 477639Sgblack@eecs.umich.edu * ethernet interface on one side and whatever device on the other. 487639Sgblack@eecs.umich.edu */ 497639Sgblack@eecs.umich.educlass EtherInt : public Port 507639Sgblack@eecs.umich.edu{ 517639Sgblack@eecs.umich.edu protected: 527639Sgblack@eecs.umich.edu mutable std::string portName; 537639Sgblack@eecs.umich.edu EtherInt *peer; 547639Sgblack@eecs.umich.edu 557639Sgblack@eecs.umich.edu public: 567639Sgblack@eecs.umich.edu EtherInt(const std::string &name, int idx=InvalidPortID) 577639Sgblack@eecs.umich.edu : Port(name, idx), portName(name), peer(NULL) {} 587639Sgblack@eecs.umich.edu virtual ~EtherInt() {} 597639Sgblack@eecs.umich.edu 607639Sgblack@eecs.umich.edu /** Return port name (for DPRINTF). */ 617639Sgblack@eecs.umich.edu const std::string &name() const { return portName; } 627639Sgblack@eecs.umich.edu 637639Sgblack@eecs.umich.edu void setPeer(EtherInt *p); 647639Sgblack@eecs.umich.edu EtherInt* getPeer() { return peer; } 657639Sgblack@eecs.umich.edu 667639Sgblack@eecs.umich.edu void recvDone() { peer->sendDone(); } 677639Sgblack@eecs.umich.edu virtual void sendDone() = 0; 687639Sgblack@eecs.umich.edu 697639Sgblack@eecs.umich.edu bool sendPacket(EthPacketPtr packet) 707639Sgblack@eecs.umich.edu { return peer ? peer->recvPacket(packet) : true; } 717639Sgblack@eecs.umich.edu virtual bool recvPacket(EthPacketPtr packet) = 0; 727639Sgblack@eecs.umich.edu 737639Sgblack@eecs.umich.edu bool askBusy() {return peer->isBusy(); } 747639Sgblack@eecs.umich.edu virtual bool isBusy() { return false; } 757639Sgblack@eecs.umich.edu}; 767639Sgblack@eecs.umich.edu 777639Sgblack@eecs.umich.edu#endif // __DEV_NET_ETHERINT_HH__ 787639Sgblack@eecs.umich.edu