X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmisc%2Fibmasm%2Flowlevel.c;h=a3c589b7cbfa58590a29c1ae5f5038870d8291de;hb=a2f44b27303a5353859d77a3e96a1d3f33f56ab7;hp=5156de2759d864751bc8e9b4dcd12773070957a1;hpb=433e2af4175021d339b067f6e7ee0a4e4c4f7e2d;p=linux-2.6.git diff --git a/drivers/misc/ibmasm/lowlevel.c b/drivers/misc/ibmasm/lowlevel.c index 5156de275..a3c589b7c 100644 --- a/drivers/misc/ibmasm/lowlevel.c +++ b/drivers/misc/ibmasm/lowlevel.c @@ -46,36 +46,40 @@ 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); return 0; } -irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id, struct pt_regs *regs) +irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id) { 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); 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; }