From patchwork Mon Apr 9 04:47:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 37617 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6CB0B1B72B; Mon, 9 Apr 2018 06:49:13 +0200 (CEST) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0045.outbound.protection.outlook.com [104.47.34.45]) by dpdk.org (Postfix) with ESMTP id 295931B6F4 for ; Mon, 9 Apr 2018 06:49:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=nlMqUpcOnUYQUrP2BBa3mO7x9aIE182QxBLCZnYJJKk=; b=MUhVTa6hzstG9dUBHMBS5BYCfi+HibMjS1zwGrj2n7ZtGbpfGaibRZlmIJD9RQSLHnP2PcpmfH9E9Dngxs2kwz2Zj/f5DFcj4MfiUEAJLkI+YFBvicznO8AVejrrNF0WHL3x22/qCMDcKlg9A2/DJqwok7QHKiK1bjfiZTZRZac= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Mon, 9 Apr 2018 04:49:03 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Rasesh Mody , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sun, 8 Apr 2018 21:47:59 -0700 Message-Id: <1523249290-7444-4-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> References: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BYAPR03CA0036.namprd03.prod.outlook.com (2603:10b6:a02:a8::49) To MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ebd83167-e1c2-4f71-cdab-08d59dd5380b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:MWHPR0701MB3675; X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 3:IBVPRD8IEYTX/Kz9R2bhCVMMIhSnN1WKN//pMlogj3Hnoeh6PxDyqpX3vSlXzNfUNIErcHRG2+CGIU4AtefwdaIahVprkueDA0cnDR5CjZmtvteX6GqSZUx3ae2CzM7fKXthiSshpTwKvhknR2PJHTYvAFdHkcVU6XspP5INqBmi5BwySTfUKux+fk+GZuXvlQGjX6WzWiAbRHTe/bIrrMV2+t+2dbXWDuE9AsYIh7YbQS4rrwnGdFxEIHvcH1Fx; 25:jiqm0sNdO7J3IDOGyvARZJ7+/8YCCP4CKStDMpZnzwKU7S0/6mTA4yAT+9Uaq52oB4a9VbYRXG8zCPTmJVlHkDuJh2T8LP0tQPEiz8fP2Dz4PHDUhDcjiUaVwbSh46KgzsAf2DOaFjYSGc3ZscmH5uJ0e8za21ARDinRrwNulLDr2qPiXhP4WhDLh51rZj1T9wvRwoX0qC7Oi0RPYUwLEK4t+mpXcLc26mfF3nLGrxBxLbqXajXlBmBTsSOBavAR5ZgbEhUeC1DeMvrojbgDmTEQw6xKjBlncmmLmtQfgY4T4GsaxqbgNIY0UWZT+LRRKvTvdItMkircylprADI6dg==; 31:qncn9NPBDWW9NVW0EYCF4bw1GOWWApgp1mYVfqINCQzu7dI3E9kIet2zxK1M2KoVQoLRwVZqPN9CnbMpQL6TCbAiATdOqXJM/QP/vcCBDaI2ElxPJtk4XHLZY/WR2m8ZkhfQXWA/SxODxrAcWgesQX3HeBfEOqu1Kbo/2/YlfL5gTqd1A/ZQoVgoEeJ4LGw8K3RbdKF2Qq0ebfp5qw35nBTgfi6O6EfKwvpalvgbpNU= X-MS-TrafficTypeDiagnostic: MWHPR0701MB3675: X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 20:pLo42TJDMHzrx91cf3RzqLWMbEP/W9M/nMlBwH1d1wYRX7FC28FEaAhWDvY+kZEPcKPEm/x9727ho+KRhOVUP6vgxhypfHWnxUwXw7FKWNwgrxGw5iAcmnPklUfEuWuiHC0vXcgVtoWrhAPa0qqPvvRAMmJCztFzn7ALQfkUSfFUbst2xGyuBLsZTv9YBYf8oE6WLRiD+pm8QNiCBh5qoateAUcHYukv99mpX3bAFUREstRTn60lHBpqgIlh4IG1emNpU2SDyR6YvCFsailHNvj001nd6AVjoV1vLnEeyzL/gOVJ87zANXX5dwFQx9WWS+fc6jWcQ6YcxCVGffqH9uikQWRuZrafFctAo9/WKS/H7dnsbQst+W2Yy7VScrHGOI8oxR//OFrgmFt+zBzVhmUnyhgV+F3tiZqCIErhq8O9QAKI8jzD3NgZPtvVpY4mtnCvwY6RQOAO4D6bjiN1f9zuDiBobn1TyF1+LSAB/5YLEOJFdGWgAW+4yzLMD0d1; 4:tqk5nbIeELf9NuAzmyeSi19uj7MGiSZKnRNEfoT27bPOndTks4/sWoFNIOhRyvl9tBLEgrWJzDrDz/MOzV5k154zuRae/8S6N4xtax8MQX14+nRRamKKjf3Nsxzg/F1nDrdjzQgJLGP5mqZ6F4Xm3fau301JrS5AwT3YY4ca87wcEvouD3hXOtBYm7gwr1eM26WP/5McEssmL7hCogHDR0o8zytgJJkJbM1oEA+7E93c7m1CwRo1I4jjN06a2+ucRM6BYKABYlnf/9c0E5DFoA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(3231221)(944501327)(52105095)(10201501046)(93006095)(93001095)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:MWHPR0701MB3675; BCL:0; PCL:0; RULEID:; SRVR:MWHPR0701MB3675; X-Forefront-PRVS: 0637FCE711 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(39380400002)(39850400004)(376002)(189003)(199004)(105586002)(8936002)(316002)(7736002)(2351001)(72206003)(305945005)(186003)(21086003)(16526019)(486006)(2906002)(59450400001)(2361001)(386003)(55016002)(86362001)(3846002)(478600001)(6116002)(76176011)(50226002)(51416003)(52116002)(7696005)(4326008)(50466002)(48376002)(53936002)(16586007)(81166006)(66066001)(476003)(68736007)(2616005)(11346002)(69596002)(47776003)(26005)(956004)(8676002)(6666003)(97736004)(4720700003)(25786009)(107886003)(81156014)(36756003)(446003)(106356001)(5660300001)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR0701MB3675; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR0701MB3675; 23:JTsJQGWu0QPE6SQdoU0Tb7zWwFx9LQQoAnbQ3Uj?= 4NxHXWz94dVxxqYEhN34QLHqEuWOWTHwsqcGzw9ykfrzHeWhJ54FDnj9hk7PBX1tOi/LaGKeXmskhsNpUagCfcIcAFZPE3/FvPrT6HcrQipyg2+ZNdCifD6+9muLCPYfk/g0Yj7zXDCWBz/qEzZUKyUr+rNBOova2rdPAc516o6BJsCtPaw/wKonuuSdfUtt2b/4f3jSzwDTvP9afseCL37HsOPy0/v7c8C+gCzoHs0F7epgMvmvyiNBZfs+mvgMEffXS3GzOMbq7ErulZ2D0lBz9YrI1wm1Z9VSfB1RIetPwC1q8et/fsC420yvhXMGmBRfmo/RJnOJiFQ1W+Gt8v2hi9OC0bMj3y6Ulmg3vE/KQs0tA19AKQ+1sS8wg9c7FqoBFjrpa64d6aO2i5b0jL+JM8dZQdrpqSZyObFf/UxNnGWJiguJR+MZ7h5ptLCa7zDt0wA6AyxoIA5rEI6j/vQdL1uvQRqDN25r++O5BKltV63a/h6KdPjgvJMaVbbXVBSU1jCFM8Wh9PErOPKJzznfN5ZnI6xAGDfX2vi8xXgx/0EVkSFJI8lTvR10/8yIG0pHRX2Vi8sdy9ry0G5dk5/cGMQL9Es1Lz4NyEbfp/8pi42KPOgREwyapMpgBxDRu6WfSZWaHhaa3orlWFyDVJfAQqlyeS4Jgn0H9pv8V9AlhanqDvR2n5jFiWl6wRzXgS4JMub48upUq+fWAeEdRiY1MbI2BN6lybwgK8mBucghtLE5Tm3nVP/6CjaBv6HVg5gvwd53ALvJekkZKL5XDck8qFQT1VJYQV8zHmmwOBNwmg50MO+0qbTd3PI3JP6+j5/OKIKHbOsfv7zN2HGADFXWFFURnO0J05WzC2cRi0otWXv74Vh2ZcjlwwTKl/7gsRCHcF7PkobOb1eDH4DOgRHxp3X4QrsZ+IMPp/KVHa7cmzjfXPw9BpjvapF+TW+GVnikRtFmuFHtUSK0xxIz1aFuiH6FSardpQhDAhKCdZDG7i83aOHMBl9CIP0cVFlIpjmebV2HVk/iCseiyv5L43PszazusROiwv1jND0XeV0o3O6s91+WjTACYb7N6P2zVJHBNIe6wxSTI+kB8cn5EiOwQ7XkTRmK8vGCClw6rpv25az2b4jrmyqpVb5+2zs/t1hcsOE6E/AFQUbDqnhEET98a2Kew4bE8wdX/7lJHnA8/8rbaRDMKU+mBC1d94ey/+q6+0l5fmQjLmYbCGKEpsatCOuglHuDeNHMD/7tKliMCysO8UFC1dRhkAyR+4zjNjordt5Q/GNfrBtXxrKZlhgud X-Microsoft-Antispam-Message-Info: +49iJp7aIBgv+I/IIas2LeTsjXkeu2EIoUr1cfP7eV1NhbrkxOAkmawTd/Qny+UwLRwkGwNCYFU9wjMegvkuIQQJsJtZUXL9rK6NdjNdMyCJvT1pbiKT1rXJ+zsu9MmLd28Bh8lyLKDjeOv4nITzZgKogFbeDBuunw1CVbmIysSwsq8sfzxCCWN4Ltxhz9gt X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 6:vxk9oZSvexLY/PJKdDUnbyIQjPraGiX2S3JI9APHCZWLeTbBK36NwuzK9nIIcWx/yIOSoj4jP1MssCa9AEVOvfYE4024U4m2Y0yG9msCRhuapPvIfe7pT+WbtTPPHhiBnVXTpC5o8j+8OnhhlYEPIUmxfDVaBuWOqycEdTp6XAlciblAZG1dp7JZyDFIfekmjNl1gE1MK6FAO1R2+dLl1hjNKZFXIELsUKliWb9MdTHUktyizjBOPHjF5vXfm/nZwCqVaTYU99Dn/Vl35uUGHh9djw4inWl7iHPgkHwYDcpBp9rgoioX1IwMBwuGgQc+BlUsjnbtZZ+sMeyqMsvTS6lHFSF+hu5KqvgHHEDv48+nAIcRRaFs1kr3odJkBYxNdS6RhDkiT6lJZ2x/WFR6v19aUBpdHBsyS6sbJuz5hiXgWYn/h31OrB2BLRk/E9PXO1mfo+25mAPmnAnN5w4uCg==; 5:cylwJ2wwzzjklWBk90L7SYcNEEA+A3xs0vd5Y0oSSFpdpOSrrJ4hUnQVlsY2TAB7Gc79Hlb+4vDBW0jCIUqQ+S1H6uOLk4PmFtoccA3Di4XRd6qgAS6HH31CHeVD4HO6j/tFssrCEcrkv8yP4Z/+6ymnvSHCtbcSK6WhkaCByfQ=; 24:iTjuTbFXsWpvgNYA24Gvacv9biJW/E7tZf8TmP6Essq/H54kByogWC4t2/IaiRc2TRwYKyq1fj8BpRffcjGIPZZsPUVmYSXU5GHxetQbSDo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 7:KVUmgZ6n/i94fqkSON7TJ2oOfVCABD6CEJD9NnBGfJOPu9yKk+iDbmV8RCl12Nl4Aw+d0e0EJtPU+acZ+dB/u7Ljsl98IZkJpT9EH0Z/k1Bv1/ATku41iKNHwriCxaPyYcwtnjYo7K9uBCi7v6R8OZxHLgPesemGrIeoyJdzfNHVDVxiT8Pg01m1ifwm50GUTzyTCJfkDEyNI/K+AAg/7UYSnc/74Pl4jhL+K8otu8uWIi3XGY1Uht6naqi52O3l X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2018 04:49:03.4498 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ebd83167-e1c2-4f71-cdab-08d59dd5380b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0701MB3675 Subject: [dpdk-dev] [PATCH v2 03/14] net/qede/base: add DMAE sanity check 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add DMA engine sanity check during the engine initialization and before PF inititialization Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_dev.c | 5 +++ drivers/net/qede/base/ecore_hw.c | 71 ++++++++++++++++++++++++++++++++ drivers/net/qede/base/ecore_hw.h | 4 ++ drivers/net/qede/base/ecore_init_ops.c | 32 ++++++++------ drivers/net/qede/base/ecore_rt_defs.h | 3 ++ 5 files changed, 102 insertions(+), 13 deletions(-) diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index b15af03..38492e6 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -2161,6 +2161,11 @@ static enum _ecore_status_t ecore_hw_init_port(struct ecore_hwfn *p_hwfn, /* perform debug configuration when chip is out of reset */ OSAL_BEFORE_PF_START((void *)p_hwfn->p_dev, p_hwfn->my_id); + /* Sanity check before the PF init sequence that uses DMAE */ + rc = ecore_dmae_sanity(p_hwfn, p_ptt, "pf_phase"); + if (rc) + return rc; + /* PF Init sequence */ rc = ecore_init_run(p_hwfn, p_ptt, PHASE_PF, rel_pf_id, hw_mode); if (rc) diff --git a/drivers/net/qede/base/ecore_hw.c b/drivers/net/qede/base/ecore_hw.c index 1e76509..bc47af4 100644 --- a/drivers/net/qede/base/ecore_hw.c +++ b/drivers/net/qede/base/ecore_hw.c @@ -953,3 +953,74 @@ void ecore_hw_err_notify(struct ecore_hwfn *p_hwfn, OSAL_HW_ERROR_OCCURRED(p_hwfn, err_type); } + +enum _ecore_status_t ecore_dmae_sanity(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + const char *phase) +{ + u32 size = OSAL_PAGE_SIZE / 2, val; + struct ecore_dmae_params params; + enum _ecore_status_t rc = ECORE_SUCCESS; + dma_addr_t p_phys; + void *p_virt; + u32 *p_tmp; + + p_virt = OSAL_DMA_ALLOC_COHERENT(p_hwfn->p_dev, &p_phys, 2 * size); + if (!p_virt) { + DP_NOTICE(p_hwfn, false, + "DMAE sanity [%s]: failed to allocate memory\n", + phase); + return ECORE_NOMEM; + } + + /* Fill the bottom half of the allocated memory with a known pattern */ + for (p_tmp = (u32 *)p_virt; + p_tmp < (u32 *)((u8 *)p_virt + size); + p_tmp++) { + /* Save the address itself as the value */ + val = (u32)(osal_uintptr_t)p_tmp; + *p_tmp = val; + } + + /* Zero the top half of the allocated memory */ + OSAL_MEM_ZERO((u8 *)p_virt + size, size); + + DP_VERBOSE(p_hwfn, ECORE_MSG_SP, + "DMAE sanity [%s]: src_addr={phys 0x%lx, virt %p}, dst_addr={phys 0x%lx, virt %p}, size 0x%x\n", + phase, (unsigned long)p_phys, p_virt, + (unsigned long)(p_phys + size), + (u8 *)p_virt + size, size); + + OSAL_MEMSET(¶ms, 0, sizeof(params)); + rc = ecore_dmae_host2host(p_hwfn, p_ptt, p_phys, p_phys + size, + size / 4 /* size_in_dwords */, ¶ms); + if (rc != ECORE_SUCCESS) { + DP_NOTICE(p_hwfn, false, + "DMAE sanity [%s]: ecore_dmae_host2host() failed. rc = %d.\n", + phase, rc); + goto out; + } + + /* Verify that the top half of the allocated memory has the pattern */ + for (p_tmp = (u32 *)((u8 *)p_virt + size); + p_tmp < (u32 *)((u8 *)p_virt + (2 * size)); + p_tmp++) { + /* The corresponding address in the bottom half */ + val = (u32)(osal_uintptr_t)p_tmp - size; + + if (*p_tmp != val) { + DP_NOTICE(p_hwfn, false, + "DMAE sanity [%s]: addr={phys 0x%lx, virt %p}, read_val 0x%08x, expected_val 0x%08x\n", + phase, + (unsigned long)p_phys + + ((u8 *)p_tmp - (u8 *)p_virt), + p_tmp, *p_tmp, val); + rc = ECORE_UNKNOWN_ERROR; + goto out; + } + } + +out: + OSAL_DMA_FREE_COHERENT(p_hwfn->p_dev, p_virt, p_phys, 2 * size); + return rc; +} diff --git a/drivers/net/qede/base/ecore_hw.h b/drivers/net/qede/base/ecore_hw.h index 0b9814f..b59a26a 100644 --- a/drivers/net/qede/base/ecore_hw.h +++ b/drivers/net/qede/base/ecore_hw.h @@ -255,4 +255,8 @@ enum _ecore_status_t ecore_init_fw_data(struct ecore_dev *p_dev, void ecore_hw_err_notify(struct ecore_hwfn *p_hwfn, enum ecore_hw_err_type err_type); +enum _ecore_status_t ecore_dmae_sanity(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + const char *phase); + #endif /* __ECORE_HW_H__ */ diff --git a/drivers/net/qede/base/ecore_init_ops.c b/drivers/net/qede/base/ecore_init_ops.c index 91633c1..722aa56 100644 --- a/drivers/net/qede/base/ecore_init_ops.c +++ b/drivers/net/qede/base/ecore_init_ops.c @@ -389,23 +389,29 @@ static void ecore_init_cmd_rd(struct ecore_hwfn *p_hwfn, } if (i == ECORE_INIT_MAX_POLL_COUNT) - DP_ERR(p_hwfn, - "Timeout when polling reg: 0x%08x [ Waiting-for: %08x" - " Got: %08x (comparsion %08x)]\n", + DP_ERR(p_hwfn, "Timeout when polling reg: 0x%08x [ Waiting-for: %08x Got: %08x (comparison %08x)]\n", addr, OSAL_LE32_TO_CPU(cmd->expected_val), val, OSAL_LE32_TO_CPU(cmd->op_data)); } -/* init_ops callbacks entry point. - * OSAL_UNUSED is temporary used to avoid unused-parameter compilation warnings. - * Should be removed when the function is actually used. - */ -static void ecore_init_cmd_cb(struct ecore_hwfn *p_hwfn, - struct ecore_ptt OSAL_UNUSED * p_ptt, - struct init_callback_op OSAL_UNUSED * p_cmd) +/* init_ops callbacks entry point */ +static enum _ecore_status_t ecore_init_cmd_cb(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + struct init_callback_op *p_cmd) { - DP_NOTICE(p_hwfn, true, - "Currently init values have no need of callbacks\n"); + enum _ecore_status_t rc; + + switch (p_cmd->callback_id) { + case DMAE_READY_CB: + rc = ecore_dmae_sanity(p_hwfn, p_ptt, "engine_phase"); + break; + default: + DP_NOTICE(p_hwfn, false, "Unexpected init op callback ID %d\n", + p_cmd->callback_id); + return ECORE_INVAL; + } + + return rc; } static u8 ecore_init_cmd_mode_match(struct ecore_hwfn *p_hwfn, @@ -513,7 +519,7 @@ enum _ecore_status_t ecore_init_run(struct ecore_hwfn *p_hwfn, break; case INIT_OP_CALLBACK: - ecore_init_cmd_cb(p_hwfn, p_ptt, &cmd->callback); + rc = ecore_init_cmd_cb(p_hwfn, p_ptt, &cmd->callback); break; } diff --git a/drivers/net/qede/base/ecore_rt_defs.h b/drivers/net/qede/base/ecore_rt_defs.h index 1d08581..401e4b6 100644 --- a/drivers/net/qede/base/ecore_rt_defs.h +++ b/drivers/net/qede/base/ecore_rt_defs.h @@ -530,4 +530,7 @@ #define RUNTIME_ARRAY_SIZE 41743 +/* Init Callbacks */ +#define DMAE_READY_CB 0 + #endif /* __RT_DEFS_H__ */