Example #1
0
/* test if a character is in the queue */
static int kbd_testc(struct stdio_dev *dev)
{
#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
	/* no ISR is used, so received chars must be polled */
	ps2ser_check();
#endif
	if(in_pointer==out_pointer)
		return(0); /* no data */
	else
		return(1);
}
void ps2mult_write_output(u_char val)
{
	int i;

	PRINTF_KEYB("write_output(0x%02x)\n", val);

	for (i = 0; i < KBD_TIMEOUT; i++) {
		if (!kbd_command_active && !mouse_command_active) {
			break;
		}
		udelay(1000);
		ps2ser_check();
	}

	if (kbd_command_active) {
		PRINTF("keyboard command not acknoledged\n");
		kbd_command_active = 0;
	}

	if (mouse_command_active) {
		PRINTF("mouse command not acknoledged\n");
		mouse_command_active = 0;
	}

	if (ctl_command_active) {
		switch (ctl_command_active) {
		case KBD_CCMD_WRITE_MODE:
			  /* Scan code conversion not supported */
			command_byte = val & ~KBD_MODE_KCC;
			break;

		case KBD_CCMD_WRITE_AUX_OBUF:
			ps2mult_receive_byte(val, PS2MULT_MS_SELECTOR);
			break;

		case KBD_CCMD_WRITE_MOUSE:
			ps2mult_send_byte(val, PS2MULT_MS_SELECTOR);
			break;

		default:
			PRINTF("invalid controller command\n");
			break;
		}

		ctl_command_active = 0;
		return;
	}

	ps2mult_send_byte(val, PS2MULT_KB_SELECTOR);
}
u_char ps2mult_read_input(void)
{
	u_char byte = 0;

	if (atomic_read(&ps2mult_buf_cnt) == 0) {
		ps2ser_check();
	}

	if (atomic_read(&ps2mult_buf_cnt)) {
		byte = ps2mult_buf[ps2mult_buf_out_idx++];
		ps2mult_buf_out_idx &= (PS2BUF_SIZE - 1);
		atomic_dec(&ps2mult_buf_cnt);
	}
	PRINTF_KEYB("read_input()=0x%02x\n", byte);
	return byte;
}
u_char ps2mult_read_status(void)
{
	u_char byte;

	if (atomic_read(&ps2mult_buf_cnt) == 0) {
		ps2ser_check();
	}

	if (atomic_read(&ps2mult_buf_cnt)) {
		byte = ps2mult_buf_status[ps2mult_buf_out_idx];
	} else {
		byte = KBD_STAT_DEFAULT;
	}
	PRINTF_KEYB("read_status()=0x%02x\n", byte);
	return byte;
}
Example #5
0
/* gets the character from the queue */
static int kbd_getc(struct stdio_dev *dev)
{
	char c;
	while(in_pointer==out_pointer) {
#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
	/* no ISR is used, so received chars must be polled */
	ps2ser_check();
#endif
	;}
	if((out_pointer+1)==KBD_BUFFER_LEN)
		out_pointer=0;
	else
		out_pointer++;
	c=kbd_buffer[out_pointer];
	return (int)c;

}
static int ps2mult_getc_w (void)
{
	int res = -1;
	int i;

	for (i = 0; i < KBD_TIMEOUT; i++) {
		if (ps2ser_check()) {
			res = ps2ser_getc();
			break;
		}
		udelay(1000);
	}

	switch (res) {
	case PS2MULT_KB_SELECTOR:
	case PS2MULT_MS_SELECTOR:
		received_selector = res;
		break;
	default:
		break;
	}

	return res;
}