 b01aff70d2
			
		
	
	
		b01aff70d2
		
	
	
	
	
		
			
			libdriver. at_wini now queues messages it can't handle it receives when waiting for an interrupt. this way it can do receive(ANY) and timeouts should be working again (were broken for VFS, as with the advent of VFS, at_wini could get requests from a filesystem while it was waiting for an interrupt - as a hack, the receive() was changed to receive(HARDWARE)). Added mq.c to libdriver, and made libdriver an actual library that drivers link with -L../libdriver -ldriver. (So adding files, if necessary, is easier next time.)
		
			
				
	
	
		
			62 lines
		
	
	
		
			883 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			883 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| inet/mq.c
 | |
| 
 | |
| Created:	Jan 3, 1992 by Philip Homburg
 | |
| 
 | |
| Copyright 1995 Philip Homburg
 | |
| */
 | |
| 
 | |
| #include <ansi.h>
 | |
| #include <assert.h>
 | |
| 
 | |
| #include <minix/config.h>
 | |
| #include <minix/const.h>
 | |
| #include <minix/type.h>
 | |
| #include <minix/ipc.h>
 | |
| #include <minix/mq.h>
 | |
| 
 | |
| #define MQ_SIZE		128
 | |
| 
 | |
| PRIVATE mq_t mq_list[MQ_SIZE];
 | |
| PRIVATE mq_t *mq_freelist;
 | |
| 
 | |
| void mq_init()
 | |
| {
 | |
| 	int i;
 | |
| 
 | |
| 	mq_freelist= NULL;
 | |
| 	for (i= 0; i<MQ_SIZE; i++)
 | |
| 	{
 | |
| 		mq_list[i].mq_next= mq_freelist;
 | |
| 		mq_freelist= &mq_list[i];
 | |
| 		mq_list[i].mq_allocated= 0;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| mq_t *mq_get()
 | |
| {
 | |
| 	mq_t *mq;
 | |
| 
 | |
| 	mq= mq_freelist;
 | |
| 	assert(mq != NULL);
 | |
| 
 | |
| 	mq_freelist= mq->mq_next;
 | |
| 	mq->mq_next= NULL;
 | |
| 	assert(mq->mq_allocated == 0);
 | |
| 	mq->mq_allocated= 1;
 | |
| 	return mq;
 | |
| }
 | |
| 
 | |
| void mq_free(mq)
 | |
| mq_t *mq;
 | |
| {
 | |
| 	mq->mq_next= mq_freelist;
 | |
| 	mq_freelist= mq;
 | |
| 	assert(mq->mq_allocated == 1);
 | |
| 	mq->mq_allocated= 0;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * $PchId: mq.c,v 1.7 1998/10/23 20:10:47 philip Exp $
 | |
|  */
 |