35 for (
int i = 0; i < indent; i++)
64 memset(acpi_root, 0,
sizeof(*acpi_root));
109 parent->first_child->prev_sibling = child;
111 parent->first_child = child;
210 aligned_size, 0b111);
232 auto offset_paddr = paddr - paddr_base;
238 return vaddr + offset_paddr;
254 LOG2_INFO(
"IOFORGE",
"allocating irq on core %d = %d", core_id, irq);
264 LOG2_INFO(
"IOFORGE",
"registering irq %d on core %d", n, core_id);
271 auto curr_vector = curr_isr & 0xFF;
273 if (curr_isr & (
uint32_t) ~(1 << 16) || curr_vector != 0) {
275 LOG2_INFO(
"ISR",
"isr %d already used \n", curr_isr);
277 if (current_apic_id != core_id) {
279 "isr %d is used on another core, running on "
281 curr_isr, current_apic_id);
302 LOG2_INFO(
"IOFORGE",
"mapping isr %d on core %d", irq, core_id);
uint8_t get_current_core_cpuid()
uint16_t irq_alloc_entry(uint8_t core)
void irq_register(uint8_t core, int n, void *handler, boolean_t use_default_isr, uint16_t selector, uint8_t ist, uint8_t type_attr)
#define INTERRUPT_ATTR_KERNEL
uint32_t ioapic_isr_get_vector(uint8_t irq)
void vxIOAPICMapISR(uint8_t irq, uint8_t vector, uint8_t apic_id)
uint8_t ioapic_isr_get_apic_id(uint8_t irq)
static struct ioforge_device * usb_controller_root
static struct ioforge_device * root
bool ioforge_can_contain_pci(IoForgeType type)
static struct ioforge_device * block_devices_root
static struct ioforge_device * pci_root
static struct ioforge_device * usb_devices_root
uint8_t ioforge_get_current_core_id()
void * ioforge_alloc(size_t size)
void ioforge_memset(void *ptr, uint8_t value, size_t num)
uint32_t ioforge_isr_get_vector(uint8_t irq)
struct ioforge_device * ioforge_get_root()
void IOforgeStrCopy(char *dst, char *src)
void ioforge_map_isr(uint8_t irq, uint8_t vector)
struct ioforge_device * ioforge_find_by_name(struct ioforge_device *root, const char *name)
void print_device_tree(struct ioforge_device *node, int indent)
void ioforge_dma_free(void *paddr, void *vaddr, size_t size)
uint32_t isr_irq_register(uint8_t irq, void *handler)
void ioforge_free(void *ptr, size_t size)
void * ioforge_dma_alloc(size_t size, uintptr_t *paddr)
void ioforge_attach(struct ioforge_device *parent, struct ioforge_device *child)
void serial2_printf(const char *fmt,...)
void ioforge_sleep(uint32_t time)
uintptr_t IOforgeMMapPhys(uintptr_t paddr, size_t size)
struct ioforge_device * ioforge_get_pci_root()
struct ioforge_device * ioforge_get_block_devices_root()
void ioforge_memcpy(void *dst, void *src, size_t num)
void IOforgeStrnCopy(char *dst, char *src, size_t len)
uint16_t ioforge_irq_alloc_entry()
struct ioforge_pci_device * ioforge_find_pci_device(struct ioforge_device *node, uint16_t vendor_id, uint16_t device_id)
void ioforge_irq_register(uint8_t n, void *handler)
struct ioforge_device * ioforge_get_usb_devices_root()
struct ioforge_device * ioforge_get_usb_ctrl_root()
struct ioforge_pci_device pci
void kfree(void *ptr, size_t size)
void * kalloc(size_t size)
#define ALIGN_DOWN(x, align)
#define ALIGN_UP(x, align)
void paging_reload(page_t p)
page_t paging_get_highest_page_map(void)
void paging_unmap_fill(page_t page_dir, uint64_t virt, size_t size)
void vxMultipleMmap(page_t page_dir, uint64_t virt, uint64_t phys, uint64_t size, uint64_t flags)
void * phys_base_alloc(uint64_t block)
void vxPhysBaseFree(void *ptr, uint64_t size)
#define LOG2_INFO(mod, fmt,...)
int strncmp(const char *s1, const char *s2, size_t n)
void strcpy(char *dest, const char *src)
char * strncpy(char *dest, const char *src, size_t n)
void memset(void *ptr, int value, size_t num)
void memcopy(void *dest, void *src, size_t size)
struct ioforge_device * parent
struct ioforge_device * first_child
struct ioforge_device * prev_sibling
struct ioforge_device * next_sibling
struct ioforge_device base
const char serial_number[64]
void usleep(const uint64_t time_ns)
uintptr_t vma_lookup_free_vaddr(struct virtual_memory_page *page, mem_vma_region region, size_t size)
void vma_register(struct virtual_memory_page *page, uintptr_t phys_address, uintptr_t virt_addr, size_t size)
void vma_unregister(struct virtual_memory_page *page, uintptr_t virt_addr)
struct virtual_memory_page * get_kernel_vmm_page()