Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / misc / ibmasm / lowlevel.c
index 5156de2..47949a2 100644 (file)
@@ -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;
 }