diff --git a/Kernel/Bus/USB/USBTransfer.cpp b/Kernel/Bus/USB/USBTransfer.cpp index 82fb695e76..09a0959efb 100644 --- a/Kernel/Bus/USB/USBTransfer.cpp +++ b/Kernel/Bus/USB/USBTransfer.cpp @@ -10,21 +10,21 @@ namespace Kernel::USB { RefPtr Transfer::try_create(Pipe& pipe, u16 len) -{ - auto vmobject = Memory::AnonymousVMObject::try_create_physically_contiguous_with_size(PAGE_SIZE); - if (!vmobject) - return nullptr; - - return AK::try_create(pipe, len, *vmobject); -} - -Transfer::Transfer(Pipe& pipe, u16 len, Memory::AnonymousVMObject& vmobject) - : m_pipe(pipe) - , m_transfer_data_size(len) { // Initialize data buffer for transfer // This will definitely need to be refactored in the future, I doubt this will scale well... - m_data_buffer = MM.allocate_kernel_region_with_vmobject(vmobject, PAGE_SIZE, "USB Transfer Buffer", Memory::Region::Access::ReadWrite); + auto data_buffer = MM.allocate_kernel_region(PAGE_SIZE, "USB Transfer Buffer", Memory::Region::Access::ReadWrite); + if (!data_buffer) + return {}; + + return AK::try_create(pipe, len, data_buffer.release_nonnull()); +} + +Transfer::Transfer(Pipe& pipe, u16 len, NonnullOwnPtr data_buffer) + : m_pipe(pipe) + , m_data_buffer(move(data_buffer)) + , m_transfer_data_size(len) +{ } Transfer::~Transfer() diff --git a/Kernel/Bus/USB/USBTransfer.h b/Kernel/Bus/USB/USBTransfer.h index 9afead95e9..298bb38af7 100644 --- a/Kernel/Bus/USB/USBTransfer.h +++ b/Kernel/Bus/USB/USBTransfer.h @@ -23,7 +23,7 @@ public: public: Transfer() = delete; - Transfer(Pipe& pipe, u16 len, Memory::AnonymousVMObject&); + Transfer(Pipe& pipe, u16 len, NonnullOwnPtr); ~Transfer(); void set_setup_packet(const USBRequestData& request); @@ -41,11 +41,11 @@ public: bool error_occurred() const { return m_error_occurred; } private: - Pipe& m_pipe; // Pipe that initiated this transfer - USBRequestData m_request; // USB request - OwnPtr m_data_buffer; // DMA Data buffer for transaction - u16 m_transfer_data_size { 0 }; // Size of the transfer's data stage - bool m_complete { false }; // Has this transfer been completed? - bool m_error_occurred { false }; // Did an error occur during this transfer? + Pipe& m_pipe; // Pipe that initiated this transfer + USBRequestData m_request; // USB request + NonnullOwnPtr m_data_buffer; // DMA Data buffer for transaction + u16 m_transfer_data_size { 0 }; // Size of the transfer's data stage + bool m_complete { false }; // Has this transfer been completed? + bool m_error_occurred { false }; // Did an error occur during this transfer? }; }