#ifndef ISA_H #define ISA_H #include #include #include #include int isa_bus_init(); struct bridge_to_isa; struct bridge_to_isa_ops; struct isa_drv_ops; struct isa_drv; typedef struct bridge_to_isa bridge_to_isa_t; typedef struct bridge_to_isa_ops bridge_to_isa_ops_t; typedef struct isa_drv_ops isa_drv_ops_t; typedef struct isa_drv isa_drv_t; struct isa_drv_ops { void (*probe)(bridge_to_isa_t *parent); }; struct isa_drv { const char *name; link_t link; isa_drv_ops_t *ops; }; struct bridge_to_isa { link_t link; void *data; bridge_to_isa_ops_t *ops; }; struct bridge_to_isa_ops { void * (*absolutize)(void *phys_addr); }; static inline bridge_to_isa_t * isa_alloc_bridge() { bridge_to_isa_t *bridge = (bridge_to_isa_t *)malloc(sizeof(bridge_to_isa_t)); link_initialize(&bridge->link); bridge->data = NULL; bridge->ops = NULL; return bridge; } static inline void isa_init_bridge(bridge_to_isa_t *bridge, bridge_to_isa_ops_t *ops, void *data) { bridge->data = data; bridge->ops = ops; } void isa_register_bridge(bridge_to_isa_t *bridge); void isa_register_driver(isa_drv_t *drv); #endif