[patch 07/24] input: rearrange procfs code

2005-07-25 Thread Dmitry Torokhov
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

2005-07-25 Thread Dmitry Torokhov
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));
+