/*
"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;
}