Fixed type conversion ambiguity
This commit is contained in:
		@@ -946,7 +946,7 @@ static void Init(u16 port) {
 | 
			
		||||
    WSAStartup(MAKEWORD(2, 2), &InitData);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    int tmpsock = socket(PF_INET, SOCK_STREAM, 0);
 | 
			
		||||
    int tmpsock = static_cast<int>(socket(PF_INET, SOCK_STREAM, 0));
 | 
			
		||||
    if (tmpsock == -1) {
 | 
			
		||||
        LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket");
 | 
			
		||||
    }
 | 
			
		||||
@@ -973,7 +973,7 @@ static void Init(u16 port) {
 | 
			
		||||
    sockaddr_in saddr_client;
 | 
			
		||||
    sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client);
 | 
			
		||||
    socklen_t client_addrlen = sizeof(saddr_client);
 | 
			
		||||
    gdbserver_socket = accept(tmpsock, client_addr, &client_addrlen);
 | 
			
		||||
    gdbserver_socket = static_cast<int>(accept(tmpsock, client_addr, &client_addrlen));
 | 
			
		||||
    if (gdbserver_socket < 0) {
 | 
			
		||||
        // In the case that we couldn't start the server for whatever reason, just start CPU
 | 
			
		||||
        // execution like normal.
 | 
			
		||||
 
 | 
			
		||||
@@ -122,11 +122,11 @@ union StaticBufferDescInfo {
 | 
			
		||||
    BitField<14, 18, u32> size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
inline u32 StaticBufferDesc(u32 size, u8 buffer_id) {
 | 
			
		||||
inline u32 StaticBufferDesc(size_t size, u8 buffer_id) {
 | 
			
		||||
    StaticBufferDescInfo info{};
 | 
			
		||||
    info.descriptor_type.Assign(StaticBuffer);
 | 
			
		||||
    info.buffer_id.Assign(buffer_id);
 | 
			
		||||
    info.size.Assign(size);
 | 
			
		||||
    info.size.Assign(static_cast<u32>(size));
 | 
			
		||||
    return info.raw;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -160,11 +160,11 @@ union MappedBufferDescInfo {
 | 
			
		||||
    BitField<4, 28, u32> size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
inline u32 MappedBufferDesc(u32 size, MappedBufferPermissions perms) {
 | 
			
		||||
inline u32 MappedBufferDesc(size_t size, MappedBufferPermissions perms) {
 | 
			
		||||
    MappedBufferDescInfo info{};
 | 
			
		||||
    info.flags.Assign(MappedBuffer);
 | 
			
		||||
    info.perms.Assign(perms);
 | 
			
		||||
    info.size.Assign(size);
 | 
			
		||||
    info.size.Assign(static_cast<u32>(size));
 | 
			
		||||
    return info.raw;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -117,9 +117,9 @@ public:
 | 
			
		||||
 | 
			
		||||
    void PushCurrentPIDHandle();
 | 
			
		||||
 | 
			
		||||
    void PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id);
 | 
			
		||||
    void PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id);
 | 
			
		||||
 | 
			
		||||
    void PushMappedBuffer(VAddr buffer_vaddr, u32 size, MappedBufferPermissions perms);
 | 
			
		||||
    void PushMappedBuffer(VAddr buffer_vaddr, size_t size, MappedBufferPermissions perms);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Push ///
 | 
			
		||||
@@ -190,12 +190,12 @@ inline void RequestBuilder::PushCurrentPIDHandle() {
 | 
			
		||||
    Push(u32(0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id) {
 | 
			
		||||
inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id) {
 | 
			
		||||
    Push(StaticBufferDesc(size, buffer_id));
 | 
			
		||||
    Push(buffer_vaddr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, u32 size,
 | 
			
		||||
inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, size_t size,
 | 
			
		||||
                                             MappedBufferPermissions perms) {
 | 
			
		||||
    Push(MappedBufferDesc(size, perms));
 | 
			
		||||
    Push(buffer_vaddr);
 | 
			
		||||
@@ -227,8 +227,8 @@ public:
 | 
			
		||||
                               bool validateHeader = true) {
 | 
			
		||||
        if (validateHeader)
 | 
			
		||||
            ValidateHeader();
 | 
			
		||||
        Header builderHeader{
 | 
			
		||||
            MakeHeader(header.command_id, normal_params_size, translate_params_size)};
 | 
			
		||||
        Header builderHeader{MakeHeader(static_cast<u16>(header.command_id), normal_params_size,
 | 
			
		||||
                                        translate_params_size)};
 | 
			
		||||
        if (context != nullptr)
 | 
			
		||||
            return {*context, builderHeader};
 | 
			
		||||
        else
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ SharedPtr<Object> HLERequestContext::GetIncomingHandle(u32 id_from_cmdbuf) const
 | 
			
		||||
 | 
			
		||||
u32 HLERequestContext::AddOutgoingHandle(SharedPtr<Object> object) {
 | 
			
		||||
    request_handles.push_back(std::move(object));
 | 
			
		||||
    return request_handles.size() - 1;
 | 
			
		||||
    return static_cast<u32>(request_handles.size() - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HLERequestContext::ClearIncomingObjects() {
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@ void Mutex::UpdatePriority() {
 | 
			
		||||
    if (!holding_thread)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    s32 best_priority = THREADPRIO_LOWEST;
 | 
			
		||||
    u32 best_priority = THREADPRIO_LOWEST;
 | 
			
		||||
    for (auto& waiter : GetWaitingThreads()) {
 | 
			
		||||
        if (waiter->current_priority < best_priority)
 | 
			
		||||
            best_priority = waiter->current_priority;
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ s32 ResourceLimit::GetCurrentResourceValue(u32 resource) const {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s32 ResourceLimit::GetMaxResourceValue(u32 resource) const {
 | 
			
		||||
u32 ResourceLimit::GetMaxResourceValue(u32 resource) const {
 | 
			
		||||
    switch (resource) {
 | 
			
		||||
    case PRIORITY:
 | 
			
		||||
        return max_priority;
 | 
			
		||||
 
 | 
			
		||||
@@ -67,7 +67,7 @@ public:
 | 
			
		||||
     * @param resource Requested resource type
 | 
			
		||||
     * @returns The max value of the resource type
 | 
			
		||||
     */
 | 
			
		||||
    s32 GetMaxResourceValue(u32 resource) const;
 | 
			
		||||
    u32 GetMaxResourceValue(u32 resource) const;
 | 
			
		||||
 | 
			
		||||
    /// Name of resource limit object.
 | 
			
		||||
    std::string name;
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,8 @@ SharedPtr<SharedMemory> SharedMemory::Create(SharedPtr<Process> owner_process, u
 | 
			
		||||
        memory_region->used += size;
 | 
			
		||||
 | 
			
		||||
        shared_memory->linear_heap_phys_address =
 | 
			
		||||
            Memory::FCRAM_PADDR + memory_region->base + shared_memory->backing_block_offset;
 | 
			
		||||
            Memory::FCRAM_PADDR + memory_region->base +
 | 
			
		||||
            static_cast<PAddr>(shared_memory->backing_block_offset);
 | 
			
		||||
 | 
			
		||||
        // Increase the amount of used linear heap memory for the owner process.
 | 
			
		||||
        if (shared_memory->owner_process != nullptr) {
 | 
			
		||||
 
 | 
			
		||||
@@ -114,7 +114,7 @@ public:
 | 
			
		||||
    /// Backing memory for this shared memory block.
 | 
			
		||||
    std::shared_ptr<std::vector<u8>> backing_block;
 | 
			
		||||
    /// Offset into the backing block for this shared memory.
 | 
			
		||||
    u32 backing_block_offset;
 | 
			
		||||
    size_t backing_block_offset;
 | 
			
		||||
    /// Size of the memory block. Page-aligned.
 | 
			
		||||
    u32 size;
 | 
			
		||||
    /// Permission restrictions applied to the process which created the block.
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,7 @@ void Thread::Stop() {
 | 
			
		||||
 | 
			
		||||
Thread* ArbitrateHighestPriorityThread(u32 address) {
 | 
			
		||||
    Thread* highest_priority_thread = nullptr;
 | 
			
		||||
    s32 priority = THREADPRIO_LOWEST;
 | 
			
		||||
    u32 priority = THREADPRIO_LOWEST;
 | 
			
		||||
 | 
			
		||||
    // Iterate through threads, find highest priority thread that is waiting to be arbitrated...
 | 
			
		||||
    for (auto& thread : thread_list) {
 | 
			
		||||
@@ -311,7 +311,7 @@ static void DebugThreadQueue() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (auto& t : thread_list) {
 | 
			
		||||
        s32 priority = ready_queue.contains(t.get());
 | 
			
		||||
        u32 priority = ready_queue.contains(t.get());
 | 
			
		||||
        if (priority != -1) {
 | 
			
		||||
            LOG_DEBUG(Kernel, "0x%02X %u", priority, t->GetObjectId());
 | 
			
		||||
        }
 | 
			
		||||
@@ -422,7 +422,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
 | 
			
		||||
            return ERR_OUT_OF_MEMORY;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        u32 offset = linheap_memory->size();
 | 
			
		||||
        size_t offset = linheap_memory->size();
 | 
			
		||||
 | 
			
		||||
        // Allocate some memory from the end of the linear heap for this region.
 | 
			
		||||
        linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0);
 | 
			
		||||
@@ -430,7 +430,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
 | 
			
		||||
        owner_process->linear_heap_used += Memory::PAGE_SIZE;
 | 
			
		||||
 | 
			
		||||
        tls_slots.emplace_back(0); // The page is completely available at the start
 | 
			
		||||
        available_page = tls_slots.size() - 1;
 | 
			
		||||
        available_page = static_cast<u32>(tls_slots.size() - 1);
 | 
			
		||||
        available_slot = 0; // Use the first slot in the new page
 | 
			
		||||
 | 
			
		||||
        auto& vm_manager = owner_process->vm_manager;
 | 
			
		||||
@@ -457,7 +457,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
 | 
			
		||||
    return MakeResult<SharedPtr<Thread>>(std::move(thread));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Thread::SetPriority(s32 priority) {
 | 
			
		||||
void Thread::SetPriority(u32 priority) {
 | 
			
		||||
    ASSERT_MSG(priority <= THREADPRIO_LOWEST && priority >= THREADPRIO_HIGHEST,
 | 
			
		||||
               "Invalid priority value.");
 | 
			
		||||
    // If thread was ready, adjust queues
 | 
			
		||||
@@ -470,7 +470,7 @@ void Thread::SetPriority(s32 priority) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Thread::UpdatePriority() {
 | 
			
		||||
    s32 best_priority = nominal_priority;
 | 
			
		||||
    u32 best_priority = nominal_priority;
 | 
			
		||||
    for (auto& mutex : held_mutexes) {
 | 
			
		||||
        if (mutex->priority < best_priority)
 | 
			
		||||
            best_priority = mutex->priority;
 | 
			
		||||
@@ -478,7 +478,7 @@ void Thread::UpdatePriority() {
 | 
			
		||||
    BoostPriority(best_priority);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Thread::BoostPriority(s32 priority) {
 | 
			
		||||
void Thread::BoostPriority(u32 priority) {
 | 
			
		||||
    // If thread was ready, adjust queues
 | 
			
		||||
    if (status == THREADSTATUS_READY)
 | 
			
		||||
        ready_queue.move(this, current_priority, priority);
 | 
			
		||||
@@ -487,7 +487,7 @@ void Thread::BoostPriority(s32 priority) {
 | 
			
		||||
    current_priority = priority;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SharedPtr<Thread> SetupMainThread(u32 entry_point, s32 priority, SharedPtr<Process> owner_process) {
 | 
			
		||||
SharedPtr<Thread> SetupMainThread(u32 entry_point, u32 priority, SharedPtr<Process> owner_process) {
 | 
			
		||||
    // Initialize new "main" thread
 | 
			
		||||
    auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0,
 | 
			
		||||
                                     Memory::HEAP_VADDR_END, owner_process);
 | 
			
		||||
@@ -531,7 +531,7 @@ void Thread::SetWaitSynchronizationOutput(s32 output) {
 | 
			
		||||
s32 Thread::GetWaitObjectIndex(WaitObject* object) const {
 | 
			
		||||
    ASSERT_MSG(!wait_objects.empty(), "Thread is not waiting for anything");
 | 
			
		||||
    auto match = std::find(wait_objects.rbegin(), wait_objects.rend(), object);
 | 
			
		||||
    return std::distance(match, wait_objects.rend()) - 1;
 | 
			
		||||
    return static_cast<s32>(std::distance(match, wait_objects.rend()) - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
#include "core/hle/kernel/wait_object.h"
 | 
			
		||||
#include "core/hle/result.h"
 | 
			
		||||
 | 
			
		||||
enum ThreadPriority : s32 {
 | 
			
		||||
enum ThreadPriority : u32 {
 | 
			
		||||
    THREADPRIO_HIGHEST = 0,       ///< Highest thread priority
 | 
			
		||||
    THREADPRIO_USERLAND_MAX = 24, ///< Highest thread priority for userland apps
 | 
			
		||||
    THREADPRIO_DEFAULT = 48,      ///< Default thread priority for userland apps
 | 
			
		||||
@@ -82,7 +82,7 @@ public:
 | 
			
		||||
     * Gets the thread's current priority
 | 
			
		||||
     * @return The current thread's priority
 | 
			
		||||
     */
 | 
			
		||||
    s32 GetPriority() const {
 | 
			
		||||
    u32 GetPriority() const {
 | 
			
		||||
        return current_priority;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -90,7 +90,7 @@ public:
 | 
			
		||||
     * Sets the thread's current priority
 | 
			
		||||
     * @param priority The new priority
 | 
			
		||||
     */
 | 
			
		||||
    void SetPriority(s32 priority);
 | 
			
		||||
    void SetPriority(u32 priority);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Boost's a thread's priority to the best priority among the thread's held mutexes.
 | 
			
		||||
@@ -102,7 +102,7 @@ public:
 | 
			
		||||
     * Temporarily boosts the thread's priority until the next time it is scheduled
 | 
			
		||||
     * @param priority The new priority
 | 
			
		||||
     */
 | 
			
		||||
    void BoostPriority(s32 priority);
 | 
			
		||||
    void BoostPriority(u32 priority);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the thread's thread ID
 | 
			
		||||
@@ -176,8 +176,8 @@ public:
 | 
			
		||||
    u32 entry_point;
 | 
			
		||||
    u32 stack_top;
 | 
			
		||||
 | 
			
		||||
    s32 nominal_priority; ///< Nominal thread priority, as set by the emulated application
 | 
			
		||||
    s32 current_priority; ///< Current thread priority, can be temporarily changed
 | 
			
		||||
    u32 nominal_priority; ///< Nominal thread priority, as set by the emulated application
 | 
			
		||||
    u32 current_priority; ///< Current thread priority, can be temporarily changed
 | 
			
		||||
 | 
			
		||||
    u64 last_running_ticks; ///< CPU tick when thread was last running
 | 
			
		||||
 | 
			
		||||
@@ -219,7 +219,7 @@ private:
 | 
			
		||||
 * @param owner_process The parent process for the main thread
 | 
			
		||||
 * @return A shared pointer to the main thread
 | 
			
		||||
 */
 | 
			
		||||
SharedPtr<Thread> SetupMainThread(u32 entry_point, s32 priority, SharedPtr<Process> owner_process);
 | 
			
		||||
SharedPtr<Thread> SetupMainThread(u32 entry_point, u32 priority, SharedPtr<Process> owner_process);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns whether there are any threads that are ready to run.
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ void WaitObject::RemoveWaitingThread(Thread* thread) {
 | 
			
		||||
 | 
			
		||||
SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() {
 | 
			
		||||
    Thread* candidate = nullptr;
 | 
			
		||||
    s32 candidate_priority = THREADPRIO_LOWEST + 1;
 | 
			
		||||
    u32 candidate_priority = THREADPRIO_LOWEST + 1;
 | 
			
		||||
 | 
			
		||||
    for (const auto& thread : waiting_threads) {
 | 
			
		||||
        // The list of waiting threads must not contain threads that are not waiting to be awakened.
 | 
			
		||||
 
 | 
			
		||||
@@ -561,7 +561,7 @@ void ReceiveParameter(Service::Interface* self) {
 | 
			
		||||
                           ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap()
 | 
			
		||||
                           : 0);
 | 
			
		||||
 | 
			
		||||
    rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter->buffer.size()), 0);
 | 
			
		||||
    rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0);
 | 
			
		||||
 | 
			
		||||
    Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size());
 | 
			
		||||
 | 
			
		||||
@@ -609,7 +609,7 @@ void GlanceParameter(Service::Interface* self) {
 | 
			
		||||
                           ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap()
 | 
			
		||||
                           : 0);
 | 
			
		||||
 | 
			
		||||
    rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter->buffer.size()), 0);
 | 
			
		||||
    rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0);
 | 
			
		||||
 | 
			
		||||
    Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size());
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -177,7 +177,7 @@ void CompletionEventCallBack(u64 port_id, int) {
 | 
			
		||||
            LOG_ERROR(Service_CAM, "The destination size (%u) doesn't match the source (%zu)!",
 | 
			
		||||
                      port.dest_size, buffer_size);
 | 
			
		||||
        }
 | 
			
		||||
        Memory::WriteBlock(port.dest, buffer.data(), std::min<u32>(port.dest_size, buffer_size));
 | 
			
		||||
        Memory::WriteBlock(port.dest, buffer.data(), std::min<size_t>(port.dest_size, buffer_size));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    port.is_receiving = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -141,7 +141,7 @@ void GetCountryCodeString(Service::Interface* self) {
 | 
			
		||||
 | 
			
		||||
void GetCountryCodeID(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
    u16 country_code = cmd_buff[1];
 | 
			
		||||
    u16 country_code = static_cast<u16>(cmd_buff[1]);
 | 
			
		||||
    u16 country_code_id = 0;
 | 
			
		||||
 | 
			
		||||
    // The following algorithm will fail if the first country code isn't 0.
 | 
			
		||||
 
 | 
			
		||||
@@ -217,7 +217,7 @@ void Directory::HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> serve
 | 
			
		||||
        LOG_TRACE(Service_FS, "Read %s: count=%d", GetName().c_str(), count);
 | 
			
		||||
 | 
			
		||||
        // Number of entries actually read
 | 
			
		||||
        u32 read = backend->Read(entries.size(), entries.data());
 | 
			
		||||
        u32 read = backend->Read(static_cast<u32>(entries.size()), entries.data());
 | 
			
		||||
        cmd_buff[2] = read;
 | 
			
		||||
        Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry));
 | 
			
		||||
        break;
 | 
			
		||||
 
 | 
			
		||||
@@ -251,7 +251,7 @@ static void UpdateGyroscopeCallback(u64 userdata, int cycles_late) {
 | 
			
		||||
    Math::Vec3<float> gyro;
 | 
			
		||||
    std::tie(std::ignore, gyro) = motion_device->GetStatus();
 | 
			
		||||
    double stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale();
 | 
			
		||||
    gyro *= gyroscope_coef * stretch;
 | 
			
		||||
    gyro *= gyroscope_coef * static_cast<float>(stretch);
 | 
			
		||||
    gyroscope_entry.x = static_cast<s16>(gyro.x);
 | 
			
		||||
    gyroscope_entry.y = static_cast<s16>(gyro.y);
 | 
			
		||||
    gyroscope_entry.z = static_cast<s16>(gyro.z);
 | 
			
		||||
 
 | 
			
		||||
@@ -413,7 +413,8 @@ private:
 | 
			
		||||
     */
 | 
			
		||||
    template <typename T>
 | 
			
		||||
    void GetEntry(std::size_t index, T& data) const {
 | 
			
		||||
        Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T));
 | 
			
		||||
        Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast<u32>(index * sizeof(T)),
 | 
			
		||||
                          &data, sizeof(T));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -425,7 +426,8 @@ private:
 | 
			
		||||
     */
 | 
			
		||||
    template <typename T>
 | 
			
		||||
    void SetEntry(std::size_t index, const T& data) {
 | 
			
		||||
        Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T));
 | 
			
		||||
        Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast<u32>(index * sizeof(T)),
 | 
			
		||||
                           &data, sizeof(T));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -316,7 +316,7 @@ static void RecvBeaconBroadcastData(Interface* self) {
 | 
			
		||||
    auto beacons = GetReceivedBeacons(mac_address);
 | 
			
		||||
 | 
			
		||||
    BeaconDataReplyHeader data_reply_header{};
 | 
			
		||||
    data_reply_header.total_entries = beacons.size();
 | 
			
		||||
    data_reply_header.total_entries = static_cast<u32>(beacons.size());
 | 
			
		||||
    data_reply_header.max_output_size = out_buffer_size;
 | 
			
		||||
 | 
			
		||||
    Memory::WriteBlock(current_buffer_pos, &data_reply_header, sizeof(BeaconDataReplyHeader));
 | 
			
		||||
@@ -326,8 +326,8 @@ static void RecvBeaconBroadcastData(Interface* self) {
 | 
			
		||||
    for (const auto& beacon : beacons) {
 | 
			
		||||
        BeaconEntryHeader entry{};
 | 
			
		||||
        // TODO(Subv): Figure out what this size is used for.
 | 
			
		||||
        entry.unk_size = sizeof(BeaconEntryHeader) + beacon.data.size();
 | 
			
		||||
        entry.total_size = sizeof(BeaconEntryHeader) + beacon.data.size();
 | 
			
		||||
        entry.unk_size = static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size());
 | 
			
		||||
        entry.total_size = static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size());
 | 
			
		||||
        entry.wifi_channel = beacon.channel;
 | 
			
		||||
        entry.header_size = sizeof(BeaconEntryHeader);
 | 
			
		||||
        entry.mac_address = beacon.transmitter_address;
 | 
			
		||||
@@ -338,9 +338,9 @@ static void RecvBeaconBroadcastData(Interface* self) {
 | 
			
		||||
        current_buffer_pos += sizeof(BeaconEntryHeader);
 | 
			
		||||
 | 
			
		||||
        Memory::WriteBlock(current_buffer_pos, beacon.data.data(), beacon.data.size());
 | 
			
		||||
        current_buffer_pos += beacon.data.size();
 | 
			
		||||
        current_buffer_pos += static_cast<VAddr>(beacon.data.size());
 | 
			
		||||
 | 
			
		||||
        total_size += sizeof(BeaconEntryHeader) + beacon.data.size();
 | 
			
		||||
        total_size += static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Update the total size in the structure and write it to the buffer again.
 | 
			
		||||
 
 | 
			
		||||
@@ -243,7 +243,7 @@ std::vector<u8> GenerateNintendoFirstEncryptedDataTag(const NetworkInfo& network
 | 
			
		||||
 | 
			
		||||
    EncryptedDataTag tag{};
 | 
			
		||||
    tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific);
 | 
			
		||||
    tag.header.length = sizeof(tag) - sizeof(TagHeader) + payload_size;
 | 
			
		||||
    tag.header.length = static_cast<u8>(sizeof(tag) - sizeof(TagHeader) + payload_size);
 | 
			
		||||
    tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData0);
 | 
			
		||||
    tag.oui = NintendoOUI;
 | 
			
		||||
 | 
			
		||||
@@ -279,7 +279,7 @@ std::vector<u8> GenerateNintendoSecondEncryptedDataTag(const NetworkInfo& networ
 | 
			
		||||
 | 
			
		||||
    EncryptedDataTag tag{};
 | 
			
		||||
    tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific);
 | 
			
		||||
    tag.header.length = tag_length;
 | 
			
		||||
    tag.header.length = static_cast<u8>(tag_length);
 | 
			
		||||
    tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData1);
 | 
			
		||||
    tag.oui = NintendoOUI;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -197,7 +197,7 @@ static std::vector<u8> DecryptDataFrame(const std::vector<u8>& encrypted_payload
 | 
			
		||||
        df.ChannelMessageEnd(CryptoPP::DEFAULT_CHANNEL);
 | 
			
		||||
        df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL);
 | 
			
		||||
 | 
			
		||||
        int size = df.MaxRetrievable();
 | 
			
		||||
        size_t size = df.MaxRetrievable();
 | 
			
		||||
 | 
			
		||||
        std::vector<u8> pdata(size);
 | 
			
		||||
        df.Get(pdata.data(), size);
 | 
			
		||||
@@ -251,7 +251,7 @@ static std::vector<u8> EncryptDataFrame(const std::vector<u8>& payload,
 | 
			
		||||
 | 
			
		||||
        df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL);
 | 
			
		||||
 | 
			
		||||
        int size = df.MaxRetrievable();
 | 
			
		||||
        size_t size = df.MaxRetrievable();
 | 
			
		||||
 | 
			
		||||
        std::vector<u8> cipher(size);
 | 
			
		||||
        df.Get(cipher.data(), size);
 | 
			
		||||
@@ -266,8 +266,8 @@ static std::vector<u8> EncryptDataFrame(const std::vector<u8>& payload,
 | 
			
		||||
std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node,
 | 
			
		||||
                                    u16 src_node, u16 sequence_number) {
 | 
			
		||||
    std::vector<u8> buffer = GenerateLLCHeader(EtherType::SecureData);
 | 
			
		||||
    std::vector<u8> securedata_header =
 | 
			
		||||
        GenerateSecureDataHeader(data.size(), channel, dest_node, src_node, sequence_number);
 | 
			
		||||
    std::vector<u8> securedata_header = GenerateSecureDataHeader(
 | 
			
		||||
        static_cast<u16>(data.size()), channel, dest_node, src_node, sequence_number);
 | 
			
		||||
 | 
			
		||||
    buffer.insert(buffer.end(), securedata_header.begin(), securedata_header.end());
 | 
			
		||||
    buffer.insert(buffer.end(), data.begin(), data.end());
 | 
			
		||||
 
 | 
			
		||||
@@ -361,7 +361,7 @@ static ResultCode WaitSynchronizationN(s32* out, Kernel::Handle* handles, s32 ha
 | 
			
		||||
            // We found a ready object, acquire it and set the result value
 | 
			
		||||
            Kernel::WaitObject* object = itr->get();
 | 
			
		||||
            object->Acquire(thread);
 | 
			
		||||
            *out = std::distance(objects.begin(), itr);
 | 
			
		||||
            *out = static_cast<s32>(std::distance(objects.begin(), itr));
 | 
			
		||||
            return RESULT_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -469,7 +469,7 @@ static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handl
 | 
			
		||||
        // We found a ready object, acquire it and set the result value
 | 
			
		||||
        Kernel::WaitObject* object = itr->get();
 | 
			
		||||
        object->Acquire(thread);
 | 
			
		||||
        *index = std::distance(objects.begin(), itr);
 | 
			
		||||
        *index = static_cast<s32>(std::distance(objects.begin(), itr));
 | 
			
		||||
 | 
			
		||||
        if (object->GetHandleType() == Kernel::HandleType::ServerSession) {
 | 
			
		||||
            auto server_session = static_cast<Kernel::ServerSession*>(object);
 | 
			
		||||
@@ -683,7 +683,7 @@ static void ExitThread() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Gets the priority for the specified thread
 | 
			
		||||
static ResultCode GetThreadPriority(s32* priority, Kernel::Handle handle) {
 | 
			
		||||
static ResultCode GetThreadPriority(u32* priority, Kernel::Handle handle) {
 | 
			
		||||
    const SharedPtr<Kernel::Thread> thread = Kernel::g_handle_table.Get<Kernel::Thread>(handle);
 | 
			
		||||
    if (thread == nullptr)
 | 
			
		||||
        return ERR_INVALID_HANDLE;
 | 
			
		||||
@@ -693,7 +693,7 @@ static ResultCode GetThreadPriority(s32* priority, Kernel::Handle handle) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Sets the priority for the specified thread
 | 
			
		||||
static ResultCode SetThreadPriority(Kernel::Handle handle, s32 priority) {
 | 
			
		||||
static ResultCode SetThreadPriority(Kernel::Handle handle, u32 priority) {
 | 
			
		||||
    if (priority > THREADPRIO_LOWEST) {
 | 
			
		||||
        return Kernel::ERR_OUT_OF_RANGE;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -477,7 +477,7 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) {
 | 
			
		||||
 | 
			
		||||
    while (remaining_size > 0) {
 | 
			
		||||
        const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
 | 
			
		||||
        const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset;
 | 
			
		||||
        const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
 | 
			
		||||
 | 
			
		||||
        switch (current_page_table->attributes[page_index]) {
 | 
			
		||||
        case PageType::Unmapped: {
 | 
			
		||||
@@ -500,13 +500,15 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedMemory: {
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::Flush);
 | 
			
		||||
            std::memcpy(dest_buffer, GetPointerFromVMA(current_vaddr), copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedSpecial: {
 | 
			
		||||
            DEBUG_ASSERT(GetMMIOHandler(current_vaddr));
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::Flush);
 | 
			
		||||
            GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@@ -544,7 +546,7 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size
 | 
			
		||||
 | 
			
		||||
    while (remaining_size > 0) {
 | 
			
		||||
        const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
 | 
			
		||||
        const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset;
 | 
			
		||||
        const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
 | 
			
		||||
 | 
			
		||||
        switch (current_page_table->attributes[page_index]) {
 | 
			
		||||
        case PageType::Unmapped: {
 | 
			
		||||
@@ -567,13 +569,15 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedMemory: {
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::FlushAndInvalidate);
 | 
			
		||||
            std::memcpy(GetPointerFromVMA(current_vaddr), src_buffer, copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedSpecial: {
 | 
			
		||||
            DEBUG_ASSERT(GetMMIOHandler(current_vaddr));
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::FlushAndInvalidate);
 | 
			
		||||
            GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@@ -597,7 +601,7 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) {
 | 
			
		||||
 | 
			
		||||
    while (remaining_size > 0) {
 | 
			
		||||
        const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
 | 
			
		||||
        const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset;
 | 
			
		||||
        const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
 | 
			
		||||
 | 
			
		||||
        switch (current_page_table->attributes[page_index]) {
 | 
			
		||||
        case PageType::Unmapped: {
 | 
			
		||||
@@ -619,13 +623,15 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedMemory: {
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::FlushAndInvalidate);
 | 
			
		||||
            std::memset(GetPointerFromVMA(current_vaddr), 0, copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedSpecial: {
 | 
			
		||||
            DEBUG_ASSERT(GetMMIOHandler(current_vaddr));
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::FlushAndInvalidate);
 | 
			
		||||
            GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, zeros.data(), copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@@ -646,7 +652,7 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) {
 | 
			
		||||
 | 
			
		||||
    while (remaining_size > 0) {
 | 
			
		||||
        const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
 | 
			
		||||
        const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset;
 | 
			
		||||
        const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
 | 
			
		||||
 | 
			
		||||
        switch (current_page_table->attributes[page_index]) {
 | 
			
		||||
        case PageType::Unmapped: {
 | 
			
		||||
@@ -670,13 +676,15 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedMemory: {
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::Flush);
 | 
			
		||||
            WriteBlock(dest_addr, GetPointerFromVMA(current_vaddr), copy_amount);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PageType::RasterizerCachedSpecial: {
 | 
			
		||||
            DEBUG_ASSERT(GetMMIOHandler(current_vaddr));
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush);
 | 
			
		||||
            RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
 | 
			
		||||
                                         FlushMode::Flush);
 | 
			
		||||
 | 
			
		||||
            std::vector<u8> buffer(copy_amount);
 | 
			
		||||
            GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, buffer.data(), buffer.size());
 | 
			
		||||
@@ -689,8 +697,8 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) {
 | 
			
		||||
 | 
			
		||||
        page_index++;
 | 
			
		||||
        page_offset = 0;
 | 
			
		||||
        dest_addr += copy_amount;
 | 
			
		||||
        src_addr += copy_amount;
 | 
			
		||||
        dest_addr += static_cast<VAddr>(copy_amount);
 | 
			
		||||
        src_addr += static_cast<VAddr>(copy_amount);
 | 
			
		||||
        remaining_size -= copy_amount;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user