From 40404d6a4b505c1df627581995a065aac0cb65bd Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Wed, 22 Sep 2004 07:01:41 +0000 Subject: [PATCH] Now uses the mouse_pos struct and commands definitions from kb_mouse_drivers.h. Added cbuf_adapter.h so that the ps2 mouse driver can be compiled also against BeOS R5's kernel (for testing). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9028 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/arch/x86/ps2mouse/Jamfile | 2 + .../drivers/arch/x86/ps2mouse/cbuf_adapter.h | 36 +++++++++++++ .../drivers/arch/x86/ps2mouse/ps2mouse.c | 51 +++++++++---------- .../drivers/arch/x86/ps2mouse/ps2mouse.h | 32 ------------ 4 files changed, 61 insertions(+), 60 deletions(-) create mode 100644 src/add-ons/kernel/drivers/arch/x86/ps2mouse/cbuf_adapter.h diff --git a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/Jamfile b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/Jamfile index 6f63f15a10..811c8e5938 100644 --- a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/Jamfile +++ b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/Jamfile @@ -1,5 +1,7 @@ SubDir OBOS_TOP src add-ons kernel drivers arch x86 ps2mouse ; +UsePrivateHeaders input ; + KernelObjects ps2mouse.c : diff --git a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/cbuf_adapter.h b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/cbuf_adapter.h new file mode 100644 index 0000000000..d3f322d774 --- /dev/null +++ b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/cbuf_adapter.h @@ -0,0 +1,36 @@ +#ifndef __CBUF_ADAPTER_H +#define __CBUF_ADAPTER_H + +#include + +struct cbuffer_t; +typedef struct cbuffer_t cbuffer; + +size_t cbuf_getn_no_lock(cbuffer *, char *, size_t); +size_t cbuf_putn_no_lock(cbuffer *, char *, size_t); +cbuffer *cbuf_init(size_t size); +void cbuf_delete(cbuffer *buffer); +char cbuf_get(cbuffer *); +bool cbuf_mt(cbuffer *); +bool cbuf_full(cbuffer *); +status_t cbuf_put(cbuffer *, char); +status_t cbuf_unput(cbuffer *); +void cbuf_flush(cbuffer *); +size_t cbuf_size(cbuffer *); +size_t cbuf_avail(cbuffer *); +size_t cbuf_free(cbuffer *); +size_t cbuf_putn(cbuffer *, char *, size_t num_bytes); +size_t cbuf_getn(cbuffer *, char *, size_t num_bytes); +cpu_status cbuf_lock(cbuffer *); +void cbuf_unlock(cbuffer *, cpu_status); + +#define cbuf cbuffer +#define cbuf_get_chain(size) cbuf_init(size) +#define cbuf_free_chain(chain) cbuf_delete(chain) +#define cbuf_memcpy_from_chain(dest, chain, offset, size) \ + (cbuf_getn(chain, dest, size) - size) +#define cbuf_memcpy_to_chain(chain, offset, source, size) \ + (cbuf_putn(chain, source, size) - size) + + +#endif 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 063037f505..e28e6efd13 100644 --- a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c +++ b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.c @@ -55,6 +55,8 @@ #include +#include + #include "ps2mouse.h" #define DEVICE_NAME "input/mouse/ps2/0" @@ -67,7 +69,7 @@ #endif #ifdef COMPILE_FOR_R5 - #include "cbuf_adapter.h" + #include "cbuf_adapter.h" #else #include #endif @@ -79,10 +81,11 @@ static isa_module_info *sIsa = NULL; static sem_id sMouseSem; static int32 sSync; static cbuf *sMouseChain; + static bigtime_t sLastClickTime; static bigtime_t sClickSpeed; -static uint32 sClickCount; -static uint32 sButtonsState; +static int32 sClickCount; +static int sButtonsState; ///////////////////////////////////////////////////////////////////////// // ps2 protocol stuff @@ -247,11 +250,11 @@ ps2_enable_mouse(bool enable) /** Converts a packet received by the mouse to a "movement". */ static void -packet_to_movement(uint8 packet[], mouse_movement *movement) +packet_to_movement(uint8 packet[], mouse_pos *pos) { - uint32 buttons = packet[0] & 7; - int32 xDelta = ((packet[0] & 0x10) ? 0xFFFFFF00 : 0) | packet[1]; - int32 yDelta = ((packet[0] & 0x20) ? 0xFFFFFF00 : 0) | packet[2]; + int buttons = packet[0] & 7; + int xDelta = ((packet[0] & 0x10) ? 0xFFFFFF00 : 0) | packet[1]; + int yDelta = ((packet[0] & 0x20) ? 0xFFFFFF00 : 0) | packet[2]; bigtime_t currentTime = system_time(); if (buttons != 0) { @@ -266,13 +269,13 @@ packet_to_movement(uint8 packet[], mouse_movement *movement) sLastClickTime = currentTime; sButtonsState = buttons; - if (movement) { - movement->xdelta = xDelta; - movement->ydelta = yDelta; - movement->buttons = buttons; - movement->click_count = sClickCount; - movement->mouse_mods = 0; - movement->mouse_time = currentTime; + if (pos) { + pos->xdelta = xDelta; + pos->ydelta = yDelta; + pos->buttons = buttons; + pos->clicks = sClickCount; + pos->modifiers = 0; + pos->time = currentTime; } } @@ -280,7 +283,7 @@ packet_to_movement(uint8 packet[], mouse_movement *movement) /** Read a mouse event from the mouse events chain buffer. */ static status_t -ps2_mouse_read(mouse_movement *movement) +ps2_mouse_read(mouse_pos *pos) { status_t status; uint8 packet[PS2_PACKET_SIZE]; @@ -296,7 +299,7 @@ ps2_mouse_read(mouse_movement *movement) return status; } - packet_to_movement(packet, movement); + packet_to_movement(packet, pos); return B_OK; } @@ -393,14 +396,6 @@ mouse_freecookie(void * cookie) } -/** Gets a mouse data packet. - * Parameters: - * cookie, ignored - * buf, pointer to a buffer that accepts the data - * pos, ignored - * len, buffer size, must be at least the size of the data packet - */ - static status_t mouse_read(void *cookie, off_t pos, void *buf, size_t *len) { @@ -420,18 +415,18 @@ mouse_write(void * cookie, off_t pos, const void *buf, size_t *len) static status_t mouse_ioctl(void *cookie, uint32 op, void *buf, size_t len) { - mouse_movement *movement = (mouse_movement *)buf; + mouse_pos *pos = (mouse_pos *)buf; switch (op) { - case MOUSE_GET_EVENTS_COUNT: + case MS_NUM_EVENTS: { int32 count; TRACE(("PS2_GET_EVENT_COUNT\n")); get_sem_count(sMouseSem, &count); return count; } - case MOUSE_GET_MOVEMENTS: + case MS_READ: TRACE(("PS2_GET_MOUSE_MOVEMENTS\n")); - return ps2_mouse_read(movement); + return ps2_mouse_read(pos); default: TRACE(("unknown opcode: %ld\n", op)); diff --git a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.h b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.h index 3f51fe0394..9aa7a7f1ac 100644 --- a/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.h +++ b/src/add-ons/kernel/drivers/arch/x86/ps2mouse/ps2mouse.h @@ -49,7 +49,6 @@ #define _KERNEL_ARCH_x86_PS2MOUSE_H #include -#include ///////////////////////////////////////////////////////////////////////// // definitions @@ -88,35 +87,4 @@ #define MOUSE_HISTORY_SIZE 256 -// TODO: Move these to another file, which will be -// included by every mouse driver, and also by the mouse -// input server addon. At least, that's the idea. - -// ioctls -enum { - MOUSE_GET_MOVEMENTS = 0x2773, - MOUSE_GET_EVENTS_COUNT = 0x2774, - MOUSE_GET_ACCELERATION = 0x2775, - MOUSE_SET_ACCELERATION = 0x2776, - MOUSE_SET_TYPE = 0x2778, - MOUSE_SET_MAP = 0x277A, - MOUSE_SET_CLICK_SPEED = 0x277C -} ioctls; - -/* - * mouse_movements: - * Passed as parameter of the MOUSE_GET_MOVEMENTS ioctl() call. - * (compatible with the R5 mouse addon/driver) - */ -typedef struct mouse_movement mouse_movement; -struct mouse_movement { - int32 ser_fd_index; - int32 buttons; - int32 xdelta; - int32 ydelta; - int32 click_count; - int32 mouse_mods; - int64 mouse_time; -}; - #endif /* _KERNEL_ARCH_x86_PS2MOUSE_H */