firewire: fix async reception on big endian machines
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Sat, 23 Jun 2007 18:28:17 +0000 (20:28 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Fri, 29 Jun 2007 15:32:07 +0000 (17:32 +0200)
descriptor.data_address is little endian

Tested-by: Olaf Hering <olh@suse.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Kristian Høgsberg <krh@redhat.com>
drivers/firewire/fw-ohci.c

index b72a5c1f9e6999575c17b4801073df0799f37dd1..96c8ac5b86ccceaeed1ce0355b1f8c0c3cd1dda0 100644 (file)
@@ -373,8 +373,8 @@ static void ar_context_tasklet(unsigned long data)
 
                offset = offsetof(struct ar_buffer, data);
                dma_unmap_single(ohci->card.device,
 
                offset = offsetof(struct ar_buffer, data);
                dma_unmap_single(ohci->card.device,
-                                ab->descriptor.data_address - offset,
-                                PAGE_SIZE, DMA_BIDIRECTIONAL);
+                       le32_to_cpu(ab->descriptor.data_address) - offset,
+                       PAGE_SIZE, DMA_BIDIRECTIONAL);
 
                buffer = ab;
                ab = ab->next;
 
                buffer = ab;
                ab = ab->next;
@@ -427,7 +427,7 @@ static void ar_context_run(struct ar_context *ctx)
        size_t offset;
 
        offset = offsetof(struct ar_buffer, data);
        size_t offset;
 
        offset = offsetof(struct ar_buffer, data);
-       ab_bus = ab->descriptor.data_address - offset;
+       ab_bus = le32_to_cpu(ab->descriptor.data_address) - offset;
 
        reg_write(ctx->ohci, COMMAND_PTR(ctx->regs), ab_bus | 1);
        reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_RUN);
 
        reg_write(ctx->ohci, COMMAND_PTR(ctx->regs), ab_bus | 1);
        reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_RUN);