Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Mar 2000 00:56:20 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Mike Smith <msmith@FreeBSD.ORG>, Warner Losh <imp@village.org>, Mike Smith <msmith@FreeBSD.ORG>, Daniel Eischen <eischen@vigrid.com>, nms@otdel-1.org, freebsd-current@FreeBSD.ORG
Subject:   Re: Is there spinlocks/semaphores available for drivers? 
Message-ID:  <200003270856.AAA37203@apollo.backplane.com>
References:  <200003270720.XAA05430@mass.cdrom.com> <200003270848.AAA37083@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help

SMP FIFO (one writer, one reader):

	#define SIZE	256
	#define MASK	(SIZE-1)

	int ri;
	int wi;
	int fifo[SIZE];

	int
	fifo_read(void)
	{
	    int r = -1;

	    if (ri != wi) {
		int nri;

		r = fifo[ri];
		nri = (ri + 1) & MASK;
		ri = nri;
	    }
	    return(r);
	}

	int
	fifo_write(int v)
	{
	    int nwi = (wi + 1) & MASK;

	    if (nwi != ri) {
		fifo[wi] = v;
		wi = nwi;
		return(0);
	    } else {
		return(-1);
	    }
	}

	int
	fifo_ready()
	{
	    return((wi - ri) & MASK)
	}

	int
	fifo_space()
	{
	    return(SIZE - nready() - 1);
	}




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003270856.AAA37203>