[PATCH] ibmasm driver: redesign handling of remote control events
This patch rewrites the handling of remote control events. Rather than making them available from a special file in the ibmasmfs, now the events from the RSA card get translated into kernel input events and injected into the input subsystem. The driver now will generate two /dev/input/eventX nodes -- one for the keyboard and one for the mouse. The mouse node generates absolute events more like a touch pad than a mouse. Signed-off-by: Vernon Mauery <vernux@us.ibm.com> Signed-off-by: Max Asbock <masbock@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
b8acb80846
commit
278d72ae88
@@ -46,8 +46,8 @@ int ibmasm_send_i2o_message(struct service_processor *sp)
|
||||
|
||||
message = get_i2o_message(sp->base_address, mfa);
|
||||
|
||||
memcpy(&message->header, &header, sizeof(struct i2o_header));
|
||||
memcpy(&message->data, command->buffer, command_size);
|
||||
memcpy_toio(&message->header, &header, sizeof(struct i2o_header));
|
||||
memcpy_toio(&message->data, command->buffer, command_size);
|
||||
|
||||
set_mfa_inbound(sp->base_address, mfa);
|
||||
|
||||
@@ -59,23 +59,27 @@ irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id, struct pt_regs *reg
|
||||
u32 mfa;
|
||||
struct service_processor *sp = (struct service_processor *)dev_id;
|
||||
void __iomem *base_address = sp->base_address;
|
||||
char tsbuf[32];
|
||||
|
||||
if (!sp_interrupt_pending(base_address))
|
||||
return IRQ_NONE;
|
||||
|
||||
dbg("respond to interrupt at %s\n", get_timestamp(tsbuf));
|
||||
|
||||
if (mouse_interrupt_pending(sp)) {
|
||||
ibmasm_handle_mouse_interrupt(sp);
|
||||
mfa = get_mfa_outbound(base_address);
|
||||
ibmasm_handle_mouse_interrupt(sp, regs);
|
||||
clear_mouse_interrupt(sp);
|
||||
set_mfa_outbound(base_address, mfa);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
mfa = get_mfa_outbound(base_address);
|
||||
if (valid_mfa(mfa)) {
|
||||
struct i2o_message *msg = get_i2o_message(base_address, mfa);
|
||||
ibmasm_receive_message(sp, &msg->data, incoming_data_size(msg));
|
||||
}
|
||||
} else
|
||||
dbg("didn't get a valid MFA\n");
|
||||
|
||||
set_mfa_outbound(base_address, mfa);
|
||||
dbg("finished interrupt at %s\n", get_timestamp(tsbuf));
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
Reference in New Issue
Block a user