From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.tuxdriver.com (charlotte.tuxdriver.com [70.61.120.58]) by dpdk.org (Postfix) with ESMTP id 4A8692FDD for ; Mon, 12 Dec 2016 15:59:26 +0100 (CET) Received: from [107.15.78.37] (helo=localhost) by smtp.tuxdriver.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.63) (envelope-from ) id 1cGS4M-0004Hf-E8; Mon, 12 Dec 2016 09:59:23 -0500 Date: Mon, 12 Dec 2016 09:59:04 -0500 From: Neil Horman To: Akhil Goyal Cc: dev@dpdk.org, thomas.monjalon@6wind.com, eclan.doherty@intel.com, pablo.de.lara.guarch@intel.com, hemant.agrawal@nxp.com, Horia Geanta Neag Message-ID: <20161212145904.GA16572@hmsreliant.think-freely.org> References: <20161205125540.6419-2-akhil.goyal@nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161205125540.6419-2-akhil.goyal@nxp.com> User-Agent: Mutt/1.7.1 (2016-10-04) X-Spam-Score: -2.9 (--) X-Spam-Status: No Subject: Re: [dpdk-dev] [dpdk-dev, 1/8] drivers/common/dpaa2: Run time assembler for Descriptor formation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Dec 2016 14:59:27 -0000 On Mon, Dec 05, 2016 at 06:25:33PM +0530, Akhil Goyal wrote: > FLib is a library which helps in making the descriptors which > is understood by NXP's SEC hardware. > This patch provides header files for command words which can be used > for descritptor formation. > > Signed-off-by: Horia Geanta Neag > Acked-by: Akhil Goyal > --- > drivers/common/dpaa2/flib/README | 43 + > drivers/common/dpaa2/flib/compat.h | 186 +++++ > drivers/common/dpaa2/flib/rta.h | 918 +++++++++++++++++++++ > .../common/dpaa2/flib/rta/fifo_load_store_cmd.h | 308 +++++++ > drivers/common/dpaa2/flib/rta/header_cmd.h | 213 +++++ > drivers/common/dpaa2/flib/rta/jump_cmd.h | 172 ++++ > drivers/common/dpaa2/flib/rta/key_cmd.h | 187 +++++ > drivers/common/dpaa2/flib/rta/load_cmd.h | 301 +++++++ > drivers/common/dpaa2/flib/rta/math_cmd.h | 366 ++++++++ > drivers/common/dpaa2/flib/rta/move_cmd.h | 405 +++++++++ > drivers/common/dpaa2/flib/rta/nfifo_cmd.h | 161 ++++ > drivers/common/dpaa2/flib/rta/operation_cmd.h | 549 ++++++++++++ > drivers/common/dpaa2/flib/rta/protocol_cmd.h | 680 +++++++++++++++ > drivers/common/dpaa2/flib/rta/sec_run_time_asm.h | 767 +++++++++++++++++ > drivers/common/dpaa2/flib/rta/seq_in_out_ptr_cmd.h | 172 ++++ > drivers/common/dpaa2/flib/rta/signature_cmd.h | 40 + > drivers/common/dpaa2/flib/rta/store_cmd.h | 149 ++++ > 17 files changed, 5617 insertions(+) > create mode 100644 drivers/common/dpaa2/flib/README > create mode 100644 drivers/common/dpaa2/flib/compat.h > create mode 100644 drivers/common/dpaa2/flib/rta.h > create mode 100644 drivers/common/dpaa2/flib/rta/fifo_load_store_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/header_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/jump_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/key_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/load_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/math_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/move_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/nfifo_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/operation_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/protocol_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/sec_run_time_asm.h > create mode 100644 drivers/common/dpaa2/flib/rta/seq_in_out_ptr_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/signature_cmd.h > create mode 100644 drivers/common/dpaa2/flib/rta/store_cmd.h > > diff --git a/drivers/common/dpaa2/flib/README b/drivers/common/dpaa2/flib/README > new file mode 100644 > index 0000000..a8b3358 > --- /dev/null > +++ b/drivers/common/dpaa2/flib/README > @@ -0,0 +1,43 @@ > +Copyright 2008-2013 Freescale Semiconductor, Inc. > + > +Runtime Assembler provides an easy and flexible runtime method for writing > +SEC descriptors. > + > +1. What's supported > +=================== > +1.1 Initialization/verification code for descriptor buffer. > +1.2 Configuration/verification code for SEC commands: > + FIFOLOAD and SEQFIFOLOAD; > + FIFOSTORE and SEQFIFOSTORE; > + SHARED HEADER and JOB HEADER; > + JUMP; > + KEY; > + LOAD and SEQLOAD; > + MATH; > + MOVE and MOVELEN; > + NFIFO - pseudo command (shortcut for writing FIFO entries using LOAD command); > + PKA OPERATION and ALGORITHM OPERATION; > + PROTOCOL; > + SEQ IN PTR and SEQ OUT PTR; > + SIGNATURE; > + STORE and SEQSTORE. > +1.3 Support for referential code: > + patching routines for LOAD, MOVE, JUMP and HEADER commands. > + raw patching (i.e. patch any 4-byte word from descriptor) > +1.4 Support for extended (32/36/40-bit) pointer size. > +1.5 SEC Eras 1-6 > + Below is a non-exhaustive list of platforms: > + Era 1 - P4080R1 > + Era 2 - P4080R2 > + Era 3 - P1010, P1023, P3041, P5020 > + Era 4 - BSC9131, BSC9132, P4080R3 > + Era 5 - P5040, B4860, T4240R1 > + Era 6 - C290, T4240R2, T1040, T2080 > + > +2. What's not supported > +======================= > +2.1 SEC Eras 7 and 8. > + > +3. Integration > +============== > +To integrate this tool into your project, rta.h file must be included. > diff --git a/drivers/common/dpaa2/flib/compat.h b/drivers/common/dpaa2/flib/compat.h > new file mode 100644 > index 0000000..bd946e1 > --- /dev/null > +++ b/drivers/common/dpaa2/flib/compat.h > @@ -0,0 +1,186 @@ > +/* > + * Copyright 2013 Freescale Semiconductor, Inc. > + * > + * SPDX-License-Identifier: BSD-3-Clause or GPL-2.0+ > + */ > + > +#ifndef __RTA_COMPAT_H__ > +#define __RTA_COMPAT_H__ > + > +#include > +#include > + > +#ifdef __GLIBC__ > +#include > +#include > +#include > +#include > +#include > + > +#ifndef __BYTE_ORDER__ > +#error "Undefined endianness" > +#endif > + > +/* FSL's Embedded Warrior C Library; assume AIOP or MC environment */ > +#elif defined(__EWL__) && (defined(AIOP) || defined(MC)) > +#include "common/fsl_string.h" > +#include "common/fsl_stdlib.h" > +#include "common/fsl_stdio.h" > +#if defined(AIOP) > +#include "dplib/fsl_cdma.h" > +#endif > +#include "fsl_dbg.h" > +#include "fsl_endian.h" > +#if _EWL_C99 > +#include > +#else > +#if !__option(c99) > +typedef unsigned char _Bool; > +#endif > +#define bool _Bool > +#define true 1 > +#define false 0 > +#define __bool_true_false_are_defined 1 > +#endif /* _EWL_C99 */ > +#else > +#error Environment not supported! > +#endif > + > +#ifndef __always_inline > +#define __always_inline inline __attribute__((always_inline)) > +#endif > + > +#ifndef __always_unused > +#define __always_unused __attribute__((unused)) > +#endif > + > +#ifndef __maybe_unused > +#define __maybe_unused __attribute__((unused)) > +#endif > + > +#if defined(__GLIBC__) && (defined(SUPPRESS_PRINTS) || \ > + (!defined(pr_debug) && !defined(RTA_DEBUG))) > +#ifndef __printf > +#define __printf(a, b) __attribute__((format(printf, 1, 2))) > +#endif > +static inline __printf(1, 2) int no_printf(const char *fmt __always_unused, ...) > +{ > + return 0; > +} > +#endif > + > +#if defined(__GLIBC__) && !defined(pr_debug) > +#if !defined(SUPPRESS_PRINTS) && defined(RTA_DEBUG) > +#define pr_debug(fmt, ...) printf(fmt, ##__VA_ARGS__) > +#else > +#define pr_debug(fmt, ...) no_printf(fmt, ##__VA_ARGS__) > +#endif > +#endif /* pr_debug */ > + > +#if defined(__GLIBC__) && !defined(pr_err) > +#if !defined(SUPPRESS_PRINTS) > +#define pr_err(fmt, ...) printf(fmt, ##__VA_ARGS__) > +#else > +#define pr_err(fmt, ...) no_printf(fmt, ##__VA_ARGS__) > +#endif > +#endif /* pr_err */ > + > +#if defined(__GLIBC__) && !defined(pr_warning) > +#if !defined(SUPPRESS_PRINTS) > +#define pr_warning(fmt, ...) printf(fmt, ##__VA_ARGS__) > +#else > +#define pr_warning(fmt, ...) no_printf(fmt, ##__VA_ARGS__) > +#endif > +#endif /* pr_warning */ > + > +#if defined(__GLIBC__) && !defined(pr_warn) > +#define pr_warn pr_warning > +#endif /* pr_warn */ Seems like logging should be folded into the rte logging facility, not controlled independently, and manipulated via redefinitions of printf > + > +/** > + * ARRAY_SIZE - returns the number of elements in an array > + * @x: array > + */ > +#ifndef ARRAY_SIZE > +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) > +#endif > + > +#ifndef ALIGN > +#define ALIGN(x, a) (((x) + ((__typeof__(x))(a) - 1)) & \ > + ~((__typeof__(x))(a) - 1)) > +#endif > + > +#ifndef BIT > +#define BIT(nr) (1UL << (nr)) > +#endif > + > +#ifndef upper_32_bits > +/** > + * upper_32_bits - return bits 32-63 of a number > + * @n: the number we're accessing > + */ > +#define upper_32_bits(n) ((uint32_t)(((n) >> 16) >> 16)) > +#endif > + > +#ifndef lower_32_bits > +/** > + * lower_32_bits - return bits 0-31 of a number > + * @n: the number we're accessing > + */ > +#define lower_32_bits(n) ((uint32_t)(n)) > +#endif > + > +/* Use Linux naming convention */ > +#ifdef __GLIBC__ > + #define swab16(x) bswap_16(x) > + #define swab32(x) bswap_32(x) > + #define swab64(x) bswap_64(x) > + /* Define cpu_to_be32 macro if not defined in the build environment */ > + #if !defined(cpu_to_be32) > + #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ > + #define cpu_to_be32(x) (x) > + #else > + #define cpu_to_be32(x) swab32(x) > + #endif > + #endif > + /* Define cpu_to_le32 macro if not defined in the build environment */ > + #if !defined(cpu_to_le32) > + #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ > + #define cpu_to_le32(x) swab32(x) > + #else > + #define cpu_to_le32(x) (x) > + #endif Definately shouldn't be redefining your own byte swapping routines here.