diff --git a/sys/kern/subr_rman.c b/sys/kern/subr_rman.c index f5bfd5bc2c70..ce6592ea4d58 100644 --- a/sys/kern/subr_rman.c +++ b/sys/kern/subr_rman.c @@ -182,6 +182,16 @@ rman_manage_region(struct rman *rm, u_long start, u_long end) return 0; } +int +rman_init_from_resource(struct rman *rm, struct resource *r) +{ + int rv; + + if ((rv = rman_init(rm)) != 0) + return (rv); + return (rman_manage_region(rm, r->__r_i->r_start, r->__r_i->r_end)); +} + int rman_fini(struct rman *rm) { diff --git a/sys/sys/rman.h b/sys/sys/rman.h index e7831707ec35..ba06cc043cb6 100644 --- a/sys/sys/rman.h +++ b/sys/sys/rman.h @@ -35,7 +35,7 @@ #ifndef _KERNEL #include #else -#include +#include #include #endif @@ -129,6 +129,7 @@ void *rman_get_virtual(struct resource *); int rman_deactivate_resource(struct resource *r); int rman_fini(struct rman *rm); int rman_init(struct rman *rm); +int rman_init_from_resource(struct rman *rm, struct resource *r); uint32_t rman_make_alignment_flags(uint32_t size); int rman_manage_region(struct rman *rm, u_long start, u_long end); int rman_is_region_manager(struct resource *r, struct rman *rm);