1 /* 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 #define PCIE_VC_MAX_COUNT 8U 31 32 #define PCIE_VC_SET_TC0 BIT(0) 33 #define PCIE_VC_SET_TC1 BIT(1) 34 #define PCIE_VC_SET_TC2 BIT(2) 35 #define PCIE_VC_SET_TC3 BIT(3) 36 #define PCIE_VC_SET_TC4 BIT(4) 37 #define PCIE_VC_SET_TC5 BIT(5) 38 #define PCIE_VC_SET_TC6 BIT(6) 39 #define PCIE_VC_SET_TC7 BIT(7) 40 41 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 uint8_t vc_tc[PCIE_VC_MAX_COUNT]; 47 /* 48 * Number of VCs being addressed 49 */ 50 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 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 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 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_ */ 96