linux.hh revision 9141:593fe25c86a6
16166Ssteve.reinhardt@amd.com/*
26928SBrad.Beckmann@amd.com * Copyright (c) 2006 The Regents of The University of Michigan
36166Ssteve.reinhardt@amd.com * All rights reserved.
46166Ssteve.reinhardt@amd.com *
56166Ssteve.reinhardt@amd.com * Redistribution and use in source and binary forms, with or without
66166Ssteve.reinhardt@amd.com * modification, are permitted provided that the following conditions are
76166Ssteve.reinhardt@amd.com * met: redistributions of source code must retain the above copyright
86166Ssteve.reinhardt@amd.com * notice, this list of conditions and the following disclaimer;
96166Ssteve.reinhardt@amd.com * redistributions in binary form must reproduce the above copyright
106166Ssteve.reinhardt@amd.com * notice, this list of conditions and the following disclaimer in the
116166Ssteve.reinhardt@amd.com * documentation and/or other materials provided with the distribution;
126166Ssteve.reinhardt@amd.com * neither the name of the copyright holders nor the names of its
136166Ssteve.reinhardt@amd.com * contributors may be used to endorse or promote products derived from
146166Ssteve.reinhardt@amd.com * this software without specific prior written permission.
156166Ssteve.reinhardt@amd.com *
166166Ssteve.reinhardt@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
176166Ssteve.reinhardt@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
186166Ssteve.reinhardt@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
196166Ssteve.reinhardt@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
206166Ssteve.reinhardt@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
216166Ssteve.reinhardt@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
226166Ssteve.reinhardt@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
236166Ssteve.reinhardt@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
246166Ssteve.reinhardt@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
256166Ssteve.reinhardt@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
266166Ssteve.reinhardt@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
276166Ssteve.reinhardt@amd.com *
286166Ssteve.reinhardt@amd.com * Authors: Korey Sewell
296166Ssteve.reinhardt@amd.com */
306166Ssteve.reinhardt@amd.com
316166Ssteve.reinhardt@amd.com#ifndef __ARCH_MIPS_LINUX_LINUX_HH__
326919SBrad.Beckmann@amd.com#define __ARCH_MIPS_LINUX_LINUX_HH__
336919SBrad.Beckmann@amd.com
346919SBrad.Beckmann@amd.com#include "kern/linux/linux.hh"
356166Ssteve.reinhardt@amd.com
366919SBrad.Beckmann@amd.comclass MipsLinux : public Linux
376919SBrad.Beckmann@amd.com{
386919SBrad.Beckmann@amd.com  public:
396919SBrad.Beckmann@amd.com
406919SBrad.Beckmann@amd.com    /// This table maps the target open() flags to the corresponding
416919SBrad.Beckmann@amd.com    /// host open() flags.
429113SBrad.Beckmann@amd.com    static OpenFlagTransTable openFlagTable[];
436919SBrad.Beckmann@amd.com
446919SBrad.Beckmann@amd.com    /// Number of entries in openFlagTable[].
458920Snilay@cs.wisc.edu    static const int NUM_OPEN_FLAGS;
466919SBrad.Beckmann@amd.com
476919SBrad.Beckmann@amd.com    //@{
488920Snilay@cs.wisc.edu    /// open(2) flag values.
496919SBrad.Beckmann@amd.com    static const int TGT_O_RDONLY       = 0x00000000;   //!< O_RDONLY
507570SBrad.Beckmann@amd.com    static const int TGT_O_WRONLY       = 0x00000001;   //!< O_WRONLY
517570SBrad.Beckmann@amd.com    static const int TGT_O_RDWR         = 0x00000002;   //!< O_RDWR
526919SBrad.Beckmann@amd.com    static const int TGT_O_NONBLOCK     = 0x00000080;   //!< O_NONBLOCK
536919SBrad.Beckmann@amd.com    static const int TGT_O_APPEND       = 0x00000008;   //!< O_APPEND
546166Ssteve.reinhardt@amd.com    static const int TGT_O_CREAT        = 0x00000100;   //!< O_CREAT
557570SBrad.Beckmann@amd.com    static const int TGT_O_TRUNC        = 0x00000200;   //!< O_TRUNC
567570SBrad.Beckmann@amd.com    static const int TGT_O_EXCL         = 0x00000400;   //!< O_EXCL
577570SBrad.Beckmann@amd.com    static const int TGT_O_NOCTTY       = 0x00000800;   //!< O_NOCTTY
587570SBrad.Beckmann@amd.com    static const int TGT_O_SYNC         = 0x00000010;   //!< O_SYNC
597570SBrad.Beckmann@amd.com    static const int TGT_O_DRD          = 0x00010000;   //!< O_DRD
607570SBrad.Beckmann@amd.com    static const int TGT_O_DIRECTIO     = 0x00020000;   //!< O_DIRECTIO
617570SBrad.Beckmann@amd.com    static const int TGT_O_CACHE        = 0x00002000;   //!< O_CACHE
627570SBrad.Beckmann@amd.com    static const int TGT_O_DSYNC        = 0x00008000;   //!< O_DSYNC
637570SBrad.Beckmann@amd.com    static const int TGT_O_RSYNC        = 0x00040000;   //!< O_RSYNC
647570SBrad.Beckmann@amd.com    //@}
657570SBrad.Beckmann@amd.com
667570SBrad.Beckmann@amd.com    /// For mmap().
679841Snilay@cs.wisc.edu    static const unsigned TGT_MAP_ANONYMOUS = 0x800;
687570SBrad.Beckmann@amd.com    static const unsigned TGT_MAP_FIXED     = 0x10;
696166Ssteve.reinhardt@amd.com
706166Ssteve.reinhardt@amd.com    //@{
716928SBrad.Beckmann@amd.com    /// For getsysinfo().
726928SBrad.Beckmann@amd.com    static const unsigned GSI_PLATFORM_NAME = 103; //!< platform name as string
739793Sakash.bagdia@arm.com    static const unsigned GSI_CPU_INFO = 59;       //!< CPU information
748436SBrad.Beckmann@amd.com    static const unsigned GSI_PROC_TYPE = 60;      //!< get proc_type
756928SBrad.Beckmann@amd.com    static const unsigned GSI_MAX_CPU = 30;        //!< max # cpu's on this machine
766166Ssteve.reinhardt@amd.com    static const unsigned GSI_CPUS_IN_BOX = 55;    //!< number of CPUs in system
776919SBrad.Beckmann@amd.com    static const unsigned GSI_PHYSMEM = 19;        //!< Physical memory in KB
786919SBrad.Beckmann@amd.com    static const unsigned GSI_CLK_TCK = 42;        //!< clock freq in Hz
796919SBrad.Beckmann@amd.com    //@}
806919SBrad.Beckmann@amd.com
816919SBrad.Beckmann@amd.com    //@{
828931Sandreas.hansson@arm.com    /// For getrusage().
839577Snilay@cs.wisc.edu    static const int TGT_RUSAGE_SELF = 0;
849827Sakash.bagdia@arm.com    static const int TGT_RUSAGE_CHILDREN = -1;
859827Sakash.bagdia@arm.com    static const int TGT_RUSAGE_BOTH = -2;
869827Sakash.bagdia@arm.com    //@}
879827Sakash.bagdia@arm.com
889827Sakash.bagdia@arm.com    //@{
899793Sakash.bagdia@arm.com    /// For setsysinfo().
909793Sakash.bagdia@arm.com    static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
919793Sakash.bagdia@arm.com    //@}
929827Sakash.bagdia@arm.com
939827Sakash.bagdia@arm.com    //@{
949793Sakash.bagdia@arm.com    /// ioctl() command codes.
959793Sakash.bagdia@arm.com    static const unsigned TGT_TCGETA     = 0x5401;
969793Sakash.bagdia@arm.com    static const unsigned TGT_TCSETAW    = 0x5403;
979793Sakash.bagdia@arm.com    static const unsigned TGT_TCGETS     = 0x540d;
986289Snate@binkert.org    static const unsigned TGT_FIONREAD   = 0x467f;
999826Sandreas.hansson@arm.com    static const unsigned TGT_TIOCGETP   = 0x7408;
1009826Sandreas.hansson@arm.com    static const unsigned TGT_TIOCSETP   = 0x7409;
1018436SBrad.Beckmann@amd.com    static const unsigned TGT_TIOCSETN   = 0x740a;
1026166Ssteve.reinhardt@amd.com    //@}
1039793Sakash.bagdia@arm.com
1049827Sakash.bagdia@arm.com    static bool
1059827Sakash.bagdia@arm.com    isTtyReq(unsigned req)
1069793Sakash.bagdia@arm.com    {
1078322Ssteve.reinhardt@amd.com        switch (req) {
1086166Ssteve.reinhardt@amd.com          case TGT_TIOCGETP:
1098322Ssteve.reinhardt@amd.com          case TGT_TIOCSETP:
1106919SBrad.Beckmann@amd.com          case TGT_TIOCSETN:
1116919SBrad.Beckmann@amd.com          case TGT_FIONREAD:
1126919SBrad.Beckmann@amd.com          case TGT_TCGETS:
1136919SBrad.Beckmann@amd.com          case TGT_TCGETA:
1148839Sandreas.hansson@arm.com          case TGT_TCSETAW:
1159120Sandreas.hansson@arm.com            return true;
1167938SBrad.Beckmann@amd.com          default:
1177938SBrad.Beckmann@amd.com            return false;
1187938SBrad.Beckmann@amd.com        }
1197938SBrad.Beckmann@amd.com    }
1207938SBrad.Beckmann@amd.com
1217938SBrad.Beckmann@amd.com    /// For table().
1226166Ssteve.reinhardt@amd.com    static const int TBL_SYSINFO = 12;
1239120Sandreas.hansson@arm.com
1249120Sandreas.hansson@arm.com    /// Resource enumeration for getrlimit()/setrlimit().
1259120Sandreas.hansson@arm.com    enum rlimit_resources {
1266166Ssteve.reinhardt@amd.com        TGT_RLIMIT_CPU = 0,
1276166Ssteve.reinhardt@amd.com        TGT_RLIMIT_FSIZE = 1,
1286166Ssteve.reinhardt@amd.com        TGT_RLIMIT_DATA = 2,
1296166Ssteve.reinhardt@amd.com        TGT_RLIMIT_STACK = 3,
1308801Sgblack@eecs.umich.edu        TGT_RLIMIT_CORE = 4,
1316166Ssteve.reinhardt@amd.com        TGT_RLIMIT_NOFILE = 5,
1326928SBrad.Beckmann@amd.com        TGT_RLIMIT_AS = 6,
1336928SBrad.Beckmann@amd.com        TGT_RLIMIT_RSS = 7,
1346928SBrad.Beckmann@amd.com        TGT_RLIMIT_VMEM = 7,
135        TGT_RLIMIT_NPROC = 8,
136        TGT_RLIMIT_MEMLOCK = 9,
137        TGT_RLIMIT_LOCKS = 10,
138        NUM_RLIMIT_RESOURCES
139    };
140
141    /// Offset used to make sure that processes don't
142    /// assign themselves to process IDs reserved for
143    /// the root users.
144    static const int NUM_ROOT_PROCS = 2;
145
146    typedef struct {
147       int32_t  uptime;    /* Seconds since boot */
148       uint32_t loads[3];  /* 1, 5, and 15 minute load averages */
149       uint32_t totalram;  /* Total usable main memory size */
150       uint32_t freeram;   /* Available memory size */
151       uint32_t sharedram; /* Amount of shared memory */
152       uint32_t bufferram; /* Memory used by buffers */
153       uint32_t totalswap; /* Total swap space size */
154       uint32_t freeswap;  /* swap space still available */
155       uint16_t procs;     /* Number of current processes */
156       uint32_t totalhigh; /* Total high memory size */
157       uint32_t freehigh;  /* Available high memory size */
158       uint32_t mem_unit;  /* Memory unit size in bytes */
159    } tgt_sysinfo;
160
161};
162
163#endif
164