linux.hh revision 8837:d492e0bb7e95
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_ASYNC = 00020000; 154 static const int TGT_O_DIRECT = 00040000; //!< O_DIRECTIO 155 static const int TGT_O_LARGEFILE = 00100000; 156 static const int TGT_O_DIRECTORY = 00200000; 157 static const int TGT_O_NOFOLLOW = 00400000; 158 static const int TGT_O_NOATIME = 01000000; 159 static const int TGT_O_CLOEXEC = 02000000; 160 161 static const int NUM_OPEN_FLAGS; 162 163 static const unsigned TGT_MAP_ANONYMOUS = 0x20; 164 static const unsigned TGT_MAP_FIXED = 0x10; 165 166 typedef struct { 167 int32_t uptime; /* Seconds since boot */ 168 uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ 169 uint32_t totalram; /* Total usable main memory size */ 170 uint32_t freeram; /* Available memory size */ 171 uint32_t sharedram; /* Amount of shared memory */ 172 uint32_t bufferram; /* Memory used by buffers */ 173 uint32_t totalswap; /* Total swap space size */ 174 uint32_t freeswap; /* swap space still available */ 175 uint16_t procs; /* Number of current processes */ 176 uint32_t totalhigh; /* Total high memory size */ 177 uint32_t freehigh; /* Available high memory size */ 178 uint32_t mem_unit; /* Memory unit size in bytes */ 179 } tgt_sysinfo; 180 181 static bool mmapGrowsDown() { return true; } 182}; 183 184#endif 185