From 26c06e13d92c02d75cafafde89603edad368105f Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Tue, 15 Oct 2013 22:51:19 -0700 Subject: [PATCH] Checking in intermediate FS work before moving code. --- .../kernel/modules/xboxkrnl/async_request.cc | 36 +++++++++++ .../kernel/modules/xboxkrnl/async_request.h | 59 +++++++++++++++++++ .../kernel/modules/xboxkrnl/objects/xfile.cc | 5 ++ .../kernel/modules/xboxkrnl/objects/xfile.h | 4 ++ .../kernel/modules/xboxkrnl/sources.gypi | 2 + 5 files changed, 106 insertions(+) create mode 100644 src/xenia/kernel/modules/xboxkrnl/async_request.cc create mode 100644 src/xenia/kernel/modules/xboxkrnl/async_request.h diff --git a/src/xenia/kernel/modules/xboxkrnl/async_request.cc b/src/xenia/kernel/modules/xboxkrnl/async_request.cc new file mode 100644 index 000000000..b1f7bc909 --- /dev/null +++ b/src/xenia/kernel/modules/xboxkrnl/async_request.cc @@ -0,0 +1,36 @@ +/** + ****************************************************************************** + * Xenia : Xbox 360 Emulator Research Project * + ****************************************************************************** + * Copyright 2013 Ben Vanik. All rights reserved. * + * Released under the BSD license - see LICENSE in the root for more details. * + ****************************************************************************** + */ + +#include + +#include +#include + + +using namespace xe; +using namespace xe::kernel; +using namespace xe::kernel::xboxkrnl; + + +XAsyncRequest::XAsyncRequest( + XObject* object, + CompletionCallback callback, void* callback_context) : + object_(object), + callback_(callback), callback_context_(callback_context), + wait_event_(0), + apc_routine_(0), apc_context_(0) { + object_->Retain(); +} + +XAsyncRequest::~XAsyncRequest() { + if (wait_event_) { + wait_event_->Release(); + } + object_->Release(); +} diff --git a/src/xenia/kernel/modules/xboxkrnl/async_request.h b/src/xenia/kernel/modules/xboxkrnl/async_request.h new file mode 100644 index 000000000..c4d05291b --- /dev/null +++ b/src/xenia/kernel/modules/xboxkrnl/async_request.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * Xenia : Xbox 360 Emulator Research Project * + ****************************************************************************** + * Copyright 2013 Ben Vanik. All rights reserved. * + * Released under the BSD license - see LICENSE in the root for more details. * + ****************************************************************************** + */ + +#ifndef XENIA_KERNEL_MODULES_XBOXKRNL_ASYNC_REQUEST_H_ +#define XENIA_KERNEL_MODULES_XBOXKRNL_ASYNC_REQUEST_H_ + +#include +#include + +#include + + +namespace xe { +namespace kernel { +namespace xboxkrnl { + +class XEvent; + + +class XAsyncRequest { +public: + typedef void (*CompletionCallback)(XAsyncRequest* request, void* context); + + XAsyncRequest( + XObject* object, + CompletionCallback callback, void* callback_context); + virtual ~XAsyncRequest(); + + XObject* object() const { return object_; } + + XEvent* wait_event() const { return wait_event_; } + uint32_t apc_routine() const { return apc_routine_; } + uint32_t apc_context() const { return apc_context_; } + + // Complete(result) + +protected: + XObject* object_; + CompletionCallback callback_; + void* callback_context_; + + XEvent* wait_event_; + uint32_t apc_routine_; + uint32_t apc_context_; +}; + + +} // namespace xboxkrnl +} // namespace kernel +} // namespace xe + + +#endif // XENIA_KERNEL_MODULES_XBOXKRNL_ASYNC_REQUEST_H_ diff --git a/src/xenia/kernel/modules/xboxkrnl/objects/xfile.cc b/src/xenia/kernel/modules/xboxkrnl/objects/xfile.cc index 4db262a47..d82c50910 100644 --- a/src/xenia/kernel/modules/xboxkrnl/objects/xfile.cc +++ b/src/xenia/kernel/modules/xboxkrnl/objects/xfile.cc @@ -25,3 +25,8 @@ XFile::XFile(KernelState* kernel_state, FileEntry* entry) : XFile::~XFile() { } + +X_STATUS XFile::Read(void* buffer, size_t buffer_length, size_t byte_offset, + XAsyncRequest* request) { + return X_STATUS_ACCESS_DENIED; +} diff --git a/src/xenia/kernel/modules/xboxkrnl/objects/xfile.h b/src/xenia/kernel/modules/xboxkrnl/objects/xfile.h index 5cd7d3cce..b30ae4702 100644 --- a/src/xenia/kernel/modules/xboxkrnl/objects/xfile.h +++ b/src/xenia/kernel/modules/xboxkrnl/objects/xfile.h @@ -14,6 +14,7 @@ #include #include +#include namespace xe { @@ -26,6 +27,9 @@ public: XFile(KernelState* kernel_state, fs::FileEntry* entry); virtual ~XFile(); + X_STATUS Read(void* buffer, size_t buffer_length, size_t byte_offset, + XAsyncRequest* request); + private: fs::FileEntry* entry_; }; diff --git a/src/xenia/kernel/modules/xboxkrnl/sources.gypi b/src/xenia/kernel/modules/xboxkrnl/sources.gypi index 2cf0db113..4cdca38cd 100644 --- a/src/xenia/kernel/modules/xboxkrnl/sources.gypi +++ b/src/xenia/kernel/modules/xboxkrnl/sources.gypi @@ -1,6 +1,8 @@ # Copyright 2013 Ben Vanik. All Rights Reserved. { 'sources': [ + 'async_request.cc', + 'async_request.h', 'kernel_state.cc', 'kernel_state.h', 'module.cc',