//Sleep the process until the kernel passes it an interrupt message void waitForIRQ(unsigned int irq_number) { //Post a request to register the IRQ postMessage(0, KS_REG_IRQ_1 + (irq_number - 1), 0); //Get 'OK registered' message from kernel getMessageFrom(&temp_msg, 0, KS_REG_IRQ_1 + irq_number - 1); //Wait for interrupt message from kernel getMessageFrom(&temp_msg, 0, KS_REG_IRQ_1 + (irq_number - 1)); }
unsigned int getProcessCPUUsage(unsigned int pid) { postMessage(0, KS_GET_PROC_CPU_PCT, pid); getMessageFrom(&temp_msg, 0, KS_GET_PROC_CPU_PCT); return temp_msg.payload; }
unsigned int getCurrentPid() { postMessage(0, KS_GET_PID, 0); getMessageFrom(&temp_msg, 0, KS_GET_PID); return temp_msg.payload; }
unsigned int getNextPid() { unsigned int return_pid = 0; if(current_process == 256) return 0; while(!return_pid) { postMessage(0, KS_PID_FROM_SLOT, current_process); getMessageFrom(&temp_msg, 0, KS_PID_FROM_SLOT); return_pid = temp_msg.payload; if(current_process == 255) { if(return_pid) { break; } else { current_process++; return 0; } } else { current_process++; } } return return_pid; }
int startThread() { postMessage(0, KS_START_THREAD, 0); getMessageFrom(&temp_msg, 0, KS_START_THREAD); return temp_msg.payload; }
unsigned int registerIRQ(unsigned int irq_number) { //Post a request to register the IRQ postMessage(0, KS_REG_IRQ_1 + (irq_number - 1), 0); //Wait for the reply from the kernel getMessageFrom(&temp_msg, 0, KS_REG_IRQ_1 + irq_number - 1); //Tell the requester whether or not the registration succeeded return temp_msg.payload; }
int initMouse() { message temp_msg; //Get mouse provider from registrar //In the future, we should update registrar to enable the registration and detection //of multiples modules all providing the same service class so that if, for instance, //both the USB module and the PS2 module detect and register a mouse then we want to //subscribe to messages from both of them. Right now, we just get the first service //that was registered postMessage(REGISTRAR_PID, REG_LOOKUP, SVC_MOUSE); getMessage(&temp_msg); if(!(mouse_pid = temp_msg.payload)) return 0; //Send a 'register me' message to the provider postMessage(mouse_pid, MOUSE_REG_LISTENER, 1); getMessageFrom(&temp_msg, mouse_pid, MOUSE_REG_LISTENER); //After this, the client should be prepared to recieve mouse update messages in its message queue return temp_msg.payload; }
//Sleep the process until the kernel passes it an interrupt message void waitForIRQ(unsigned int irq_number) { getMessageFrom(&temp_msg, 0, KS_REG_IRQ_1 + (irq_number - 1)); }