Direct memory access descriptor
First Claim
Patent Images
1. A system comprising:
- a memory;
a first buffer;
a second buffer; and
a direct memory access circuit coupled to the memory and first and second buffers and configured to;
receive a data transfer request indicating a first descriptor and a second descriptor, wherein the first descriptor indicates a first set of addresses of the first buffer from which a set of data is to be read and the second descriptor indicates a second set of addresses of the second buffer to which the set of data is to be written;
wherein;
the first descriptor references a first linked list of descriptor blocks,the second descriptor references a second linked list of descriptor blocks, andeach of the descriptor blocks is stored in a contiguous portion of the memory, each descriptor block stores a set of descriptor entries that references a plurality of addresses of the first or second sets of addresses, and each descriptor entry includes a marker;
in response to receiving the data transfer request, transfer the set of data from the first set of addresses in the first buffer to the second set of addresses in the second buffer by traversing the first and second linked lists of descriptor blocks;
in response to the marker in a descriptor entry of the first descriptor or the second descriptor being a pause marker, pausing the transfer of the set of data from the first set of addresses in the first buffer for a period of time until the pause marker is removed; and
in response to the marker in a descriptor entry of the first descriptor or the second descriptor being a stop marker, ending the transfer the set of data from the first set of addresses in the first buffer.
1 Assignment
0 Petitions
Accused Products
Abstract
Methods and systems are disclosed for transferring data using descriptors to reference memory locations at which data is to be written to or read from. Each descriptor references a respective linked list of descriptor blocks. Each of the descriptor blocks includes a contiguous portion of the memory that stores a plurality of addresses, at which data is to be written to or read from. In response to receiving the data transfer request, a set of data is transferred from a first set of addresses specified in a first descriptor to a second set of addresses specified in a second descriptor by traversing the linked lists of descriptor blocks in the first and second descriptors.
14 Citations
18 Claims
-
1. A system comprising:
-
a memory; a first buffer; a second buffer; and a direct memory access circuit coupled to the memory and first and second buffers and configured to; receive a data transfer request indicating a first descriptor and a second descriptor, wherein the first descriptor indicates a first set of addresses of the first buffer from which a set of data is to be read and the second descriptor indicates a second set of addresses of the second buffer to which the set of data is to be written; wherein; the first descriptor references a first linked list of descriptor blocks, the second descriptor references a second linked list of descriptor blocks, and each of the descriptor blocks is stored in a contiguous portion of the memory, each descriptor block stores a set of descriptor entries that references a plurality of addresses of the first or second sets of addresses, and each descriptor entry includes a marker; in response to receiving the data transfer request, transfer the set of data from the first set of addresses in the first buffer to the second set of addresses in the second buffer by traversing the first and second linked lists of descriptor blocks; in response to the marker in a descriptor entry of the first descriptor or the second descriptor being a pause marker, pausing the transfer of the set of data from the first set of addresses in the first buffer for a period of time until the pause marker is removed; and in response to the marker in a descriptor entry of the first descriptor or the second descriptor being a stop marker, ending the transfer the set of data from the first set of addresses in the first buffer. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8)
-
-
9. A method for transferring a set of data from a source buffer, comprising:
-
providing to a direct memory access circuit, a first descriptor that indicates a set of addresses in the source buffer at which the set of data is located, wherein; the first descriptor references a first linked list of a plurality of descriptor blocks, and each descriptor block is stored in a contiguous portion of a memory, each descriptor block stores a plurality of descriptor entries that references a plurality of addresses of the set of addresses, and each descriptor entry includes a marker; selecting by the direct memory access circuit, a first memory location of a first descriptor block of the first linked list as a current first location; and performing by the direct memory access circuit a first set of operations including; reading data from an address in the source buffer referenced by the descriptor entry at the current first location; in response to the descriptor entry at the current first location having a data marker indicating that the first descriptor includes additional descriptor entries; in response to the next memory location following the current first location being a last memory location in a descriptor block, selecting a memory location referenced by the next memory location as a new current first location, and otherwise, selecting the next memory location as the new current first location; and repeating the first set of operations; in response to the marker in the descriptor entry at the current first location being a pause marker, pausing the transfer of the set of data from the source buffer for a period of time until the pause marker is removed; and in response to the marker in the descriptor entry at the current first location being a stop marker, ending the transfer the set of data from the source buffer. - View Dependent Claims (10, 11, 12, 13, 14)
-
-
15. A method for creation of a descriptor for a data transfer, comprising:
-
for a first data segment of a data transfer to or from a data buffer, allocating a contiguous block of memory for a first descriptor block having a plurality of descriptor entries; in a first one of the plurality of descriptor entries of the first descriptor block, storing a starting address for the first data segment in a source buffer and a size of the first data segment; and selecting a next descriptor entry of the first plurality of descriptor entries following a first one of the plurality of descriptor entries as a current first descriptor entry; for each data segment of the data transfer following the first data segment; in response to the current first memory location being a last memory location of the descriptor block; allocating an additional contiguous block of memory for an additional descriptor block having a plurality of descriptor entries; and selecting a first descriptor entry of the additional descriptor block as the current first descriptor entry; and storing, at the current first descriptor entry;
a starting address for the subsequent data segment and a size of the subsequent data segment;adding a pause marker to a descriptor entry at the current first descriptor entry in response to the data transfer including additional data segments not ready for transfer; and adding a stop marker to a descriptor entry at the current first descriptor entry in response to the data transfer including no additional data segments. - View Dependent Claims (16, 17, 18)
-
Specification