Line data Source code
1 0 : /* 2 : * Copyright (c) 2023 Intel Corporation 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_VC_H_ 8 : #define ZEPHYR_INCLUDE_DRIVERS_PCIE_VC_H_ 9 : 10 : /** 11 : * @brief PCIe Virtual Channel Host Interface 12 : * @defgroup pcie_vc_host_interface PCIe Virtual Channel Host Interface 13 : * @ingroup pcie_host_interface 14 : * @{ 15 : */ 16 : 17 : #ifdef __cplusplus 18 : extern "C" { 19 : #endif 20 : 21 : #include <zephyr/kernel.h> 22 : #include <zephyr/types.h> 23 : #include <stdbool.h> 24 : 25 : #include <zephyr/drivers/pcie/pcie.h> 26 : 27 : /* 28 : * 1 default VC + 7 extended VCs 29 : */ 30 0 : #define PCIE_VC_MAX_COUNT 8U 31 : 32 0 : #define PCIE_VC_SET_TC0 BIT(0) 33 0 : #define PCIE_VC_SET_TC1 BIT(1) 34 0 : #define PCIE_VC_SET_TC2 BIT(2) 35 0 : #define PCIE_VC_SET_TC3 BIT(3) 36 0 : #define PCIE_VC_SET_TC4 BIT(4) 37 0 : #define PCIE_VC_SET_TC5 BIT(5) 38 0 : #define PCIE_VC_SET_TC6 BIT(6) 39 0 : #define PCIE_VC_SET_TC7 BIT(7) 40 : 41 0 : struct pcie_vctc_map { 42 : /* 43 : * Map the TCs for each VC by setting bits relevantly 44 : * Note: one bit cannot be set more than once among the VCs 45 : */ 46 0 : uint8_t vc_tc[PCIE_VC_MAX_COUNT]; 47 : /* 48 : * Number of VCs being addressed 49 : */ 50 0 : int vc_count; 51 : }; 52 : 53 : /** 54 : * @brief Enable PCIe Virtual Channel handling 55 : * @param bdf the target PCI endpoint 56 : * @return 0 on success, a negative error code otherwise 57 : * 58 : * Note: Not being able to enable such feature is a non-fatal error 59 : * and any code using it should behave accordingly (displaying some info, 60 : * and ignoring it for instance). 61 : */ 62 1 : int pcie_vc_enable(pcie_bdf_t bdf); 63 : 64 : /** 65 : * @brief Disable PCIe Virtual Channel handling 66 : * @param bdf the target PCI endpoint 67 : * @return 0 on success, a negative error code otherwise 68 : */ 69 1 : int pcie_vc_disable(pcie_bdf_t bdf); 70 : 71 : /** 72 : * @brief Map PCIe TC/VC 73 : * @param bdf the target PCI endpoint 74 : * @param map the tc/vc map to apply 75 : * @return 0 on success, a negative error code otherwise 76 : * 77 : * Note: VC must be disabled prior to call this function and 78 : * enabled afterward in order for the endpoint to take advandage of the map. 79 : * 80 : * Note: Not being able to enable such feature is a non-fatal error 81 : * and any code using it should behave accordingly (displaying some info, 82 : * and ignoring it for instance). 83 : */ 84 1 : int pcie_vc_map_tc(pcie_bdf_t bdf, struct pcie_vctc_map *map); 85 : 86 : 87 : #ifdef __cplusplus 88 : } 89 : #endif 90 : 91 : /** 92 : * @} 93 : */ 94 : 95 : #endif /* ZEPHYR_INCLUDE_DRIVERS_PCIE_VC_H_ */