diff options
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/process.h | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 17 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.h | 1 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.h | 13 |
4 files changed, 25 insertions, 10 deletions
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h index 305275387..20b4e401c 100644 --- a/src/core/hle/kernel/process.h +++ b/src/core/hle/kernel/process.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "common/bit_field.h" | 13 | #include "common/bit_field.h" |
| 14 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 15 | #include "core/hle/kernel/kernel.h" | 15 | #include "core/hle/kernel/kernel.h" |
| 16 | #include "core/hle/kernel/thread.h" | ||
| 16 | #include "core/hle/kernel/vm_manager.h" | 17 | #include "core/hle/kernel/vm_manager.h" |
| 17 | 18 | ||
| 18 | namespace Kernel { | 19 | namespace Kernel { |
| @@ -127,6 +128,9 @@ public: | |||
| 127 | u16 kernel_version = 0; | 128 | u16 kernel_version = 0; |
| 128 | /// The default CPU for this process, threads are scheduled on this cpu by default. | 129 | /// The default CPU for this process, threads are scheduled on this cpu by default. |
| 129 | u8 ideal_processor = 0; | 130 | u8 ideal_processor = 0; |
| 131 | /// Bitmask of allowed CPUs that this process' threads can run on. TODO(Subv): Actually parse | ||
| 132 | /// this value from the process header. | ||
| 133 | u32 allowed_processor_mask = THREADPROCESSORID_DEFAULT_MASK; | ||
| 130 | /// Current status of the process | 134 | /// Current status of the process |
| 131 | ProcessStatus status; | 135 | ProcessStatus status; |
| 132 | 136 | ||
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index bfe1907e3..a1eaab649 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -296,8 +296,14 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 296 | LOG_TRACE(Kernel_SVC, "called info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, | 296 | LOG_TRACE(Kernel_SVC, "called info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, |
| 297 | info_sub_id, handle); | 297 | info_sub_id, handle); |
| 298 | 298 | ||
| 299 | ASSERT(handle == 0 || handle == CurrentProcess); | ||
| 300 | |||
| 299 | auto& vm_manager = g_current_process->vm_manager; | 301 | auto& vm_manager = g_current_process->vm_manager; |
| 302 | |||
| 300 | switch (static_cast<GetInfoType>(info_id)) { | 303 | switch (static_cast<GetInfoType>(info_id)) { |
| 304 | case GetInfoType::AllowedCpuIdBitmask: | ||
| 305 | *result = g_current_process->allowed_processor_mask; | ||
| 306 | break; | ||
| 301 | case GetInfoType::TotalMemoryUsage: | 307 | case GetInfoType::TotalMemoryUsage: |
| 302 | *result = vm_manager.GetTotalMemoryUsage(); | 308 | *result = vm_manager.GetTotalMemoryUsage(); |
| 303 | break; | 309 | break; |
| @@ -455,16 +461,15 @@ static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, V | |||
| 455 | switch (processor_id) { | 461 | switch (processor_id) { |
| 456 | case THREADPROCESSORID_0: | 462 | case THREADPROCESSORID_0: |
| 457 | break; | 463 | break; |
| 458 | case THREADPROCESSORID_ALL: | ||
| 459 | LOG_INFO(Kernel_SVC, | ||
| 460 | "Newly created thread is allowed to be run in any Core, unimplemented."); | ||
| 461 | break; | ||
| 462 | case THREADPROCESSORID_1: | 464 | case THREADPROCESSORID_1: |
| 465 | case THREADPROCESSORID_2: | ||
| 466 | case THREADPROCESSORID_3: | ||
| 467 | // TODO(bunnei): Implement support for other processor IDs | ||
| 463 | LOG_ERROR(Kernel_SVC, | 468 | LOG_ERROR(Kernel_SVC, |
| 464 | "Newly created thread must run in the SysCore (Core1), unimplemented."); | 469 | "Newly created thread must run in another thread (%u), unimplemented.", |
| 470 | processor_id); | ||
| 465 | break; | 471 | break; |
| 466 | default: | 472 | default: |
| 467 | // TODO(bunnei): Implement support for other processor IDs | ||
| 468 | ASSERT_MSG(false, "Unsupported thread processor ID: %d", processor_id); | 473 | ASSERT_MSG(false, "Unsupported thread processor ID: %d", processor_id); |
| 469 | break; | 474 | break; |
| 470 | } | 475 | } |
diff --git a/src/core/hle/kernel/svc.h b/src/core/hle/kernel/svc.h index a95598994..ff45482a3 100644 --- a/src/core/hle/kernel/svc.h +++ b/src/core/hle/kernel/svc.h | |||
| @@ -23,6 +23,7 @@ struct PageInfo { | |||
| 23 | /// Values accepted by svcGetInfo | 23 | /// Values accepted by svcGetInfo |
| 24 | enum class GetInfoType : u64 { | 24 | enum class GetInfoType : u64 { |
| 25 | // 1.0.0+ | 25 | // 1.0.0+ |
| 26 | AllowedCpuIdBitmask = 0, | ||
| 26 | TotalMemoryUsage = 6, | 27 | TotalMemoryUsage = 6, |
| 27 | TotalHeapUsage = 7, | 28 | TotalHeapUsage = 7, |
| 28 | RandomEntropy = 11, | 29 | RandomEntropy = 11, |
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index 19ba6e0af..0a1ada27d 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h | |||
| @@ -24,10 +24,15 @@ enum ThreadPriority : u32 { | |||
| 24 | 24 | ||
| 25 | enum ThreadProcessorId : s32 { | 25 | enum ThreadProcessorId : s32 { |
| 26 | THREADPROCESSORID_DEFAULT = -2, ///< Run thread on default core specified by exheader | 26 | THREADPROCESSORID_DEFAULT = -2, ///< Run thread on default core specified by exheader |
| 27 | THREADPROCESSORID_ALL = -1, ///< Run thread on either core | 27 | THREADPROCESSORID_0 = 0, ///< Run thread on core 0 |
| 28 | THREADPROCESSORID_0 = 0, ///< Run thread on core 0 (AppCore) | 28 | THREADPROCESSORID_1 = 1, ///< Run thread on core 1 |
| 29 | THREADPROCESSORID_1 = 1, ///< Run thread on core 1 (SysCore) | 29 | THREADPROCESSORID_2 = 2, ///< Run thread on core 2 |
| 30 | THREADPROCESSORID_MAX = 2, ///< Processor ID must be less than this | 30 | THREADPROCESSORID_3 = 3, ///< Run thread on core 3 |
| 31 | THREADPROCESSORID_MAX = 4, ///< Processor ID must be less than this | ||
| 32 | |||
| 33 | /// Allowed CPU mask | ||
| 34 | THREADPROCESSORID_DEFAULT_MASK = (1 << THREADPROCESSORID_0) | (1 << THREADPROCESSORID_1) | | ||
| 35 | (1 << THREADPROCESSORID_2) | (1 << THREADPROCESSORID_3) | ||
| 31 | }; | 36 | }; |
| 32 | 37 | ||
| 33 | enum ThreadStatus { | 38 | enum ThreadStatus { |