Lines Matching refs:buffer
29 int fw_iso_buffer_alloc(struct fw_iso_buffer *buffer, int page_count)
33 buffer->page_count = 0;
34 buffer->page_count_mapped = 0;
35 buffer->pages = kmalloc_array(page_count, sizeof(buffer->pages[0]),
37 if (buffer->pages == NULL)
41 buffer->pages[i] = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO);
42 if (buffer->pages[i] == NULL)
45 buffer->page_count = i;
47 fw_iso_buffer_destroy(buffer, NULL);
54 int fw_iso_buffer_map_dma(struct fw_iso_buffer *buffer, struct fw_card *card,
60 buffer->direction = direction;
62 for (i = 0; i < buffer->page_count; i++) {
63 address = dma_map_page(card->device, buffer->pages[i],
68 set_page_private(buffer->pages[i], address);
70 buffer->page_count_mapped = i;
71 if (i < buffer->page_count)
77 int fw_iso_buffer_init(struct fw_iso_buffer *buffer, struct fw_card *card,
82 ret = fw_iso_buffer_alloc(buffer, page_count);
86 ret = fw_iso_buffer_map_dma(buffer, card, direction);
88 fw_iso_buffer_destroy(buffer, card);
94 void fw_iso_buffer_destroy(struct fw_iso_buffer *buffer,
100 for (i = 0; i < buffer->page_count_mapped; i++) {
101 address = page_private(buffer->pages[i]);
103 PAGE_SIZE, buffer->direction);
105 for (i = 0; i < buffer->page_count; i++)
106 __free_page(buffer->pages[i]);
108 kfree(buffer->pages);
109 buffer->pages = NULL;
110 buffer->page_count = 0;
111 buffer->page_count_mapped = 0;
115 /* Convert DMA address to offset into virtually contiguous buffer. */
116 size_t fw_iso_buffer_lookup(struct fw_iso_buffer *buffer, dma_addr_t completed)
122 for (i = 0; i < buffer->page_count; i++) {
123 address = page_private(buffer->pages[i]);
175 struct fw_iso_buffer *buffer,
178 return ctx->card->driver->queue_iso(ctx, packet, buffer, payload);