Artemis Milestone 2b complete: xHCI PCI discovery and BAR0 mapping
New src/starkernel/usb/ subsystem directory (added to both LOADER_SRCS_BASE and KERNEL_SRCS_BASE wildcards in Makefile.starkernel, matching the existing virtio/*.c pattern). xhci_find_and_map() locates the controller via the already-generic pci_find_first(), enables it, maps BAR0 via the already-generic pci_map_bar(), and fills in all four register-region pointers (cap/op/runtime/doorbell) plus max_slots/ max_ports/max_intrs from HCSPARAMS1 -- ready for controller bring-up (2c) to consume directly. No pci.c extension needed, per 2a's finding that PCI discovery here is ID-based lookup (already generic), not class-code scanning. Verified: clean standalone syntax check, full amd64 kernel build with zero warnings, live boot still reaches POST 1012/0/0 unaffected (nothing calls xhci_find_and_map() yet, so this is purely additive). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
94345c24b7
commit
5970c54912
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* xhci_driver.h — xHCI USB host controller driver public API for StarKernel
|
||||
*
|
||||
* Register-layout definitions live in xhci.h; this header is the driver's
|
||||
* own state and public entry points, matching virtio_blk.h's split.
|
||||
*/
|
||||
|
||||
#ifndef STARKERNEL_XHCI_DRIVER_H
|
||||
#define STARKERNEL_XHCI_DRIVER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "starkernel/pci.h"
|
||||
#include "starkernel/xhci.h"
|
||||
|
||||
/* Driver state for one xHCI controller instance. Only one controller is
|
||||
* supported (matches virtio_blk's single-device precedent). */
|
||||
typedef struct {
|
||||
PciDevice pci;
|
||||
uint64_t bar0_phys; /* physical MMIO base, BAR0 */
|
||||
xhci_cap_regs_t *cap; /* BAR0 + 0 */
|
||||
xhci_op_regs_t *op; /* BAR0 + cap->cap_length */
|
||||
xhci_runtime_regs_t *runtime; /* BAR0 + cap->rts_off */
|
||||
xhci_doorbell_t *doorbell; /* BAR0 + cap->db_off */
|
||||
uint32_t max_slots;
|
||||
uint32_t max_ports;
|
||||
uint32_t max_intrs;
|
||||
} xhci_dev_t;
|
||||
|
||||
/*
|
||||
* xhci_find_and_map — locate the xHCI controller on PCI bus 0, enable it
|
||||
* (I/O+MEM+bus-master), map its BAR0 MMIO region, and
|
||||
* fill in the four register-region pointers in *dev.
|
||||
*
|
||||
* dev must point to a zero-initialised xhci_dev_t.
|
||||
*
|
||||
* Returns 0 on success.
|
||||
* Returns -1 if no xHCI device was found on the PCI bus.
|
||||
* Returns -2 if the BAR0 mapping failed.
|
||||
*/
|
||||
int xhci_find_and_map(xhci_dev_t *dev);
|
||||
|
||||
#endif /* STARKERNEL_XHCI_DRIVER_H */
|
||||
Reference in New Issue
Block a user