1d81734caSHemant Agrawal /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 223df3960SShreyansh Jain * 323df3960SShreyansh Jain * Copyright 2010-2011 Freescale Semiconductor, Inc. 423df3960SShreyansh Jain * All rights reserved. 5b9c94167SNipun Gupta * Copyright 2019 NXP 623df3960SShreyansh Jain * 723df3960SShreyansh Jain */ 823df3960SShreyansh Jain 923df3960SShreyansh Jain #ifndef __FSL_USD_H 1023df3960SShreyansh Jain #define __FSL_USD_H 1123df3960SShreyansh Jain 1223df3960SShreyansh Jain #include <compat.h> 138c83f28cSHemant Agrawal #include <dpaa_list.h> 14c47ff048SShreyansh Jain #include <fsl_qman.h> 1523df3960SShreyansh Jain 16*1094dd94SDavid Marchand #include <rte_compat.h> 17*1094dd94SDavid Marchand 1823df3960SShreyansh Jain #ifdef __cplusplus 1923df3960SShreyansh Jain extern "C" { 2023df3960SShreyansh Jain #endif 2123df3960SShreyansh Jain 22f6fadc3eSShreyansh Jain /* Thread-entry/exit hooks; */ 23f6fadc3eSShreyansh Jain int qman_thread_init(void); 24f09ede6cSShreyansh Jain int bman_thread_init(void); 25f6fadc3eSShreyansh Jain int qman_thread_finish(void); 26f09ede6cSShreyansh Jain int bman_thread_finish(void); 27f6fadc3eSShreyansh Jain 2823df3960SShreyansh Jain #define QBMAN_ANY_PORTAL_IDX 0xffffffff 2923df3960SShreyansh Jain 3023df3960SShreyansh Jain /* Obtain and free raw (unitialized) portals */ 3123df3960SShreyansh Jain 3223df3960SShreyansh Jain struct dpaa_raw_portal { 3323df3960SShreyansh Jain /* inputs */ 3423df3960SShreyansh Jain 3523df3960SShreyansh Jain /* set to non zero to turn on stashing */ 3623df3960SShreyansh Jain uint8_t enable_stash; 3723df3960SShreyansh Jain /* Stashing attributes for the portal */ 3823df3960SShreyansh Jain uint32_t cpu; 3923df3960SShreyansh Jain uint32_t cache; 4023df3960SShreyansh Jain uint32_t window; 4123df3960SShreyansh Jain 4223df3960SShreyansh Jain /* Specifies the stash request queue this portal should use */ 4323df3960SShreyansh Jain uint8_t sdest; 4423df3960SShreyansh Jain 457be78d02SJosh Soref /* Specifies a specific portal index to map or QBMAN_ANY_PORTAL_IDX 4623df3960SShreyansh Jain * for don't care. The portal index will be populated by the 4723df3960SShreyansh Jain * driver when the ioctl() successfully completes. 4823df3960SShreyansh Jain */ 4923df3960SShreyansh Jain uint32_t index; 5023df3960SShreyansh Jain 5123df3960SShreyansh Jain /* outputs */ 5223df3960SShreyansh Jain uint64_t cinh; 5323df3960SShreyansh Jain uint64_t cena; 5423df3960SShreyansh Jain }; 5523df3960SShreyansh Jain 5623df3960SShreyansh Jain int qman_allocate_raw_portal(struct dpaa_raw_portal *portal); 5723df3960SShreyansh Jain int qman_free_raw_portal(struct dpaa_raw_portal *portal); 5823df3960SShreyansh Jain 5923df3960SShreyansh Jain int bman_allocate_raw_portal(struct dpaa_raw_portal *portal); 6023df3960SShreyansh Jain int bman_free_raw_portal(struct dpaa_raw_portal *portal); 6123df3960SShreyansh Jain 628e253882SHemant Agrawal /* Obtain thread-local UIO file-descriptors */ 631e0f9b07SHemant Agrawal __rte_internal 648e253882SHemant Agrawal int qman_thread_fd(void); 658e253882SHemant Agrawal int bman_thread_fd(void); 668e253882SHemant Agrawal 67f6fadc3eSShreyansh Jain /* Post-process interrupts. NB, the kernel IRQ handler disables the interrupt 68f6fadc3eSShreyansh Jain * line before notifying us, and this post-processing re-enables it once 69f6fadc3eSShreyansh Jain * processing is complete. As such, it is essential to call this before going 70f6fadc3eSShreyansh Jain * into another blocking read/select/poll. 71f6fadc3eSShreyansh Jain */ 721e0f9b07SHemant Agrawal __rte_internal 73f6fadc3eSShreyansh Jain void qman_thread_irq(void); 74f6fadc3eSShreyansh Jain 751e0f9b07SHemant Agrawal __rte_internal 761e0f9b07SHemant Agrawal void bman_thread_irq(void); 771e0f9b07SHemant Agrawal __rte_internal 781e0f9b07SHemant Agrawal void qman_fq_portal_thread_irq(struct qman_portal *qp); 791e0f9b07SHemant Agrawal __rte_internal 808e253882SHemant Agrawal void qman_clear_irq(void); 818e253882SHemant Agrawal 82f6fadc3eSShreyansh Jain /* Global setup */ 83f6fadc3eSShreyansh Jain int qman_global_init(void); 84f09ede6cSShreyansh Jain int bman_global_init(void); 85f09ede6cSShreyansh Jain 869d32ef0fSHemant Agrawal /* Direct portal create and destroy */ 871e0f9b07SHemant Agrawal __rte_internal 88a6a75240SNipun Gupta struct qman_portal *fsl_qman_fq_portal_create(int *fd); 89b9c94167SNipun Gupta int fsl_qman_fq_portal_destroy(struct qman_portal *qp); 90b9c94167SNipun Gupta int fsl_qman_fq_portal_init(struct qman_portal *qp); 919d32ef0fSHemant Agrawal 9223df3960SShreyansh Jain #ifdef __cplusplus 9323df3960SShreyansh Jain } 9423df3960SShreyansh Jain #endif 9523df3960SShreyansh Jain 9623df3960SShreyansh Jain #endif /* __FSL_USD_H */ 97