Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 247815
b: refs/heads/master
c: da28947
h: refs/heads/master
i:
  247813: 77f52f0
  247811: 650e96b
  247807: 3d0bcdc
v: v3
  • Loading branch information
Clemens Ladisch authored and Stefan Richter committed Apr 19, 2011
1 parent 1261aa1 commit e40c941
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ecf8328e59447b83a1f79628487e0e9f8801db84
refs/heads/master: da28947e7e3602669e27d5e9ce787436ed662fa4
25 changes: 17 additions & 8 deletions trunk/drivers/firewire/ohci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1218,6 +1218,7 @@ static void context_stop(struct context *ctx)
}

struct driver_data {
u8 inline_data[8];
struct fw_packet *packet;
};

Expand Down Expand Up @@ -1301,20 +1302,28 @@ static int at_context_queue_packet(struct context *ctx,
return -1;
}

BUILD_BUG_ON(sizeof(struct driver_data) > sizeof(struct descriptor));
driver_data = (struct driver_data *) &d[3];
driver_data->packet = packet;
packet->driver_data = driver_data;

if (packet->payload_length > 0) {
payload_bus =
dma_map_single(ohci->card.device, packet->payload,
packet->payload_length, DMA_TO_DEVICE);
if (dma_mapping_error(ohci->card.device, payload_bus)) {
packet->ack = RCODE_SEND_ERROR;
return -1;
if (packet->payload_length > sizeof(driver_data->inline_data)) {
payload_bus = dma_map_single(ohci->card.device,
packet->payload,
packet->payload_length,
DMA_TO_DEVICE);
if (dma_mapping_error(ohci->card.device, payload_bus)) {
packet->ack = RCODE_SEND_ERROR;
return -1;
}
packet->payload_bus = payload_bus;
packet->payload_mapped = true;
} else {
memcpy(driver_data->inline_data, packet->payload,
packet->payload_length);
payload_bus = d_bus + 3 * sizeof(*d);
}
packet->payload_bus = payload_bus;
packet->payload_mapped = true;

d[2].req_count = cpu_to_le16(packet->payload_length);
d[2].data_address = cpu_to_le32(payload_bus);
Expand Down

0 comments on commit e40c941

Please sign in to comment.