87 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* A dummy task. Used to safely remove old tasks, and get notices if they get
 | |
|  * called by accident (i.e., because of some bug...).
 | |
|  * 
 | |
|  * Created:
 | |
|  *   Jul 27, 2004   by Jorrit N. Herder
 | |
|  */
 | |
| 
 | |
| #include "kernel.h" 
 | |
| #include "proc.h" 
 | |
| #include <minix/com.h>
 | |
| 
 | |
| /* Allocated space for the global variables. */
 | |
| message m_in;		/* the input message itself */
 | |
| message m_out;		/* the output message used for reply */
 | |
| int who;		/* caller's proc number */
 | |
| int callnr;		/* system call number */
 | |
| 
 | |
| /* Declare some local functions. */
 | |
| FORWARD _PROTOTYPE(void get_work, (void)				);
 | |
| FORWARD _PROTOTYPE(void reply, (int whom, int result)			);
 | |
| 
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *                             dummy_task                                    *
 | |
|  *===========================================================================*/
 | |
| PUBLIC void dummy_task()
 | |
| {
 | |
| /* This is the main routine of this service. In principle this should block
 | |
|  * forever on getting new work - the dummy task is not supposed to be called.
 | |
|  * If new work is received, somehow, diagnostics are printed.  
 | |
|  */
 | |
|     int result;                 
 | |
| 
 | |
|     /* kprintf("DUMMY: do nothing kernel task started (proc. nr %d).\n",
 | |
|     	proc_number(proc_ptr)); */
 | |
| 
 | |
|     /* Main loop - get work and do it, forever. */         
 | |
|     while (TRUE) {              
 | |
| 
 | |
|         /* Wait for incoming message, sets 'callnr' and 'who'. */
 | |
|         get_work();
 | |
| 
 | |
|         /* There is work to do! (re)set some variables first. */
 | |
|         result = EINVAL;	/* illegal send to dummy task */
 | |
| 
 | |
| 	/* Print diagnostics: this was not supposed to happen. */
 | |
| 	kprintf("Dummy task: request received from %d.\n", who);
 | |
| 
 | |
| 	/* Finally send reply message, unless disabled. */
 | |
| 	if (result != EDONTREPLY) {
 | |
| 	    reply(who, result);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *				   get_work                                  *
 | |
|  *===========================================================================*/
 | |
| PRIVATE void get_work()
 | |
| {
 | |
|     int status = 0;
 | |
|     status = receive(ANY, &m_in);   /* this blocks until message arrives */
 | |
|     if (OK != status)
 | |
|         kprintf("Dummy task failed to receive message: %d", status);
 | |
|     who = m_in.m_source;        /* message arrived! set sender */
 | |
|     callnr = m_in.m_type;       /* set function call number */
 | |
| }
 | |
| 
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *				reply					     *
 | |
|  *===========================================================================*/
 | |
| PRIVATE void reply(who, result)
 | |
| int who;                           	/* destination */
 | |
| int result;                           	/* report result to replyee */
 | |
| {
 | |
|     int send_status;
 | |
|     m_out.m_type = result;  		/* build reply message */
 | |
|     send_status = send(who, &m_out);    /* send the message */
 | |
|     if (OK != send_status)
 | |
|         kprintf("Dummy task unable to send reply: %d", send_status);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | 
