[patch 07/24] input: rearrange procfs code
Input: rearrange procfs code to reduce number of #ifdefs Signed-off-by: Dmitry Torokhov <[EMAIL PROTECTED]> --- drivers/input/input.c | 389 +- 1 files changed, 198 insertions(+), 191 deletions(-) Index: work/drivers/input/input.c === --- work.orig/drivers/input/input.c +++ work/drivers/input/input.c @@ -48,12 +48,6 @@ static LIST_HEAD(input_handler_list); static struct input_handler *input_table[8]; -#ifdef CONFIG_PROC_FS -static struct proc_dir_entry *proc_bus_input_dir; -static DECLARE_WAIT_QUEUE_HEAD(input_devices_poll_wait); -static int input_devices_state; -#endif - void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { struct input_handle *handle; @@ -312,6 +306,7 @@ static struct input_device_id *input_mat return NULL; } + /* * Input hotplugging interface - loading event handlers based on * device bitfields. @@ -428,6 +423,177 @@ static void input_call_hotplug(char *ver #endif +#ifdef CONFIG_PROC_FS + +static struct proc_dir_entry *proc_bus_input_dir; +static DECLARE_WAIT_QUEUE_HEAD(input_devices_poll_wait); +static int input_devices_state; + +static inline void input_wakeup_procfs_readers(void) +{ + input_devices_state++; + wake_up(_devices_poll_wait); +} + +static unsigned int input_devices_poll(struct file *file, poll_table *wait) +{ + int state = input_devices_state; + poll_wait(file, _devices_poll_wait, wait); + if (state != input_devices_state) + return POLLIN | POLLRDNORM; + return 0; +} + +#define SPRINTF_BIT_B(bit, name, max) \ + do { \ + len += sprintf(buf + len, "B: %s", name); \ + for (i = NBITS(max) - 1; i >= 0; i--) \ + if (dev->bit[i]) break; \ + for (; i >= 0; i--) \ + len += sprintf(buf + len, "%lx ", dev->bit[i]); \ + len += sprintf(buf + len, "\n"); \ + } while (0) + +#define SPRINTF_BIT_B2(bit, name, max, ev) \ + do { \ + if (test_bit(ev, dev->evbit)) \ + SPRINTF_BIT_B(bit, name, max); \ + } while (0) + +static int input_devices_read(char *buf, char **start, off_t pos, int count, int *eof, void *data) +{ + struct input_dev *dev; + struct input_handle *handle; + + off_t at = 0; + int i, len, cnt = 0; + + list_for_each_entry(dev, _dev_list, node) { + + len = sprintf(buf, "I: Bus=%04x Vendor=%04x Product=%04x Version=%04x\n", + dev->id.bustype, dev->id.vendor, dev->id.product, dev->id.version); + + len += sprintf(buf + len, "N: Name=\"%s\"\n", dev->name ? dev->name : ""); + len += sprintf(buf + len, "P: Phys=%s\n", dev->phys ? dev->phys : ""); + len += sprintf(buf + len, "H: Handlers="); + + list_for_each_entry(handle, >h_list, d_node) + len += sprintf(buf + len, "%s ", handle->name); + + len += sprintf(buf + len, "\n"); + + SPRINTF_BIT_B(evbit, "EV=", EV_MAX); + SPRINTF_BIT_B2(keybit, "KEY=", KEY_MAX, EV_KEY); + SPRINTF_BIT_B2(relbit, "REL=", REL_MAX, EV_REL); + SPRINTF_BIT_B2(absbit, "ABS=", ABS_MAX, EV_ABS); + SPRINTF_BIT_B2(mscbit, "MSC=", MSC_MAX, EV_MSC); + SPRINTF_BIT_B2(ledbit, "LED=", LED_MAX, EV_LED); + SPRINTF_BIT_B2(sndbit, "SND=", SND_MAX, EV_SND); + SPRINTF_BIT_B2(ffbit, "FF=", FF_MAX, EV_FF); + + len += sprintf(buf + len, "\n"); + + at += len; + + if (at >= pos) { + if (!*start) { + *start = buf + (pos - (at - len)); + cnt = at - pos; + } else cnt += len; + buf += len; + if (cnt >= count) + break; + } + } + + if (>node == _dev_list) + *eof = 1; + + return (count > cnt) ? cnt : count; +} + +static int input_handlers_read(char *buf, char **start, off_t pos, int count, int *eof, void *data) +{ + struct input_handler *handler; + + off_t at = 0; + int len = 0, cnt = 0; + int i = 0; + + list_for_each_entry(handler, _handler_list, node) { + + if (handler->fops) + len = sprintf(buf, "N: Number=%d Name=%s Minor=%d\n", + i++, handler->name, handler->minor); + else + len = sprintf(buf, "N: Number=%d Name=%s\n", + i++, handler->name); + + at += len; + + if (at >= pos) { + if (!*start) { + *start = buf + (pos - (at
[patch 07/24] input: rearrange procfs code
Input: rearrange procfs code to reduce number of #ifdefs Signed-off-by: Dmitry Torokhov [EMAIL PROTECTED] --- drivers/input/input.c | 389 +- 1 files changed, 198 insertions(+), 191 deletions(-) Index: work/drivers/input/input.c === --- work.orig/drivers/input/input.c +++ work/drivers/input/input.c @@ -48,12 +48,6 @@ static LIST_HEAD(input_handler_list); static struct input_handler *input_table[8]; -#ifdef CONFIG_PROC_FS -static struct proc_dir_entry *proc_bus_input_dir; -static DECLARE_WAIT_QUEUE_HEAD(input_devices_poll_wait); -static int input_devices_state; -#endif - void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { struct input_handle *handle; @@ -312,6 +306,7 @@ static struct input_device_id *input_mat return NULL; } + /* * Input hotplugging interface - loading event handlers based on * device bitfields. @@ -428,6 +423,177 @@ static void input_call_hotplug(char *ver #endif +#ifdef CONFIG_PROC_FS + +static struct proc_dir_entry *proc_bus_input_dir; +static DECLARE_WAIT_QUEUE_HEAD(input_devices_poll_wait); +static int input_devices_state; + +static inline void input_wakeup_procfs_readers(void) +{ + input_devices_state++; + wake_up(input_devices_poll_wait); +} + +static unsigned int input_devices_poll(struct file *file, poll_table *wait) +{ + int state = input_devices_state; + poll_wait(file, input_devices_poll_wait, wait); + if (state != input_devices_state) + return POLLIN | POLLRDNORM; + return 0; +} + +#define SPRINTF_BIT_B(bit, name, max) \ + do { \ + len += sprintf(buf + len, B: %s, name); \ + for (i = NBITS(max) - 1; i = 0; i--) \ + if (dev-bit[i]) break; \ + for (; i = 0; i--) \ + len += sprintf(buf + len, %lx , dev-bit[i]); \ + len += sprintf(buf + len, \n); \ + } while (0) + +#define SPRINTF_BIT_B2(bit, name, max, ev) \ + do { \ + if (test_bit(ev, dev-evbit)) \ + SPRINTF_BIT_B(bit, name, max); \ + } while (0) + +static int input_devices_read(char *buf, char **start, off_t pos, int count, int *eof, void *data) +{ + struct input_dev *dev; + struct input_handle *handle; + + off_t at = 0; + int i, len, cnt = 0; + + list_for_each_entry(dev, input_dev_list, node) { + + len = sprintf(buf, I: Bus=%04x Vendor=%04x Product=%04x Version=%04x\n, + dev-id.bustype, dev-id.vendor, dev-id.product, dev-id.version); + + len += sprintf(buf + len, N: Name=\%s\\n, dev-name ? dev-name : ); + len += sprintf(buf + len, P: Phys=%s\n, dev-phys ? dev-phys : ); + len += sprintf(buf + len, H: Handlers=); + + list_for_each_entry(handle, dev-h_list, d_node) + len += sprintf(buf + len, %s , handle-name); + + len += sprintf(buf + len, \n); + + SPRINTF_BIT_B(evbit, EV=, EV_MAX); + SPRINTF_BIT_B2(keybit, KEY=, KEY_MAX, EV_KEY); + SPRINTF_BIT_B2(relbit, REL=, REL_MAX, EV_REL); + SPRINTF_BIT_B2(absbit, ABS=, ABS_MAX, EV_ABS); + SPRINTF_BIT_B2(mscbit, MSC=, MSC_MAX, EV_MSC); + SPRINTF_BIT_B2(ledbit, LED=, LED_MAX, EV_LED); + SPRINTF_BIT_B2(sndbit, SND=, SND_MAX, EV_SND); + SPRINTF_BIT_B2(ffbit, FF=, FF_MAX, EV_FF); + + len += sprintf(buf + len, \n); + + at += len; + + if (at = pos) { + if (!*start) { + *start = buf + (pos - (at - len)); + cnt = at - pos; + } else cnt += len; + buf += len; + if (cnt = count) + break; + } + } + + if (dev-node == input_dev_list) + *eof = 1; + + return (count cnt) ? cnt : count; +} + +static int input_handlers_read(char *buf, char **start, off_t pos, int count, int *eof, void *data) +{ + struct input_handler *handler; + + off_t at = 0; + int len = 0, cnt = 0; + int i = 0; + + list_for_each_entry(handler, input_handler_list, node) { + + if (handler-fops) + len = sprintf(buf, N: Number=%d Name=%s Minor=%d\n, + i++, handler-name, handler-minor); + else + len = sprintf(buf, N: Number=%d Name=%s\n, + i++, handler-name); + + at += len; + + if (at = pos) { + if (!*start) { + *start = buf + (pos - (at - len)); +