clang-format on most of kernel/
This commit is contained in:
@@ -14,16 +14,15 @@
|
||||
#include <xenia/kernel/objects/xmutant.h>
|
||||
#include <xenia/kernel/objects/xsemaphore.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
|
||||
|
||||
XObject::XObject(KernelState* kernel_state, Type type) :
|
||||
kernel_state_(kernel_state),
|
||||
handle_ref_count_(0),
|
||||
pointer_ref_count_(1),
|
||||
type_(type), handle_(X_INVALID_HANDLE_VALUE) {
|
||||
XObject::XObject(KernelState* kernel_state, Type type)
|
||||
: kernel_state_(kernel_state),
|
||||
handle_ref_count_(0),
|
||||
pointer_ref_count_(1),
|
||||
type_(type),
|
||||
handle_(X_INVALID_HANDLE_VALUE) {
|
||||
kernel_state->object_table()->AddHandle(this, &handle_);
|
||||
}
|
||||
|
||||
@@ -32,21 +31,13 @@ XObject::~XObject() {
|
||||
assert_zero(pointer_ref_count_);
|
||||
}
|
||||
|
||||
Memory* XObject::memory() const {
|
||||
return kernel_state_->memory();
|
||||
}
|
||||
Memory* XObject::memory() const { return kernel_state_->memory(); }
|
||||
|
||||
XObject::Type XObject::type() {
|
||||
return type_;
|
||||
}
|
||||
XObject::Type XObject::type() { return type_; }
|
||||
|
||||
X_HANDLE XObject::handle() const {
|
||||
return handle_;
|
||||
}
|
||||
X_HANDLE XObject::handle() const { return handle_; }
|
||||
|
||||
void XObject::RetainHandle() {
|
||||
++handle_ref_count_;
|
||||
}
|
||||
void XObject::RetainHandle() { ++handle_ref_count_; }
|
||||
|
||||
bool XObject::ReleaseHandle() {
|
||||
if (--handle_ref_count_ == 0) {
|
||||
@@ -55,9 +46,7 @@ bool XObject::ReleaseHandle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
void XObject::Retain() {
|
||||
++pointer_ref_count_;
|
||||
}
|
||||
void XObject::Retain() { ++pointer_ref_count_; }
|
||||
|
||||
void XObject::Release() {
|
||||
if (--pointer_ref_count_ == 0) {
|
||||
@@ -78,7 +67,7 @@ uint32_t XObject::TimeoutTicksToMs(int64_t timeout_ticks) {
|
||||
return 0;
|
||||
} else if (timeout_ticks < 0) {
|
||||
// Relative time.
|
||||
return (uint32_t)(-timeout_ticks / 10000); // Ticks -> MS
|
||||
return (uint32_t)(-timeout_ticks / 10000); // Ticks -> MS
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
@@ -92,57 +81,50 @@ X_STATUS XObject::Wait(uint32_t wait_reason, uint32_t processor_mode,
|
||||
return X_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
DWORD timeout_ms = opt_timeout ?
|
||||
TimeoutTicksToMs(*opt_timeout) : INFINITE;
|
||||
DWORD timeout_ms = opt_timeout ? TimeoutTicksToMs(*opt_timeout) : INFINITE;
|
||||
|
||||
DWORD result = WaitForSingleObjectEx(wait_handle, timeout_ms, alertable);
|
||||
switch (result) {
|
||||
case WAIT_OBJECT_0:
|
||||
return X_STATUS_SUCCESS;
|
||||
case WAIT_IO_COMPLETION:
|
||||
// Or X_STATUS_ALERTED?
|
||||
return X_STATUS_USER_APC;
|
||||
case WAIT_TIMEOUT:
|
||||
return X_STATUS_TIMEOUT;
|
||||
default:
|
||||
case WAIT_FAILED:
|
||||
case WAIT_ABANDONED:
|
||||
return X_STATUS_ABANDONED_WAIT_0;
|
||||
case WAIT_OBJECT_0:
|
||||
return X_STATUS_SUCCESS;
|
||||
case WAIT_IO_COMPLETION:
|
||||
// Or X_STATUS_ALERTED?
|
||||
return X_STATUS_USER_APC;
|
||||
case WAIT_TIMEOUT:
|
||||
return X_STATUS_TIMEOUT;
|
||||
default:
|
||||
case WAIT_FAILED:
|
||||
case WAIT_ABANDONED:
|
||||
return X_STATUS_ABANDONED_WAIT_0;
|
||||
}
|
||||
}
|
||||
|
||||
X_STATUS XObject::SignalAndWait(
|
||||
XObject* signal_object, XObject* wait_object,
|
||||
uint32_t wait_reason, uint32_t processor_mode, uint32_t alertable,
|
||||
uint64_t* opt_timeout) {
|
||||
DWORD timeout_ms = opt_timeout ?
|
||||
TimeoutTicksToMs(*opt_timeout) : INFINITE;
|
||||
X_STATUS XObject::SignalAndWait(XObject* signal_object, XObject* wait_object,
|
||||
uint32_t wait_reason, uint32_t processor_mode,
|
||||
uint32_t alertable, uint64_t* opt_timeout) {
|
||||
DWORD timeout_ms = opt_timeout ? TimeoutTicksToMs(*opt_timeout) : INFINITE;
|
||||
|
||||
DWORD result = SignalObjectAndWait(
|
||||
signal_object->GetWaitHandle(),
|
||||
wait_object->GetWaitHandle(),
|
||||
timeout_ms,
|
||||
alertable ? TRUE : FALSE);
|
||||
DWORD result = SignalObjectAndWait(signal_object->GetWaitHandle(),
|
||||
wait_object->GetWaitHandle(), timeout_ms,
|
||||
alertable ? TRUE : FALSE);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
X_STATUS XObject::WaitMultiple(
|
||||
uint32_t count, XObject** objects,
|
||||
uint32_t wait_type, uint32_t wait_reason, uint32_t processor_mode,
|
||||
uint32_t alertable, uint64_t* opt_timeout) {
|
||||
X_STATUS XObject::WaitMultiple(uint32_t count, XObject** objects,
|
||||
uint32_t wait_type, uint32_t wait_reason,
|
||||
uint32_t processor_mode, uint32_t alertable,
|
||||
uint64_t* opt_timeout) {
|
||||
void** wait_handles = (void**)alloca(sizeof(void*) * count);
|
||||
for (uint32_t n = 0; n < count; n++) {
|
||||
wait_handles[n] = objects[n]->GetWaitHandle();
|
||||
assert_not_null(wait_handles[n]);
|
||||
}
|
||||
|
||||
DWORD timeout_ms = opt_timeout ?
|
||||
TimeoutTicksToMs(*opt_timeout) : INFINITE;
|
||||
DWORD timeout_ms = opt_timeout ? TimeoutTicksToMs(*opt_timeout) : INFINITE;
|
||||
|
||||
DWORD result = WaitForMultipleObjectsEx(
|
||||
count, wait_handles,
|
||||
wait_type ? FALSE : TRUE, timeout_ms, alertable);
|
||||
count, wait_handles, wait_type ? FALSE : TRUE, timeout_ms, alertable);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -164,7 +146,8 @@ void XObject::SetNativePointer(uint32_t native_ptr) {
|
||||
uint64_t object_ptr = reinterpret_cast<uint64_t>(this);
|
||||
object_ptr |= 0x1;
|
||||
header_be->wait_list_flink = poly::byte_swap((uint32_t)(object_ptr >> 32));
|
||||
header_be->wait_list_blink = poly::byte_swap((uint32_t)(object_ptr & 0xFFFFFFFF));
|
||||
header_be->wait_list_blink =
|
||||
poly::byte_swap((uint32_t)(object_ptr & 0xFFFFFFFF));
|
||||
}
|
||||
|
||||
XObject* XObject::GetObject(KernelState* kernel_state, void* native_ptr,
|
||||
@@ -193,9 +176,8 @@ XObject* XObject::GetObject(KernelState* kernel_state, void* native_ptr,
|
||||
|
||||
if (header.wait_list_blink & 0x1) {
|
||||
// Already initialized.
|
||||
uint64_t object_ptr =
|
||||
((uint64_t)header.wait_list_flink << 32) |
|
||||
((header.wait_list_blink) & ~0x1);
|
||||
uint64_t object_ptr = ((uint64_t)header.wait_list_flink << 32) |
|
||||
((header.wait_list_blink) & ~0x1);
|
||||
XObject* object = reinterpret_cast<XObject*>(object_ptr);
|
||||
// TODO(benvanik): assert nothing has been changed in the struct.
|
||||
return object;
|
||||
@@ -204,51 +186,49 @@ XObject* XObject::GetObject(KernelState* kernel_state, void* native_ptr,
|
||||
// http://www.nirsoft.net/kernel_struct/vista/KOBJECTS.html
|
||||
XObject* object = NULL;
|
||||
switch (as_type) {
|
||||
case 0: // EventNotificationObject
|
||||
case 1: // EventSynchronizationObject
|
||||
case 0: // EventNotificationObject
|
||||
case 1: // EventSynchronizationObject
|
||||
{
|
||||
XEvent* ev = new XEvent(kernel_state);
|
||||
ev->InitializeNative(native_ptr, header);
|
||||
object = ev;
|
||||
}
|
||||
break;
|
||||
case 2: // MutantObject
|
||||
} break;
|
||||
case 2: // MutantObject
|
||||
{
|
||||
XMutant* mutant = new XMutant(kernel_state);
|
||||
mutant->InitializeNative(native_ptr, header);
|
||||
object = mutant;
|
||||
}
|
||||
break;
|
||||
case 5: // SemaphoreObject
|
||||
} break;
|
||||
case 5: // SemaphoreObject
|
||||
{
|
||||
XSemaphore* sem = new XSemaphore(kernel_state);
|
||||
sem->InitializeNative(native_ptr, header);
|
||||
object = sem;
|
||||
}
|
||||
break;
|
||||
case 3: // ProcessObject
|
||||
case 4: // QueueObject
|
||||
case 6: // ThreadObject
|
||||
case 7: // GateObject
|
||||
case 8: // TimerNotificationObject
|
||||
case 9: // TimerSynchronizationObject
|
||||
case 18: // ApcObject
|
||||
case 19: // DpcObject
|
||||
case 20: // DeviceQueueObject
|
||||
case 21: // EventPairObject
|
||||
case 22: // InterruptObject
|
||||
case 23: // ProfileObject
|
||||
case 24: // ThreadedDpcObject
|
||||
default:
|
||||
assert_always();
|
||||
return NULL;
|
||||
} break;
|
||||
case 3: // ProcessObject
|
||||
case 4: // QueueObject
|
||||
case 6: // ThreadObject
|
||||
case 7: // GateObject
|
||||
case 8: // TimerNotificationObject
|
||||
case 9: // TimerSynchronizationObject
|
||||
case 18: // ApcObject
|
||||
case 19: // DpcObject
|
||||
case 20: // DeviceQueueObject
|
||||
case 21: // EventPairObject
|
||||
case 22: // InterruptObject
|
||||
case 23: // ProfileObject
|
||||
case 24: // ThreadedDpcObject
|
||||
default:
|
||||
assert_always();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Stash pointer in struct.
|
||||
uint64_t object_ptr = reinterpret_cast<uint64_t>(object);
|
||||
object_ptr |= 0x1;
|
||||
header_be->wait_list_flink = poly::byte_swap((uint32_t)(object_ptr >> 32));
|
||||
header_be->wait_list_blink = poly::byte_swap((uint32_t)(object_ptr & 0xFFFFFFFF));
|
||||
header_be->wait_list_blink =
|
||||
poly::byte_swap((uint32_t)(object_ptr & 0xFFFFFFFF));
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user