From patchwork Tue Apr 26 18:14:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bill Fischofer X-Patchwork-Id: 66724 Delivered-To: patch@linaro.org Received: by 10.140.93.198 with SMTP id d64csp1764321qge; Tue, 26 Apr 2016 11:20:08 -0700 (PDT) X-Received: by 10.107.200.22 with SMTP id y22mr5796366iof.56.1461694808554; Tue, 26 Apr 2016 11:20:08 -0700 (PDT) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id d42si4855510ioj.98.2016.04.26.11.20.08; Tue, 26 Apr 2016 11:20:08 -0700 (PDT) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id F2DA961103; Tue, 26 Apr 2016 18:20:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 1BA81611FE; Tue, 26 Apr 2016 18:16:41 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id E2BFF610B9; Tue, 26 Apr 2016 18:16:30 +0000 (UTC) Received: from mail-oi0-f42.google.com (mail-oi0-f42.google.com [209.85.218.42]) by lists.linaro.org (Postfix) with ESMTPS id 8EE0261101 for ; Tue, 26 Apr 2016 18:14:22 +0000 (UTC) Received: by mail-oi0-f42.google.com with SMTP id r78so24056138oie.0 for ; Tue, 26 Apr 2016 11:14:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=wOOFgHO/pSGpiV25TVzTDbSmOGSFV0ioxt5cVELk+Xw=; b=br/sxw6OuBomzPij1+9ll5LbW1gauVxzYhwLCVw9Y12M0O4oYitqW3DDaXhLCaHOjf D0EHXrepHWLAam2V5yNtm6nupNtaw3OQs9Z7tyIe6tTRXK2uyYJG5jdQx4MISLNKThPY MsqMjm6pLai0kMT6U1vq0crLzoRrZ4wxOwNnRtZWBVryivrrwIg2dvR0d11Xn1YrVp/w 5fz5VSXTwKMMJt/5kH8pwbFPzE413ExmXnEaROCYzx2F7UmmbwuoJXbisa3Cql+5WwvK UDrZFLebKvq6/9+KfB8r1qbkkrtLi1CTle3XU1FuDOaLOPwpVin7D8wdHr7yMDzrwde0 cBvQ== X-Gm-Message-State: AOPr4FU3SIRwfcp//cqmxrkhPXBe68iU6etL375xnpAB6fZhpO12feCzds0dOppJXQSh8ZHIr+g= X-Received: by 10.157.42.161 with SMTP id e30mr1798222otb.39.1461694461933; Tue, 26 Apr 2016 11:14:21 -0700 (PDT) Received: from Ubuntu15.localdomain (cpe-66-68-129-43.austin.res.rr.com. [66.68.129.43]) by smtp.gmail.com with ESMTPSA id il4sm51313obb.3.2016.04.26.11.14.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 26 Apr 2016 11:14:21 -0700 (PDT) From: Bill Fischofer To: lng-odp@lists.linaro.org Date: Tue, 26 Apr 2016 13:14:12 -0500 Message-Id: <1461694454-11128-6-git-send-email-bill.fischofer@linaro.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1461694454-11128-1-git-send-email-bill.fischofer@linaro.org> References: <1461694454-11128-1-git-send-email-bill.fischofer@linaro.org> X-Topics: patch Subject: [lng-odp] [API-NEXT PATCHv4 5/7] linux-generic: packet: implement odp_packet_copy_from_pkt api X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" Remove the previous _odp_packet_copy_to_packet() internal API and replace with the official odp_packet_copy_from_pkt() API. Signed-off-by: Bill Fischofer --- .../linux-generic/include/odp_packet_internal.h | 4 -- platform/linux-generic/odp_crypto.c | 10 +-- platform/linux-generic/odp_packet.c | 83 ++++++++++------------ 3 files changed, 44 insertions(+), 53 deletions(-) diff --git a/platform/linux-generic/include/odp_packet_internal.h b/platform/linux-generic/include/odp_packet_internal.h index 9ea95c3..93a92a0 100644 --- a/platform/linux-generic/include/odp_packet_internal.h +++ b/platform/linux-generic/include/odp_packet_internal.h @@ -290,10 +290,6 @@ static inline int packet_parse_not_complete(odp_packet_hdr_t *pkt_hdr) } /* Forward declarations */ -int _odp_packet_copy_to_packet(odp_packet_t srcpkt, uint32_t srcoffset, - odp_packet_t dstpkt, uint32_t dstoffset, - uint32_t len); - void _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt); odp_packet_t packet_alloc(odp_pool_t pool_hdl, uint32_t len, int parse); diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c index 7448575..f603bcd 100644 --- a/platform/linux-generic/odp_crypto.c +++ b/platform/linux-generic/odp_crypto.c @@ -731,11 +731,11 @@ odp_crypto_operation(odp_crypto_op_params_t *params, if (params->pkt != params->out_pkt) { if (odp_unlikely(ODP_PACKET_INVALID == params->out_pkt)) ODP_ABORT(); - (void)_odp_packet_copy_to_packet(params->pkt, - 0, - params->out_pkt, - 0, - odp_packet_len(params->pkt)); + (void)odp_packet_copy_from_pkt(params->out_pkt, + 0, + params->pkt, + 0, + odp_packet_len(params->pkt)); _odp_packet_copy_md_to_packet(params->pkt, params->out_pkt); odp_packet_free(params->pkt); params->pkt = ODP_PACKET_INVALID; diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index e4f9620..e806a75 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -630,11 +630,9 @@ int odp_packet_add_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) if (newpkt == ODP_PACKET_INVALID) return -1; - if (_odp_packet_copy_to_packet(pkt, 0, - newpkt, 0, offset) != 0 || - _odp_packet_copy_to_packet(pkt, offset, newpkt, - offset + len, - pktlen - offset) != 0) { + if (odp_packet_copy_from_pkt(newpkt, 0, pkt, 0, offset) != 0 || + odp_packet_copy_from_pkt(newpkt, offset + len, pkt, offset, + pktlen - offset) != 0) { odp_packet_free(newpkt); return -1; } @@ -661,11 +659,9 @@ int odp_packet_rem_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) if (newpkt == ODP_PACKET_INVALID) return -1; - if (_odp_packet_copy_to_packet(pkt, 0, - newpkt, 0, offset) != 0 || - _odp_packet_copy_to_packet(pkt, offset + len, - newpkt, offset, - pktlen - offset - len) != 0) { + if (odp_packet_copy_from_pkt(newpkt, 0, pkt, 0, offset) != 0 || + odp_packet_copy_from_pkt(newpkt, offset, pkt, offset + len, + pktlen - offset - len) != 0) { odp_packet_free(newpkt); return -1; } @@ -702,8 +698,8 @@ odp_packet_t odp_packet_copy(odp_packet_t pkt, odp_pool_t pool) memcpy(newstart, srcstart, sizeof(odp_packet_hdr_t) - meta_offset); - if (_odp_packet_copy_to_packet(pkt, 0, - newpkt, 0, pktlen) != 0) { + if (odp_packet_copy_from_pkt(newpkt, 0, pkt, 0, + pktlen) != 0) { odp_packet_free(newpkt); newpkt = ODP_PACKET_INVALID; } @@ -760,6 +756,37 @@ int odp_packet_copy_from_mem(odp_packet_t pkt, uint32_t offset, return 0; } +int odp_packet_copy_from_pkt(odp_packet_t dst, uint32_t dst_offset, + odp_packet_t src, uint32_t src_offset, + uint32_t len) +{ + odp_packet_hdr_t *dst_hdr = odp_packet_hdr(dst); + odp_packet_hdr_t *src_hdr = odp_packet_hdr(src); + void *dst_map; + void *src_map; + uint32_t cpylen, minseg; + uint32_t dst_seglen = 0; /* GCC */ + uint32_t src_seglen = 0; /* GCC */ + + if (dst_offset + len > dst_hdr->frame_len || + src_offset + len > src_hdr->frame_len) + return -1; + + while (len > 0) { + dst_map = packet_map(dst_hdr, dst_offset, &dst_seglen); + src_map = packet_map(src_hdr, src_offset, &src_seglen); + + minseg = dst_seglen > src_seglen ? src_seglen : dst_seglen; + cpylen = len > minseg ? minseg : len; + memcpy(dst_map, src_map, cpylen); + + dst_offset += cpylen; + src_offset += cpylen; + len -= cpylen; + } + + return 0; +} /* * * Debugging @@ -835,38 +862,6 @@ void _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt) copy_packet_parser_metadata(srchdr, dsthdr); } -int _odp_packet_copy_to_packet(odp_packet_t srcpkt, uint32_t srcoffset, - odp_packet_t dstpkt, uint32_t dstoffset, - uint32_t len) -{ - odp_packet_hdr_t *srchdr = odp_packet_hdr(srcpkt); - odp_packet_hdr_t *dsthdr = odp_packet_hdr(dstpkt); - void *srcmap; - void *dstmap; - uint32_t cpylen, minseg; - uint32_t srcseglen = 0; /* GCC */ - uint32_t dstseglen = 0; /* GCC */ - - if (srcoffset + len > srchdr->frame_len || - dstoffset + len > dsthdr->frame_len) - return -1; - - while (len > 0) { - srcmap = packet_map(srchdr, srcoffset, &srcseglen); - dstmap = packet_map(dsthdr, dstoffset, &dstseglen); - - minseg = dstseglen > srcseglen ? srcseglen : dstseglen; - cpylen = len > minseg ? minseg : len; - memcpy(dstmap, srcmap, cpylen); - - srcoffset += cpylen; - dstoffset += cpylen; - len -= cpylen; - } - - return 0; -} - /** * Parser helper function for IPv4 */