Files
Espresso/drivers/ehci.c
2025-05-28 14:41:02 -05:00

30 lines
943 B
C

#include <stdint.h>
#define EHCI_BASE_ADDR 0xF0000000 // Example, your base address will be different
// EHCI Register Offsets (from EHCI spec)
#define EHCI_CAPLENGTH_OFFSET 0x00
#define EHCI_HCIVERSION_OFFSET 0x02
#define EHCI_CONTROL_OFFSET 0x04
#define EHCI_STATUS_OFFSET 0x08
#define EHCI_COMMAND_OFFSET 0x10
// Registers access
uint32_t read_ehci_register(uint32_t* base, uint32_t offset) {
return *(volatile uint32_t*)(base + offset);
}
void write_ehci_register(uint32_t* base, uint32_t offset, uint32_t value) {
*(volatile uint32_t*)(base + offset) = value;
}
// Initialize EHCI controller
void initialize_ehci(uint32_t* base) {
uint32_t control = read_ehci_register(base, EHCI_CONTROL_OFFSET);
control |= (1 << 1); // Enable controller
write_ehci_register(base, EHCI_CONTROL_OFFSET, control);
// Set up frame list pointer and other initialization steps as per EHCI specs
}