14d43552aSPierrick Bouvier /* 24d43552aSPierrick Bouvier * TLB flags definition 34d43552aSPierrick Bouvier * 44d43552aSPierrick Bouvier * Copyright (c) 2003 Fabrice Bellard 54d43552aSPierrick Bouvier * 64d43552aSPierrick Bouvier * This library is free software; you can redistribute it and/or 74d43552aSPierrick Bouvier * modify it under the terms of the GNU Lesser General Public 84d43552aSPierrick Bouvier * License as published by the Free Software Foundation; either 94d43552aSPierrick Bouvier * version 2.1 of the License, or (at your option) any later version. 104d43552aSPierrick Bouvier * 114d43552aSPierrick Bouvier * This library is distributed in the hope that it will be useful, 124d43552aSPierrick Bouvier * but WITHOUT ANY WARRANTY; without even the implied warranty of 134d43552aSPierrick Bouvier * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 144d43552aSPierrick Bouvier * Lesser General Public License for more details. 154d43552aSPierrick Bouvier * 164d43552aSPierrick Bouvier * You should have received a copy of the GNU Lesser General Public 174d43552aSPierrick Bouvier * License along with this library; if not, see <http://www.gnu.org/licenses/>. 184d43552aSPierrick Bouvier */ 194d43552aSPierrick Bouvier #ifndef TLB_FLAGS_H 204d43552aSPierrick Bouvier #define TLB_FLAGS_H 214d43552aSPierrick Bouvier 22*6effa874SRichard Henderson /* 23*6effa874SRichard Henderson * Flags returned for lookup of a TLB virtual address. 24*6effa874SRichard Henderson */ 254d43552aSPierrick Bouvier 264d43552aSPierrick Bouvier #ifdef CONFIG_USER_ONLY 274d43552aSPierrick Bouvier 284d43552aSPierrick Bouvier /* 29*6effa874SRichard Henderson * Allow some level of source compatibility with softmmu. 30*6effa874SRichard Henderson * Invalid is set when the page does not have requested permissions. 31*6effa874SRichard Henderson * MMIO is set when we want the target helper to use the functional 32*6effa874SRichard Henderson * interface for load/store so that plugins see the access. 334d43552aSPierrick Bouvier */ 34*6effa874SRichard Henderson #define TLB_INVALID_MASK (1 << 0) 35*6effa874SRichard Henderson #define TLB_MMIO (1 << 1) 364d43552aSPierrick Bouvier #define TLB_WATCHPOINT 0 374d43552aSPierrick Bouvier 384d43552aSPierrick Bouvier #else 394d43552aSPierrick Bouvier 404d43552aSPierrick Bouvier /* 414d43552aSPierrick Bouvier * Flags stored in CPUTLBEntryFull.slow_flags[x]. 424d43552aSPierrick Bouvier * TLB_FORCE_SLOW must be set in CPUTLBEntry.addr_idx[x]. 434d43552aSPierrick Bouvier */ 44*6effa874SRichard Henderson 454d43552aSPierrick Bouvier /* Set if TLB entry requires byte swap. */ 464d43552aSPierrick Bouvier #define TLB_BSWAP (1 << 0) 474d43552aSPierrick Bouvier /* Set if TLB entry contains a watchpoint. */ 484d43552aSPierrick Bouvier #define TLB_WATCHPOINT (1 << 1) 494d43552aSPierrick Bouvier /* Set if TLB entry requires aligned accesses. */ 504d43552aSPierrick Bouvier #define TLB_CHECK_ALIGNED (1 << 2) 5124b5e0fdSRichard Henderson /* Set if TLB entry writes ignored. */ 5224b5e0fdSRichard Henderson #define TLB_DISCARD_WRITE (1 << 3) 5324b5e0fdSRichard Henderson /* Set if TLB entry is an IO callback. */ 5424b5e0fdSRichard Henderson #define TLB_MMIO (1 << 4) 554d43552aSPierrick Bouvier 5624b5e0fdSRichard Henderson #define TLB_SLOW_FLAGS_MASK \ 5724b5e0fdSRichard Henderson (TLB_BSWAP | TLB_WATCHPOINT | TLB_CHECK_ALIGNED | \ 5824b5e0fdSRichard Henderson TLB_DISCARD_WRITE | TLB_MMIO) 594d43552aSPierrick Bouvier 60*6effa874SRichard Henderson /* 61*6effa874SRichard Henderson * Flags stored in CPUTLBEntry.addr_idx[x]. 62*6effa874SRichard Henderson * These must be above the largest alignment (64 bytes), 63*6effa874SRichard Henderson * and below the smallest page size (1024 bytes). 64*6effa874SRichard Henderson * This leaves bits [9:6] available for use. 65*6effa874SRichard Henderson */ 66*6effa874SRichard Henderson 67*6effa874SRichard Henderson /* Zero if TLB entry is valid. */ 68*6effa874SRichard Henderson #define TLB_INVALID_MASK (1 << 6) 69*6effa874SRichard Henderson /* Set if TLB entry references a clean RAM page. */ 70*6effa874SRichard Henderson #define TLB_NOTDIRTY (1 << 7) 71*6effa874SRichard Henderson /* Set if the slow path must be used; more flags in CPUTLBEntryFull. */ 72*6effa874SRichard Henderson #define TLB_FORCE_SLOW (1 << 8) 73*6effa874SRichard Henderson 74*6effa874SRichard Henderson /* 75*6effa874SRichard Henderson * Use this mask to check interception with an alignment mask 76*6effa874SRichard Henderson * in a TCG backend. 77*6effa874SRichard Henderson */ 78*6effa874SRichard Henderson #define TLB_FLAGS_MASK \ 79*6effa874SRichard Henderson (TLB_INVALID_MASK | TLB_NOTDIRTY | TLB_FORCE_SLOW) 80*6effa874SRichard Henderson 814d43552aSPierrick Bouvier /* The two sets of flags must not overlap. */ 824d43552aSPierrick Bouvier QEMU_BUILD_BUG_ON(TLB_FLAGS_MASK & TLB_SLOW_FLAGS_MASK); 834d43552aSPierrick Bouvier 844d43552aSPierrick Bouvier #endif /* !CONFIG_USER_ONLY */ 854d43552aSPierrick Bouvier 864d43552aSPierrick Bouvier #endif /* TLB_FLAGS_H */ 87