Example #1
0
status_t
ps2_service_init(void)
{
	TRACE("ps2: ps2_service_init\n");
	sServiceCmdBuffer = create_packet_buffer(sizeof(ps2_service_cmd) * 50);
	if (sServiceCmdBuffer == NULL)
		goto err1;
	sServiceSem = create_sem(0, "ps2 service");
	if (sServiceSem < B_OK)
		goto err2;
	sServiceThread = spawn_kernel_thread(ps2_service_thread, "ps2 service", 20, NULL);
	if (sServiceThread < B_OK)
		goto err3;
	sServiceTerminate = false;
	resume_thread(sServiceThread);

#ifdef DEBUG_PUBLISHING
	add_debugger_command("ps2republish", &ps2_republish, "republish a ps2 device (0-3 mouse, 4 keyb (default))");
#endif

	TRACE("ps2: ps2_service_init done\n");
	return B_OK;

err3:
	delete_sem(sServiceSem);
err2:
	delete_packet_buffer(sServiceCmdBuffer);
err1:
	TRACE("ps2: ps2_service_init failed\n");
	return B_ERROR;
}
Example #2
0
void
ps2_service_exit(void)
{
	TRACE("ps2: ps2_service_exit enter\n");
	sServiceTerminate = true;
	release_sem(sServiceSem);
	wait_for_thread(sServiceThread, NULL);
	delete_sem(sServiceSem);
	delete_packet_buffer(sServiceCmdBuffer);
	TRACE("ps2: ps2_service_exit done\n");
}
Example #3
0
static status_t
keyboard_close(void *cookie)
{
	TRACE("ps2: keyboard_close enter\n");

	delete_packet_buffer(sKeyBuffer);
	delete_sem(sKeyboardSem);

	atomic_and(&ps2_device[PS2_DEVICE_KEYB].flags, ~PS2_FLAG_ENABLED);

	atomic_and(&sKeyboardOpenMask, 0);

	TRACE("ps2: keyboard_close done\n");
	return B_OK;
}
Example #4
0
static status_t
keyboard_close(void *_cookie)
{
	keyboard_cookie *cookie = (keyboard_cookie *)_cookie;

	TRACE("ps2: keyboard_close enter\n");

	if (atomic_add(&sKeyboardOpenCount, -1) == 1) {
		delete_packet_buffer(sKeyBuffer);
		delete_sem(sKeyboardSem);

		atomic_and(&ps2_device[PS2_DEVICE_KEYB].flags, ~PS2_FLAG_ENABLED);

		if (cookie->is_reader)
			sHasKeyboardReader = false;
		if (cookie->is_debugger)
			sHasDebugReader = false;
	}

	TRACE("ps2: keyboard_close done\n");
	return B_OK;
}