improved debug output
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20868 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -41,7 +41,7 @@ ps2_read_data(void)
|
|||||||
void
|
void
|
||||||
ps2_write_ctrl(uint8 ctrl)
|
ps2_write_ctrl(uint8 ctrl)
|
||||||
{
|
{
|
||||||
TRACE("ps2_write_ctrl 0x%02x\n", ctrl);
|
TRACE("ps2: ps2_write_ctrl 0x%02x\n", ctrl);
|
||||||
|
|
||||||
gIsa->write_io_8(PS2_PORT_CTRL, ctrl);
|
gIsa->write_io_8(PS2_PORT_CTRL, ctrl);
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@ ps2_write_ctrl(uint8 ctrl)
|
|||||||
void
|
void
|
||||||
ps2_write_data(uint8 data)
|
ps2_write_data(uint8 data)
|
||||||
{
|
{
|
||||||
TRACE("ps2_write_data 0x%02x\n", data);
|
TRACE("ps2: ps2_write_data 0x%02x\n", data);
|
||||||
|
|
||||||
gIsa->write_io_8(PS2_PORT_DATA, data);
|
gIsa->write_io_8(PS2_PORT_DATA, data);
|
||||||
}
|
}
|
||||||
@@ -259,7 +259,7 @@ ps2_interrupt(void* cookie)
|
|||||||
return B_UNHANDLED_INTERRUPT;
|
return B_UNHANDLED_INTERRUPT;
|
||||||
|
|
||||||
if (atomic_get(&sIgnoreInterrupts)) {
|
if (atomic_get(&sIgnoreInterrupts)) {
|
||||||
TRACE("ps2_interrupt: ignoring, ctrl 0x%02x (%s)\n", ctrl, (ctrl & PS2_STATUS_AUX_DATA) ? "aux" : "keyb");
|
TRACE("ps2: ps2_interrupt ignoring, ctrl 0x%02x (%s)\n", ctrl, (ctrl & PS2_STATUS_AUX_DATA) ? "aux" : "keyb");
|
||||||
return B_HANDLED_INTERRUPT;
|
return B_HANDLED_INTERRUPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,15 +270,15 @@ ps2_interrupt(void* cookie)
|
|||||||
if (gActiveMultiplexingEnabled) {
|
if (gActiveMultiplexingEnabled) {
|
||||||
idx = ctrl >> 6;
|
idx = ctrl >> 6;
|
||||||
error = (ctrl & 0x04) != 0;
|
error = (ctrl & 0x04) != 0;
|
||||||
TRACE("ps2_interrupt: ctrl 0x%02x, data 0x%02x (mouse %d)\n", ctrl, data, idx);
|
TRACE("ps2: ps2_interrupt ctrl 0x%02x, data 0x%02x (mouse %d)\n", ctrl, data, idx);
|
||||||
} else {
|
} else {
|
||||||
idx = 0;
|
idx = 0;
|
||||||
error = (ctrl & 0xC0) != 0;
|
error = (ctrl & 0xC0) != 0;
|
||||||
TRACE("ps2_interrupt: ctrl 0x%02x, data 0x%02x (aux)\n", ctrl, data);
|
TRACE("ps2: ps2_interrupt ctrl 0x%02x, data 0x%02x (aux)\n", ctrl, data);
|
||||||
}
|
}
|
||||||
dev = &ps2_device[PS2_DEVICE_MOUSE + idx];
|
dev = &ps2_device[PS2_DEVICE_MOUSE + idx];
|
||||||
} else {
|
} else {
|
||||||
TRACE("ps2_interrupt: ctrl 0x%02x, data 0x%02x (keyb)\n", ctrl, data);
|
TRACE("ps2: ps2_interrupt ctrl 0x%02x, data 0x%02x (keyb)\n", ctrl, data);
|
||||||
dev = &ps2_device[PS2_DEVICE_KEYB];
|
dev = &ps2_device[PS2_DEVICE_KEYB];
|
||||||
error = (ctrl & 0xC0) != 0;
|
error = (ctrl & 0xC0) != 0;
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ void
|
|||||||
ps2_dev_publish(ps2_dev *dev)
|
ps2_dev_publish(ps2_dev *dev)
|
||||||
{
|
{
|
||||||
status_t status;
|
status_t status;
|
||||||
TRACE("ps2_dev_publish %s\n", dev->name);
|
TRACE("ps2: ps2_dev_publish %s\n", dev->name);
|
||||||
|
|
||||||
if (dev->active)
|
if (dev->active)
|
||||||
return;
|
return;
|
||||||
@@ -79,7 +79,7 @@ void
|
|||||||
ps2_dev_unpublish(ps2_dev *dev)
|
ps2_dev_unpublish(ps2_dev *dev)
|
||||||
{
|
{
|
||||||
status_t status;
|
status_t status;
|
||||||
TRACE("ps2_dev_unpublish %s\n", dev->name);
|
TRACE("ps2: ps2_dev_unpublish %s\n", dev->name);
|
||||||
|
|
||||||
if (!dev->active)
|
if (!dev->active)
|
||||||
return;
|
return;
|
||||||
@@ -193,9 +193,9 @@ ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, int out_count, uint8
|
|||||||
int32 sem_count;
|
int32 sem_count;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
TRACE("ps2: ps2_dev_command cmd 0x%02x, out %d, in %d, dev %s\n", cmd, out_count, in_count, dev->name);
|
TRACE("ps2: ps2_dev_command cmd 0x%02x, out-count %d, in-count %d, dev %s\n", cmd, out_count, in_count, dev->name);
|
||||||
for (i = 0; i < out_count; i++)
|
for (i = 0; i < out_count; i++)
|
||||||
TRACE("ps2: ps2_dev_command out 0x%02x\n", out[i]);
|
TRACE("ps2: ps2_dev_command tx: 0x%02x\n", out[i]);
|
||||||
|
|
||||||
res = get_sem_count(dev->result_sem, &sem_count);
|
res = get_sem_count(dev->result_sem, &sem_count);
|
||||||
if (res == B_OK && sem_count != 0) {
|
if (res == B_OK && sem_count != 0) {
|
||||||
@@ -245,10 +245,11 @@ ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, int out_count, uint8
|
|||||||
|
|
||||||
start = system_time();
|
start = system_time();
|
||||||
res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, 4000000);
|
res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, 4000000);
|
||||||
TRACE("ps2: ps2_dev_command wait for ack res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
|
|
||||||
|
|
||||||
if (res != B_OK)
|
if (res != B_OK)
|
||||||
break;
|
atomic_and(&dev->flags, ~PS2_FLAG_CMD);
|
||||||
|
|
||||||
|
TRACE("ps2: ps2_dev_command wait for ack res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
|
||||||
|
|
||||||
if (atomic_get(&dev->flags) & PS2_FLAG_ACK) {
|
if (atomic_get(&dev->flags) & PS2_FLAG_ACK) {
|
||||||
TRACE("ps2: ps2_dev_command got ACK\n");
|
TRACE("ps2: ps2_dev_command got ACK\n");
|
||||||
@@ -256,30 +257,38 @@ ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, int out_count, uint8
|
|||||||
|
|
||||||
if (atomic_get(&dev->flags) & PS2_FLAG_NACK) {
|
if (atomic_get(&dev->flags) & PS2_FLAG_NACK) {
|
||||||
TRACE("ps2: ps2_dev_command got NACK\n");
|
TRACE("ps2: ps2_dev_command got NACK\n");
|
||||||
res = B_ERROR;
|
res = B_IO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res != B_OK)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res == B_OK && in_count != 0) {
|
|
||||||
start = system_time();
|
|
||||||
res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, 4000000);
|
|
||||||
TRACE("ps2: ps2_dev_command wait for input res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
|
|
||||||
|
|
||||||
if (dev->result_buf_cnt != 0) {
|
if (res == B_OK) {
|
||||||
TRACE("ps2: ps2_dev_command error: %d input bytes not received\n", dev->result_buf_cnt);
|
if (in_count == 0) {
|
||||||
dev->result_buf_cnt = 0;
|
atomic_and(&dev->flags, ~PS2_FLAG_CMD);
|
||||||
}
|
} else {
|
||||||
|
start = system_time();
|
||||||
|
res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, 4000000);
|
||||||
|
|
||||||
|
atomic_and(&dev->flags, ~PS2_FLAG_CMD);
|
||||||
|
|
||||||
|
if (dev->result_buf_cnt != 0) {
|
||||||
|
TRACE("ps2: ps2_dev_command error: %d rx bytes not received\n", dev->result_buf_cnt);
|
||||||
|
in_count -= dev->result_buf_cnt;
|
||||||
|
dev->result_buf_cnt = 0;
|
||||||
|
res = B_IO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("ps2: ps2_dev_command wait for input res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
|
||||||
|
|
||||||
for (i = 0; i < in_count; i++)
|
for (i = 0; i < in_count; i++)
|
||||||
TRACE("ps2: ps2_dev_command in 0x%02x\n", in[i]);
|
TRACE("ps2: ps2_dev_command rx: 0x%02x\n", in[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("ps2: ps2_dev_command result 0x%08lx\n", res);
|
TRACE("ps2: ps2_dev_command result 0x%08lx\n", res);
|
||||||
|
|
||||||
atomic_and(&dev->flags, ~PS2_FLAG_CMD);
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,11 +101,11 @@ keyboard_handle_int(ps2_dev *dev)
|
|||||||
|
|
||||||
if (scancode == EXTENDED_KEY) {
|
if (scancode == EXTENDED_KEY) {
|
||||||
sIsExtended = true;
|
sIsExtended = true;
|
||||||
TRACE("Extended key\n");
|
// TRACE("Extended key\n");
|
||||||
return B_HANDLED_INTERRUPT;
|
return B_HANDLED_INTERRUPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("scancode: %x\n", scancode);
|
// TRACE("scancode: %x\n", scancode);
|
||||||
|
|
||||||
if (scancode & 0x80) {
|
if (scancode & 0x80) {
|
||||||
keyInfo.is_keydown = false;
|
keyInfo.is_keydown = false;
|
||||||
@@ -138,7 +138,7 @@ read_keyboard_packet(at_kbd_io *packet)
|
|||||||
{
|
{
|
||||||
status_t status;
|
status_t status;
|
||||||
|
|
||||||
TRACE("ps2: read_keyboard_packet\n");
|
TRACE("ps2: read_keyboard_packet: enter\n");
|
||||||
|
|
||||||
status = acquire_sem_etc(sKeyboardSem, 1, B_CAN_INTERRUPT, 0);
|
status = acquire_sem_etc(sKeyboardSem, 1, B_CAN_INTERRUPT, 0);
|
||||||
if (status < B_OK)
|
if (status < B_OK)
|
||||||
@@ -154,7 +154,7 @@ read_keyboard_packet(at_kbd_io *packet)
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("scancode: %x, keydown: %s\n", packet->scancode, packet->is_keydown ? "true" : "false");
|
TRACE("ps2: read_keyboard_packet: scancode: %x, keydown: %s\n", packet->scancode, packet->is_keydown ? "true" : "false");
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,6 +227,8 @@ keyboard_open(const char *name, uint32 flags, void **_cookie)
|
|||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INFO("ps2: keyboard found\n");
|
||||||
|
|
||||||
sKeyboardSem = create_sem(0, "keyboard_sem");
|
sKeyboardSem = create_sem(0, "keyboard_sem");
|
||||||
if (sKeyboardSem < 0) {
|
if (sKeyboardSem < 0) {
|
||||||
status = sKeyboardSem;
|
status = sKeyboardSem;
|
||||||
@@ -261,7 +263,7 @@ err1:
|
|||||||
static status_t
|
static status_t
|
||||||
keyboard_close(void *cookie)
|
keyboard_close(void *cookie)
|
||||||
{
|
{
|
||||||
TRACE("ps2: keyboard_close\n");
|
TRACE("ps2: keyboard_close enter\n");
|
||||||
|
|
||||||
delete_packet_buffer(sKeyBuffer);
|
delete_packet_buffer(sKeyBuffer);
|
||||||
delete_sem(sKeyboardSem);
|
delete_sem(sKeyboardSem);
|
||||||
@@ -270,6 +272,7 @@ keyboard_close(void *cookie)
|
|||||||
|
|
||||||
atomic_and(&sKeyboardOpenMask, 0);
|
atomic_and(&sKeyboardOpenMask, 0);
|
||||||
|
|
||||||
|
TRACE("ps2: keyboard_close done\n");
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,13 +305,12 @@ keyboard_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
|
|||||||
static status_t
|
static status_t
|
||||||
keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
||||||
{
|
{
|
||||||
TRACE("ps2: keyboard ioctl\n");
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case KB_READ:
|
case KB_READ:
|
||||||
{
|
{
|
||||||
at_kbd_io packet;
|
at_kbd_io packet;
|
||||||
status_t status;
|
status_t status;
|
||||||
TRACE("ps2: KB_READ\n");
|
TRACE("ps2: ioctl KB_READ\n");
|
||||||
if ((status = read_keyboard_packet(&packet)) < B_OK)
|
if ((status = read_keyboard_packet(&packet)) < B_OK)
|
||||||
return status;
|
return status;
|
||||||
return user_memcpy(buffer, &packet, sizeof(packet));
|
return user_memcpy(buffer, &packet, sizeof(packet));
|
||||||
@@ -317,7 +319,7 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
case KB_SET_LEDS:
|
case KB_SET_LEDS:
|
||||||
{
|
{
|
||||||
led_info info;
|
led_info info;
|
||||||
TRACE("ps2: KB_SET_LEDS\n");
|
TRACE("ps2: ioctl KB_SET_LEDS\n");
|
||||||
if (user_memcpy(&info, buffer, sizeof(led_info)) < B_OK)
|
if (user_memcpy(&info, buffer, sizeof(led_info)) < B_OK)
|
||||||
return B_BAD_ADDRESS;
|
return B_BAD_ADDRESS;
|
||||||
return set_leds(&info);
|
return set_leds(&info);
|
||||||
@@ -325,12 +327,14 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
|
|
||||||
case KB_SET_KEY_REPEATING:
|
case KB_SET_KEY_REPEATING:
|
||||||
{
|
{
|
||||||
|
TRACE("ps2: ioctl KB_SET_KEY_REPEATING\n");
|
||||||
// 0xFA (Set All Keys Typematic/Make/Break) - Keyboard responds with "ack" (0xFA).
|
// 0xFA (Set All Keys Typematic/Make/Break) - Keyboard responds with "ack" (0xFA).
|
||||||
return ps2_dev_command(&ps2_device[PS2_DEVICE_KEYB], 0xfa, NULL, 0, NULL, 0);
|
return ps2_dev_command(&ps2_device[PS2_DEVICE_KEYB], 0xfa, NULL, 0, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
case KB_SET_KEY_NONREPEATING:
|
case KB_SET_KEY_NONREPEATING:
|
||||||
{
|
{
|
||||||
|
TRACE("ps2: ioctl KB_SET_KEY_NONREPEATING\n");
|
||||||
// 0xF8 (Set All Keys Make/Break) - Keyboard responds with "ack" (0xFA).
|
// 0xF8 (Set All Keys Make/Break) - Keyboard responds with "ack" (0xFA).
|
||||||
return ps2_dev_command(&ps2_device[PS2_DEVICE_KEYB], 0xf8, NULL, 0, NULL, 0);
|
return ps2_dev_command(&ps2_device[PS2_DEVICE_KEYB], 0xf8, NULL, 0, NULL, 0);
|
||||||
}
|
}
|
||||||
@@ -338,9 +342,9 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
case KB_SET_KEY_REPEAT_RATE:
|
case KB_SET_KEY_REPEAT_RATE:
|
||||||
{
|
{
|
||||||
int32 key_repeat_rate;
|
int32 key_repeat_rate;
|
||||||
|
TRACE("ps2: ioctl KB_SET_KEY_REPEAT_RATE\n");
|
||||||
if (user_memcpy(&key_repeat_rate, buffer, sizeof(key_repeat_rate)) < B_OK)
|
if (user_memcpy(&key_repeat_rate, buffer, sizeof(key_repeat_rate)) < B_OK)
|
||||||
return B_BAD_ADDRESS;
|
return B_BAD_ADDRESS;
|
||||||
TRACE("ps2: KB_SET_KEY_REPEAT_RATE %ld\n", key_repeat_rate);
|
|
||||||
if (set_typematic(key_repeat_rate, sKeyboardRepeatDelay) < B_OK)
|
if (set_typematic(key_repeat_rate, sKeyboardRepeatDelay) < B_OK)
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
sKeyboardRepeatRate = key_repeat_rate;
|
sKeyboardRepeatRate = key_repeat_rate;
|
||||||
@@ -349,15 +353,16 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
|
|
||||||
case KB_GET_KEY_REPEAT_RATE:
|
case KB_GET_KEY_REPEAT_RATE:
|
||||||
{
|
{
|
||||||
|
TRACE("ps2: ioctl KB_GET_KEY_REPEAT_RATE\n");
|
||||||
return user_memcpy(buffer, &sKeyboardRepeatRate, sizeof(sKeyboardRepeatRate));
|
return user_memcpy(buffer, &sKeyboardRepeatRate, sizeof(sKeyboardRepeatRate));
|
||||||
}
|
}
|
||||||
|
|
||||||
case KB_SET_KEY_REPEAT_DELAY:
|
case KB_SET_KEY_REPEAT_DELAY:
|
||||||
{
|
{
|
||||||
bigtime_t key_repeat_delay;
|
bigtime_t key_repeat_delay;
|
||||||
|
TRACE("ps2: ioctl KB_SET_KEY_REPEAT_DELAY\n");
|
||||||
if (user_memcpy(&key_repeat_delay, buffer, sizeof(key_repeat_delay)) < B_OK)
|
if (user_memcpy(&key_repeat_delay, buffer, sizeof(key_repeat_delay)) < B_OK)
|
||||||
return B_BAD_ADDRESS;
|
return B_BAD_ADDRESS;
|
||||||
TRACE("ps2: KB_SET_KEY_REPEAT_DELAY %Ld\n", key_repeat_delay);
|
|
||||||
if (set_typematic(sKeyboardRepeatRate, key_repeat_delay) < B_OK)
|
if (set_typematic(sKeyboardRepeatRate, key_repeat_delay) < B_OK)
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
sKeyboardRepeatDelay = key_repeat_delay;
|
sKeyboardRepeatDelay = key_repeat_delay;
|
||||||
@@ -367,6 +372,7 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
|
|
||||||
case KB_GET_KEY_REPEAT_DELAY:
|
case KB_GET_KEY_REPEAT_DELAY:
|
||||||
{
|
{
|
||||||
|
TRACE("ps2: ioctl KB_GET_KEY_REPEAT_DELAY\n");
|
||||||
return user_memcpy(buffer, &sKeyboardRepeatDelay, sizeof(sKeyboardRepeatDelay));
|
return user_memcpy(buffer, &sKeyboardRepeatDelay, sizeof(sKeyboardRepeatDelay));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,17 +88,17 @@ ps2_reset_mouse(mouse_cookie *cookie)
|
|||||||
uint8 data[2];
|
uint8 data[2];
|
||||||
status_t status;
|
status_t status;
|
||||||
|
|
||||||
TRACE("ps2_reset_mouse\n");
|
TRACE("ps2: ps2_reset_mouse\n");
|
||||||
|
|
||||||
status = ps2_dev_command(cookie->dev, PS2_CMD_RESET, NULL, 0, data, 2);
|
status = ps2_dev_command(cookie->dev, PS2_CMD_RESET, NULL, 0, data, 2);
|
||||||
|
|
||||||
if (status == B_OK && data[0] != 0xAA && data[1] != 0x00) {
|
if (status == B_OK && data[0] != 0xAA && data[1] != 0x00) {
|
||||||
TRACE("reset mouse failed, response was: 0x%02x 0x%02x\n", data[0], data[1]);
|
TRACE("ps2: reset mouse failed, response was: 0x%02x 0x%02x\n", data[0], data[1]);
|
||||||
status = B_ERROR;
|
status = B_ERROR;
|
||||||
} else if (status != B_OK) {
|
} else if (status != B_OK) {
|
||||||
TRACE("reset mouse failed\n");
|
TRACE("ps2: reset mouse failed\n");
|
||||||
} else {
|
} else {
|
||||||
TRACE("reset mouse success\n");
|
TRACE("ps2: reset mouse success\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@@ -159,7 +159,7 @@ ps2_packet_to_movement(mouse_cookie *cookie, uint8 packet[], mouse_movement *pos
|
|||||||
pos->wheel_ydelta = (int)wheel_ydelta;
|
pos->wheel_ydelta = (int)wheel_ydelta;
|
||||||
pos->wheel_xdelta = (int)wheel_xdelta;
|
pos->wheel_xdelta = (int)wheel_xdelta;
|
||||||
|
|
||||||
TRACE("xdelta: %d, ydelta: %d, buttons %x, clicks: %d, timestamp %Ld\n",
|
TRACE("ps2: ps2_packet_to_movement xdelta: %d, ydelta: %d, buttons %x, clicks: %d, timestamp %Ld\n",
|
||||||
xDelta, yDelta, buttons, cookie->click_count, currentTime);
|
xDelta, yDelta, buttons, cookie->click_count, currentTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,7 +219,7 @@ mouse_handle_int(ps2_dev *dev)
|
|||||||
const uint8 data = dev->history[0].data;
|
const uint8 data = dev->history[0].data;
|
||||||
|
|
||||||
if (cookie->packet_index == 0 && !(data & 8)) {
|
if (cookie->packet_index == 0 && !(data & 8)) {
|
||||||
TRACE("bad mouse data, trying resync\n");
|
TRACE("ps2: bad mouse data, trying resync\n");
|
||||||
return B_HANDLED_INTERRUPT;
|
return B_HANDLED_INTERRUPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,7 +290,7 @@ probe_mouse(mouse_cookie *cookie, size_t *probed_packet_size)
|
|||||||
if (probed_packet_size)
|
if (probed_packet_size)
|
||||||
*probed_packet_size = PS2_PACKET_INTELLIMOUSE;
|
*probed_packet_size = PS2_PACKET_INTELLIMOUSE;
|
||||||
} else {
|
} else {
|
||||||
// Something's wrong. Better quit
|
INFO("ps2: probe_mouse Something's wrong.\n");
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dev == NULL) {
|
if (dev == NULL) {
|
||||||
TRACE("dev = NULL\n");
|
TRACE("ps2: dev = NULL\n");
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,7 +348,7 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
|
|||||||
|
|
||||||
cookie->mouse_buffer = create_packet_buffer(MOUSE_HISTORY_SIZE * cookie->packet_size);
|
cookie->mouse_buffer = create_packet_buffer(MOUSE_HISTORY_SIZE * cookie->packet_size);
|
||||||
if (cookie->mouse_buffer == NULL) {
|
if (cookie->mouse_buffer == NULL) {
|
||||||
TRACE("can't allocate mouse actions buffer\n");
|
TRACE("ps2: can't allocate mouse actions buffer\n");
|
||||||
goto err2;
|
goto err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,7 +356,7 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
|
|||||||
// the interrupt handler and the read operation
|
// the interrupt handler and the read operation
|
||||||
cookie->mouse_sem = create_sem(0, "ps2_mouse_sem");
|
cookie->mouse_sem = create_sem(0, "ps2_mouse_sem");
|
||||||
if (cookie->mouse_sem < 0) {
|
if (cookie->mouse_sem < 0) {
|
||||||
TRACE("failed creating PS/2 mouse semaphore!\n");
|
TRACE("ps2: failed creating PS/2 mouse semaphore!\n");
|
||||||
goto err3;
|
goto err3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,7 +390,7 @@ mouse_close(void *_cookie)
|
|||||||
{
|
{
|
||||||
mouse_cookie *cookie = _cookie;
|
mouse_cookie *cookie = _cookie;
|
||||||
|
|
||||||
TRACE("ps2: mouse_close %s\n", cookie->dev->name);
|
TRACE("ps2: mouse_close %s enter\n", cookie->dev->name);
|
||||||
|
|
||||||
ps2_dev_command(cookie->dev, PS2_CMD_DISABLE, NULL, 0, NULL, 0);
|
ps2_dev_command(cookie->dev, PS2_CMD_DISABLE, NULL, 0, NULL, 0);
|
||||||
|
|
||||||
@@ -400,6 +400,7 @@ mouse_close(void *_cookie)
|
|||||||
atomic_and(&cookie->dev->flags, ~PS2_FLAG_OPEN);
|
atomic_and(&cookie->dev->flags, ~PS2_FLAG_OPEN);
|
||||||
atomic_and(&cookie->dev->flags, ~PS2_FLAG_ENABLED);
|
atomic_and(&cookie->dev->flags, ~PS2_FLAG_ENABLED);
|
||||||
|
|
||||||
|
TRACE("ps2: mouse_close %s done\n", cookie->dev->name);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,7 +439,7 @@ mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
|
|||||||
case MS_NUM_EVENTS:
|
case MS_NUM_EVENTS:
|
||||||
{
|
{
|
||||||
int32 count;
|
int32 count;
|
||||||
TRACE("MS_NUM_EVENTS\n");
|
TRACE("ps2: ioctl MS_NUM_EVENTS\n");
|
||||||
get_sem_count(cookie->mouse_sem, &count);
|
get_sem_count(cookie->mouse_sem, &count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@@ -447,7 +448,7 @@ mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
|
|||||||
{
|
{
|
||||||
mouse_movement movement;
|
mouse_movement movement;
|
||||||
status_t status;
|
status_t status;
|
||||||
TRACE("MS_READ\n");
|
TRACE("ps2: ioctl MS_READ\n");
|
||||||
if ((status = mouse_read_event(cookie, &movement)) < B_OK)
|
if ((status = mouse_read_event(cookie, &movement)) < B_OK)
|
||||||
return status;
|
return status;
|
||||||
// TRACE("%s %d %d %d %d\n", cookie->dev->name,
|
// TRACE("%s %d %d %d %d\n", cookie->dev->name,
|
||||||
@@ -456,27 +457,27 @@ mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case MS_SET_TYPE:
|
case MS_SET_TYPE:
|
||||||
TRACE("MS_SET_TYPE not implemented\n");
|
TRACE("ps2: ioctl MS_SET_TYPE not implemented\n");
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
case MS_SET_MAP:
|
case MS_SET_MAP:
|
||||||
TRACE("MS_SET_MAP (set mouse mapping) not implemented\n");
|
TRACE("ps2: ioctl MS_SET_MAP (set mouse mapping) not implemented\n");
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
case MS_GET_ACCEL:
|
case MS_GET_ACCEL:
|
||||||
TRACE("MS_GET_ACCEL (get mouse acceleration) not implemented\n");
|
TRACE("ps2: ioctl MS_GET_ACCEL (get mouse acceleration) not implemented\n");
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
case MS_SET_ACCEL:
|
case MS_SET_ACCEL:
|
||||||
TRACE("MS_SET_ACCEL (set mouse acceleration) not implemented\n");
|
TRACE("ps2: ioctl MS_SET_ACCEL (set mouse acceleration) not implemented\n");
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
case MS_SET_CLICKSPEED:
|
case MS_SET_CLICKSPEED:
|
||||||
TRACE("MS_SETCLICK (set click speed)\n");
|
TRACE("ps2: ioctl MS_SETCLICK (set click speed)\n");
|
||||||
return user_memcpy(&cookie->click_speed, buffer, sizeof(bigtime_t));
|
return user_memcpy(&cookie->click_speed, buffer, sizeof(bigtime_t));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
TRACE("unknown opcode: %ld\n", op);
|
TRACE("ps2: ioctl unknown mouse opcode: %ld\n", op);
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ ps2_service_notify_device_added(ps2_dev *dev)
|
|||||||
{
|
{
|
||||||
ps2_service_cmd cmd;
|
ps2_service_cmd cmd;
|
||||||
|
|
||||||
TRACE("ps2_service_notify_device_added %s\n", dev->name);
|
TRACE("ps2: ps2_service_notify_device_added %s\n", dev->name);
|
||||||
|
|
||||||
cmd.id = PS2_SERVICE_NOTIFY_DEVICE_ADDED;
|
cmd.id = PS2_SERVICE_NOTIFY_DEVICE_ADDED;
|
||||||
cmd.dev = dev;
|
cmd.dev = dev;
|
||||||
@@ -41,7 +41,7 @@ ps2_service_notify_device_added(ps2_dev *dev)
|
|||||||
packet_buffer_write(sServiceCmdBuffer, (const uint8 *)&cmd, sizeof(cmd));
|
packet_buffer_write(sServiceCmdBuffer, (const uint8 *)&cmd, sizeof(cmd));
|
||||||
release_sem_etc(sServiceSem, 1, B_DO_NOT_RESCHEDULE);
|
release_sem_etc(sServiceSem, 1, B_DO_NOT_RESCHEDULE);
|
||||||
|
|
||||||
TRACE("ps2_service_notify_device_added done\n");
|
TRACE("ps2: ps2_service_notify_device_added done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ ps2_service_notify_device_removed(ps2_dev *dev)
|
|||||||
{
|
{
|
||||||
ps2_service_cmd cmd;
|
ps2_service_cmd cmd;
|
||||||
|
|
||||||
TRACE("ps2_service_notify_device_removed %s\n", dev->name);
|
TRACE("ps2: ps2_service_notify_device_removed %s\n", dev->name);
|
||||||
|
|
||||||
cmd.id = PS2_SERVICE_NOTIFY_DEVICE_REMOVED;
|
cmd.id = PS2_SERVICE_NOTIFY_DEVICE_REMOVED;
|
||||||
cmd.dev = dev;
|
cmd.dev = dev;
|
||||||
@@ -58,14 +58,14 @@ ps2_service_notify_device_removed(ps2_dev *dev)
|
|||||||
packet_buffer_write(sServiceCmdBuffer, (const uint8 *)&cmd, sizeof(cmd));
|
packet_buffer_write(sServiceCmdBuffer, (const uint8 *)&cmd, sizeof(cmd));
|
||||||
release_sem_etc(sServiceSem, 1, B_DO_NOT_RESCHEDULE);
|
release_sem_etc(sServiceSem, 1, B_DO_NOT_RESCHEDULE);
|
||||||
|
|
||||||
TRACE("ps2_service_notify_device_removed done\n");
|
TRACE("ps2: ps2_service_notify_device_removed done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int32
|
static int32
|
||||||
ps2_service_thread(void *arg)
|
ps2_service_thread(void *arg)
|
||||||
{
|
{
|
||||||
TRACE("ps2_service_thread started\n");
|
TRACE("ps2: ps2_service_thread started\n");
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
status_t status;
|
status_t status;
|
||||||
@@ -79,21 +79,21 @@ ps2_service_thread(void *arg)
|
|||||||
packet_buffer_read(sServiceCmdBuffer, (uint8 *)&cmd, sizeof(cmd));
|
packet_buffer_read(sServiceCmdBuffer, (uint8 *)&cmd, sizeof(cmd));
|
||||||
switch (cmd.id) {
|
switch (cmd.id) {
|
||||||
case PS2_SERVICE_NOTIFY_DEVICE_ADDED:
|
case PS2_SERVICE_NOTIFY_DEVICE_ADDED:
|
||||||
TRACE("PS2_SERVICE_NOTIFY_DEVICE_ADDED %s\n", cmd.dev->name);
|
TRACE("ps2: PS2_SERVICE_NOTIFY_DEVICE_ADDED %s\n", cmd.dev->name);
|
||||||
ps2_dev_publish(cmd.dev);
|
ps2_dev_publish(cmd.dev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PS2_SERVICE_NOTIFY_DEVICE_REMOVED:
|
case PS2_SERVICE_NOTIFY_DEVICE_REMOVED:
|
||||||
TRACE("PS2_SERVICE_NOTIFY_DEVICE_REMOVED %s\n", cmd.dev->name);
|
TRACE("ps2: PS2_SERVICE_NOTIFY_DEVICE_REMOVED %s\n", cmd.dev->name);
|
||||||
ps2_dev_unpublish(cmd.dev);
|
ps2_dev_unpublish(cmd.dev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
TRACE("PS2_SERVICE: unknown id %lu\n", cmd.id);
|
TRACE("ps2: PS2_SERVICE: unknown id %lu\n", cmd.id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
INFO("ps2_service_thread: Error, status 0x%08lx, terminating\n", status);
|
INFO("ps2: ps2_service_thread: Error, status 0x%08lx, terminating\n", status);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ ps2_service_thread(void *arg)
|
|||||||
status_t
|
status_t
|
||||||
ps2_service_init(void)
|
ps2_service_init(void)
|
||||||
{
|
{
|
||||||
TRACE("ps2_service_init\n");
|
TRACE("ps2: ps2_service_init\n");
|
||||||
sServiceCmdBuffer = create_packet_buffer(sizeof(ps2_service_cmd) * 50);
|
sServiceCmdBuffer = create_packet_buffer(sizeof(ps2_service_cmd) * 50);
|
||||||
if (sServiceCmdBuffer == NULL)
|
if (sServiceCmdBuffer == NULL)
|
||||||
goto err1;
|
goto err1;
|
||||||
@@ -116,7 +116,7 @@ ps2_service_init(void)
|
|||||||
goto err3;
|
goto err3;
|
||||||
sServiceTerminate = false;
|
sServiceTerminate = false;
|
||||||
resume_thread(sServiceThread);
|
resume_thread(sServiceThread);
|
||||||
TRACE("ps2_service_init done\n");
|
TRACE("ps2: ps2_service_init done\n");
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|
||||||
err3:
|
err3:
|
||||||
@@ -124,7 +124,7 @@ err3:
|
|||||||
err2:
|
err2:
|
||||||
delete_packet_buffer(sServiceCmdBuffer);
|
delete_packet_buffer(sServiceCmdBuffer);
|
||||||
err1:
|
err1:
|
||||||
TRACE("ps2_service_init failed\n");
|
TRACE("ps2: ps2_service_init failed\n");
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,10 +132,11 @@ err1:
|
|||||||
void
|
void
|
||||||
ps2_service_exit(void)
|
ps2_service_exit(void)
|
||||||
{
|
{
|
||||||
TRACE("ps2_service_exit\n");
|
TRACE("ps2: ps2_service_exit enter\n");
|
||||||
sServiceTerminate = true;
|
sServiceTerminate = true;
|
||||||
release_sem(sServiceSem);
|
release_sem(sServiceSem);
|
||||||
wait_for_thread(sServiceThread, NULL);
|
wait_for_thread(sServiceThread, NULL);
|
||||||
delete_sem(sServiceSem);
|
delete_sem(sServiceSem);
|
||||||
delete_packet_buffer(sServiceCmdBuffer);
|
delete_packet_buffer(sServiceCmdBuffer);
|
||||||
|
TRACE("ps2: ps2_service_exit done\n");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user