1. A method of packet assembly, comprising: sending a first packet descriptor from a first FIFO to a second direct memory access (DMA) engine, wherein the first packet descriptor is a pointer-to-pointer (P2P) packet descriptor that includes pointer information, and the second DMA engine uses the first packet descriptor to retrieve a first pointer; retrieving the first pointer referenced by the pointer information of the first packet descriptor, providing the first pointer to a first DMA engine; using the first DMA engine to retrieve packet data referenced by the first pointer; sending a second packet descriptor from the first FIFO to the first DMA engine, wherein the second packet descriptor is a pointer-to-data (P2D) packet descriptor that includes a second pointer; using the first DMA engine to retrieve packet data referenced by the second pointer; and storing the first and second packet descriptors in the first FIFO.