plan 9 kernel history: overview | file list | diff list

1995/0902/port/qio.c (diff list | history)

1995/0714/sys/src/9/port/qio.c:138,1441995/0902/sys/src/9/port/qio.c:138,146 (short | long | prev | next)
1993/0526    
} 
 
/* 
1994/0208    
 *  allocate queues and blocks (round data base address to 64 bit boundary) 
1995/0902    
 *  allocate blocks (round data base address to 64 bit boundary). 
 *  if mallocz gives us more than we asked for, leave room at the front 
 *  for header. 
1993/0526    
 */ 
Block* 
allocb(int size) 
1995/0714/sys/src/9/port/qio.c:145,1531995/0902/sys/src/9/port/qio.c:147,156
1993/0526    
{ 
	Block *b; 
1994/0208    
	ulong addr; 
1995/0902    
	int n; 
1993/0526    
 
1994/0322    
	size = sizeof(Block) + size + (BY2V-1); 
	b = mallocz(size, 0); 
1995/0902    
	n = sizeof(Block) + size + (BY2V-1); 
	b = mallocz(n, 0); 
1993/0526    
	if(b == 0) 
		exhausted("Blocks"); 
1994/0322    
	memset(b, 0, sizeof(Block)); 
1995/0714/sys/src/9/port/qio.c:155,1651995/0902/sys/src/9/port/qio.c:158,195
1994/0208    
	addr = (ulong)b; 
1994/0322    
	addr = ROUND(addr + sizeof(Block), BY2V); 
1994/0208    
	b->base = (uchar*)addr; 
1995/0902    
	b->lim = ((uchar*)b) + msize(b); 
1993/0804    
	b->rp = b->base; 
	b->wp = b->base; 
1994/0208    
	b->lim = ((uchar*)b) + size; 
1995/0902    
	n = b->lim - b->base - size; 
	b->rp += n & ~(BY2V-1); 
	b->wp = b->rp; 
1993/0526    
 
	return b; 
1995/0902    
} 
 
ulong bpadoverhead; 
 
/* 
 *  pad a block to the front 
 */ 
Block* 
bpad(Block *bp, int size) 
{ 
	int n; 
	Block *nbp; 
 
	if(bp->rp - bp->base > size) 
		return bp; 
 
	n = bp->wp - bp->rp; 
	bpadoverhead += n; 
	nbp = allocb(size+n); 
	nbp->rp += size; 
	nbp->wp = nbp->rp; 
	memmove(nbp->wp, bp->rp, n); 
	nbp->wp += n; 
	freeb(bp); 
	return nbp; 
1993/0526    
} 
 
/* 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)