mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
kern: implement user thread start, el0 code now runs
This commit is contained in:
parent
560c340c96
commit
80b115ef57
4 changed files with 16 additions and 4 deletions
|
@ -145,7 +145,7 @@ namespace ams::kern::arch::arm64 {
|
||||||
constexpr ALWAYS_INLINE decltype(auto) SetAccessFlag(AccessFlag f) { this->SetBitsDirect(10, 1, f); return *this; }
|
constexpr ALWAYS_INLINE decltype(auto) SetAccessFlag(AccessFlag f) { this->SetBitsDirect(10, 1, f); return *this; }
|
||||||
constexpr ALWAYS_INLINE decltype(auto) SetShareable(Shareable s) { this->SetBitsDirect(8, 2, s); return *this; }
|
constexpr ALWAYS_INLINE decltype(auto) SetShareable(Shareable s) { this->SetBitsDirect(8, 2, s); return *this; }
|
||||||
constexpr ALWAYS_INLINE decltype(auto) SetReadOnly(bool en) { this->SetBit(7, en); return *this; }
|
constexpr ALWAYS_INLINE decltype(auto) SetReadOnly(bool en) { this->SetBit(7, en); return *this; }
|
||||||
constexpr ALWAYS_INLINE decltype(auto) SetUserAccessible(bool en) { this->SetBit(7, en); return *this; }
|
constexpr ALWAYS_INLINE decltype(auto) SetUserAccessible(bool en) { this->SetBit(6, en); return *this; }
|
||||||
constexpr ALWAYS_INLINE decltype(auto) SetPageAttribute(PageAttribute a) { this->SetBitsDirect(2, 3, a); return *this; }
|
constexpr ALWAYS_INLINE decltype(auto) SetPageAttribute(PageAttribute a) { this->SetBitsDirect(2, 3, a); return *this; }
|
||||||
|
|
||||||
constexpr ALWAYS_INLINE u64 GetEntryTemplate() const {
|
constexpr ALWAYS_INLINE u64 GetEntryTemplate() const {
|
||||||
|
|
|
@ -222,7 +222,6 @@ namespace ams::kern {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetSvcAllowed(u32 id) {
|
bool SetSvcAllowed(u32 id) {
|
||||||
constexpr size_t BitsPerWord = BITSIZEOF(this->svc_access_flags[0]);
|
|
||||||
if (id < BITSIZEOF(this->svc_access_flags)) {
|
if (id < BITSIZEOF(this->svc_access_flags)) {
|
||||||
SetSvcAllowedImpl(this->svc_access_flags, id);
|
SetSvcAllowedImpl(this->svc_access_flags, id);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -22,7 +22,20 @@ namespace ams::kern::arch::arm64 {
|
||||||
void SupervisorModeThreadStarter();
|
void SupervisorModeThreadStarter();
|
||||||
|
|
||||||
void OnThreadStart() {
|
void OnThreadStart() {
|
||||||
MESOSPHERE_TODO_IMPLEMENT();
|
MESOSPHERE_ASSERT(!KInterruptManager::AreInterruptsEnabled());
|
||||||
|
/* Send KDebug event for this thread's creation. */
|
||||||
|
{
|
||||||
|
KScopedInterruptEnable ei;
|
||||||
|
/* TODO */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle any pending dpc. */
|
||||||
|
while (GetCurrentThread().HasDpc()) {
|
||||||
|
KDpcManager::HandleDpc();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear our status as in an exception handler */
|
||||||
|
GetCurrentThread().ClearInExceptionHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
|
@ -39,7 +39,7 @@ _ZN3ams4kern4arch5arm6421UserModeThreadStarterEv:
|
||||||
msr sp_el0, x19
|
msr sp_el0, x19
|
||||||
msr elr_el1, x20
|
msr elr_el1, x20
|
||||||
msr spsr_el1, x21
|
msr spsr_el1, x21
|
||||||
msr tpidr_el1, x22
|
msr tpidr_el0, x22
|
||||||
|
|
||||||
ldp x0, x1, [sp, #(8 * 0)]
|
ldp x0, x1, [sp, #(8 * 0)]
|
||||||
ldp x2, x3, [sp, #(8 * 2)]
|
ldp x2, x3, [sp, #(8 * 2)]
|
||||||
|
|
Loading…
Reference in a new issue