Lines Matching refs:buffer

35 	DMABuffer* buffer = (DMABuffer*)malloc(
37 if (buffer == NULL)
40 buffer->fVecCount = count;
42 return buffer;
79 kprintf(" bounce buffer: %p (physical %#" B_PRIxPHYSADDR ")\n",
81 kprintf(" bounce buffer size: %" B_PRIxPHYSADDR "\n", fBounceBuffer->size);
187 TRACE("DMAResource::Init(): chose bounce buffer size %lu\n",
206 DMABuffer* buffer;
207 status_t error = CreateBuffer(&buffer);
211 fDMABuffers.Add(buffer);
216 DMABounceBuffer* buffer;
217 status_t error = CreateBounceBuffer(&buffer);
221 fBounceBuffers.Add(buffer);
231 DMABuffer* buffer = DMABuffer::Create(fRestrictions.max_segment_count);
232 if (buffer == NULL)
235 *_buffer = buffer;
255 area = create_area_etc(B_SYSTEM_TEAM, "dma buffer", size, B_CONTIGUOUS,
272 DMABounceBuffer* buffer = new(std::nothrow) DMABounceBuffer;
273 if (buffer == NULL) {
278 buffer->address = bounceBuffer;
279 buffer->physical_address = physicalBase;
280 buffer->size = size;
282 *_buffer = buffer;
304 DMAResource::_CutBuffer(DMABuffer& buffer, phys_addr_t& physicalBounceBuffer,
307 int32 vecCount = buffer.VecCount();
309 generic_io_vec& vec = buffer.VecAt(i);
311 bool inBounceBuffer = buffer.UsesBounceBufferAt(i);
332 buffer.SetVecCount(vecCount);
336 /*! Adds \a length bytes from the bounce buffer to the DMABuffer \a buffer.
342 additions to the DMA buffer, and you will need to cut them back.
344 \return >0 the number of bytes added to the buffer.
347 DMAResource::_AddBounceBuffer(DMABuffer& buffer,
360 uint32 vecCount = buffer.VecCount();
362 // see if we can join the bounce buffer with the previously last vec
363 generic_io_vec& vec = buffer.VecAt(vecCount - 1);
391 buffer.AddVec(physicalBounceBuffer, vecLength);
408 IOBuffer* buffer = request->Buffer();
439 if (buffer->IsVirtual()) {
440 // Unless we need the bounce buffer anyway, we have to translate the
443 TRACE(" buffer is virtual %s\n", buffer->IsUser() ? "user" : "kernel");
450 TRACE(" create physical map (for %ld vecs)\n", buffer->VecCount());
451 for (uint32 i = vecIndex; i < buffer->VecCount(); i++) {
452 generic_io_vec& vec = buffer->VecAt(i);
486 vecs = buffer->Vecs();
487 segmentCount = min_c(buffer->VecCount() - vecIndex,
499 // check alignment, boundaries, etc. and set vecs in DMA buffer
501 // Fetch a bounce buffer we can use for the DMABuffer.
516 // If the offset isn't block-aligned, use the bounce buffer to bridge the
545 TRACE(" partial begin, using bounce buffer: offset: %" B_PRIdOFF ", length: "
578 // Check low address: use bounce buffer for range to low address.
579 // Check alignment: if not aligned, use bounce buffer for complete vec.
582 TRACE(" vec %" B_PRIu32 ": below low address, using bounce buffer: %lu\n", i,
586 TRACE(" vec %" B_PRIu32 ": misalignment, using bounce buffer: %lu\n", i,
600 // If length is 0, use bounce buffer for complete vec.
604 TRACE(" vec %" B_PRIu32 ": 0 length, using bounce buffer: %lu\n", i,
616 TRACE(" vec %" B_PRIu32 ": out of bounce buffer space\n", i);
617 // We don't have any bounce buffer space left, we need to move
633 // buffer (or else we would overwrite memory to be written on the read in
641 // vec is a bounce buffer segment shorter than the block size. If so, we
642 // have to cut back the complete block and use a bounce buffer for it
651 // We can be certain that the last vec is a bounce buffer vec,
652 // since otherwise the DMA buffer couldn't exceed the end of the
660 // a block-sized bounce buffer segment.
670 TRACE(" adding bounce buffer failed!!!\n");
678 // If total length not block aligned, use bounce buffer for padding (read
687 // TODO: sometimes we can replace the last vec with the bounce buffer
694 "count restrictions, or lacking bounce buffer space\n");
701 // bounce buffer for as much as possible of the total length.
715 TRACE(" adding %lu bytes final bounce buffer\n",
734 // If we don't need the bounce buffer, we put it back, otherwise
753 DMAResource::RecycleBuffer(DMABuffer* buffer)
755 if (buffer == NULL)
759 fDMABuffers.Add(buffer);
760 if (buffer->BounceBuffer() != NULL) {
761 fBounceBuffers.Add(buffer->BounceBuffer());
762 buffer->SetBounceBuffer(NULL);
801 dma_buffer_free(buffer)
803 // Allocates or frees memory in that DMA buffer.