cleanup & disabled most debug output

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20357 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen
2007-03-08 17:40:40 +00:00
parent 1594e83f84
commit ce8185b383
8 changed files with 155 additions and 152 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2004-2006 Haiku, Inc.
* Copyright 2004-2007 Haiku, Inc.
* Distributed under the terms of the Haiku License.
*
* Authors (in chronological order):
@@ -8,7 +8,7 @@
* Marcus Overhagen <[email protected]>
*/
/*! PS/2 hid device driver */
/*! PS/2 bus manager */
#include <string.h>
@@ -41,7 +41,7 @@ ps2_read_data(void)
void
ps2_write_ctrl(uint8 ctrl)
{
TRACE(("ps2_write_ctrl 0x%02x\n", ctrl));
TRACE("ps2_write_ctrl 0x%02x\n", ctrl);
gIsa->write_io_8(PS2_PORT_CTRL, ctrl);
}
@@ -50,7 +50,7 @@ ps2_write_ctrl(uint8 ctrl)
void
ps2_write_data(uint8 data)
{
TRACE(("ps2_write_data 0x%02x\n", data));
TRACE("ps2_write_data 0x%02x\n", data);
gIsa->write_io_8(PS2_PORT_DATA, data);
}
@@ -99,7 +99,7 @@ ps2_flush(void)
if (!(ctrl & PS2_STATUS_OUTPUT_BUFFER_FULL))
break;
data = ps2_read_data();
dprintf("ps2: ps2_flush: ctrl 0x%02x, data 0x%02x (%s)\n", ctrl, data, (ctrl & PS2_STATUS_AUX_DATA) ? "aux" : "keyb");
TRACE("ps2: ps2_flush: ctrl 0x%02x, data 0x%02x (%s)\n", ctrl, data, (ctrl & PS2_STATUS_AUX_DATA) ? "aux" : "keyb");
snooze(100);
}
@@ -115,7 +115,7 @@ ps2_setup_command_byte()
uint8 cmdbyte;
res = ps2_command(PS2_CTRL_READ_CMD, NULL, 0, &cmdbyte, 1);
dprintf("ps2: get command byte: res 0x%08lx, cmdbyte 0x%02x\n", res, cmdbyte);
TRACE("ps2: get command byte: res 0x%08lx, cmdbyte 0x%02x\n", res, cmdbyte);
if (res != B_OK)
cmdbyte = 0x47;
@@ -123,7 +123,7 @@ ps2_setup_command_byte()
cmdbyte &= ~(PS2_BITS_KEYBOARD_DISABLED | PS2_BITS_MOUSE_DISABLED);
res = ps2_command(PS2_CTRL_WRITE_CMD, &cmdbyte, 1, NULL, 0);
dprintf("ps2: set command byte: res 0x%08lx, cmdbyte 0x%02x\n", res, cmdbyte);
TRACE("ps2: set command byte: res 0x%08lx, cmdbyte 0x%02x\n", res, cmdbyte);
return res;
}
@@ -165,27 +165,27 @@ ps2_setup_active_multiplexing(bool *enabled)
// MS Virtual PC, it's 0xa6. Since current active multiplexing
// specification version is 1.1 (0x11), we validate the data.
if (in > 0x9f) {
dprintf("ps2: active multiplexing v%d.%d detected, but ignored!\n", (in >> 4), in & 0xf);
TRACE("ps2: active multiplexing v%d.%d detected, but ignored!\n", (in >> 4), in & 0xf);
goto no_support;
}
dprintf("ps2: active multiplexing v%d.%d enabled\n", (in >> 4), in & 0xf);
INFO("ps2: active multiplexing v%d.%d enabled\n", (in >> 4), in & 0xf);
*enabled = true;
return B_OK;
no_support:
dprintf("ps2: active multiplexing not supported\n");
TRACE("ps2: active multiplexing not supported\n");
*enabled = false;
return B_OK;
fail:
dprintf("ps2: testing for active multiplexing failed\n");
TRACE("ps2: testing for active multiplexing failed\n");
*enabled = false;
// this should revert the controller into legacy mode,
// just in case it has switched to multiplexed mode
res = ps2_command(PS2_CTRL_SELF_TEST, NULL, 0, &out, 1);
if (res != B_OK || out != 0x55) {
dprintf("ps2: controller self test failed, status 0x%08lx, data 0x%02x\n", res, out);
INFO("ps2: controller self test failed, status 0x%08lx, data 0x%02x\n", res, out);
return B_ERROR;
}
return B_OK;
@@ -201,9 +201,9 @@ ps2_command(uint8 cmd, const uint8 *out, int out_count, uint8 *in, int in_count)
acquire_sem(gControllerSem);
atomic_add(&sIgnoreInterrupts, 1);
dprintf("ps2: ps2_command cmd 0x%02x, out %d, in %d\n", cmd, out_count, in_count);
TRACE("ps2: ps2_command cmd 0x%02x, out %d, in %d\n", cmd, out_count, in_count);
for (i = 0; i < out_count; i++)
dprintf("ps2: ps2_command out 0x%02x\n", out[i]);
TRACE("ps2: ps2_command out 0x%02x\n", out[i]);
res = ps2_wait_write();
if (res == B_OK)
@@ -214,7 +214,7 @@ ps2_command(uint8 cmd, const uint8 *out, int out_count, uint8 *in, int in_count)
if (res == B_OK)
ps2_write_data(out[i]);
else
dprintf("ps2: ps2_command out byte %d failed\n", i);
TRACE("ps2: ps2_command out byte %d failed\n", i);
}
for (i = 0; res == B_OK && i < in_count; i++) {
@@ -222,12 +222,12 @@ ps2_command(uint8 cmd, const uint8 *out, int out_count, uint8 *in, int in_count)
if (res == B_OK)
in[i] = ps2_read_data();
else
dprintf("ps2: ps2_command in byte %d failed\n", i);
TRACE("ps2: ps2_command in byte %d failed\n", i);
}
for (i = 0; i < in_count; i++)
dprintf("ps2: ps2_command in 0x%02x\n", in[i]);
dprintf("ps2: ps2_command result 0x%08lx\n", res);
TRACE("ps2: ps2_command in 0x%02x\n", in[i]);
TRACE("ps2: ps2_command result 0x%08lx\n", res);
atomic_add(&sIgnoreInterrupts, -1);
release_sem(gControllerSem);
@@ -252,7 +252,7 @@ ps2_interrupt(void* cookie)
return B_UNHANDLED_INTERRUPT;
if (atomic_get(&sIgnoreInterrupts)) {
TRACE(("ps2_interrupt: ignoring, ctrl 0x%02x (%s)\n", ctrl, (ctrl & PS2_STATUS_AUX_DATA) ? "aux" : "keyb"));
TRACE("ps2_interrupt: ignoring, ctrl 0x%02x (%s)\n", ctrl, (ctrl & PS2_STATUS_AUX_DATA) ? "aux" : "keyb");
return B_HANDLED_INTERRUPT;
}
@@ -263,15 +263,15 @@ ps2_interrupt(void* cookie)
if (gActiveMultiplexingEnabled) {
idx = ctrl >> 6;
error = (ctrl & 0x04) != 0;
TRACE(("ps2_interrupt: ctrl 0x%02x, data 0x%02x (mouse %d)\n", ctrl, data, idx));
TRACE("ps2_interrupt: ctrl 0x%02x, data 0x%02x (mouse %d)\n", ctrl, data, idx);
} else {
idx = 0;
error = (ctrl & 0xC0) != 0;
TRACE(("ps2_interrupt: ctrl 0x%02x, data 0x%02x (aux)\n", ctrl, data));
TRACE("ps2_interrupt: ctrl 0x%02x, data 0x%02x (aux)\n", ctrl, data);
}
dev = &ps2_device[PS2_DEVICE_MOUSE + idx];
} else {
TRACE(("ps2_interrupt: ctrl 0x%02x, data 0x%02x (keyb)\n", ctrl, data));
TRACE("ps2_interrupt: ctrl 0x%02x, data 0x%02x (keyb)\n", ctrl, data);
dev = &ps2_device[PS2_DEVICE_KEYB];
error = (ctrl & 0xC0) != 0;
@@ -297,7 +297,7 @@ ps2_init(void)
{
status_t status;
TRACE(("ps2: init\n"));
TRACE("ps2: init\n");
status = get_module(B_ISA_MODULE_NAME, (module_info **)&gIsa);
if (status < B_OK)
@@ -325,13 +325,13 @@ ps2_init(void)
status = ps2_setup_command_byte();
if (status) {
dprintf("ps2: setting up command byte failed\n");
INFO("ps2: setting up command byte failed\n");
goto err5;
}
status = ps2_setup_active_multiplexing(&gActiveMultiplexingEnabled);
if (status) {
dprintf("ps2: setting up active multiplexing failed\n");
INFO("ps2: setting up active multiplexing failed\n");
goto err5;
}
@@ -343,7 +343,7 @@ ps2_init(void)
ps2_service_notify_device_added(&ps2_device[PS2_DEVICE_MOUSE + 3]);
}
TRACE(("ps2_hid: init_driver done!\n"));
TRACE("ps2: init done!\n");
return B_OK;
@@ -358,7 +358,7 @@ err2:
err1:
delete_sem(gControllerSem);
put_module(B_ISA_MODULE_NAME);
TRACE(("ps2_hid: init_driver failed!\n"));
TRACE("ps2: init failed!\n");
return B_ERROR;
}
@@ -366,7 +366,7 @@ err1:
void
ps2_uninit(void)
{
TRACE(("ps2: uninit\n"));
TRACE("ps2: uninit\n");
remove_io_interrupt_handler(INT_PS2_MOUSE, &ps2_interrupt, NULL);
remove_io_interrupt_handler(INT_PS2_KEYBOARD, &ps2_interrupt, NULL);
ps2_service_exit();
@@ -1,8 +1,8 @@
/*
* Copyright 2004-2006 Haiku, Inc.
* Copyright 2004-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* PS/2 hid device driver
* PS/2 bus manager
*
* Authors (in chronological order):
* Elad Lahav ([email protected])
@@ -23,13 +23,19 @@
#include "ps2_dev.h"
// debug defines
#ifdef DEBUG
# define TRACE(x) dprintf x
#if 1
# define INFO(x...) dprintf(x)
#else
# define TRACE(x) ;
# define INFO(x...)
#endif
#if 0
# define TRACE(x...) dprintf(x)
#else
# define TRACE(x...)
#endif
// global variables
extern isa_module_info *gIsa;
+27 -27
View File
@@ -1,8 +1,8 @@
/*
* Copyright 2005-2006 Haiku, Inc.
* Copyright 2005-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* PS/2 hid device driver
* PS/2 bus manager
*
* Authors (in chronological order):
* Marcus Overhagen ([email protected])
@@ -61,7 +61,7 @@ void
ps2_dev_publish(ps2_dev *dev)
{
status_t status;
TRACE(("ps2_dev_publish %s\n", dev->name));
TRACE("ps2_dev_publish %s\n", dev->name);
if (dev->active)
return;
@@ -71,7 +71,7 @@ ps2_dev_publish(ps2_dev *dev)
status = devfs_publish_device(dev->name, NULL,
(atomic_get(&dev->flags) & PS2_FLAG_KEYB) ? &gKeyboardDeviceHooks : &gMouseDeviceHooks);
dprintf("ps2: devfs_publish_device %s, status = 0x%08lx\n", dev->name, status);
INFO("ps2: devfs_publish_device %s, status = 0x%08lx\n", dev->name, status);
}
@@ -79,7 +79,7 @@ void
ps2_dev_unpublish(ps2_dev *dev)
{
status_t status;
TRACE(("ps2_dev_unpublish %s\n", dev->name));
TRACE("ps2_dev_unpublish %s\n", dev->name);
if (!dev->active)
return;
@@ -91,7 +91,7 @@ ps2_dev_unpublish(ps2_dev *dev)
if ((dev->flags & PS2_FLAG_ENABLED) && dev->disconnect)
dev->disconnect(dev);
dprintf("ps2: devfs_unpublish_device %s, status = 0x%08lx\n", dev->name, status);
INFO("ps2: devfs_unpublish_device %s, status = 0x%08lx\n", dev->name, status);
}
@@ -112,7 +112,7 @@ ps2_dev_handle_int(ps2_dev *dev)
atomic_or(&dev->flags, PS2_FLAG_NACK);
} else if ((flags & PS2_FLAG_GETID) && (data == 0 || data == 3 || data == 4)) {
// workaround for broken mice that don't ack the "get id" command
dprintf("ps2: ps2_dev_handle_int: mouse didn't ack the 'get id' command\n");
TRACE("ps2: ps2_dev_handle_int: mouse didn't ack the 'get id' command\n");
atomic_or(&dev->flags, PS2_FLAG_ACK);
if (dev->result_buf_cnt) {
dev->result_buf[dev->result_buf_idx] = data;
@@ -124,8 +124,8 @@ ps2_dev_handle_int(ps2_dev *dev)
}
}
} else {
// dprintf("ps2: ps2_dev_handle_int unexpected data 0x%02x while waiting for ack\n", data);
dprintf("ps2: int1 %02x\n", data);
// TRACE("ps2: ps2_dev_handle_int unexpected data 0x%02x while waiting for ack\n", data);
TRACE("ps2: int1 %02x\n", data);
goto pass_to_handler;
}
release_sem_etc(dev->result_sem, cnt, B_DO_NOT_RESCHEDULE);
@@ -140,8 +140,8 @@ ps2_dev_handle_int(ps2_dev *dev)
return B_INVOKE_SCHEDULER;
}
} else {
// dprintf("ps2: ps2_dev_handle_int unexpected data 0x%02x during command processing\n", data);
dprintf("ps2: int2 %02x\n", data);
// TRACE("ps2: ps2_dev_handle_int unexpected data 0x%02x during command processing\n", data);
TRACE("ps2: int2 %02x\n", data);
goto pass_to_handler;
}
return B_HANDLED_INTERRUPT;
@@ -151,14 +151,14 @@ pass_to_handler:
if ((flags & PS2_FLAG_KEYB) == 0) {
if (dev->history[0].error && data == 0xfd) {
dprintf("ps2: hot removal of %s\n", dev->name);
INFO("ps2: hot removal of %s\n", dev->name);
ps2_service_notify_device_removed(dev);
return B_INVOKE_SCHEDULER;
}
if (data == 0x00 && dev->history[1].data == 0xaa && (dev->history[0].time - dev->history[1].time) < 50000) {
dprintf("ps2: hot plugin of %s\n", dev->name);
INFO("ps2: hot plugin of %s\n", dev->name);
if (dev->active) {
dprintf("ps2: device %s still active, removing...\n", dev->name);
TRACE("ps2: device %s still active, removing...\n", dev->name);
ps2_service_notify_device_removed(dev);
}
ps2_service_notify_device_added(dev);
@@ -167,9 +167,9 @@ pass_to_handler:
}
if (!dev->active) {
dprintf("ps2: %s not active, data 0x%02x dropped\n", dev->name, data);
TRACE("ps2: %s not active, data 0x%02x dropped\n", dev->name, data);
if (data != 0x00 && data != 0xaa) {
dprintf("ps2: possibly a hot plugin of %s\n", dev->name);
INFO("ps2: possibly a hot plugin of %s\n", dev->name);
ps2_service_notify_device_added(dev);
return B_INVOKE_SCHEDULER;
}
@@ -177,7 +177,7 @@ pass_to_handler:
}
if ((flags & PS2_FLAG_ENABLED) == 0) {
dprintf("ps2: %s not enabled, data 0x%02x dropped\n", dev->name, data);
TRACE("ps2: %s not enabled, data 0x%02x dropped\n", dev->name, data);
return B_HANDLED_INTERRUPT;
}
@@ -193,13 +193,13 @@ ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, int out_count, uint8
int32 sem_count;
int i;
dprintf("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 %d, in %d, dev %s\n", cmd, out_count, in_count, dev->name);
for (i = 0; i < out_count; i++)
dprintf("ps2: ps2_dev_command out 0x%02x\n", out[i]);
TRACE("ps2: ps2_dev_command out 0x%02x\n", out[i]);
res = get_sem_count(dev->result_sem, &sem_count);
if (res == B_OK && sem_count != 0) {
dprintf("ps2: ps2_dev_command: sem_count %ld, fixing!\n", sem_count);
TRACE("ps2: ps2_dev_command: sem_count %ld, fixing!\n", sem_count);
if (sem_count > 0)
acquire_sem_etc(dev->result_sem, sem_count, 0, 0);
else
@@ -245,17 +245,17 @@ ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, int out_count, uint8
start = system_time();
res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, 4000000);
dprintf("ps2: ps2_dev_command wait for ack res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
TRACE("ps2: ps2_dev_command wait for ack res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
if (res != B_OK)
break;
if (atomic_get(&dev->flags) & PS2_FLAG_ACK) {
dprintf("ps2: ps2_dev_command got ACK\n");
TRACE("ps2: ps2_dev_command got ACK\n");
}
if (atomic_get(&dev->flags) & PS2_FLAG_NACK) {
dprintf("ps2: ps2_dev_command got NACK\n");
TRACE("ps2: ps2_dev_command got NACK\n");
res = B_ERROR;
break;
}
@@ -265,18 +265,18 @@ ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, int out_count, uint8
if (res == B_OK && in_count != 0) {
start = system_time();
res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, 4000000);
dprintf("ps2: ps2_dev_command wait for input res 0x%08lx, wait-time %Ld\n", res, system_time() - start);
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) {
dprintf("ps2: ps2_dev_command error: %d input bytes not received\n", dev->result_buf_cnt);
TRACE("ps2: ps2_dev_command error: %d input bytes not received\n", dev->result_buf_cnt);
dev->result_buf_cnt = 0;
}
for (i = 0; i < in_count; i++)
dprintf("ps2: ps2_dev_command in 0x%02x\n", in[i]);
TRACE("ps2: ps2_dev_command in 0x%02x\n", in[i]);
}
dprintf("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);
@@ -1,8 +1,8 @@
/*
* Copyright 2005 Haiku, Inc.
* Copyright 2005-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* PS/2 hid device driver
* PS/2 bus manager
*
* Authors (in chronological order):
* Marcus Overhagen (marcus@overhagen.de)
@@ -1,5 +1,5 @@
/*
* Copyright 2004-2006 Haiku, Inc.
* Copyright 2004-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* Authors (in chronological order):
@@ -43,7 +43,7 @@ set_leds(led_info *ledInfo)
{
uint8 leds = 0;
TRACE(("ps2_hid: set keyboard LEDs\n"));
TRACE("ps2: set keyboard LEDs\n");
if (ledInfo->scroll_lock)
leds |= LED_SCROLL;
@@ -61,7 +61,7 @@ set_typematic(int32 rate, bigtime_t delay)
{
uint8 value;
dprintf("ps2: set_typematic rate %ld, delay %Ld\n", rate, delay);
TRACE("ps2: set_typematic rate %ld, delay %Ld\n", rate, delay);
// input server and keyboard preferences *seem* to use a range of 20-300
if (rate < 20)
@@ -101,11 +101,11 @@ keyboard_handle_int(ps2_dev *dev)
if (scancode == EXTENDED_KEY) {
sIsExtended = true;
TRACE(("Extended key\n"));
TRACE("Extended key\n");
return B_HANDLED_INTERRUPT;
}
TRACE(("scancode: %x\n", scancode));
TRACE("scancode: %x\n", scancode);
if (scancode & 0x80) {
keyInfo.is_keydown = false;
@@ -138,23 +138,23 @@ read_keyboard_packet(at_kbd_io *packet)
{
status_t status;
TRACE(("read_keyboard_packet()\n"));
TRACE("ps2: read_keyboard_packet\n");
status = acquire_sem_etc(sKeyboardSem, 1, B_CAN_INTERRUPT, 0);
if (status < B_OK)
return status;
if (!ps2_device[PS2_DEVICE_KEYB].active) {
dprintf("ps2: read_keyboard_packet, Error device no longer active\n");
TRACE("ps2: read_keyboard_packet, Error device no longer active\n");
return B_ERROR;
}
if (packet_buffer_read(sKeyBuffer, (uint8 *)packet, sizeof(*packet)) == 0) {
TRACE(("read_keyboard_packet(): error reading packet: %s\n", strerror(status)));
TRACE("ps2: read_keyboard_packet, Error reading packet: %s\n", strerror(status));
return B_ERROR;
}
TRACE(("scancode: %x, keydown: %s\n", packet->scancode, packet->is_keydown ? "true" : "false"));
TRACE("scancode: %x, keydown: %s\n", packet->scancode, packet->is_keydown ? "true" : "false");
return B_OK;
}
@@ -163,7 +163,7 @@ static void
ps2_keyboard_disconnect(ps2_dev *dev)
{
// the keyboard might not be opened at this point
dprintf("ps2: ps2_keyboard_disconnect %s\n", dev->name);
INFO("ps2: ps2_keyboard_disconnect %s\n", dev->name);
if (sKeyboardOpenMask)
release_sem(sKeyboardSem);
}
@@ -180,13 +180,13 @@ probe_keyboard(void)
// This test doesn't work relyable on some notebooks (it reports 0x03)
// status = ps2_command(PS2_CTRL_KEYBOARD_TEST, NULL, 0, &data, 1);
// if (status != B_OK || data != 0x00) {
// dprintf("ps2: keyboard test failed, status 0x%08lx, data 0x%02x\n", status, data);
// INFO("ps2: keyboard test failed, status 0x%08lx, data 0x%02x\n", status, data);
// return B_ERROR;
// }
status = ps2_dev_command(&ps2_device[PS2_DEVICE_KEYB], PS2_CMD_RESET, NULL, 0, &data, 1);
if (status != B_OK || data != 0xaa) {
dprintf("ps2: keyboard reset failed, status 0x%08lx, data 0x%02x\n", status, data);
INFO("ps2: keyboard reset failed, status 0x%08lx, data 0x%02x\n", status, data);
return B_ERROR;
}
@@ -199,7 +199,7 @@ probe_keyboard(void)
// On my notebook, the keyboard controller does NACK the echo command.
// status = ps2_dev_command(&ps2_device[PS2_DEVICE_KEYB], PS2_CMD_ECHO, NULL, 0, &data, 1);
// if (status != B_OK || data != 0xee) {
// dprintf("ps2: keyboard echo test failed, status 0x%08lx, data 0x%02x\n", status, data);
// INFO("ps2: keyboard echo test failed, status 0x%08lx, data 0x%02x\n", status, data);
// return B_ERROR;
// }
@@ -215,14 +215,14 @@ keyboard_open(const char *name, uint32 flags, void **_cookie)
{
status_t status;
dprintf("ps2: keyboard_open %s\n", name);
TRACE("ps2: keyboard_open %s\n", name);
if (atomic_or(&sKeyboardOpenMask, 1) != 0)
return B_BUSY;
status = probe_keyboard();
if (status != B_OK) {
dprintf("ps2: keyboard probing failed\n");
INFO("ps2: keyboard probing failed\n");
ps2_service_notify_device_removed(&ps2_device[PS2_DEVICE_KEYB]);
goto err1;
}
@@ -245,7 +245,7 @@ keyboard_open(const char *name, uint32 flags, void **_cookie)
atomic_or(&ps2_device[PS2_DEVICE_KEYB].flags, PS2_FLAG_ENABLED);
dprintf("ps2: keyboard_open %s success\n", name);
TRACE("ps2: keyboard_open %s success\n", name);
return B_OK;
err2:
@@ -253,7 +253,7 @@ err2:
err1:
atomic_and(&sKeyboardOpenMask, 0);
dprintf("ps2: keyboard_open %s failed\n", name);
TRACE("ps2: keyboard_open %s failed\n", name);
return status;
}
@@ -261,7 +261,7 @@ err1:
static status_t
keyboard_close(void *cookie)
{
TRACE(("keyboard_close()\n"));
TRACE("ps2: keyboard_close\n");
delete_packet_buffer(sKeyBuffer);
delete_sem(sKeyboardSem);
@@ -284,7 +284,7 @@ keyboard_freecookie(void *cookie)
static status_t
keyboard_read(void *cookie, off_t pos, void *buffer, size_t *_length)
{
TRACE(("keyboard read()\n"));
TRACE("ps2: keyboard read\n");
*_length = 0;
return B_NOT_ALLOWED;
}
@@ -293,7 +293,7 @@ keyboard_read(void *cookie, off_t pos, void *buffer, size_t *_length)
static status_t
keyboard_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
{
TRACE(("keyboard write()\n"));
TRACE("ps2: keyboard write\n");
*_length = 0;
return B_NOT_ALLOWED;
}
@@ -302,13 +302,13 @@ keyboard_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
static status_t
keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
{
TRACE(("keyboard ioctl()\n"));
TRACE("ps2: keyboard ioctl\n");
switch (op) {
case KB_READ:
{
at_kbd_io packet;
status_t status;
TRACE(("KB_READ\n"));
TRACE("ps2: KB_READ\n");
if ((status = read_keyboard_packet(&packet)) < B_OK)
return status;
return user_memcpy(buffer, &packet, sizeof(packet));
@@ -317,7 +317,7 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
case KB_SET_LEDS:
{
led_info info;
TRACE(("KB_SET_LEDS\n"));
TRACE("ps2: KB_SET_LEDS\n");
if (user_memcpy(&info, buffer, sizeof(led_info)) < B_OK)
return B_BAD_ADDRESS;
return set_leds(&info);
@@ -340,7 +340,7 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
int32 key_repeat_rate;
if (user_memcpy(&key_repeat_rate, buffer, sizeof(key_repeat_rate)) < B_OK)
return B_BAD_ADDRESS;
dprintf("ps2: KB_SET_KEY_REPEAT_RATE %ld\n", key_repeat_rate);
TRACE("ps2: KB_SET_KEY_REPEAT_RATE %ld\n", key_repeat_rate);
if (set_typematic(key_repeat_rate, sKeyboardRepeatDelay) < B_OK)
return B_ERROR;
sKeyboardRepeatRate = key_repeat_rate;
@@ -357,7 +357,7 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
bigtime_t key_repeat_delay;
if (user_memcpy(&key_repeat_delay, buffer, sizeof(key_repeat_delay)) < B_OK)
return B_BAD_ADDRESS;
dprintf("ps2: KB_SET_KEY_REPEAT_DELAY %Ld\n", key_repeat_delay);
TRACE("ps2: KB_SET_KEY_REPEAT_DELAY %Ld\n", key_repeat_delay);
if (set_typematic(sKeyboardRepeatRate, key_repeat_delay) < B_OK)
return B_ERROR;
sKeyboardRepeatDelay = key_repeat_delay;
@@ -374,11 +374,11 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
case KB_SET_CONTROL_ALT_DEL_TIMEOUT:
case KB_CANCEL_CONTROL_ALT_DEL:
case KB_DELAY_CONTROL_ALT_DEL:
TRACE(("ps2_hid: ioctl 0x%lx not implemented yet, returning B_OK\n", op));
INFO("ps2: ioctl 0x%lx not implemented yet, returning B_OK\n", op);
return B_OK;
default:
TRACE(("ps2_hid: invalid ioctl 0x%lx\n", op));
INFO("ps2: invalid ioctl 0x%lx\n", op);
return EINVAL;
}
}
+42 -45
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2001-2006 Haiku, Inc.
* Copyright 2001-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* PS/2 mouse device driver
@@ -46,13 +46,7 @@
*
* Interrupts:
* ~~~~~~~~~~
* The PS/2 mouse device is connected to interrupt 12, which means that
* it uses the second interrupt controller (handles INT8 to INT15). In
* order for this interrupt to be enabled, both the 5th interrupt of
* the second controller AND the 3rd interrupt of the first controller
* (cascade mode) should be unmasked.
* This is all done inside install_io_interrupt_handler(), no need to
* worry about it anymore
* The PS/2 mouse device is connected to interrupt 12.
* The controller uses 3 consecutive interrupts to inform the computer
* that it has new data. On the first the data register holds the status
* byte, on the second the X offset, and on the 3rd the Y offset.
@@ -94,17 +88,17 @@ ps2_reset_mouse(mouse_cookie *cookie)
uint8 data[2];
status_t status;
TRACE(("ps2_reset_mouse()\n"));
TRACE("ps2_reset_mouse\n");
status = ps2_dev_command(cookie->dev, PS2_CMD_RESET, NULL, 0, data, 2);
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("reset mouse failed, response was: 0x%02x 0x%02x\n", data[0], data[1]);
status = B_ERROR;
} else if (status != B_OK) {
TRACE(("reset mouse failed\n"));
TRACE("reset mouse failed\n");
} else {
TRACE(("reset mouse success\n"));
TRACE("reset mouse success\n");
}
return status;
@@ -151,7 +145,7 @@ ps2_packet_to_movement(mouse_cookie *cookie, uint8 packet[], mouse_movement *pos
}
}
// dprintf("packet: %02x %02x %02x %02x: xd %d, yd %d, 0x%x (%d), w-xd %d, w-yd %d\n",
// TRACE("packet: %02x %02x %02x %02x: xd %d, yd %d, 0x%x (%d), w-xd %d, w-yd %d\n",
// packet[0], packet[1], packet[2], packet[3],
// xDelta, yDelta, buttons, cookie->click_count, wheel_xdelta, wheel_ydelta);
@@ -165,8 +159,8 @@ ps2_packet_to_movement(mouse_cookie *cookie, uint8 packet[], mouse_movement *pos
pos->wheel_ydelta = (int)wheel_ydelta;
pos->wheel_xdelta = (int)wheel_xdelta;
TRACE(("xdelta: %d, ydelta: %d, buttons %x, clicks: %d, timestamp %Ld\n",
xDelta, yDelta, buttons, cookie->click_count, currentTime));
TRACE("xdelta: %d, ydelta: %d, buttons %x, clicks: %d, timestamp %Ld\n",
xDelta, yDelta, buttons, cookie->click_count, currentTime);
}
}
@@ -179,23 +173,23 @@ mouse_read_event(mouse_cookie *cookie, mouse_movement *movement)
uint8 packet[PS2_MAX_PACKET_SIZE];
status_t status;
TRACE(("mouse_read_event()\n"));
TRACE("ps2: mouse_read_event\n");
status = acquire_sem_etc(cookie->mouse_sem, 1, B_CAN_INTERRUPT, 0);
if (status < B_OK)
return status;
if (!cookie->dev->active) {
dprintf("ps2: mouse_read_event: Error device no longer active\n");
TRACE("ps2: mouse_read_event: Error device no longer active\n");
return B_ERROR;
}
if (packet_buffer_read(cookie->mouse_buffer, packet, cookie->packet_size) != cookie->packet_size) {
TRACE(("error copying buffer\n"));
TRACE("ps2: error copying buffer\n");
return B_ERROR;
}
if (!(packet[0] & 8))
panic("ps2_hid: got broken data from packet_buffer_read\n");
panic("ps2: got broken data from packet_buffer_read\n");
ps2_packet_to_movement(cookie, packet, movement);
return B_OK;
@@ -206,7 +200,7 @@ static void
ps2_mouse_disconnect(ps2_dev *dev)
{
// the mouse device might not be opened at this point
dprintf("ps2: ps2_mouse_disconnect %s\n", dev->name);
INFO("ps2: ps2_mouse_disconnect %s\n", dev->name);
if (dev->flags & PS2_FLAG_OPEN)
release_sem(((mouse_cookie *)dev->cookie)->mouse_sem);
}
@@ -225,7 +219,7 @@ mouse_handle_int(ps2_dev *dev)
const uint8 data = dev->history[0].data;
if (cookie->packet_index == 0 && !(data & 8)) {
TRACE(("bad mouse data, trying resync\n"));
TRACE("bad mouse data, trying resync\n");
return B_HANDLED_INTERRUPT;
}
@@ -259,17 +253,20 @@ probe_mouse(mouse_cookie *cookie, size_t *probed_packet_size)
status_t status;
uint8 deviceId = 0;
status = ps2_reset_mouse(cookie);
if (status != B_OK) {
INFO("ps2: probe_mouse reset failed\n");
return B_ERROR;
}
// get device id
status = ps2_dev_command(cookie->dev, PS2_CMD_GET_DEVICE_ID, NULL, 0, &deviceId, 1);
if (status != B_OK) {
TRACE(("probe_mouse(): get device id failed\n"));
INFO("ps2: probe_mouse get device id failed\n");
return B_ERROR;
}
TRACE(("probe_mouse(): device id: %2x\n", deviceId));
TRACE("ps2: probe_mouse device id: %2x\n", deviceId);
// check for MS Intellimouse
if (deviceId == 0) {
@@ -279,17 +276,17 @@ probe_mouse(mouse_cookie *cookie, size_t *probed_packet_size)
status |= ps2_set_sample_rate(cookie, 80);
status |= ps2_dev_command(cookie->dev, PS2_CMD_GET_DEVICE_ID, NULL, 0, &alternate_device_id, 1);
if (status == 0) {
TRACE(("probe_mouse(): alternate device id: %2x\n", alternate_device_id));
TRACE("ps2: probe_mouse alternate device id: %2x\n", alternate_device_id);
deviceId = alternate_device_id;
}
}
if (deviceId == PS2_DEV_ID_STANDARD) {
TRACE(("Standard PS/2 mouse found\n"));
INFO("ps2: probe_mouse Standard PS/2 mouse found\n");
if (probed_packet_size)
*probed_packet_size = PS2_PACKET_STANDARD;
} else if (deviceId == PS2_DEV_ID_INTELLIMOUSE) {
TRACE(("Extended PS/2 mouse found\n"));
INFO("ps2: probe_mouse Extended PS/2 mouse found\n");
if (probed_packet_size)
*probed_packet_size = PS2_PACKET_INTELLIMOUSE;
} else {
@@ -313,7 +310,7 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
status_t status;
int i;
dprintf("ps2: mouse_open %s\n", name);
TRACE("ps2: mouse_open %s\n", name);
for (dev = NULL, i = 0; i < PS2_DEVICE_COUNT; i++) {
if (0 == strcmp(ps2_device[i].name, name)) {
@@ -323,7 +320,7 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
}
if (dev == NULL) {
TRACE(("dev = NULL\n"));
TRACE("dev = NULL\n");
return B_ERROR;
}
@@ -344,14 +341,14 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
status = probe_mouse(cookie, &cookie->packet_size);
if (status != B_OK) {
TRACE(("probing mouse failed\n"));
INFO("ps2: probing mouse %s failed\n", name);
ps2_service_notify_device_removed(dev);
goto err1;
}
cookie->mouse_buffer = create_packet_buffer(MOUSE_HISTORY_SIZE * cookie->packet_size);
if (cookie->mouse_buffer == NULL) {
TRACE(("can't allocate mouse actions buffer\n"));
TRACE("can't allocate mouse actions buffer\n");
goto err2;
}
@@ -359,19 +356,19 @@ mouse_open(const char *name, uint32 flags, void **_cookie)
// the interrupt handler and the read operation
cookie->mouse_sem = create_sem(0, "ps2_mouse_sem");
if (cookie->mouse_sem < 0) {
TRACE(("failed creating PS/2 mouse semaphore!\n"));
TRACE("failed creating PS/2 mouse semaphore!\n");
goto err3;
}
status = ps2_dev_command(dev, PS2_CMD_ENABLE, NULL, 0, NULL, 0);
if (status < B_OK) {
TRACE(("mouse_open(): cannot enable PS/2 mouse\n"));
INFO("ps2: cannot enable mouse %s\n", name);
goto err4;
}
atomic_or(&dev->flags, PS2_FLAG_ENABLED);
dprintf("ps2: mouse_open %s success\n", name);
TRACE("ps2: mouse_open %s success\n", name);
return B_OK;
err4:
@@ -383,7 +380,7 @@ err2:
err1:
atomic_and(&dev->flags, ~PS2_FLAG_OPEN);
dprintf("ps2: mouse_open %s failed\n", name);
TRACE("ps2: mouse_open %s failed\n", name);
return B_ERROR;
}
@@ -393,7 +390,7 @@ mouse_close(void *_cookie)
{
mouse_cookie *cookie = _cookie;
dprintf("ps2: mouse_close %s\n", cookie->dev->name);
TRACE("ps2: mouse_close %s\n", cookie->dev->name);
ps2_dev_command(cookie->dev, PS2_CMD_DISABLE, NULL, 0, NULL, 0);
@@ -441,7 +438,7 @@ mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
case MS_NUM_EVENTS:
{
int32 count;
TRACE(("MS_NUM_EVENTS\n"));
TRACE("MS_NUM_EVENTS\n");
get_sem_count(cookie->mouse_sem, &count);
return count;
}
@@ -450,36 +447,36 @@ mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
{
mouse_movement movement;
status_t status;
TRACE(("MS_READ\n"));
TRACE("MS_READ\n");
if ((status = mouse_read_event(cookie, &movement)) < B_OK)
return status;
// dprintf("%s %d %d %d %d\n", cookie->dev->name,
// TRACE("%s %d %d %d %d\n", cookie->dev->name,
// movement.xdelta, movement.ydelta, movement.buttons, movement.clicks);
return user_memcpy(buffer, &movement, sizeof(movement));
}
case MS_SET_TYPE:
TRACE(("MS_SET_TYPE not implemented\n"));
TRACE("MS_SET_TYPE not implemented\n");
return B_BAD_VALUE;
case MS_SET_MAP:
TRACE(("MS_SET_MAP (set mouse mapping) not implemented\n"));
TRACE("MS_SET_MAP (set mouse mapping) not implemented\n");
return B_BAD_VALUE;
case MS_GET_ACCEL:
TRACE(("MS_GET_ACCEL (get mouse acceleration) not implemented\n"));
TRACE("MS_GET_ACCEL (get mouse acceleration) not implemented\n");
return B_BAD_VALUE;
case MS_SET_ACCEL:
TRACE(("MS_SET_ACCEL (set mouse acceleration) not implemented\n"));
TRACE("MS_SET_ACCEL (set mouse acceleration) not implemented\n");
return B_BAD_VALUE;
case MS_SET_CLICKSPEED:
TRACE(("MS_SETCLICK (set click speed)\n"));
TRACE("MS_SETCLICK (set click speed)\n");
return user_memcpy(&cookie->click_speed, buffer, sizeof(bigtime_t));
default:
TRACE(("unknown opcode: %ld\n", op));
TRACE("unknown opcode: %ld\n", op);
return B_BAD_VALUE;
}
}
@@ -1,8 +1,8 @@
/*
* Copyright 2005 Haiku, Inc.
* Copyright 2005-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* PS/2 hid device driver
* PS/2 bus manager
*
* Authors (in chronological order):
* Marcus Overhagen (marcus@overhagen.de)
@@ -33,7 +33,7 @@ ps2_service_notify_device_added(ps2_dev *dev)
{
ps2_service_cmd cmd;
TRACE(("ps2_service_notify_device_added %s\n", dev->name));
TRACE("ps2_service_notify_device_added %s\n", dev->name);
cmd.id = PS2_SERVICE_NOTIFY_DEVICE_ADDED;
cmd.dev = dev;
@@ -41,7 +41,7 @@ ps2_service_notify_device_added(ps2_dev *dev)
packet_buffer_write(sServiceCmdBuffer, (const uint8 *)&cmd, sizeof(cmd));
release_sem_etc(sServiceSem, 1, B_DO_NOT_RESCHEDULE);
TRACE(("ps2_service_notify_device_added done\n"));
TRACE("ps2_service_notify_device_added done\n");
}
@@ -50,7 +50,7 @@ ps2_service_notify_device_removed(ps2_dev *dev)
{
ps2_service_cmd cmd;
TRACE(("ps2_service_notify_device_removed %s\n", dev->name));
TRACE("ps2_service_notify_device_removed %s\n", dev->name);
cmd.id = PS2_SERVICE_NOTIFY_DEVICE_REMOVED;
cmd.dev = dev;
@@ -58,14 +58,14 @@ ps2_service_notify_device_removed(ps2_dev *dev)
packet_buffer_write(sServiceCmdBuffer, (const uint8 *)&cmd, sizeof(cmd));
release_sem_etc(sServiceSem, 1, B_DO_NOT_RESCHEDULE);
TRACE(("ps2_service_notify_device_removed done\n"));
TRACE("ps2_service_notify_device_removed done\n");
}
static int32
ps2_service_thread(void *arg)
{
TRACE(("ps2_service_thread started\n"));
TRACE("ps2_service_thread started\n");
for (;;) {
status_t status;
@@ -79,21 +79,21 @@ ps2_service_thread(void *arg)
packet_buffer_read(sServiceCmdBuffer, (uint8 *)&cmd, sizeof(cmd));
switch (cmd.id) {
case PS2_SERVICE_NOTIFY_DEVICE_ADDED:
TRACE(("PS2_SERVICE_NOTIFY_DEVICE_ADDED %s\n", cmd.dev->name));
TRACE("PS2_SERVICE_NOTIFY_DEVICE_ADDED %s\n", cmd.dev->name);
ps2_dev_publish(cmd.dev);
break;
case PS2_SERVICE_NOTIFY_DEVICE_REMOVED:
TRACE(("PS2_SERVICE_NOTIFY_DEVICE_REMOVED %s\n", cmd.dev->name));
TRACE("PS2_SERVICE_NOTIFY_DEVICE_REMOVED %s\n", cmd.dev->name);
ps2_dev_unpublish(cmd.dev);
break;
default:
TRACE(("PS2_SERVICE: unknown id %lu\n", cmd.id));
TRACE("PS2_SERVICE: unknown id %lu\n", cmd.id);
break;
}
} else {
dprintf("ps2_service_thread: Error, status 0x%08lx, terminating\n", status);
INFO("ps2_service_thread: Error, status 0x%08lx, terminating\n", status);
break;
}
}
@@ -104,7 +104,7 @@ ps2_service_thread(void *arg)
status_t
ps2_service_init(void)
{
TRACE(("ps2_service_init\n"));
TRACE("ps2_service_init\n");
sServiceCmdBuffer = create_packet_buffer(sizeof(ps2_service_cmd) * 50);
if (sServiceCmdBuffer == NULL)
goto err1;
@@ -116,7 +116,7 @@ ps2_service_init(void)
goto err3;
sServiceTerminate = false;
resume_thread(sServiceThread);
TRACE(("ps2_service_init done\n"));
TRACE("ps2_service_init done\n");
return B_OK;
err3:
@@ -124,7 +124,7 @@ err3:
err2:
delete_packet_buffer(sServiceCmdBuffer);
err1:
TRACE(("ps2_service_init failed\n"));
TRACE("ps2_service_init failed\n");
return B_ERROR;
}
@@ -132,7 +132,7 @@ err1:
void
ps2_service_exit(void)
{
TRACE(("ps2_service_exit\n"));
TRACE("ps2_service_exit\n");
sServiceTerminate = true;
release_sem(sServiceSem);
wait_for_thread(sServiceThread, NULL);
@@ -1,8 +1,8 @@
/*
* Copyright 2005 Haiku, Inc.
* Copyright 2005-2007 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* PS/2 hid device driver
* PS/2 bus manager
*
* Authors (in chronological order):
* Marcus Overhagen (marcus@overhagen.de)