## diffname power/scsibuf.c 1992/1208
## diff -e /dev/null /n/bootesdump/1992/1208/sys/src/9/power/scsibuf.c
0a
#include "u.h"
#include "../port/lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "../port/error.h"
#include "io.h"
/*
* The following routines
* scsibufreset, scsibuf, scsifree and scsialloc
* provide a pool of buffers used for scsi i/o.
* This is simplistic at best, and opportunities for
* deadlock abound.
*/
#define Nbuf 2
struct {
Lock;
Scsibuf *free;
} scsibufalloc;
Scsibuf *
scsialloc(ulong n)
{
void *x;
Scsibuf *b;
if(n > 512*1024)
panic("scsialloc too big: %d", n);
b = xalloc(sizeof(Scsibuf));
x = xalloc(n);
b->phys = x;
b->virt = x;
return b;
}
void
scsibufreset(ulong datasize)
{
int i;
for(i = 0; i < Nbuf; i++)
scsifree(scsialloc(datasize));
}
/*
* get a scsi io buffer of DATASIZE size
*/
Scsibuf *
scsibuf(void)
{
Scsibuf *b;
for(;;) {
lock(&scsibufalloc);
b = scsibufalloc.free;
if(b != 0) {
scsibufalloc.free = b->next;
unlock(&scsibufalloc);
return b;
}
unlock(&scsibufalloc);
resrcwait(0);
}
return 0; /* not reached */
}
void
scsifree(Scsibuf *b)
{
lock(&scsibufalloc);
b->next = scsibufalloc.free;
scsibufalloc.free = b;
unlock(&scsibufalloc);
}
.
## diffname power/scsibuf.c 1992/1209
## diff -e /n/bootesdump/1992/1208/sys/src/9/power/scsibuf.c /n/bootesdump/1992/1209/sys/src/9/power/scsibuf.c
16c
#define Nbuf 32
.
## diffname power/scsibuf.c 1994/0513 # deleted
## diff -e /n/bootesdump/1992/1209/sys/src/9/power/scsibuf.c /n/fornaxdump/1994/0513/sys/src/brazil/power/scsibuf.c
1,79d
|