svn commit: r269261 - user/jceel/soc2014_evdev/head/sys/dev/evdev
Jakub Wojciech Klama
jceel at FreeBSD.org
Tue Jul 29 21:16:37 UTC 2014
Author: jceel
Date: Tue Jul 29 21:16:35 2014
New Revision: 269261
URL: http://svnweb.freebsd.org/changeset/base/269261
Log:
Fix bitmap operations on big-endian machines so they are stored in same
way as on Linux (bitmaps arranged as arrays of unsigned longs). Silence
some compiler warnings apparently occuring when cross-compiling on MIPS.
Modified:
user/jceel/soc2014_evdev/head/sys/dev/evdev/cdev.c
user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c
user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h
user/jceel/soc2014_evdev/head/sys/dev/evdev/uinput.c
Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/cdev.c
==============================================================================
--- user/jceel/soc2014_evdev/head/sys/dev/evdev/cdev.c Tue Jul 29 21:15:26 2014 (r269260)
+++ user/jceel/soc2014_evdev/head/sys/dev/evdev/cdev.c Tue Jul 29 21:16:35 2014 (r269261)
@@ -446,7 +446,7 @@ evdev_ioctl(struct cdev *dev, u_long cmd
static int
evdev_ioctl_eviocgbit(struct evdev_dev *evdev, int type, int len, caddr_t data)
{
- uint32_t *bitmap;
+ unsigned long *bitmap;
int limit;
switch (type) {
@@ -499,7 +499,7 @@ evdev_ioctl_eviocgbit(struct evdev_dev *
*/
bzero(data, len);
- limit = howmany(limit, 8);
+ limit = nlongs(limit) * sizeof(unsigned long);
len = MIN(limit, len);
memcpy(data, bitmap, len);
return (0);
Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c
==============================================================================
--- user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c Tue Jul 29 21:15:26 2014 (r269260)
+++ user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c Tue Jul 29 21:16:35 2014 (r269261)
@@ -42,7 +42,6 @@
#include <dev/evdev/input.h>
#include <dev/evdev/evdev.h>
-#define DEBUG
#ifdef DEBUG
#define debugf(fmt, args...) printf("evdev: " fmt "\n", ##args)
#else
@@ -53,21 +52,36 @@
MALLOC_DEFINE(M_EVDEV, "evdev", "evdev memory");
-static inline void changebit(uint32_t *array, int, int);
-static struct evdev_client *evdev_client_alloc(void);
+static inline void set_bit(unsigned long *, int);
+static inline void clr_bit(unsigned long *, int);
+static inline void change_bit(unsigned long *, int, int);
static void evdev_assign_id(struct evdev_dev *);
+#if 0
static void evdev_start_repeat(struct evdev_dev *, int32_t);
static void evdev_stop_repeat(struct evdev_dev *);
+#endif
static void evdev_client_push(struct evdev_client *, uint16_t, uint16_t,
int32_t);
static inline void
-changebit(uint32_t *array, int bit, int value)
+set_bit(unsigned long *array, int bit)
+{
+ array[bit / 64] |= (1LL << (bit % 64));
+}
+
+static inline void
+clr_bit(unsigned long *array, int bit)
+{
+ array[bit / 64] &= ~(1LL << (bit % 64));
+}
+
+static inline void
+change_bit(unsigned long *array, int bit, int value)
{
if (value)
- setbit(array, bit);
+ set_bit(array, bit);
else
- clrbit(array, bit);
+ clr_bit(array, bit);
}
struct evdev_dev *
@@ -175,28 +189,28 @@ inline void
evdev_support_event(struct evdev_dev *evdev, uint16_t type)
{
- setbit(&evdev->ev_type_flags, type);
+ set_bit(evdev->ev_type_flags, type);
}
inline void
evdev_support_key(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_key_flags, code);
+ set_bit(evdev->ev_key_flags, code);
}
inline void
evdev_support_rel(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_rel_flags, code);
+ set_bit(evdev->ev_rel_flags, code);
}
inline void
evdev_support_abs(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_abs_flags, code);
+ set_bit(evdev->ev_abs_flags, code);
}
@@ -204,7 +218,7 @@ inline void
evdev_support_msc(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_msc_flags, code);
+ set_bit(evdev->ev_msc_flags, code);
}
@@ -212,21 +226,21 @@ inline void
evdev_support_led(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_led_flags, code);
+ set_bit(evdev->ev_led_flags, code);
}
inline void
evdev_support_snd(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_snd_flags, code);
+ set_bit(evdev->ev_snd_flags, code);
}
inline void
evdev_support_sw(struct evdev_dev *evdev, uint16_t code)
{
- setbit(&evdev->ev_sw_flags, code);
+ set_bit(evdev->ev_sw_flags, code);
}
inline void
@@ -234,7 +248,7 @@ evdev_support_repeat(struct evdev_dev *e
{
if (mode != NO_REPEAT)
- setbit(&evdev->ev_type_flags, EV_REP);
+ set_bit(evdev->ev_type_flags, EV_REP);
evdev->ev_repeat_mode = mode;
}
@@ -268,16 +282,16 @@ evdev_push_event(struct evdev_dev *evdev
/* For certain event types, update device state bits */
if (type == EV_KEY)
- changebit(evdev->ev_key_states, code, value);
+ change_bit(evdev->ev_key_states, code, value);
if (type == EV_LED)
- changebit(evdev->ev_led_states, code, value);
+ change_bit(evdev->ev_led_states, code, value);
if (type == EV_SND)
- changebit(evdev->ev_snd_states, code, value);
+ change_bit(evdev->ev_snd_states, code, value);
if (type == EV_SW)
- changebit(evdev->ev_sw_states, code, value);
+ change_bit(evdev->ev_sw_states, code, value);
/* For EV_ABS, save last value in absinfo */
if (type == EV_ABS)
@@ -307,13 +321,21 @@ evdev_inject_event(struct evdev_dev *evd
return (0);
}
-int
+inline int
evdev_sync(struct evdev_dev *evdev)
{
return (evdev_push_event(evdev, EV_SYN, SYN_REPORT, 1));
}
+
+inline int
+evdev_mt_sync(struct evdev_dev *evdev)
+{
+
+ return (evdev_push_event(evdev, EV_SYN, SYN_MT_REPORT, 1));
+}
+
int
evdev_register_client(struct evdev_dev *evdev, struct evdev_client **clientp)
{
@@ -454,6 +476,7 @@ evdev_assign_id(struct evdev_dev *dev)
dev->ev_id.bustype = BUS_HOST;
}
+#if 0
static void
evdev_start_repeat(struct evdev_dev *dev, int32_t key)
{
@@ -465,6 +488,7 @@ evdev_stop_repeat(struct evdev_dev *dev)
{
}
+#endif
static void
evdev_client_push(struct evdev_client *client, uint16_t type, uint16_t code,
Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h
==============================================================================
--- user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h Tue Jul 29 21:15:26 2014 (r269260)
+++ user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h Tue Jul 29 21:16:35 2014 (r269261)
@@ -34,6 +34,7 @@
#include <dev/evdev/input.h>
#define NAMELEN 80
+#define nlongs(x) (howmany(x, sizeof(unsigned long) * 8))
MALLOC_DECLARE(M_EVDEV);
@@ -78,14 +79,14 @@ struct evdev_dev
enum evdev_repeat_mode ev_repeat_mode;
/* Supported features: */
- uint32_t ev_type_flags[howmany(EV_CNT, 32)];
- uint32_t ev_key_flags[howmany(KEY_CNT, 32)];
- uint32_t ev_rel_flags[howmany(REL_CNT, 32)];
- uint32_t ev_abs_flags[howmany(ABS_CNT, 32)];
- uint32_t ev_msc_flags[howmany(MSC_CNT, 32)];
- uint32_t ev_led_flags[howmany(LED_CNT, 32)];
- uint32_t ev_snd_flags[howmany(SND_CNT, 32)];
- uint32_t ev_sw_flags[howmany(SW_CNT, 32)];
+ unsigned long ev_type_flags[nlongs(EV_CNT)];
+ unsigned long ev_key_flags[nlongs(KEY_CNT)];
+ unsigned long ev_rel_flags[nlongs(REL_CNT)];
+ unsigned long ev_abs_flags[nlongs(ABS_CNT)];
+ unsigned long ev_msc_flags[nlongs(MSC_CNT)];
+ unsigned long ev_led_flags[nlongs(LED_CNT)];
+ unsigned long ev_snd_flags[nlongs(SND_CNT)];
+ unsigned long ev_sw_flags[nlongs(SW_CNT)];
struct input_absinfo ev_absinfo[ABS_CNT];
/* Repeat parameters & callout: */
@@ -93,10 +94,10 @@ struct evdev_dev
struct callout ev_rep_callout;
/* State: */
- uint32_t ev_key_states[howmany(KEY_CNT, 32)];
- uint32_t ev_led_states[howmany(LED_CNT, 32)];
- uint32_t ev_snd_states[howmany(SND_CNT, 32)];
- uint32_t ev_sw_states[howmany(SW_CNT, 32)];
+ unsigned long ev_key_states[nlongs(KEY_CNT)];
+ unsigned long ev_led_states[nlongs(LED_CNT)];
+ unsigned long ev_snd_states[nlongs(SND_CNT)];
+ unsigned long ev_sw_states[nlongs(SW_CNT)];
/* Counters: */
uint64_t ev_event_count;
@@ -146,6 +147,7 @@ int evdev_unregister(device_t, struct ev
int evdev_push_event(struct evdev_dev *, uint16_t, uint16_t, int32_t);
int evdev_inject_event(struct evdev_dev *, uint16_t, uint16_t, int32_t);
int evdev_sync(struct evdev_dev *);
+int evdev_mt_sync(struct evdev_dev *);
int evdev_cdev_create(struct evdev_dev *);
int evdev_cdev_destroy(struct evdev_dev *);
void evdev_support_event(struct evdev_dev *, uint16_t);
Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/uinput.c
==============================================================================
--- user/jceel/soc2014_evdev/head/sys/dev/evdev/uinput.c Tue Jul 29 21:15:26 2014 (r269260)
+++ user/jceel/soc2014_evdev/head/sys/dev/evdev/uinput.c Tue Jul 29 21:16:35 2014 (r269261)
@@ -54,16 +54,11 @@ static int uinput_read(struct cdev *, st
static int uinput_write(struct cdev *, struct uio *, int);
static int uinput_ioctl(struct cdev *, u_long, caddr_t, int, struct thread *);
static int uinput_poll(struct cdev *, int, struct thread *);
-static int uinput_kqfilter(struct cdev *, struct knote *);
-static int uinput_kqread(struct knote *kn, long hint);
-static void uinput_kqdetach(struct knote *kn);
static void uinput_dtor(void *);
static int uinput_setup_provider(struct evdev_dev *, struct uinput_user_dev *);
-static evdev_open_t uinput_ev_open;
-static evdev_close_t uinput_ev_close;
-static evdev_event_t uinput_ev_event;
+
static int uinput_cdev_create(void);
@@ -267,38 +262,38 @@ uinput_ioctl(struct cdev *dev, u_long cm
break;
case UI_SET_EVBIT:
- evdev_support_event(state->ucs_evdev, (uint16_t)data);
+ evdev_support_event(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_KEYBIT:
- evdev_support_key(state->ucs_evdev, (uint16_t)data);
+ evdev_support_key(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_RELBIT:
- evdev_support_rel(state->ucs_evdev, (uint16_t)data);
+ evdev_support_rel(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_ABSBIT:
- evdev_support_abs(state->ucs_evdev, (uint16_t)data);
+ evdev_support_abs(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_MSCBIT:
- evdev_support_msc(state->ucs_evdev, (uint16_t)data);
+ evdev_support_msc(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_LEDBIT:
- evdev_support_led(state->ucs_evdev, (uint16_t)data);
+ evdev_support_led(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_SNDBIT:
- evdev_support_snd(state->ucs_evdev, (uint16_t)data);
+ evdev_support_snd(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_PHYS:
break;
case UI_SET_SWBIT:
- evdev_support_sw(state->ucs_evdev, (uint16_t)data);
+ evdev_support_sw(state->ucs_evdev, (uint16_t)(uintptr_t)data);
break;
case UI_SET_PROPBIT:
More information about the svn-src-user
mailing list