diff options
author | David Howells <dhowells@redhat.com> | 2006-10-05 09:55:46 -0400 |
---|---|---|
committer | David Howells <dhowells@warthog.cambridge.redhat.com> | 2006-10-05 10:10:12 -0400 |
commit | 7d12e780e003f93433d49ce78cfedf4b4c52adc5 (patch) | |
tree | 6748550400445c11a306b132009f3001e3525df8 /drivers/input/mouse | |
parent | da482792a6d1a3fbaaa25fae867b343fb4db3246 (diff) |
IRQ: Maintain regs pointer globally rather than passing to IRQ handlers
Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
of passing regs around manually through all ~1800 interrupt handlers in the
Linux kernel.
The regs pointer is used in few places, but it potentially costs both stack
space and code to pass it around. On the FRV arch, removing the regs parameter
from all the genirq function results in a 20% speed up of the IRQ exit path
(ie: from leaving timer_interrupt() to leaving do_IRQ()).
Where appropriate, an arch may override the generic storage facility and do
something different with the variable. On FRV, for instance, the address is
maintained in GR28 at all times inside the kernel as part of general exception
handling.
Having looked over the code, it appears that the parameter may be handed down
through up to twenty or so layers of functions. Consider a USB character
device attached to a USB hub, attached to a USB controller that posts its
interrupts through a cascaded auxiliary interrupt controller. A character
device driver may want to pass regs to the sysrq handler through the input
layer which adds another few layers of parameter passing.
I've build this code with allyesconfig for x86_64 and i386. I've runtested the
main part of the code on FRV and i386, though I can't test most of the drivers.
I've also done partial conversion for powerpc and MIPS - these at least compile
with minimal configurations.
This will affect all archs. Mostly the changes should be relatively easy.
Take do_IRQ(), store the regs pointer at the beginning, saving the old one:
struct pt_regs *old_regs = set_irq_regs(regs);
And put the old one back at the end:
set_irq_regs(old_regs);
Don't pass regs through to generic_handle_irq() or __do_IRQ().
In timer_interrupt(), this sort of change will be necessary:
- update_process_times(user_mode(regs));
- profile_tick(CPU_PROFILING, regs);
+ update_process_times(user_mode(get_irq_regs()));
+ profile_tick(CPU_PROFILING);
I'd like to move update_process_times()'s use of get_irq_regs() into itself,
except that i386, alone of the archs, uses something other than user_mode().
Some notes on the interrupt handling in the drivers:
(*) input_dev() is now gone entirely. The regs pointer is no longer stored in
the input_dev struct.
(*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does
something different depending on whether it's been supplied with a regs
pointer or not.
(*) Various IRQ handler function pointers have been moved to type
irq_handler_t.
Signed-Off-By: David Howells <dhowells@redhat.com>
(cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
Diffstat (limited to 'drivers/input/mouse')
-rw-r--r-- | drivers/input/mouse/alps.c | 10 | ||||
-rw-r--r-- | drivers/input/mouse/amimouse.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/hil_ptr.c | 2 | ||||
-rw-r--r-- | drivers/input/mouse/inport.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/lifebook.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/logibm.c | 3 | ||||
-rw-r--r-- | drivers/input/mouse/logips2pp.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/pc110pad.c | 9 | ||||
-rw-r--r-- | drivers/input/mouse/psmouse-base.c | 16 | ||||
-rw-r--r-- | drivers/input/mouse/psmouse.h | 2 | ||||
-rw-r--r-- | drivers/input/mouse/rpcmouse.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/sermouse.c | 14 | ||||
-rw-r--r-- | drivers/input/mouse/synaptics.c | 15 | ||||
-rw-r--r-- | drivers/input/mouse/vsxxxaa.c | 22 |
14 files changed, 43 insertions, 70 deletions
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 450b68a619fd..4e71a66fc7fc 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c | |||
@@ -76,7 +76,7 @@ static const struct alps_model_info alps_model_data[] = { | |||
76 | * on a dualpoint, etc. | 76 | * on a dualpoint, etc. |
77 | */ | 77 | */ |
78 | 78 | ||
79 | static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs) | 79 | static void alps_process_packet(struct psmouse *psmouse) |
80 | { | 80 | { |
81 | struct alps_data *priv = psmouse->private; | 81 | struct alps_data *priv = psmouse->private; |
82 | unsigned char *packet = psmouse->packet; | 82 | unsigned char *packet = psmouse->packet; |
@@ -85,8 +85,6 @@ static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs) | |||
85 | int x, y, z, ges, fin, left, right, middle; | 85 | int x, y, z, ges, fin, left, right, middle; |
86 | int back = 0, forward = 0; | 86 | int back = 0, forward = 0; |
87 | 87 | ||
88 | input_regs(dev, regs); | ||
89 | |||
90 | if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */ | 88 | if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */ |
91 | input_report_key(dev2, BTN_LEFT, packet[0] & 1); | 89 | input_report_key(dev2, BTN_LEFT, packet[0] & 1); |
92 | input_report_key(dev2, BTN_RIGHT, packet[0] & 2); | 90 | input_report_key(dev2, BTN_RIGHT, packet[0] & 2); |
@@ -181,13 +179,13 @@ static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs) | |||
181 | input_sync(dev); | 179 | input_sync(dev); |
182 | } | 180 | } |
183 | 181 | ||
184 | static psmouse_ret_t alps_process_byte(struct psmouse *psmouse, struct pt_regs *regs) | 182 | static psmouse_ret_t alps_process_byte(struct psmouse *psmouse) |
185 | { | 183 | { |
186 | struct alps_data *priv = psmouse->private; | 184 | struct alps_data *priv = psmouse->private; |
187 | 185 | ||
188 | if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ | 186 | if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ |
189 | if (psmouse->pktcnt == 3) { | 187 | if (psmouse->pktcnt == 3) { |
190 | alps_process_packet(psmouse, regs); | 188 | alps_process_packet(psmouse); |
191 | return PSMOUSE_FULL_PACKET; | 189 | return PSMOUSE_FULL_PACKET; |
192 | } | 190 | } |
193 | return PSMOUSE_GOOD_DATA; | 191 | return PSMOUSE_GOOD_DATA; |
@@ -202,7 +200,7 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse, struct pt_regs * | |||
202 | return PSMOUSE_BAD_DATA; | 200 | return PSMOUSE_BAD_DATA; |
203 | 201 | ||
204 | if (psmouse->pktcnt == 6) { | 202 | if (psmouse->pktcnt == 6) { |
205 | alps_process_packet(psmouse, regs); | 203 | alps_process_packet(psmouse); |
206 | return PSMOUSE_FULL_PACKET; | 204 | return PSMOUSE_FULL_PACKET; |
207 | } | 205 | } |
208 | 206 | ||
diff --git a/drivers/input/mouse/amimouse.c b/drivers/input/mouse/amimouse.c index c8b2cc9f184c..599a7b2dc519 100644 --- a/drivers/input/mouse/amimouse.c +++ b/drivers/input/mouse/amimouse.c | |||
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL"); | |||
36 | static int amimouse_lastx, amimouse_lasty; | 36 | static int amimouse_lastx, amimouse_lasty; |
37 | static struct input_dev *amimouse_dev; | 37 | static struct input_dev *amimouse_dev; |
38 | 38 | ||
39 | static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp) | 39 | static irqreturn_t amimouse_interrupt(int irq, void *dummy) |
40 | { | 40 | { |
41 | unsigned short joy0dat, potgor; | 41 | unsigned short joy0dat, potgor; |
42 | int nx, ny, dx, dy; | 42 | int nx, ny, dx, dy; |
@@ -59,8 +59,6 @@ static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp) | |||
59 | 59 | ||
60 | potgor = amiga_custom.potgor; | 60 | potgor = amiga_custom.potgor; |
61 | 61 | ||
62 | input_regs(amimouse_dev, fp); | ||
63 | |||
64 | input_report_rel(amimouse_dev, REL_X, dx); | 62 | input_report_rel(amimouse_dev, REL_X, dx); |
65 | input_report_rel(amimouse_dev, REL_Y, dy); | 63 | input_report_rel(amimouse_dev, REL_Y, dy); |
66 | 64 | ||
diff --git a/drivers/input/mouse/hil_ptr.c b/drivers/input/mouse/hil_ptr.c index 69f02178c528..402b057e986e 100644 --- a/drivers/input/mouse/hil_ptr.c +++ b/drivers/input/mouse/hil_ptr.c | |||
@@ -190,7 +190,7 @@ static void hil_ptr_process_err(struct hil_ptr *ptr) { | |||
190 | } | 190 | } |
191 | 191 | ||
192 | static irqreturn_t hil_ptr_interrupt(struct serio *serio, | 192 | static irqreturn_t hil_ptr_interrupt(struct serio *serio, |
193 | unsigned char data, unsigned int flags, struct pt_regs *regs) | 193 | unsigned char data, unsigned int flags) |
194 | { | 194 | { |
195 | struct hil_ptr *ptr; | 195 | struct hil_ptr *ptr; |
196 | hil_packet packet; | 196 | hil_packet packet; |
diff --git a/drivers/input/mouse/inport.c b/drivers/input/mouse/inport.c index 50f1fed10be4..e1252fa9a107 100644 --- a/drivers/input/mouse/inport.c +++ b/drivers/input/mouse/inport.c | |||
@@ -88,15 +88,13 @@ __obsolete_setup("inport_irq="); | |||
88 | 88 | ||
89 | static struct input_dev *inport_dev; | 89 | static struct input_dev *inport_dev; |
90 | 90 | ||
91 | static irqreturn_t inport_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 91 | static irqreturn_t inport_interrupt(int irq, void *dev_id) |
92 | { | 92 | { |
93 | unsigned char buttons; | 93 | unsigned char buttons; |
94 | 94 | ||
95 | outb(INPORT_REG_MODE, INPORT_CONTROL_PORT); | 95 | outb(INPORT_REG_MODE, INPORT_CONTROL_PORT); |
96 | outb(INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT); | 96 | outb(INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT); |
97 | 97 | ||
98 | input_regs(inport_dev, regs); | ||
99 | |||
100 | outb(INPORT_REG_X, INPORT_CONTROL_PORT); | 98 | outb(INPORT_REG_X, INPORT_CONTROL_PORT); |
101 | input_report_rel(inport_dev, REL_X, inb(INPORT_DATA_PORT)); | 99 | input_report_rel(inport_dev, REL_X, inb(INPORT_DATA_PORT)); |
102 | 100 | ||
diff --git a/drivers/input/mouse/lifebook.c b/drivers/input/mouse/lifebook.c index 5e9d25067513..c57e8853b949 100644 --- a/drivers/input/mouse/lifebook.c +++ b/drivers/input/mouse/lifebook.c | |||
@@ -62,7 +62,7 @@ static struct dmi_system_id lifebook_dmi_table[] = { | |||
62 | }; | 62 | }; |
63 | 63 | ||
64 | 64 | ||
65 | static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_regs *regs) | 65 | static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse) |
66 | { | 66 | { |
67 | unsigned char *packet = psmouse->packet; | 67 | unsigned char *packet = psmouse->packet; |
68 | struct input_dev *dev = psmouse->dev; | 68 | struct input_dev *dev = psmouse->dev; |
@@ -70,8 +70,6 @@ static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_re | |||
70 | if (psmouse->pktcnt != 3) | 70 | if (psmouse->pktcnt != 3) |
71 | return PSMOUSE_GOOD_DATA; | 71 | return PSMOUSE_GOOD_DATA; |
72 | 72 | ||
73 | input_regs(dev, regs); | ||
74 | |||
75 | /* calculate X and Y */ | 73 | /* calculate X and Y */ |
76 | if ((packet[0] & 0x08) == 0x00) { | 74 | if ((packet[0] & 0x08) == 0x00) { |
77 | input_report_abs(dev, ABS_X, | 75 | input_report_abs(dev, ABS_X, |
diff --git a/drivers/input/mouse/logibm.c b/drivers/input/mouse/logibm.c index 9c7ce38806d7..8e9c2f3d69a8 100644 --- a/drivers/input/mouse/logibm.c +++ b/drivers/input/mouse/logibm.c | |||
@@ -79,7 +79,7 @@ __obsolete_setup("logibm_irq="); | |||
79 | 79 | ||
80 | static struct input_dev *logibm_dev; | 80 | static struct input_dev *logibm_dev; |
81 | 81 | ||
82 | static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 82 | static irqreturn_t logibm_interrupt(int irq, void *dev_id) |
83 | { | 83 | { |
84 | char dx, dy; | 84 | char dx, dy; |
85 | unsigned char buttons; | 85 | unsigned char buttons; |
@@ -95,7 +95,6 @@ static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
95 | dy |= (buttons & 0xf) << 4; | 95 | dy |= (buttons & 0xf) << 4; |
96 | buttons = ~buttons >> 5; | 96 | buttons = ~buttons >> 5; |
97 | 97 | ||
98 | input_regs(logibm_dev, regs); | ||
99 | input_report_rel(logibm_dev, REL_X, dx); | 98 | input_report_rel(logibm_dev, REL_X, dx); |
100 | input_report_rel(logibm_dev, REL_Y, dy); | 99 | input_report_rel(logibm_dev, REL_Y, dy); |
101 | input_report_key(logibm_dev, BTN_RIGHT, buttons & 1); | 100 | input_report_key(logibm_dev, BTN_RIGHT, buttons & 1); |
diff --git a/drivers/input/mouse/logips2pp.c b/drivers/input/mouse/logips2pp.c index 7972eecbcfe4..8a4f862709e7 100644 --- a/drivers/input/mouse/logips2pp.c +++ b/drivers/input/mouse/logips2pp.c | |||
@@ -39,7 +39,7 @@ struct ps2pp_info { | |||
39 | * Process a PS2++ or PS2T++ packet. | 39 | * Process a PS2++ or PS2T++ packet. |
40 | */ | 40 | */ |
41 | 41 | ||
42 | static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse, struct pt_regs *regs) | 42 | static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse) |
43 | { | 43 | { |
44 | struct input_dev *dev = psmouse->dev; | 44 | struct input_dev *dev = psmouse->dev; |
45 | unsigned char *packet = psmouse->packet; | 45 | unsigned char *packet = psmouse->packet; |
@@ -51,8 +51,6 @@ static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse, struct pt_regs | |||
51 | * Full packet accumulated, process it | 51 | * Full packet accumulated, process it |
52 | */ | 52 | */ |
53 | 53 | ||
54 | input_regs(dev, regs); | ||
55 | |||
56 | if ((packet[0] & 0x48) == 0x48 && (packet[1] & 0x02) == 0x02) { | 54 | if ((packet[0] & 0x48) == 0x48 && (packet[1] & 0x02) == 0x02) { |
57 | 55 | ||
58 | /* Logitech extended packet */ | 56 | /* Logitech extended packet */ |
diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c index d284ea712151..8c075aa7223b 100644 --- a/drivers/input/mouse/pc110pad.c +++ b/drivers/input/mouse/pc110pad.c | |||
@@ -57,7 +57,7 @@ static struct input_dev *pc110pad_dev; | |||
57 | static int pc110pad_data[3]; | 57 | static int pc110pad_data[3]; |
58 | static int pc110pad_count; | 58 | static int pc110pad_count; |
59 | 59 | ||
60 | static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs) | 60 | static irqreturn_t pc110pad_interrupt(int irq, void *ptr) |
61 | { | 61 | { |
62 | int value = inb_p(pc110pad_io); | 62 | int value = inb_p(pc110pad_io); |
63 | int handshake = inb_p(pc110pad_io + 2); | 63 | int handshake = inb_p(pc110pad_io + 2); |
@@ -71,7 +71,6 @@ static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs) | |||
71 | if (pc110pad_count < 3) | 71 | if (pc110pad_count < 3) |
72 | return IRQ_HANDLED; | 72 | return IRQ_HANDLED; |
73 | 73 | ||
74 | input_regs(pc110pad_dev, regs); | ||
75 | input_report_key(pc110pad_dev, BTN_TOUCH, | 74 | input_report_key(pc110pad_dev, BTN_TOUCH, |
76 | pc110pad_data[0] & 0x01); | 75 | pc110pad_data[0] & 0x01); |
77 | input_report_abs(pc110pad_dev, ABS_X, | 76 | input_report_abs(pc110pad_dev, ABS_X, |
@@ -91,9 +90,9 @@ static void pc110pad_close(struct input_dev *dev) | |||
91 | 90 | ||
92 | static int pc110pad_open(struct input_dev *dev) | 91 | static int pc110pad_open(struct input_dev *dev) |
93 | { | 92 | { |
94 | pc110pad_interrupt(0, NULL, NULL); | 93 | pc110pad_interrupt(0, NULL); |
95 | pc110pad_interrupt(0, NULL, NULL); | 94 | pc110pad_interrupt(0, NULL); |
96 | pc110pad_interrupt(0, NULL, NULL); | 95 | pc110pad_interrupt(0, NULL); |
97 | outb(PC110PAD_ON, pc110pad_io + 2); | 96 | outb(PC110PAD_ON, pc110pad_io + 2); |
98 | pc110pad_count = 0; | 97 | pc110pad_count = 0; |
99 | 98 | ||
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 9fb7eb6b0f71..6f9b2c7cc9c2 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c | |||
@@ -124,7 +124,7 @@ struct psmouse_protocol { | |||
124 | * relevant events to the input module once full packet has arrived. | 124 | * relevant events to the input module once full packet has arrived. |
125 | */ | 125 | */ |
126 | 126 | ||
127 | static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_regs *regs) | 127 | static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse) |
128 | { | 128 | { |
129 | struct input_dev *dev = psmouse->dev; | 129 | struct input_dev *dev = psmouse->dev; |
130 | unsigned char *packet = psmouse->packet; | 130 | unsigned char *packet = psmouse->packet; |
@@ -136,8 +136,6 @@ static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_reg | |||
136 | * Full packet accumulated, process it | 136 | * Full packet accumulated, process it |
137 | */ | 137 | */ |
138 | 138 | ||
139 | input_regs(dev, regs); | ||
140 | |||
141 | /* | 139 | /* |
142 | * Scroll wheel on IntelliMice, scroll buttons on NetMice | 140 | * Scroll wheel on IntelliMice, scroll buttons on NetMice |
143 | */ | 141 | */ |
@@ -231,9 +229,9 @@ static void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_st | |||
231 | * by calling corresponding protocol handler. | 229 | * by calling corresponding protocol handler. |
232 | */ | 230 | */ |
233 | 231 | ||
234 | static int psmouse_handle_byte(struct psmouse *psmouse, struct pt_regs *regs) | 232 | static int psmouse_handle_byte(struct psmouse *psmouse) |
235 | { | 233 | { |
236 | psmouse_ret_t rc = psmouse->protocol_handler(psmouse, regs); | 234 | psmouse_ret_t rc = psmouse->protocol_handler(psmouse); |
237 | 235 | ||
238 | switch (rc) { | 236 | switch (rc) { |
239 | case PSMOUSE_BAD_DATA: | 237 | case PSMOUSE_BAD_DATA: |
@@ -271,7 +269,7 @@ static int psmouse_handle_byte(struct psmouse *psmouse, struct pt_regs *regs) | |||
271 | */ | 269 | */ |
272 | 270 | ||
273 | static irqreturn_t psmouse_interrupt(struct serio *serio, | 271 | static irqreturn_t psmouse_interrupt(struct serio *serio, |
274 | unsigned char data, unsigned int flags, struct pt_regs *regs) | 272 | unsigned char data, unsigned int flags) |
275 | { | 273 | { |
276 | struct psmouse *psmouse = serio_get_drvdata(serio); | 274 | struct psmouse *psmouse = serio_get_drvdata(serio); |
277 | 275 | ||
@@ -327,7 +325,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio, | |||
327 | * Not a new device, try processing first byte normally | 325 | * Not a new device, try processing first byte normally |
328 | */ | 326 | */ |
329 | psmouse->pktcnt = 1; | 327 | psmouse->pktcnt = 1; |
330 | if (psmouse_handle_byte(psmouse, regs)) | 328 | if (psmouse_handle_byte(psmouse)) |
331 | goto out; | 329 | goto out; |
332 | 330 | ||
333 | psmouse->packet[psmouse->pktcnt++] = data; | 331 | psmouse->packet[psmouse->pktcnt++] = data; |
@@ -346,7 +344,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio, | |||
346 | } | 344 | } |
347 | 345 | ||
348 | psmouse->last = jiffies; | 346 | psmouse->last = jiffies; |
349 | psmouse_handle_byte(psmouse, regs); | 347 | psmouse_handle_byte(psmouse); |
350 | 348 | ||
351 | out: | 349 | out: |
352 | return IRQ_HANDLED; | 350 | return IRQ_HANDLED; |
@@ -940,7 +938,7 @@ static void psmouse_resync(void *p) | |||
940 | psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); | 938 | psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); |
941 | for (i = 0; i < psmouse->pktsize; i++) { | 939 | for (i = 0; i < psmouse->pktsize; i++) { |
942 | psmouse->pktcnt++; | 940 | psmouse->pktcnt++; |
943 | rc = psmouse->protocol_handler(psmouse, NULL); | 941 | rc = psmouse->protocol_handler(psmouse); |
944 | if (rc != PSMOUSE_GOOD_DATA) | 942 | if (rc != PSMOUSE_GOOD_DATA) |
945 | break; | 943 | break; |
946 | } | 944 | } |
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h index 4d9107fba6a1..1b74cae8a556 100644 --- a/drivers/input/mouse/psmouse.h +++ b/drivers/input/mouse/psmouse.h | |||
@@ -62,7 +62,7 @@ struct psmouse { | |||
62 | unsigned int resync_time; | 62 | unsigned int resync_time; |
63 | unsigned int smartscroll; /* Logitech only */ | 63 | unsigned int smartscroll; /* Logitech only */ |
64 | 64 | ||
65 | psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse, struct pt_regs *regs); | 65 | psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse); |
66 | void (*set_rate)(struct psmouse *psmouse, unsigned int rate); | 66 | void (*set_rate)(struct psmouse *psmouse, unsigned int rate); |
67 | void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution); | 67 | void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution); |
68 | 68 | ||
diff --git a/drivers/input/mouse/rpcmouse.c b/drivers/input/mouse/rpcmouse.c index 872b30bf7aad..ea0468569610 100644 --- a/drivers/input/mouse/rpcmouse.c +++ b/drivers/input/mouse/rpcmouse.c | |||
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL"); | |||
36 | static short rpcmouse_lastx, rpcmouse_lasty; | 36 | static short rpcmouse_lastx, rpcmouse_lasty; |
37 | static struct input_dev *rpcmouse_dev; | 37 | static struct input_dev *rpcmouse_dev; |
38 | 38 | ||
39 | static irqreturn_t rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs) | 39 | static irqreturn_t rpcmouse_irq(int irq, void *dev_id) |
40 | { | 40 | { |
41 | struct input_dev *dev = dev_id; | 41 | struct input_dev *dev = dev_id; |
42 | short x, y, dx, dy, b; | 42 | short x, y, dx, dy, b; |
@@ -51,8 +51,6 @@ static irqreturn_t rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
51 | rpcmouse_lastx = x; | 51 | rpcmouse_lastx = x; |
52 | rpcmouse_lasty = y; | 52 | rpcmouse_lasty = y; |
53 | 53 | ||
54 | input_regs(dev, regs); | ||
55 | |||
56 | input_report_rel(dev, REL_X, dx); | 54 | input_report_rel(dev, REL_X, dx); |
57 | input_report_rel(dev, REL_Y, -dy); | 55 | input_report_rel(dev, REL_Y, -dy); |
58 | 56 | ||
diff --git a/drivers/input/mouse/sermouse.c b/drivers/input/mouse/sermouse.c index 680b32353884..2a272c5daf08 100644 --- a/drivers/input/mouse/sermouse.c +++ b/drivers/input/mouse/sermouse.c | |||
@@ -61,13 +61,11 @@ struct sermouse { | |||
61 | * second, which is as good as a PS/2 or USB mouse. | 61 | * second, which is as good as a PS/2 or USB mouse. |
62 | */ | 62 | */ |
63 | 63 | ||
64 | static void sermouse_process_msc(struct sermouse *sermouse, signed char data, struct pt_regs *regs) | 64 | static void sermouse_process_msc(struct sermouse *sermouse, signed char data) |
65 | { | 65 | { |
66 | struct input_dev *dev = sermouse->dev; | 66 | struct input_dev *dev = sermouse->dev; |
67 | signed char *buf = sermouse->buf; | 67 | signed char *buf = sermouse->buf; |
68 | 68 | ||
69 | input_regs(dev, regs); | ||
70 | |||
71 | switch (sermouse->count) { | 69 | switch (sermouse->count) { |
72 | 70 | ||
73 | case 0: | 71 | case 0: |
@@ -104,15 +102,13 @@ static void sermouse_process_msc(struct sermouse *sermouse, signed char data, st | |||
104 | * standard 3-byte packets and 1200 bps. | 102 | * standard 3-byte packets and 1200 bps. |
105 | */ | 103 | */ |
106 | 104 | ||
107 | static void sermouse_process_ms(struct sermouse *sermouse, signed char data, struct pt_regs *regs) | 105 | static void sermouse_process_ms(struct sermouse *sermouse, signed char data) |
108 | { | 106 | { |
109 | struct input_dev *dev = sermouse->dev; | 107 | struct input_dev *dev = sermouse->dev; |
110 | signed char *buf = sermouse->buf; | 108 | signed char *buf = sermouse->buf; |
111 | 109 | ||
112 | if (data & 0x40) sermouse->count = 0; | 110 | if (data & 0x40) sermouse->count = 0; |
113 | 111 | ||
114 | input_regs(dev, regs); | ||
115 | |||
116 | switch (sermouse->count) { | 112 | switch (sermouse->count) { |
117 | 113 | ||
118 | case 0: | 114 | case 0: |
@@ -206,7 +202,7 @@ static void sermouse_process_ms(struct sermouse *sermouse, signed char data, str | |||
206 | */ | 202 | */ |
207 | 203 | ||
208 | static irqreturn_t sermouse_interrupt(struct serio *serio, | 204 | static irqreturn_t sermouse_interrupt(struct serio *serio, |
209 | unsigned char data, unsigned int flags, struct pt_regs *regs) | 205 | unsigned char data, unsigned int flags) |
210 | { | 206 | { |
211 | struct sermouse *sermouse = serio_get_drvdata(serio); | 207 | struct sermouse *sermouse = serio_get_drvdata(serio); |
212 | 208 | ||
@@ -214,9 +210,9 @@ static irqreturn_t sermouse_interrupt(struct serio *serio, | |||
214 | sermouse->last = jiffies; | 210 | sermouse->last = jiffies; |
215 | 211 | ||
216 | if (sermouse->type > SERIO_SUN) | 212 | if (sermouse->type > SERIO_SUN) |
217 | sermouse_process_ms(sermouse, data, regs); | 213 | sermouse_process_ms(sermouse, data); |
218 | else | 214 | else |
219 | sermouse_process_msc(sermouse, data, regs); | 215 | sermouse_process_msc(sermouse, data); |
220 | return IRQ_HANDLED; | 216 | return IRQ_HANDLED; |
221 | } | 217 | } |
222 | 218 | ||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 392108c436ba..49ac696d6cff 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
@@ -216,13 +216,13 @@ static void synaptics_pass_pt_packet(struct serio *ptport, unsigned char *packet | |||
216 | struct psmouse *child = serio_get_drvdata(ptport); | 216 | struct psmouse *child = serio_get_drvdata(ptport); |
217 | 217 | ||
218 | if (child && child->state == PSMOUSE_ACTIVATED) { | 218 | if (child && child->state == PSMOUSE_ACTIVATED) { |
219 | serio_interrupt(ptport, packet[1], 0, NULL); | 219 | serio_interrupt(ptport, packet[1], 0); |
220 | serio_interrupt(ptport, packet[4], 0, NULL); | 220 | serio_interrupt(ptport, packet[4], 0); |
221 | serio_interrupt(ptport, packet[5], 0, NULL); | 221 | serio_interrupt(ptport, packet[5], 0); |
222 | if (child->pktsize == 4) | 222 | if (child->pktsize == 4) |
223 | serio_interrupt(ptport, packet[2], 0, NULL); | 223 | serio_interrupt(ptport, packet[2], 0); |
224 | } else | 224 | } else |
225 | serio_interrupt(ptport, packet[1], 0, NULL); | 225 | serio_interrupt(ptport, packet[1], 0); |
226 | } | 226 | } |
227 | 227 | ||
228 | static void synaptics_pt_activate(struct psmouse *psmouse) | 228 | static void synaptics_pt_activate(struct psmouse *psmouse) |
@@ -469,13 +469,10 @@ static unsigned char synaptics_detect_pkt_type(struct psmouse *psmouse) | |||
469 | return SYN_NEWABS_STRICT; | 469 | return SYN_NEWABS_STRICT; |
470 | } | 470 | } |
471 | 471 | ||
472 | static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse, struct pt_regs *regs) | 472 | static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse) |
473 | { | 473 | { |
474 | struct input_dev *dev = psmouse->dev; | ||
475 | struct synaptics_data *priv = psmouse->private; | 474 | struct synaptics_data *priv = psmouse->private; |
476 | 475 | ||
477 | input_regs(dev, regs); | ||
478 | |||
479 | if (psmouse->pktcnt >= 6) { /* Full packet received */ | 476 | if (psmouse->pktcnt >= 6) { /* Full packet received */ |
480 | if (unlikely(priv->pkt_type == SYN_NEWABS)) | 477 | if (unlikely(priv->pkt_type == SYN_NEWABS)) |
481 | priv->pkt_type = synaptics_detect_pkt_type(psmouse); | 478 | priv->pkt_type = synaptics_detect_pkt_type(psmouse); |
diff --git a/drivers/input/mouse/vsxxxaa.c b/drivers/input/mouse/vsxxxaa.c index 47edcfd022ba..ffdb50eee93d 100644 --- a/drivers/input/mouse/vsxxxaa.c +++ b/drivers/input/mouse/vsxxxaa.c | |||
@@ -211,7 +211,7 @@ vsxxxaa_smells_like_packet (struct vsxxxaa *mouse, unsigned char type, size_t le | |||
211 | } | 211 | } |
212 | 212 | ||
213 | static void | 213 | static void |
214 | vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | 214 | vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse) |
215 | { | 215 | { |
216 | struct input_dev *dev = mouse->dev; | 216 | struct input_dev *dev = mouse->dev; |
217 | unsigned char *buf = mouse->buf; | 217 | unsigned char *buf = mouse->buf; |
@@ -258,7 +258,6 @@ vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
258 | /* | 258 | /* |
259 | * Report what we've found so far... | 259 | * Report what we've found so far... |
260 | */ | 260 | */ |
261 | input_regs (dev, regs); | ||
262 | input_report_key (dev, BTN_LEFT, left); | 261 | input_report_key (dev, BTN_LEFT, left); |
263 | input_report_key (dev, BTN_MIDDLE, middle); | 262 | input_report_key (dev, BTN_MIDDLE, middle); |
264 | input_report_key (dev, BTN_RIGHT, right); | 263 | input_report_key (dev, BTN_RIGHT, right); |
@@ -269,7 +268,7 @@ vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
269 | } | 268 | } |
270 | 269 | ||
271 | static void | 270 | static void |
272 | vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | 271 | vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse) |
273 | { | 272 | { |
274 | struct input_dev *dev = mouse->dev; | 273 | struct input_dev *dev = mouse->dev; |
275 | unsigned char *buf = mouse->buf; | 274 | unsigned char *buf = mouse->buf; |
@@ -312,7 +311,6 @@ vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
312 | /* | 311 | /* |
313 | * Report what we've found so far... | 312 | * Report what we've found so far... |
314 | */ | 313 | */ |
315 | input_regs (dev, regs); | ||
316 | input_report_key (dev, BTN_LEFT, left); | 314 | input_report_key (dev, BTN_LEFT, left); |
317 | input_report_key (dev, BTN_MIDDLE, middle); | 315 | input_report_key (dev, BTN_MIDDLE, middle); |
318 | input_report_key (dev, BTN_RIGHT, right); | 316 | input_report_key (dev, BTN_RIGHT, right); |
@@ -323,7 +321,7 @@ vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
323 | } | 321 | } |
324 | 322 | ||
325 | static void | 323 | static void |
326 | vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | 324 | vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse) |
327 | { | 325 | { |
328 | struct input_dev *dev = mouse->dev; | 326 | struct input_dev *dev = mouse->dev; |
329 | unsigned char *buf = mouse->buf; | 327 | unsigned char *buf = mouse->buf; |
@@ -367,7 +365,6 @@ vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
367 | 365 | ||
368 | if (error <= 0x1f) { | 366 | if (error <= 0x1f) { |
369 | /* No (serious) error. Report buttons */ | 367 | /* No (serious) error. Report buttons */ |
370 | input_regs (dev, regs); | ||
371 | input_report_key (dev, BTN_LEFT, left); | 368 | input_report_key (dev, BTN_LEFT, left); |
372 | input_report_key (dev, BTN_MIDDLE, middle); | 369 | input_report_key (dev, BTN_MIDDLE, middle); |
373 | input_report_key (dev, BTN_RIGHT, right); | 370 | input_report_key (dev, BTN_RIGHT, right); |
@@ -395,7 +392,7 @@ vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
395 | } | 392 | } |
396 | 393 | ||
397 | static void | 394 | static void |
398 | vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs) | 395 | vsxxxaa_parse_buffer (struct vsxxxaa *mouse) |
399 | { | 396 | { |
400 | unsigned char *buf = mouse->buf; | 397 | unsigned char *buf = mouse->buf; |
401 | int stray_bytes; | 398 | int stray_bytes; |
@@ -432,7 +429,7 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
432 | continue; | 429 | continue; |
433 | } | 430 | } |
434 | 431 | ||
435 | vsxxxaa_handle_REL_packet (mouse, regs); | 432 | vsxxxaa_handle_REL_packet (mouse); |
436 | continue; /* More to parse? */ | 433 | continue; /* More to parse? */ |
437 | } | 434 | } |
438 | 435 | ||
@@ -446,7 +443,7 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
446 | continue; | 443 | continue; |
447 | } | 444 | } |
448 | 445 | ||
449 | vsxxxaa_handle_ABS_packet (mouse, regs); | 446 | vsxxxaa_handle_ABS_packet (mouse); |
450 | continue; /* More to parse? */ | 447 | continue; /* More to parse? */ |
451 | } | 448 | } |
452 | 449 | ||
@@ -460,7 +457,7 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
460 | continue; | 457 | continue; |
461 | } | 458 | } |
462 | 459 | ||
463 | vsxxxaa_handle_POR_packet (mouse, regs); | 460 | vsxxxaa_handle_POR_packet (mouse); |
464 | continue; /* More to parse? */ | 461 | continue; /* More to parse? */ |
465 | } | 462 | } |
466 | 463 | ||
@@ -469,13 +466,12 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs) | |||
469 | } | 466 | } |
470 | 467 | ||
471 | static irqreturn_t | 468 | static irqreturn_t |
472 | vsxxxaa_interrupt (struct serio *serio, unsigned char data, unsigned int flags, | 469 | vsxxxaa_interrupt (struct serio *serio, unsigned char data, unsigned int flags) |
473 | struct pt_regs *regs) | ||
474 | { | 470 | { |
475 | struct vsxxxaa *mouse = serio_get_drvdata (serio); | 471 | struct vsxxxaa *mouse = serio_get_drvdata (serio); |
476 | 472 | ||
477 | vsxxxaa_queue_byte (mouse, data); | 473 | vsxxxaa_queue_byte (mouse, data); |
478 | vsxxxaa_parse_buffer (mouse, regs); | 474 | vsxxxaa_parse_buffer (mouse); |
479 | 475 | ||
480 | return IRQ_HANDLED; | 476 | return IRQ_HANDLED; |
481 | } | 477 | } |