pollevent.hh revision 10905
19241Sandreas.hansson@arm.com/* 29717Sandreas.hansson@arm.com * Copyright (c) 2002-2005 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 * Authors: Nathan Binkert 299241Sandreas.hansson@arm.com */ 309241Sandreas.hansson@arm.com 319241Sandreas.hansson@arm.com#ifndef __POLLEVENT_H__ 329241Sandreas.hansson@arm.com#define __POLLEVENT_H__ 339241Sandreas.hansson@arm.com 349241Sandreas.hansson@arm.com#include <poll.h> 359241Sandreas.hansson@arm.com 369241Sandreas.hansson@arm.com#include <vector> 379241Sandreas.hansson@arm.com 389241Sandreas.hansson@arm.com#include "sim/core.hh" 399241Sandreas.hansson@arm.com 409241Sandreas.hansson@arm.comclass Checkpoint; 419241Sandreas.hansson@arm.comclass PollQueue; 429241Sandreas.hansson@arm.com 439241Sandreas.hansson@arm.comclass PollEvent : public Serializable 4410138Sneha.agarwal@arm.com{ 459241Sandreas.hansson@arm.com private: 469241Sandreas.hansson@arm.com friend class PollQueue; 479241Sandreas.hansson@arm.com 489241Sandreas.hansson@arm.com protected: 499241Sandreas.hansson@arm.com pollfd pfd; 509241Sandreas.hansson@arm.com PollQueue *queue; 519241Sandreas.hansson@arm.com bool enabled; 529241Sandreas.hansson@arm.com 539241Sandreas.hansson@arm.com public: 549241Sandreas.hansson@arm.com PollEvent(int fd, int event); 559241Sandreas.hansson@arm.com virtual ~PollEvent(); 569241Sandreas.hansson@arm.com 579241Sandreas.hansson@arm.com void disable(); 589718Sandreas.hansson@arm.com void enable(); 599720Sandreas.hansson@arm.com virtual void process(int revent) = 0; 609717Sandreas.hansson@arm.com 619719Sandreas.hansson@arm.com bool queued() { return queue != 0; } 6210360Sandreas.hansson@arm.com 639241Sandreas.hansson@arm.com void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; 649719Sandreas.hansson@arm.com void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; 659719Sandreas.hansson@arm.com}; 669719Sandreas.hansson@arm.com 679719Sandreas.hansson@arm.comclass PollQueue 689241Sandreas.hansson@arm.com{ 699241Sandreas.hansson@arm.com private: 709241Sandreas.hansson@arm.com typedef std::vector<PollEvent *> eventvec_t; 719241Sandreas.hansson@arm.com eventvec_t events; 729241Sandreas.hansson@arm.com 739241Sandreas.hansson@arm.com pollfd *poll_fds; 749241Sandreas.hansson@arm.com int max_size; 759241Sandreas.hansson@arm.com int num_fds; 769241Sandreas.hansson@arm.com 779294Sandreas.hansson@arm.com public: 789294Sandreas.hansson@arm.com PollQueue(); 799241Sandreas.hansson@arm.com ~PollQueue(); 809241Sandreas.hansson@arm.com 819241Sandreas.hansson@arm.com void copy(); 829241Sandreas.hansson@arm.com void remove(PollEvent *event); 839241Sandreas.hansson@arm.com void schedule(PollEvent *event); 849241Sandreas.hansson@arm.com void service(); 859241Sandreas.hansson@arm.com 869241Sandreas.hansson@arm.com public: 879241Sandreas.hansson@arm.com static void setupAsyncIO(int fd, bool set); 889241Sandreas.hansson@arm.com}; 899241Sandreas.hansson@arm.com 909241Sandreas.hansson@arm.comextern PollQueue pollQueue; 919241Sandreas.hansson@arm.com 929241Sandreas.hansson@arm.com#endif // __POLLEVENT_H__ 939241Sandreas.hansson@arm.com