mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:17:45 +00:00
USB: Further Implement USB Structures
These are the actual structures that allow USB to work (i.e the ones actually defined in the specification). This should provide us enough of a baseline implementation that we can build on to support different types of USB device.
This commit is contained in:
parent
e044a3e428
commit
06f1edb516
16 changed files with 1037 additions and 89 deletions
|
@ -11,6 +11,8 @@
|
|||
|
||||
#include <AK/NonnullOwnPtr.h>
|
||||
#include <Kernel/Devices/USB/UHCIDescriptorTypes.h>
|
||||
#include <Kernel/Devices/USB/USBDevice.h>
|
||||
#include <Kernel/Devices/USB/USBTransfer.h>
|
||||
#include <Kernel/IO.h>
|
||||
#include <Kernel/PCI/Device.h>
|
||||
#include <Kernel/Process.h>
|
||||
|
@ -33,6 +35,8 @@ public:
|
|||
|
||||
void do_debug_transfer();
|
||||
|
||||
KResultOr<size_t> submit_control_transfer(Transfer& transfer);
|
||||
|
||||
private:
|
||||
UHCIController(PCI::Address, PCI::ID);
|
||||
|
||||
|
@ -58,6 +62,11 @@ private:
|
|||
|
||||
void create_structures();
|
||||
void setup_schedule();
|
||||
size_t poll_transfer_queue(QueueHead& transfer_queue);
|
||||
|
||||
TransferDescriptor* create_transfer_descriptor(Pipe& pipe, PacketID direction, size_t data_len);
|
||||
KResult create_chain(Pipe& pipe, PacketID direction, Ptr32<u8>& buffer_address, size_t max_size, size_t transfer_size, TransferDescriptor** td_chain, TransferDescriptor** last_td);
|
||||
void free_descriptor_chain(TransferDescriptor* first_descriptor);
|
||||
|
||||
QueueHead* allocate_queue_head() const;
|
||||
TransferDescriptor* allocate_transfer_descriptor() const;
|
||||
|
@ -78,7 +87,6 @@ private:
|
|||
OwnPtr<Region> m_framelist;
|
||||
OwnPtr<Region> m_qh_pool;
|
||||
OwnPtr<Region> m_td_pool;
|
||||
OwnPtr<Region> m_td_buffer_region;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue