rem: cbuf_memcpy_to_chain(sMouseChain, sSync, &read, sizeof(read));
add: while (packet_buffer_write(sMouseBuffer, &read, sizeof(read)) == 0) {  packet_buffer_flush(sMouseBuffer, sPacketSize); }
context: handle_mouse_interrupt(void* data){	int8 read;	//TRACE(("mouse interrupt occurred!!!\n"));		read = gIsa->read_io_8(PS2_PORT_CTRL);		if (read < 0) {		TRACE(("Interrupt was not generated by the ps2 mouse\n"));		return B_UNHANDLED_INTERRUPT;	}		read = read_data_byte();	TRACE(("mouse interrupt : byte %x\n", read));	cbuf_memcpy_to_chain(sMouseChain, sSync, &read, sizeof(read));		if (sSync == 0 && !(read & 8)) {		TRACE(("mouse resynched, bad data\n"));		return B_HANDLED_INTERRUPT;	}		if (++sSync == sPacketSize) {		TRACE(("mouse synched\n"));		sSync = 0;		release_sem_etc(sMouseSem, 1, B_DO_NOT_RESCHEDULE);				return B_INVOKE_SCHEDULER;	}		return B_HANDLED_INTERRUPT;}