[Voyageurs] Add 10 trbs to the queue to handle rapid keypresses.
This commit is contained in:
parent
c5f8195255
commit
e6b232851e
|
@ -12,20 +12,26 @@ void Endpoint::Initialize(XhciEndpointContext* context) {
|
||||||
context_->tr_dequeue_ptr = trb_ring_->PhysicalAddress() | 1;
|
context_->tr_dequeue_ptr = trb_ring_->PhysicalAddress() | 1;
|
||||||
|
|
||||||
context_->error_and_type = (0x3 << 1) | (0x7 << 3) | (0x8 << 16);
|
context_->error_and_type = (0x3 << 1) | (0x7 << 3) | (0x8 << 16);
|
||||||
|
for (uint64_t i = 0; i < 10; i++) {
|
||||||
trb_ring_->EnqueueTrb({
|
trb_ring_->EnqueueTrb({
|
||||||
.parameter = recv_phys_,
|
.parameter = recv_phys_ + offset_,
|
||||||
.status = 8,
|
.status = 8,
|
||||||
.type_and_cycle = 1 | (1 << 2) | (1 << 5) | (1 << 10),
|
.type_and_cycle = 1 | (1 << 2) | (1 << 5) | (1 << 10),
|
||||||
.control = 0,
|
.control = 0,
|
||||||
});
|
});
|
||||||
|
offset_ += 8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Endpoint::TransferComplete(uint64_t trb_phys) {
|
void Endpoint::TransferComplete(uint64_t trb_phys) {
|
||||||
dbgln("Data: {x}", *(uint64_t*)recv_mem_.vaddr());
|
uint64_t phys_offset =
|
||||||
|
(trb_phys - trb_ring_->PhysicalAddress()) / sizeof(XhciTrb);
|
||||||
|
dbgln("Data: {x}", *((uint64_t*)recv_mem_.vaddr() + phys_offset));
|
||||||
trb_ring_->EnqueueTrb({
|
trb_ring_->EnqueueTrb({
|
||||||
.parameter = recv_phys_,
|
.parameter = recv_phys_ + offset_,
|
||||||
.status = 8,
|
.status = 8,
|
||||||
.type_and_cycle = 1 | (1 << 2) | (1 << 5) | (1 << 10),
|
.type_and_cycle = 1 | (1 << 2) | (1 << 5) | (1 << 10),
|
||||||
.control = 0,
|
.control = 0,
|
||||||
});
|
});
|
||||||
|
offset_ += 8;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,4 +23,5 @@ class Endpoint {
|
||||||
|
|
||||||
uint64_t recv_phys_;
|
uint64_t recv_phys_;
|
||||||
mmth::OwnedMemoryRegion recv_mem_;
|
mmth::OwnedMemoryRegion recv_mem_;
|
||||||
|
uint64_t offset_ = 0;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue