/*===========================================================================* * blockdriver_task * *===========================================================================*/ PUBLIC void blockdriver_task(struct blockdriver *bdp) { /* Main program of any block device driver task. */ int r, ipc_status; message mess; running = TRUE; /* Here is the main loop of the disk task. It waits for a message, carries * it out, and sends a reply. */ while (running) { if ((r = blockdriver_receive_mq(&mess, &ipc_status)) != OK) panic("blockdriver_receive_mq failed: %d", r); blockdriver_process(bdp, &mess, ipc_status); } }
/*===========================================================================* * main * *===========================================================================*/ int main(void) { message msg; int r, ipc_status; /* SEF local startup. */ sef_local_startup(); /* The receive loop. */ for (;;) { if ((r = driver_receive(ANY, &msg, &ipc_status)) != OK) panic("memory: driver_receive failed (%d)", r); if (IS_BDEV_RQ(msg.m_type)) blockdriver_process(&m_bdtab, &msg, ipc_status); else chardriver_process(&m_cdtab, CHARDRIVER_SYNC, &msg, ipc_status); } return(OK); }