Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Jul 2014 21:16:36 +0000 (UTC)
From:      Jakub Wojciech Klama <jceel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r269261 - user/jceel/soc2014_evdev/head/sys/dev/evdev
Message-ID:  <201407292116.s6TLGagI063518@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407292116.s6TLGagI063518>