linux.hh revision 8600:b0d7c64ada19
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder.  You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Authors: Gabe Black
38 */
39
40#ifndef __ARCH_X86_LINUX_LINUX_HH__
41#define __ARCH_X86_LINUX_LINUX_HH__
42
43#include "kern/linux/linux.hh"
44
45class X86Linux64 : public Linux
46{
47  public:
48
49    typedef struct {
50        uint64_t st_dev;
51        uint64_t st_ino;
52        uint64_t st_nlink;
53        uint32_t st_mode;
54        uint32_t st_uid;
55        uint32_t st_gid;
56        uint32_t __pad0;
57        uint64_t st_rdev;
58        int64_t st_size;
59        int64_t st_blksize;
60        int64_t st_blocks;
61        uint64_t st_atimeX;
62        uint64_t st_atime_nsec;
63        uint64_t st_mtimeX;
64        uint64_t st_mtime_nsec;
65        uint64_t st_ctimeX;
66        uint64_t st_ctime_nsec;
67        int64_t unused0[3];
68    } tgt_stat64;
69
70    static OpenFlagTransTable openFlagTable[];
71
72    static const int TGT_O_RDONLY       = 00000000;     //!< O_RDONLY
73    static const int TGT_O_WRONLY       = 00000001;     //!< O_WRONLY
74    static const int TGT_O_RDWR         = 00000002;     //!< O_RDWR
75    static const int TGT_O_NONBLOCK     = 00004000;     //!< O_NONBLOCK
76    static const int TGT_O_APPEND       = 00002000;     //!< O_APPEND
77    static const int TGT_O_CREAT        = 00000100;     //!< O_CREAT
78    static const int TGT_O_TRUNC        = 00001000;     //!< O_TRUNC
79    static const int TGT_O_EXCL         = 00000200;     //!< O_EXCL
80    static const int TGT_O_NOCTTY       = 00000400;     //!< O_NOCTTY
81    static const int TGT_O_SYNC         = 00010000;     //!< O_SYNC
82//    static const int TGT_O_DRD        = 0x00010000;   //!< O_DRD
83//    static const int TGT_O_DIRECTIO   = 0x00020000; //!< O_DIRECTIO
84//    static const int TGT_O_CACHE      = 0x00002000;   //!< O_CACHE
85//    static const int TGT_O_DSYNC      = 0x00008000;   //!< O_DSYNC
86//    static const int TGT_O_RSYNC      = 0x00040000;   //!< O_RSYNC
87
88    static const int NUM_OPEN_FLAGS;
89
90    static const unsigned TGT_MAP_ANONYMOUS = 0x20;
91    static const unsigned TGT_MAP_FIXED     = 0x10;
92
93    typedef struct {
94        uint64_t iov_base; // void *
95        uint64_t iov_len;  // size_t
96    } tgt_iovec;
97
98    typedef struct {
99        int64_t  uptime;    /* Seconds since boot */
100        uint64_t loads[3];  /* 1, 5, and 15 minute load averages */
101        uint64_t totalram;  /* Total usable main memory size */
102        uint64_t freeram;   /* Available memory size */
103        uint64_t sharedram; /* Amount of shared memory */
104        uint64_t bufferram; /* Memory used by buffers */
105        uint64_t totalswap; /* Total swap space size */
106        uint64_t freeswap;  /* swap space still available */
107        uint16_t procs;     /* Number of current processes */
108        uint64_t totalhigh; /* Total high memory size */
109        uint64_t freehigh;  /* Available high memory size */
110        uint64_t mem_unit;  /* Memory unit size in bytes */
111   } tgt_sysinfo;
112
113};
114
115class X86Linux32 : public Linux
116{
117  public:
118
119    typedef struct {
120        uint64_t st_dev;
121        uint8_t __pad0[4];
122        uint32_t __st_ino;
123        uint32_t st_mode;
124        uint32_t st_nlink;
125        uint32_t st_uid;
126        uint32_t st_gid;
127        uint64_t st_rdev;
128        uint8_t __pad3[4];
129        int64_t st_size;
130        uint32_t st_blksize;
131        uint64_t st_blocks;
132        uint32_t st_atimeX;
133        uint32_t st_atime_nsec;
134        uint32_t st_mtimeX;
135        uint32_t st_mtime_nsec;
136        uint32_t st_ctimeX;
137        uint32_t st_ctime_nsec;
138        uint64_t st_ino;
139    } __attribute__((__packed__)) tgt_stat64;
140
141    static OpenFlagTransTable openFlagTable[];
142
143    static const int TGT_O_RDONLY       = 00000000;     //!< O_RDONLY
144    static const int TGT_O_WRONLY       = 00000001;     //!< O_WRONLY
145    static const int TGT_O_RDWR         = 00000002;     //!< O_RDWR
146    static const int TGT_O_NONBLOCK     = 00004000;     //!< O_NONBLOCK
147    static const int TGT_O_APPEND       = 00002000;     //!< O_APPEND
148    static const int TGT_O_CREAT        = 00000100;     //!< O_CREAT
149    static const int TGT_O_TRUNC        = 00001000;     //!< O_TRUNC
150    static const int TGT_O_EXCL         = 00000200;     //!< O_EXCL
151    static const int TGT_O_NOCTTY       = 00000400;     //!< O_NOCTTY
152    static const int TGT_O_SYNC         = 00010000;     //!< O_SYNC
153//    static const int TGT_O_DRD        = 0x00010000;   //!< O_DRD
154//    static const int TGT_O_DIRECTIO   = 0x00020000; //!< O_DIRECTIO
155//    static const int TGT_O_CACHE      = 0x00002000;   //!< O_CACHE
156//    static const int TGT_O_DSYNC      = 0x00008000;   //!< O_DSYNC
157//    static const int TGT_O_RSYNC      = 0x00040000;   //!< O_RSYNC
158
159    static const int NUM_OPEN_FLAGS;
160
161    static const unsigned TGT_MAP_ANONYMOUS = 0x20;
162    static const unsigned TGT_MAP_FIXED     = 0x10;
163
164    typedef struct {
165       int32_t  uptime;    /* Seconds since boot */
166       uint32_t loads[3];  /* 1, 5, and 15 minute load averages */
167       uint32_t totalram;  /* Total usable main memory size */
168       uint32_t freeram;   /* Available memory size */
169       uint32_t sharedram; /* Amount of shared memory */
170       uint32_t bufferram; /* Memory used by buffers */
171       uint32_t totalswap; /* Total swap space size */
172       uint32_t freeswap;  /* swap space still available */
173       uint16_t procs;     /* Number of current processes */
174       uint32_t totalhigh; /* Total high memory size */
175       uint32_t freehigh;  /* Available high memory size */
176       uint32_t mem_unit;  /* Memory unit size in bytes */
177    } tgt_sysinfo;
178
179    static bool mmapGrowsDown() { return true; }
180};
181
182#endif
183