From b0881688c368899e66e96d3f7936e1a88e0da757 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Mon, 27 Sep 2004 07:20:57 +0000 Subject: [PATCH] Now checks if the driver is already opened, and return B_BUSY if true. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9066 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c index 83525d9c69..070671159f 100644 --- a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c +++ b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c @@ -86,6 +86,7 @@ static bigtime_t sLastClickTime; static bigtime_t sClickSpeed; static int32 sClickCount; static int sButtonsState; +static int32 sOpenMask; ///////////////////////////////////////////////////////////////////////// // ps2 protocol stuff @@ -360,6 +361,9 @@ mouse_open(const char *name, uint32 flags, void **cookie) status_t status; TRACE(("mouse_open()\n")); + if (atomic_or(&sOpenMask, 1) != 0) + return B_BUSY; + *cookie = NULL; write_command_byte(PS2_CMD_DEV_INIT); @@ -386,6 +390,8 @@ mouse_close(void * cookie) remove_io_interrupt_handler(INT_PS2_MOUSE, &handle_mouse_interrupt, NULL); + atomic_and(&sOpenMask, 0); + return B_OK; } @@ -526,6 +532,8 @@ init_driver() set_sem_owner(sMouseSem, B_SYSTEM_TEAM); + sOpenMask = 0; + return B_OK; }