- DPAA_DP_LOG(DEBUG, "Non-BMAN offloaded buffer."
- "Allocating an offloaded buffer");
- dmable_mbuf = dpaa_get_dmable_mbuf(mbuf, dpaa_intf);
- if (!dmable_mbuf) {
- DPAA_DP_LOG(DEBUG, "no dpaa buffers.");
- return 1;
+ temp_mbuf = mbuf;
+
+ while (temp_mbuf) {
+ /* If mbuf data is less than new mbuf remaining memory */
+ if ((temp_mbuf->data_len - offset1) < (mbufs_size - offset2)) {
+ bytes_to_copy = temp_mbuf->data_len - offset1;
+ mbuf_greater = -1;
+ /* If mbuf data is greater than new mbuf remaining memory */
+ } else if ((temp_mbuf->data_len - offset1) >
+ (mbufs_size - offset2)) {
+ bytes_to_copy = mbufs_size - offset2;
+ mbuf_greater = 1;
+ /* if mbuf data is equal to new mbuf remaining memory */
+ } else {
+ bytes_to_copy = temp_mbuf->data_len - offset1;
+ mbuf_greater = 0;
+ }
+
+ /* Copy the data */
+ data = rte_pktmbuf_append(new_mbufs[0], bytes_to_copy);
+
+ rte_memcpy((uint8_t *)data, rte_pktmbuf_mtod_offset(mbuf,
+ void *, offset1), bytes_to_copy);
+
+ /* Set new offsets and the temp buffers */
+ if (mbuf_greater == -1) {
+ offset1 = 0;
+ offset2 += bytes_to_copy;
+ temp_mbuf = temp_mbuf->next;
+ } else if (mbuf_greater == 1) {
+ offset2 = 0;
+ offset1 += bytes_to_copy;
+ new_mbufs[i]->next = new_mbufs[i + 1];
+ new_mbufs[0]->nb_segs++;
+ i++;
+ } else {
+ offset1 = 0;
+ offset2 = 0;
+ temp_mbuf = temp_mbuf->next;
+ new_mbufs[i]->next = new_mbufs[i + 1];
+ if (new_mbufs[i + 1])
+ new_mbufs[0]->nb_segs++;
+ i++;
+ }