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>