fd_entry.hh revision 10930:ddc3d96d6313
111308Santhony.gutierrez@amd.com/*
211308Santhony.gutierrez@amd.com * Copyright (c) 2015 Advanced Micro Devices, Inc.
311308Santhony.gutierrez@amd.com * Copyright (c) 2001-2005 The Regents of The University of Michigan
411308Santhony.gutierrez@amd.com *
511308Santhony.gutierrez@amd.com * Redistribution and use in source and binary forms, with or without
611308Santhony.gutierrez@amd.com * modification, are permitted provided that the following conditions are
711308Santhony.gutierrez@amd.com * met: redistributions of source code must retain the above copyright
811308Santhony.gutierrez@amd.com * notice, this list of conditions and the following disclaimer;
911308Santhony.gutierrez@amd.com * redistributions in binary form must reproduce the above copyright
1011308Santhony.gutierrez@amd.com * notice, this list of conditions and the following disclaimer in the
1111308Santhony.gutierrez@amd.com * documentation and/or other materials provided with the distribution;
1211308Santhony.gutierrez@amd.com * neither the name of the copyright holders nor the names of its
1311308Santhony.gutierrez@amd.com * contributors may be used to endorse or promote products derived from
1411308Santhony.gutierrez@amd.com * this software without specific prior written permission.
1511308Santhony.gutierrez@amd.com *
1611308Santhony.gutierrez@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1711308Santhony.gutierrez@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1811308Santhony.gutierrez@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1911308Santhony.gutierrez@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2011308Santhony.gutierrez@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2111308Santhony.gutierrez@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2211308Santhony.gutierrez@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2311308Santhony.gutierrez@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2411308Santhony.gutierrez@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2511308Santhony.gutierrez@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2611308Santhony.gutierrez@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2711308Santhony.gutierrez@amd.com *
2811308Santhony.gutierrez@amd.com * Authors: Nathan Binkert
2911308Santhony.gutierrez@amd.com *          Steve Reinhardt
3011308Santhony.gutierrez@amd.com */
3111308Santhony.gutierrez@amd.com
3211308Santhony.gutierrez@amd.com#ifndef __FD_ENTRY_HH__
3311308Santhony.gutierrez@amd.com#define __FD_ENTRY_HH__
3411308Santhony.gutierrez@amd.com
3511308Santhony.gutierrez@amd.com#include <ostream>
3611308Santhony.gutierrez@amd.com#include <string>
3711308Santhony.gutierrez@amd.com
3811308Santhony.gutierrez@amd.com#include "sim/emul_driver.hh"
3911308Santhony.gutierrez@amd.com
4011308Santhony.gutierrez@amd.com/**
4111308Santhony.gutierrez@amd.com * FDEntry is used to manage a single file descriptor mapping and metadata
4211308Santhony.gutierrez@amd.com * for processes.
4311308Santhony.gutierrez@amd.com * Note that the fields are all declared publicly since system calls have a
4411308Santhony.gutierrez@amd.com * habit of only needing to access a single field at a time and accessor
4511308Santhony.gutierrez@amd.com * methods seem like overkill.
4611308Santhony.gutierrez@amd.com */
4711308Santhony.gutierrez@amd.comclass FDEntry : public Serializable
4811308Santhony.gutierrez@amd.com{
4911308Santhony.gutierrez@amd.com  public:
5011308Santhony.gutierrez@amd.com    /**
5111308Santhony.gutierrez@amd.com     * Constructor contains default values
5211308Santhony.gutierrez@amd.com     * The file descriptor is free.
5311308Santhony.gutierrez@amd.com     */
5411308Santhony.gutierrez@amd.com    FDEntry()
5511308Santhony.gutierrez@amd.com        : fd(-1), mode(0), flags(0), isPipe(false), readPipeSource(0),
5611308Santhony.gutierrez@amd.com          fileOffset(0), filename(""), driver(NULL)
5711308Santhony.gutierrez@amd.com    { }
5811308Santhony.gutierrez@amd.com
5911308Santhony.gutierrez@amd.com    void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE;
6011308Santhony.gutierrez@amd.com    void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE;
6111308Santhony.gutierrez@amd.com
6211308Santhony.gutierrez@amd.com    /**
6311308Santhony.gutierrez@amd.com     * Check if the target file descriptor is in use.
6411308Santhony.gutierrez@amd.com     * @return value denoting if target file descriptor already used
6511534Sjohn.kalamatianos@amd.com     */
6611308Santhony.gutierrez@amd.com    bool isFree();
6711308Santhony.gutierrez@amd.com
6811308Santhony.gutierrez@amd.com    /**
6911308Santhony.gutierrez@amd.com     * Fill in members for this file descriptor entry.
7011308Santhony.gutierrez@amd.com     * @param sim_fd host file descriptor
7111308Santhony.gutierrez@amd.com     * @param name filename string
7211308Santhony.gutierrez@amd.com     * @param flags current flags of the file descriptor
7311308Santhony.gutierrez@amd.com     * @param mode current mode of the file descriptor
7411308Santhony.gutierrez@amd.com     * @param pipe denotes whether the file descriptor belongs to a pipe
7511308Santhony.gutierrez@amd.com     */
7611308Santhony.gutierrez@amd.com    void set(int sim_fd, const std::string name, int flags, int mode,
7711308Santhony.gutierrez@amd.com             bool pipe);
7811308Santhony.gutierrez@amd.com
7911308Santhony.gutierrez@amd.com    /** Reset members to their default values. */
8011308Santhony.gutierrez@amd.com    void reset();
8111308Santhony.gutierrez@amd.com
8211308Santhony.gutierrez@amd.com    int fd;
8311308Santhony.gutierrez@amd.com    int mode;
8411308Santhony.gutierrez@amd.com    int flags;
8511308Santhony.gutierrez@amd.com    bool isPipe;
8611308Santhony.gutierrez@amd.com    int readPipeSource;
8711308Santhony.gutierrez@amd.com    uint64_t fileOffset;
8811308Santhony.gutierrez@amd.com    std::string filename;
8911308Santhony.gutierrez@amd.com    EmulatedDriver *driver;
9011308Santhony.gutierrez@amd.com};
9111308Santhony.gutierrez@amd.com
9211308Santhony.gutierrez@amd.com#endif // __FD_ENTRY_HH__
9311308Santhony.gutierrez@amd.com