/* "bus_resources_portio.c" created by: grayspace aka J. Leveille for: UbixOS Project date: May 12, 2002 purpose: for port IO resource management $Id$ */ #include "../../grayspace-misc/gsdefines.h" #include "../../sys/include/misc/misc_bit_array.h" #include "../../sys/include/deviceman/bus_resources.h" /* checks a range of port addresses returns: - 1 if the range is comptetely empty - 0 otherwise */ int BUS_PORTIO_CheckRange( BUS_PORTIO_POOL * p_bpp, DWORDg baseaddr, DWORDg overaddr ) { BIT_ARRAY_RANGE_PARAMS rp; BIT_ARRAY_MAKERANGEPARAMS( rp, p_bpp->a_addrs, baseaddr, overaddr ); return BIT_ARRAY_IsRangeEmpty( &rp ); } /* allocates a range of port addresses returns: - 1 on success - 0 on failure */ int BUS_PORTIO_AllocateRange( BUS_PORTIO_POOL * p_bpp, DWORDg baseaddr, DWORDg overaddr ) { BIT_ARRAY_RANGE_PARAMS rp; BIT_ARRAY_MAKERANGEPARAMS( rp, p_bpp->a_addrs, baseaddr, overaddr ); /* check if this port range is free */ if( BIT_ARRAY_IsRangeEmpty( &rp ) ) { /* allocate it */ BIT_ARRAY_SetRange( &rp ); /* success */ return 1; } /* fail */ return 0; } /* frees a range of port addresses returns: - 1 if any port addresses in the range were allocated - 0 otherwise */ int BUS_PORTIO_FreeRange( BUS_PORTIO_POOL * p_bpp, DWORDg baseaddr, DWORDg overaddr ) { BIT_ARRAY_RANGE_PARAMS rp; BIT_ARRAY_MAKERANGEPARAMS( rp, p_bpp->a_addrs, baseaddr, overaddr ); /* check if this port range is free */ if( !BIT_ARRAY_IsRangeEmpty( &rp ) ) { /* free it */ BIT_ARRAY_ResetRange( &rp ); /* success */ return 1; } /* fail */ return 0; }