summaryrefslogtreecommitdiffstats
path: root/src/core/memory.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* core/memory: Remove unused FlushMode enumLioncash2019-05-071-9/+0
| | | | | Recent changes to memory-related code resulted in this being unused, so we can remove it.
* core/cpu_core_manager: Create threads separately from initialization.Lioncash2019-04-121-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Our initialization process is a little wonky than one would expect when it comes to code flow. We initialize the CPU last, as opposed to hardware, where the CPU obviously needs to be first, otherwise nothing else would work, and we have code that adds checks to get around this. For example, in the page table setting code, we check to see if the system is turned on before we even notify the CPU instances of a page table switch. This results in dead code (at the moment), because the only time a page table switch will occur is when the system is *not* running, preventing the emulated CPU instances from being notified of a page table switch in a convenient manner (technically the code path could be taken, but we don't emulate the process creation svc handlers yet). This moves the threads creation into its own member function of the core manager and restores a little order (and predictability) to our initialization process. Previously, in the multi-threaded cases, we'd kick off several threads before even the main kernel process was created and ready to execute (gross!). Now the initialization process is like so: Initialization: 1. Timers 2. CPU 3. Kernel 4. Filesystem stuff (kind of gross, but can be amended trivially) 5. Applet stuff (ditto in terms of being kind of gross) 6. Main process (will be moved into the loading step in a following change) 7. Telemetry (this should be initialized last in the future). 8. Services (4 and 5 should ideally be alongside this). 9. GDB (gross. Uses namespace scope state. Needs to be refactored into a class or booted altogether). 10. Renderer 11. GPU (will also have its threads created in a separate step in a following change). Which... isn't *ideal* per-se, however getting rid of the wonky intertwining of CPU state initialization out of this mix gets rid of most of the footguns when it comes to our initialization process.
* Merge pull request #2361 from lioncash/pagetablebunnei2019-04-071-2/+1
|\ | | | | core/memory: Minor simplifications to page table management
| * core/memory: Remove GetCurrentPageTable()Lioncash2019-04-071-2/+1
| | | | | | | | | | Now that nothing actually touches the internal page table aside from the memory subsystem itself, we can remove the accessor to it.
* | core/memory: Remove unused enum constantsLioncash2019-04-071-10/+0
|/ | | | These are holdovers from Citra and can be removed.
* core/memory: Remove unnecessary includesLioncash2019-03-211-3/+0
| | | | | | | In 93da8e0abfcdcc6e3cb5488a0db12373429f1377, the page table construct was moved to the common library (which utilized these inclusions). Since the move, nothing requires these headers to be included within the memory header.
* core: Move PageTable struct into Common.bunnei2019-03-171-68/+6
|
* memory: Simplify rasterizer cache operations.bunnei2019-03-161-6/+0
|
* memory: Dehardcode the use of fixed memory range constantsLioncash2018-09-251-30/+1
| | | | | | | | The locations of these can actually vary depending on the address space layout, so we shouldn't be using these when determining where to map memory or be using them as offsets for calculations. This keeps all the memory ranges flexible and malleable based off of the virtual memory manager instance state.
* memory: Dehardcode the use of a 36-bit address spaceLioncash2018-09-251-11/+21
| | | | | Given games can also request a 32-bit or 39-bit address space, we shouldn't be hardcoding the address space range as 36-bit.
* Port #4182 from Citra: "Prefix all size_t with std::"fearlessTobi2018-09-151-9/+9
|
* gl_renderer: Cache textures, framebuffers, and shaders based on CPU address.bunnei2018-08-311-2/+1
|
* memory: Make prototype parameter names match their definitionsLioncash2018-08-061-5/+5
| | | | Keeps the code consistent.
* memory: Correct prototype of ZeroBlockLioncash2018-08-061-1/+1
| | | | | Previously, the prototype wasn't matching the definition, which has a Processor parameter before the destination address.
* memory: Remove unnecessary const qualifiers in prototypesLioncash2018-08-061-9/+8
| | | | | These aren't necessary, as value-wise const only matters in the definition.
* core/memory: Get rid of 3DS leftoversLioncash2018-08-031-87/+1
| | | | Removes leftover code from citra that isn't needed.
* Kernel/Arbiters: Fix casts, cleanup comments/magic numbersMichael Scire2018-06-221-0/+7
|
* gl_rasterizer_cache: Update to be based on GPU addresses, not CPU addresses.bunnei2018-04-251-1/+2
|
* memory: Fix stack region.bunnei2018-03-311-4/+5
|
* memory: Add RasterizerMarkRegionCached code and cleanup.bunnei2018-03-271-0/+5
|
* Merge pull request #265 from bunnei/tegra-progress-2bunnei2018-03-241-1/+19
|\ | | | | Tegra progress 2
| * rasterizer: Flush and invalidate regions should be 64-bit.bunnei2018-03-231-1/+1
| |
| * memory: Port RasterizerFlushVirtualRegion from Citra.bunnei2018-03-231-1/+19
| |
* | Remove more N3DS ReferencesN00byKing2018-03-221-11/+0
|/
* memory: Add regions for map region, "new" map region, etc.bunnei2018-03-161-19/+29
|
* arm_dynarmic: Support direct page table accessMerryMage2018-02-121-4/+5
|
* memory: Replace all memory hooking with Special regionsMerryMage2018-01-271-51/+21
|
* Update memory.hDavid2018-01-171-2/+2
|
* Increased heap size and changed tls area vaddrDavid Marcec2018-01-161-2/+2
|
* core/video_core: Fix a bunch of u64 -> u32 warnings.bunnei2018-01-011-5/+5
|
* svc: Implement MapMemory.bunnei2017-12-291-1/+1
|
* memory: Support 32-bit paging, move heap address space up.bunnei2017-10-231-2/+2
|
* Merge remote-tracking branch 'upstream/master' into nxbunnei2017-10-101-14/+77
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
| * Memory: Make WriteBlock take a Process parameter on which to operateSubv2017-10-011-0/+2
| |
| * Memory: Make ReadBlock take a Process parameter on which to operateSubv2017-10-011-0/+2
| |
| * Memory: Allow IsValidVirtualAddress to be called with a specific process parameter.Subv2017-09-271-0/+7
| | | | | | | | There is still an overload of IsValidVirtualAddress that only takes the VAddr and will default to the current process.
| * memory: Remove GetCurrentPageTablePointersMerryMage2017-09-241-6/+0
| |
| * memory: Add GetCurrentPageTable/SetCurrentPageTableMerryMage2017-09-241-1/+2
| | | | | | | | Don't expose Memory::current_page_table as a global.
| * Kernel/Memory: Changed GetPhysicalPointer so that it doesn't go through the current process' page table to obtain a pointer.Subv2017-09-151-2/+0
| |
| * Kernel/Memory: Give each Process its own page table.Subv2017-09-101-1/+59
| | | | | | | | The loader is in charge of setting the newly created process's page table as the main one during the loading process.
* | loader: Various improvements for NSO/NRO loaders.bunnei2017-10-101-2/+2
| |
* | core: Various changes to support 64-bit addressing.bunnei2017-09-301-8/+8
|/
* Memory: Add function to flush a virtual range from the rasterizer cacheYuri Kunde Schlesner2017-06-221-0/+13
| | | | | | This is slightly more ergonomic to use, correctly handles virtual regions which are disjoint in physical addressing space, and checks only regions which can be cached by the rasterizer.
* Memory: Add TryVirtualToPhysicalAddress, returning a boost::optionalYuri Kunde Schlesner2017-06-221-3/+11
|
* Memory: Make PhysicalToVirtualAddress return a boost::optionalYuri Kunde Schlesner2017-06-221-3/+4
| | | | And fix a few places in the code to take advantage of that.
* Memory: Add enum definitions for the n3DS FCRAM sizeYuri Kunde Schlesner2017-06-211-1/+3
|
* Memory: Add constants for the n3DS additional RAMYuri Kunde Schlesner2017-05-101-0/+10
| | | | This is 4MB of extra, separate memory that was added on the New 3DS.
* Expose page table to dynarmic for optimized reads and writes to the JITJames Rowe2016-11-251-0/+9
|
* Remove empty newlines in #include blocks.Emmanuel Gil Peyrot2016-09-211-1/+0
| | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
* Sources: Run clang-format on everything.Emmanuel Gil Peyrot2016-09-181-35/+35
|
* Memory: add ReadCString functionwwylele2016-08-271-0/+3
|
* Memory: Make ReadBlock and WriteBlock accept void pointers.Subv2016-05-281-2/+2
|
* Memory: CopyBlockMerryMage2016-05-281-2/+2
|
* Memory: ZeroBlockMerryMage2016-05-211-0/+1
|
* Memory: ReadBlock/WriteBlockMerryMage2016-05-211-1/+3
|
* Memory: IsValidVirtualAddress/IsValidPhysicalAddressMerryMage2016-05-211-0/+3
|
* Merge pull request #1695 from Subv/tls_allocbunnei2016-05-131-6/+0
|\ | | | | Kernel/Threads: Dynamically allocate the TLS region for threads.
| * Kernel/Threads: Dynamically allocate the TLS region for threads in the BASE region of the linear heap.Subv2016-05-071-6/+0
| | | | | | | | | | | | Each thread gets a 0x200-byte area from the 0x1000-sized page, when all 8 thread slots in a single page are used up, the kernel allocates a new page to hold another 8 entries. This is consistent with what the real kernel does.
* | HWRasterizer: Texture forwardingtfarley2016-04-211-0/+16
|/
* Fix broken boot introduced by last-minute change in #1025Yuri Kunde Schlesner2015-08-221-1/+1
|
* Kernel: Implement svcGetProcessInfo in a basic wayYuri Kunde Schlesner2015-08-161-1/+3
| | | | | This also adds some basic memory usage accounting. These two types are used by Super Smash Bros. during startup.
* Kernel: Add more infrastructure to support different memory layoutsYuri Kunde Schlesner2015-08-161-0/+5
| | | | | | This adds some structures necessary to support multiple memory regions in the future. It also adds support for different system memory types and the new linear heap mapping at 0x30000000.
* Memory: Move address type conversion routines to memory.cpp/hYuri Kunde Schlesner2015-08-161-0/+11
| | | | | These helpers aren't really part of the kernel, and mem_map.cpp/h is going to be moved there next.
* Memory: Move PAGE_MASK and PAGE_BITS to memory.hYuri Kunde Schlesner2015-08-161-0/+2
|
* Common: Cleanup memory and misc includes.Emmanuel Gil Peyrot2015-06-281-0/+2
|
* Remove every trailing whitespace from the project (but externals).Emmanuel Gil Peyrot2015-05-291-1/+1
|
* Memory: Use a table based lookup scheme to read from memory regionsYuri Kunde Schlesner2015-05-151-0/+4
|
* Memmap: Re-organize memory function in two filesYuri Kunde Schlesner2015-05-151-0/+125
memory.cpp/h contains definitions related to acessing memory and configuring the address space mem_map.cpp/h contains higher-level definitions related to configuring the address space accoording to the kernel and allocating memory.