-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: split PMA and AR constants
PMA is only used for the two-word description of address ranges in memory All other constants use AR (for address range) Also simplified machine::read_memory()
- Loading branch information
1 parent
a55cbef
commit 7d0f77a
Showing
82 changed files
with
884 additions
and
848 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// Copyright Cartesi and individual authors (see AUTHORS) | ||
// SPDX-License-Identifier: LGPL-3.0-or-later | ||
// | ||
// This program is free software: you can redistribute it and/or modify it under | ||
// the terms of the GNU Lesser General Public License as published by the Free | ||
// Software Foundation, either version 3 of the License, or (at your option) any | ||
// later version. | ||
// | ||
// This program is distributed in the hope that it will be useful, but WITHOUT ANY | ||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | ||
// PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU Lesser General Public License along | ||
// with this program (see COPYING). If not, see <https://www.gnu.org/licenses/>. | ||
// | ||
|
||
#ifndef ADDRESS_RANGE_CONSTANTS_H | ||
#define ADDRESS_RANGE_CONSTANTS_H | ||
|
||
#include <cstdint> | ||
|
||
#include "address-range-defines.h" | ||
|
||
namespace cartesi { | ||
|
||
/// \brief Fixed address ranges. | ||
enum AR_ranges : uint64_t { | ||
AR_SHADOW_STATE_START = EXPAND_UINT64_C(AR_SHADOW_STATE_START_DEF), ///< Start of shadow state range | ||
AR_SHADOW_STATE_LENGTH = EXPAND_UINT64_C(AR_SHADOW_STATE_LENGTH_DEF), ///< Length of shadow state range | ||
AR_PMAS_START = EXPAND_UINT64_C(AR_PMAS_START_DEF), ///< Start of PMAS list range | ||
AR_PMAS_LENGTH = EXPAND_UINT64_C(AR_PMAS_LENGTH_DEF), ///< Length of PMAS list range | ||
AR_DTB_START = EXPAND_UINT64_C(AR_DTB_START_DEF), ///< Start of DTB range | ||
AR_DTB_LENGTH = EXPAND_UINT64_C(AR_DTB_LENGTH_DEF), ///< Length of DTB range | ||
AR_SHADOW_TLB_START = EXPAND_UINT64_C(AR_SHADOW_TLB_START_DEF), ///< Start of shadow TLB range | ||
AR_SHADOW_TLB_LENGTH = EXPAND_UINT64_C(AR_SHADOW_TLB_LENGTH_DEF), ///< Length of shadow TLB range | ||
AR_SHADOW_UARCH_STATE_START = | ||
EXPAND_UINT64_C(AR_SHADOW_UARCH_STATE_START_DEF), ///< Start of uarch shadow state range | ||
AR_SHADOW_UARCH_STATE_LENGTH = | ||
EXPAND_UINT64_C(AR_SHADOW_UARCH_STATE_LENGTH_DEF), ///< Length of uarch shadow state range | ||
AR_CLINT_START = EXPAND_UINT64_C(AR_CLINT_START_DEF), ///< Start of CLINT range | ||
AR_CLINT_LENGTH = EXPAND_UINT64_C(AR_CLINT_LENGTH_DEF), ///< Length of CLINT range | ||
AR_PLIC_START = EXPAND_UINT64_C(AR_PLIC_START_DEF), ///< Start of PLIC range | ||
AR_PLIC_LENGTH = EXPAND_UINT64_C(AR_PLIC_LENGTH_DEF), ///< Length of PLIC range | ||
AR_HTIF_START = EXPAND_UINT64_C(AR_HTIF_START_DEF), ///< Start of HTIF range | ||
AR_HTIF_LENGTH = EXPAND_UINT64_C(AR_HTIF_LENGTH_DEF), ///< Length of HTIF range | ||
AR_UARCH_RAM_START = EXPAND_UINT64_C(AR_UARCH_RAM_START_DEF), ///< Start of uarch RAM range | ||
AR_UARCH_RAM_LENGTH = EXPAND_UINT64_C(AR_UARCH_RAM_LENGTH_DEF), ///< Length of uarch RAM range | ||
AR_CMIO_RX_BUFFER_START = EXPAND_UINT64_C(AR_CMIO_RX_BUFFER_START_DEF), ///< Start of CMIO RX buffer range | ||
AR_CMIO_RX_BUFFER_LOG2_SIZE = EXPAND_UINT64_C(AR_CMIO_RX_BUFFER_LOG2_SIZE_DEF), ///< Log2 of CMIO RX buffer range | ||
AR_CMIO_RX_BUFFER_LENGTH = (UINT64_C(1) << AR_CMIO_RX_BUFFER_LOG2_SIZE_DEF), ///< Length of CMIO RX buffer range | ||
AR_CMIO_TX_BUFFER_START = EXPAND_UINT64_C(AR_CMIO_TX_BUFFER_START_DEF), ///< Start of CMIO TX buffer range | ||
AR_CMIO_TX_BUFFER_LOG2_SIZE = EXPAND_UINT64_C(AR_CMIO_TX_BUFFER_LOG2_SIZE_DEF), ///< Log2 of CMIO TX buffer range | ||
AR_CMIO_TX_BUFFER_LENGTH = (UINT64_C(1) << AR_CMIO_TX_BUFFER_LOG2_SIZE_DEF), ///< Length of CMIO TX buffer range | ||
AR_DRIVE_START = EXPAND_UINT64_C(AR_DRIVE_START_DEF), ///< Start address for flash drive ranges | ||
AR_DRIVE_OFFSET = EXPAND_UINT64_C(AR_DRIVE_OFFSET_DEF), ///< Offset for extra flash drive ranges | ||
|
||
AR_FIRST_VIRTIO_START = EXPAND_UINT64_C(AR_FIRST_VIRTIO_START_DEF), ///< Start of first VIRTIO range | ||
AR_VIRTIO_LENGTH = EXPAND_UINT64_C(AR_VIRTIO_LENGTH_DEF), ///< Length of each VIRTIO range | ||
AR_LAST_VIRTIO_END = EXPAND_UINT64_C(AR_LAST_VIRTIO_END_DEF), ///< End of last VIRTIO range | ||
|
||
AR_RAM_START = EXPAND_UINT64_C(AR_RAM_START_DEF), ///< Start of RAM range | ||
}; | ||
|
||
/// \brief PMA constants. | ||
enum AR_constants : uint64_t { | ||
AR_PAGE_SIZE_LOG2 = EXPAND_UINT64_C(AR_PAGE_SIZE_LOG2_DEF), ///< Log<sub>2</sub> of physical memory page size. | ||
AR_PAGE_SIZE = (UINT64_C(1) << AR_PAGE_SIZE_LOG2_DEF), ///< Physical memory page size. | ||
}; | ||
|
||
/// \brief PMA masks. | ||
enum AR_masks : uint64_t { | ||
AR_ADDRESSABLE_MASK = ((UINT64_C(1) << 56) - 1) ///< Mask for addressable ranges. | ||
}; | ||
|
||
} // namespace cartesi | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// Copyright Cartesi and individual authors (see AUTHORS) | ||
// SPDX-License-Identifier: LGPL-3.0-or-later | ||
// | ||
// This program is free software: you can redistribute it and/or modify it under | ||
// the terms of the GNU Lesser General Public License as published by the Free | ||
// Software Foundation, either version 3 of the License, or (at your option) any | ||
// later version. | ||
// | ||
// This program is distributed in the hope that it will be useful, but WITHOUT ANY | ||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | ||
// PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU Lesser General Public License along | ||
// with this program (see COPYING). If not, see <https://www.gnu.org/licenses/>. | ||
// | ||
|
||
#ifndef AR_DEFINES_H | ||
#define AR_DEFINES_H | ||
|
||
// NOLINTBEGIN(cppcoreguidelines-macro-usage,cppcoreguidelines-macro-to-enum,modernize-macro-to-enum) | ||
#define AR_SHADOW_STATE_START_DEF 0x0 ///< Shadow start address | ||
#define AR_SHADOW_STATE_LENGTH_DEF 0x1000 ///< Shadow length in bytes | ||
#define AR_PMAS_START_DEF 0x10000 ///< PMA Array start address | ||
#define AR_PMAS_LENGTH_DEF 0x1000 ///< PMA Array length in bytes | ||
#define AR_SHADOW_TLB_START_DEF 0x20000 ///< TLB start address | ||
#define AR_SHADOW_TLB_LENGTH_DEF 0x6000 ///< TLB length in bytes | ||
#define AR_SHADOW_UARCH_STATE_START_DEF 0x400000 ///< microarchitecture shadow state start address | ||
#define AR_SHADOW_UARCH_STATE_LENGTH_DEF 0x1000 ///< microarchitecture shadow state length | ||
#define AR_UARCH_RAM_START_DEF 0x600000 ///< microarchitecture RAM start address | ||
#define AR_UARCH_RAM_LENGTH_DEF 0x200000 ///< microarchitecture RAM length | ||
#define AR_CLINT_START_DEF 0x2000000 ///< CLINT start address | ||
#define AR_CLINT_LENGTH_DEF 0xC0000 ///< CLINT length in bytes | ||
#define AR_PLIC_START_DEF 0x40100000 ///< Start of PLIC range | ||
#define AR_PLIC_LENGTH_DEF 0x00400000 ///< Length of PLIC range | ||
#define AR_HTIF_START_DEF 0x40008000 ///< HTIF base address (to_host) | ||
#define AR_HTIF_LENGTH_DEF 0x1000 ///< HTIF length in bytes | ||
#define AR_FIRST_VIRTIO_START_DEF 0x40010000 ///< Start of first VIRTIO range | ||
#define AR_VIRTIO_LENGTH_DEF 0x1000 ///< Length of each VIRTIO range | ||
#define AR_LAST_VIRTIO_END_DEF 0x40020000 ///< End of last VIRTIO range | ||
#define AR_DTB_START_DEF 0x7ff00000 ///< DTB start address | ||
#define AR_DTB_LENGTH_DEF 0x100000 ///< DTB length in bytes | ||
#define AR_CMIO_RX_BUFFER_START_DEF 0x60000000 ///< CMIO RX buffer start address | ||
#define AR_CMIO_RX_BUFFER_LOG2_SIZE_DEF 21 ///< log<sub>2</sub> of CMIO RX buffer length in bytes | ||
#define AR_CMIO_TX_BUFFER_START_DEF 0x60800000 ///< CMIO TX buffer start address | ||
#define AR_CMIO_TX_BUFFER_LOG2_SIZE_DEF 21 ///< log<sub>2</sub> of CMIO TX buffer length in bytes | ||
#define AR_DRIVE_START_DEF 0x80000000000000 ///< Start PMA address for flash drives | ||
#define AR_DRIVE_OFFSET_DEF 0x10000000000000 ///< PMA offset for extra flash drives | ||
|
||
#define AR_RAM_START_DEF 0x80000000 ///< RAM start address | ||
|
||
#define AR_PAGE_SIZE_LOG2_DEF 12 ///< log<sub>2</sub> of physical memory page size. | ||
|
||
// helper for using UINT64_C with defines | ||
#ifndef EXPAND_UINT64_C | ||
#define EXPAND_UINT64_C(a) UINT64_C(a) | ||
#endif | ||
// NOLINTEND(cppcoreguidelines-macro-usage,cppcoreguidelines-macro-to-enum,modernize-macro-to-enum) | ||
#endif /* end of include guard: AR_DEFINES_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.