#include <arch/bitops.h>
#include <arch/irq.h>

/*
 *	Messy as we lack atomic bit operations on an 8086.
 */
 
int clear_bit(bit,addr)
int bit;
unsigned long *addr;
{
	int flags;
	unsigned long r;
	addr+=bit>>5;	/* shift down by 32 (8 bits/byte 4 bytes/word) */
	bit&=31;
	save_flags(flags);
	cli();
	r=*addr&(1<<bit);
	*addr^=r;	/* xor bit with itself is 0 */
	restore_flags(flags);
	if(r)
		return 1;
	return r;
}

int test_bit(bit,addr)
int bit;
unsigned long *addr;
{
	int flags;
	unsigned long r;
	addr+=bit>>5;	/* shift down by 32 (8 bits/byte 4 bytes/word) */
	bit&=31;
	save_flags(flags);
	cli();
	r=*addr&(1<<bit);
	restore_flags(flags);
	if(r)
		return 1;
	return r;
}

int set_bit(bit,addr)
int bit;
unsigned long *addr;
{
	int flags;
	int r;
	addr+=bit>>5;	/* shift down by 32 (8 bits/byte 4 bytes/word) */
	bit&=31;
	save_flags(flags);
	cli();
	r=*addr&(1<<bit);
	*addr|=(1<<bit);
	restore_flags(flags);
	if(r)
		return 1;
	return r;
}

int find_first_zero_bit()
{;}

