pollevent.hh revision 11168:f98eb2da15a4
112854Sgabeblack@google.com/* 212854Sgabeblack@google.com * Copyright (c) 2002-2005 The Regents of The University of Michigan 312854Sgabeblack@google.com * All rights reserved. 412854Sgabeblack@google.com * 512854Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without 612854Sgabeblack@google.com * modification, are permitted provided that the following conditions are 712854Sgabeblack@google.com * met: redistributions of source code must retain the above copyright 812854Sgabeblack@google.com * notice, this list of conditions and the following disclaimer; 912854Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright 1012854Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the 1112854Sgabeblack@google.com * documentation and/or other materials provided with the distribution; 1212854Sgabeblack@google.com * neither the name of the copyright holders nor the names of its 1312854Sgabeblack@google.com * contributors may be used to endorse or promote products derived from 1412854Sgabeblack@google.com * this software without specific prior written permission. 1512854Sgabeblack@google.com * 1612854Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712854Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812854Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912854Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012854Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112854Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212854Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312854Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412854Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512854Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612854Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712854Sgabeblack@google.com * 2812854Sgabeblack@google.com * Authors: Nathan Binkert 2912854Sgabeblack@google.com */ 3012854Sgabeblack@google.com 3112854Sgabeblack@google.com#ifndef __POLLEVENT_H__ 3212854Sgabeblack@google.com#define __POLLEVENT_H__ 3312854Sgabeblack@google.com 3412854Sgabeblack@google.com#include <poll.h> 3512854Sgabeblack@google.com 3612854Sgabeblack@google.com#include <vector> 3712854Sgabeblack@google.com 3812854Sgabeblack@google.com#include "sim/core.hh" 3912854Sgabeblack@google.com 4012854Sgabeblack@google.comclass Checkpoint; 4112854Sgabeblack@google.comclass PollQueue; 4212854Sgabeblack@google.com 4312854Sgabeblack@google.comclass PollEvent : public Serializable 4412854Sgabeblack@google.com{ 4512854Sgabeblack@google.com private: 4612854Sgabeblack@google.com friend class PollQueue; 4712854Sgabeblack@google.com 4812854Sgabeblack@google.com protected: 4912854Sgabeblack@google.com pollfd pfd; 5012854Sgabeblack@google.com PollQueue *queue; 5112854Sgabeblack@google.com bool enabled; 5212854Sgabeblack@google.com 5312854Sgabeblack@google.com public: 5412854Sgabeblack@google.com PollEvent(int fd, int event); 5512854Sgabeblack@google.com virtual ~PollEvent(); 5612854Sgabeblack@google.com 5712854Sgabeblack@google.com void disable(); 5812854Sgabeblack@google.com void enable(); 5912854Sgabeblack@google.com virtual void process(int revent) = 0; 6012854Sgabeblack@google.com 6112854Sgabeblack@google.com bool queued() { return queue != 0; } 6212854Sgabeblack@google.com 6312854Sgabeblack@google.com void serialize(CheckpointOut &cp) const override; 6412854Sgabeblack@google.com void unserialize(CheckpointIn &cp) override; 6512854Sgabeblack@google.com}; 6612854Sgabeblack@google.com 6712854Sgabeblack@google.comclass PollQueue 6812854Sgabeblack@google.com{ 6912854Sgabeblack@google.com private: 7012854Sgabeblack@google.com typedef std::vector<PollEvent *> eventvec_t; 7112854Sgabeblack@google.com eventvec_t events; 7212854Sgabeblack@google.com 7312854Sgabeblack@google.com pollfd *poll_fds; 7412854Sgabeblack@google.com int max_size; 7512854Sgabeblack@google.com int num_fds; 7612854Sgabeblack@google.com 7712854Sgabeblack@google.com public: 7812854Sgabeblack@google.com PollQueue(); 7912854Sgabeblack@google.com ~PollQueue(); 8012854Sgabeblack@google.com 8112854Sgabeblack@google.com void copy(); 8212854Sgabeblack@google.com void remove(PollEvent *event); 8312854Sgabeblack@google.com void schedule(PollEvent *event); 8412854Sgabeblack@google.com void service(); 8512854Sgabeblack@google.com 8612854Sgabeblack@google.com public: 8712854Sgabeblack@google.com static void setupAsyncIO(int fd, bool set); 8812854Sgabeblack@google.com}; 8912854Sgabeblack@google.com 9012854Sgabeblack@google.comextern PollQueue pollQueue; 9112854Sgabeblack@google.com 9212854Sgabeblack@google.com#endif // __POLLEVENT_H__ 9312854Sgabeblack@google.com