git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16144 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen
2006-01-30 00:00:52 +00:00
parent acf395bb4b
commit 64faaed88a
6 changed files with 52 additions and 72 deletions
@@ -1,5 +1,5 @@
/* /*
* Copyright 2004-2005 Haiku, Inc. * Copyright 2004-2006 Haiku, Inc.
* Distributed under the terms of the Haiku License. * Distributed under the terms of the Haiku License.
* *
* common.c: * common.c:
@@ -7,6 +7,7 @@
* Authors (in chronological order): * Authors (in chronological order):
* Stefano Ceccherini ([email protected]) * Stefano Ceccherini ([email protected])
* Axel Dörfler, [email protected] * Axel Dörfler, [email protected]
* Marcus Overhagen <[email protected]>
*/ */
@@ -16,33 +17,6 @@
#include "ps2_service.h" #include "ps2_service.h"
#include "ps2_dev.h" #include "ps2_dev.h"
device_hooks sKeyboardDeviceHooks = {
keyboard_open,
keyboard_close,
keyboard_freecookie,
keyboard_ioctl,
keyboard_read,
keyboard_write,
NULL,
NULL,
NULL,
NULL
};
device_hooks sMouseDeviceHooks = {
mouse_open,
mouse_close,
mouse_freecookie,
mouse_ioctl,
mouse_read,
mouse_write,
NULL,
NULL,
NULL,
NULL
};
isa_module_info *gIsa = NULL; isa_module_info *gIsa = NULL;
static sem_id sKbcSem; static sem_id sKbcSem;
@@ -232,11 +206,11 @@ ps2_interrupt(void* cookie)
status_t status_t
ps2_init_driver(void) ps2_init(void)
{ {
status_t status; status_t status;
TRACE(("ps2_hid: init_driver\n")); TRACE(("ps2: init\n"));
status = get_module(B_ISA_MODULE_NAME, (module_info **)&gIsa); status = get_module(B_ISA_MODULE_NAME, (module_info **)&gIsa);
if (status < B_OK) if (status < B_OK)
@@ -349,9 +323,9 @@ err_1:
void void
ps2_uninit_driver(void) ps2_uninit(void)
{ {
TRACE(("ps2_hid: uninit_driver\n")); TRACE(("ps2: uninit\n"));
remove_io_interrupt_handler(INT_PS2_MOUSE, &ps2_interrupt, NULL); remove_io_interrupt_handler(INT_PS2_MOUSE, &ps2_interrupt, NULL);
remove_io_interrupt_handler(INT_PS2_KEYBOARD, &ps2_interrupt, NULL); remove_io_interrupt_handler(INT_PS2_KEYBOARD, &ps2_interrupt, NULL);
ps2_service_exit(); ps2_service_exit();
@@ -1,5 +1,5 @@
/* /*
* Copyright 2004-2005 Haiku, Inc. * Copyright 2004-2006 Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* PS/2 hid device driver * PS/2 hid device driver
@@ -8,6 +8,7 @@
* Elad Lahav ([email protected]) * Elad Lahav ([email protected])
* Stefano Ceccherini ([email protected]) * Stefano Ceccherini ([email protected])
* Axel Dörfler, [email protected] * Axel Dörfler, [email protected]
* Marcus Overhagen <[email protected]>
*/ */
#ifndef __PS2_COMMON_H #ifndef __PS2_COMMON_H
#define __PS2_COMMON_H #define __PS2_COMMON_H
@@ -32,15 +33,15 @@
// global variables // global variables
extern isa_module_info *gIsa; extern isa_module_info *gIsa;
extern device_hooks sKeyboardDeviceHooks; extern device_hooks gKeyboardDeviceHooks;
extern device_hooks sMouseDeviceHooks; extern device_hooks gMouseDeviceHooks;
extern bool gMultiplexingActive; extern bool gMultiplexingActive;
// prototypes from common.c // prototypes from common.c
status_t ps2_init_driver(void); status_t ps2_init(void);
void ps2_uninit_driver(void); void ps2_uninit(void);
extern status_t ps2_wait_read(); extern status_t ps2_wait_read();
extern status_t ps2_wait_write(); extern status_t ps2_wait_write();
@@ -66,19 +67,4 @@ extern status_t probe_keyboard(void);
extern int32 mouse_handle_int(ps2_dev *dev, uint8 data); extern int32 mouse_handle_int(ps2_dev *dev, uint8 data);
extern int32 keyboard_handle_int(uint8 data); extern int32 keyboard_handle_int(uint8 data);
extern status_t keyboard_open(const char *name, uint32 flags, void **cookie);
extern status_t keyboard_close(void *cookie);
extern status_t keyboard_freecookie(void *cookie);
extern status_t keyboard_read(void *cookie, off_t pos, void *buf, size_t *len);
extern status_t keyboard_write(void * cookie, off_t pos, const void *buf, size_t *len);
extern status_t keyboard_ioctl(void *cookie, uint32 op, void *buf, size_t len);
extern status_t mouse_open(const char *name, uint32 flags, void **cookie);
extern status_t mouse_close(void *cookie);
extern status_t mouse_freecookie(void *cookie);
extern status_t mouse_read(void *cookie, off_t pos, void *buf, size_t *len);
extern status_t mouse_write(void * cookie, off_t pos, const void *buf, size_t *len);
extern status_t mouse_ioctl(void *cookie, uint32 op, void *buf, size_t len);
#endif /* __PS2_COMMON_H */ #endif /* __PS2_COMMON_H */
@@ -66,7 +66,7 @@ ps2_dev_publish(ps2_dev *dev)
dev->active = true; dev->active = true;
status = devfs_publish_device(dev->name, NULL, status = devfs_publish_device(dev->name, NULL,
(dev->flags & PS2_FLAG_KEYB) ? &sKeyboardDeviceHooks : &sMouseDeviceHooks); (dev->flags & PS2_FLAG_KEYB) ? &gKeyboardDeviceHooks : &gMouseDeviceHooks);
TRACE(("devfs_publish_device %s, status = 0x%08x\n", dev->name, status)); TRACE(("devfs_publish_device %s, status = 0x%08x\n", dev->name, status));
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright 2004-2005 Haiku, Inc. * Copyright 2004-2006 Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* PS/2 keyboard device driver * PS/2 keyboard device driver
@@ -7,6 +7,7 @@
* Authors (in chronological order): * Authors (in chronological order):
* Stefano Ceccherini ([email protected]) * Stefano Ceccherini ([email protected])
* Axel Dörfler, [email protected] * Axel Dörfler, [email protected]
* Marcus Overhagen <[email protected]>
*/ */
@@ -16,7 +17,6 @@
#include <string.h> #include <string.h>
#define KEY_BUFFER_SIZE 100 #define KEY_BUFFER_SIZE 100
// we will buffer 100 key strokes before we start dropping them // we will buffer 100 key strokes before we start dropping them
@@ -199,7 +199,7 @@ probe_keyboard(void)
// #pragma mark - // #pragma mark -
status_t static status_t
keyboard_open(const char *name, uint32 flags, void **_cookie) keyboard_open(const char *name, uint32 flags, void **_cookie)
{ {
status_t status; status_t status;
@@ -240,29 +240,30 @@ err1:
} }
status_t static status_t
keyboard_close(void *cookie) keyboard_close(void *cookie)
{ {
TRACE(("keyboard_close()\n")); TRACE(("keyboard_close()\n"));
delete_packet_buffer(sKeyBuffer); delete_packet_buffer(sKeyBuffer);
delete_sem(sKeyboardSem); delete_sem(sKeyboardSem);
atomic_and(&ps2_device[PS2_DEVICE_KEYB].flags, ~PS2_FLAG_ENABLED);
atomic_and(&sKeyboardOpenMask, 0); atomic_and(&sKeyboardOpenMask, 0);
return B_OK; return B_OK;
} }
status_t static status_t
keyboard_freecookie(void *cookie) keyboard_freecookie(void *cookie)
{ {
return B_OK; return B_OK;
} }
status_t static status_t
keyboard_read(void *cookie, off_t pos, void *buffer, size_t *_length) keyboard_read(void *cookie, off_t pos, void *buffer, size_t *_length)
{ {
TRACE(("keyboard read()\n")); TRACE(("keyboard read()\n"));
@@ -271,7 +272,7 @@ keyboard_read(void *cookie, off_t pos, void *buffer, size_t *_length)
} }
status_t static status_t
keyboard_write(void *cookie, off_t pos, const void *buffer, size_t *_length) keyboard_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
{ {
TRACE(("keyboard write()\n")); TRACE(("keyboard write()\n"));
@@ -280,7 +281,7 @@ keyboard_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
} }
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(("keyboard ioctl()\n")); TRACE(("keyboard ioctl()\n"));
@@ -309,3 +310,12 @@ keyboard_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
return EINVAL; return EINVAL;
} }
} }
device_hooks gKeyboardDeviceHooks = {
keyboard_open,
keyboard_close,
keyboard_freecookie,
keyboard_ioctl,
keyboard_read,
keyboard_write,
};
@@ -29,10 +29,10 @@ std_ops(int32 op, ...)
{ {
switch(op) { switch(op) {
case B_MODULE_INIT: case B_MODULE_INIT:
return ps2_init_driver(); return ps2_init();
case B_MODULE_UNINIT: case B_MODULE_UNINIT:
ps2_uninit_driver(); ps2_uninit();
break; break;
default: default:
return B_ERROR; return B_ERROR;
@@ -1,5 +1,5 @@
/* /*
* Copyright 2001-2005 Haiku, Inc. * Copyright 2001-2006 Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* PS/2 mouse device driver * PS/2 mouse device driver
@@ -8,6 +8,7 @@
* Elad Lahav (elad@eldarshany.com) * Elad Lahav (elad@eldarshany.com)
* Stefano Ceccherini (burton666@libero.it) * Stefano Ceccherini (burton666@libero.it)
* Axel Dörfler, axeld@pinc-software.de * Axel Dörfler, axeld@pinc-software.de
* Marcus Overhagen <marcus@overhagen.de>
*/ */
/* /*
@@ -240,7 +241,8 @@ set_mouse_enabled(mouse_cookie *cookie, bool enable)
* calls to the handler, each holds a different byte on the data port. * calls to the handler, each holds a different byte on the data port.
*/ */
int32 mouse_handle_int(ps2_dev *dev, uint8 data) int32
mouse_handle_int(ps2_dev *dev, uint8 data)
{ {
mouse_cookie *cookie = dev->cookie; mouse_cookie *cookie = dev->cookie;
@@ -325,7 +327,7 @@ probe_mouse(mouse_cookie *cookie, size_t *probed_packet_size)
// Device functions // Device functions
status_t static status_t
mouse_open(const char *name, uint32 flags, void **_cookie) mouse_open(const char *name, uint32 flags, void **_cookie)
{ {
mouse_cookie *cookie; mouse_cookie *cookie;
@@ -403,7 +405,7 @@ err1:
} }
status_t static status_t
mouse_close(void *_cookie) mouse_close(void *_cookie)
{ {
mouse_cookie *cookie = _cookie; mouse_cookie *cookie = _cookie;
@@ -422,7 +424,7 @@ mouse_close(void *_cookie)
} }
status_t static status_t
mouse_freecookie(void *_cookie) mouse_freecookie(void *_cookie)
{ {
mouse_cookie *cookie = _cookie; mouse_cookie *cookie = _cookie;
@@ -431,7 +433,7 @@ mouse_freecookie(void *_cookie)
} }
status_t static status_t
mouse_read(void *cookie, off_t pos, void *buffer, size_t *_length) mouse_read(void *cookie, off_t pos, void *buffer, size_t *_length)
{ {
*_length = 0; *_length = 0;
@@ -439,7 +441,7 @@ mouse_read(void *cookie, off_t pos, void *buffer, size_t *_length)
} }
status_t static status_t
mouse_write(void *cookie, off_t pos, const void *buffer, size_t *_length) mouse_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
{ {
*_length = 0; *_length = 0;
@@ -447,7 +449,7 @@ mouse_write(void *cookie, off_t pos, const void *buffer, size_t *_length)
} }
status_t static status_t
mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length) mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
{ {
mouse_cookie *cookie = _cookie; mouse_cookie *cookie = _cookie;
@@ -491,3 +493,11 @@ mouse_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
} }
} }
device_hooks gMouseDeviceHooks = {
mouse_open,
mouse_close,
mouse_freecookie,
mouse_ioctl,
mouse_read,
mouse_write,
};