Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
init.cpp
Go to the documentation of this file.
1#include "ehci/ehci.hpp"
2#include "ioforge/ioforge.h"
3#include <ioforge/ioforge.hpp>
5
7
9
11
14 if (!device) {
15 return;
16 }
17 log(mod, "device found device 0x%x", device);
18
19 uintptr_t bar = device->bar[0].address;
20 log(mod, "bar : 0x%x", bar);
21 uint8_t cap_length = *(uint8_t*)(bar);
22 ehci_op = (struct ehci_operation*)(bar + cap_length);
23
26
27 ehci_op->frindex = 0;
28 ehci_op->ctrldssegment = 0;
29 ehci_op->usbcmd |= EHCI_1_MICRO_FRAME | (0b00 << 2);
30 ehci_op->configflag = 1;
31
34
35 hcsparam = (uint32_t*)(bar + 0x4);
36 hccparam = (uint32_t*)(bar + 0x8);
37
38 log(mod, "EHCI setup done");
39
41
42 serial2_printf("EHCI interrupt line: %d\n", device->interrupt_line);
43
44 auto curr_vector = IOUtils::isr_get_vector(device->interrupt_line);
45 serial2_printf("E1000 interrupt line: %d (%d)\n",
46 device->interrupt_line, curr_vector);
47
48 if (device->interrupt_line) {
49 auto vector = isr_irq_register(device->interrupt_line,
51 controller->irq = vector;
52 }
53
54 // detect all devices
55 probe();
56
57 ehci_op->usbsts = 0x3f;
58 ehci_op->usbintr = (1 << 0) | // USBINT
59 (1 << 1) | // USBERRINT
60 (1 << 2); // PORT CHANGE
61
62 log(mod, "Loaded Module");
63}
64
65extern "C" void send_async_c_wrapper(uint32_t addr, uint8_t endpoint,
66 uint32_t data_phys, size_t request_size,
67 uint32_t response_phys,
68 size_t response_size) {
69 instance.send_async_with_response(addr, endpoint, data_phys,
70 request_size, response_phys,
71 response_size);
72}
73
74__attribute__((constructor)) static void ehci_constructor() {
75 // registering controller
76 struct ioforge_usb_controller_service* usb_controller =
78 sizeof(struct ioforge_usb_controller_service));
79 usb_controller->service.type = IOFORGE_USB_CONTROLLER;
80
81 usb_controller->ops.send = send_async_c_wrapper;
82
83 IOForge::IOUtils::strcopy((char*)usb_controller->service.name,
84 (char*)"EHCI");
85
86 usb_controller->ops.send = send_async_c_wrapper;
87
88 instance.set_controller(usb_controller);
89
91}
static AHCIModule instance
Definition init.cpp:5
void load()
Definition init.cpp:12
void probe()
Definition ehci.cpp:284
void init_periodic()
Definition ehci.cpp:200
ehci_operation * ehci_op
Definition ehci.hpp:234
ioforge_pci_device * device
Definition ehci.hpp:233
void start_device()
Definition ehci.cpp:193
uint32_t * hcsparam
Definition ehci.hpp:235
static void fireHandler()
Definition ehci.cpp:868
uint32_t * hccparam
Definition ehci.hpp:236
void init_controller()
Definition ehci.cpp:33
ioforge_usb_controller_service * controller
Definition ehci.hpp:252
void reset_device()
Definition ehci.cpp:166
void stop_device()
Definition ehci.cpp:177
static EHCIModule * getInstance()
Definition init.cpp:10
EHCIModule()
Definition init.cpp:8
static void * alloc(size_t size)
Definition ioforge.hpp:39
static void strcopy(char *dst, char *src)
Definition ioforge.hpp:56
const char * mod
Definition ioforge.hpp:65
struct ioforge_pci_device * findDevice(uint16_t vendor_id, uint16_t device_id)
IOforgePCI(const char *mod)
volatile uint64_t addr
Definition e1000.hpp:0
void send_async_c_wrapper(uint32_t addr, uint8_t endpoint, uint32_t data_phys, size_t request_size, uint32_t response_phys, size_t response_size)
Definition init.cpp:65
#define EHCI_1_MICRO_FRAME
Definition ehci.hpp:33
#define EHCI_DEVICE_ID
Definition ehci.hpp:10
#define EHCI_VENDOR_ID
Definition ehci.hpp:9
typedef __attribute__
Definition msi.c:47
uint32_t isr_irq_register(uint8_t irq, void *handler)
void ioforge_attach(struct ioforge_device *parent, struct ioforge_device *child)
void serial2_printf(const char *fmt,...)
@ IOFORGE_USB_CONTROLLER
Definition ioforge.h:17
#define log(mod, fmt,...)
Definition ioforge.hpp:12
#define IoForgeModuleConstructor(Class)
Definition ioforge.hpp:7
struct ioforge_device * ioforge_get_usb_ctrl_root()
void(* send)(uint32_t addr, uint8_t endpoint, uint32_t data_phys, size_t request_size, uint32_t response_phys, size_t response_size)
Definition ioforge_usb.h:16
char name[64]
Definition ioforge.h:30
IoForgeType type
Definition ioforge.h:31
struct UsbControllerOp ops
Definition ioforge_usb.h:23
struct ioforge_device service
Definition ioforge_usb.h:22
unsigned int uint32_t
Definition type.h:19
unsigned long uintptr_t
Definition type.h:73
unsigned char uint8_t
Definition type.h:7
#define vector(T)
Definition vector.h:11
uint8_t bar
Definition virtio.h:4