1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors. 4 */ 5 6 #ifndef DEV_H 7 #define DEV_H 8 9 #include <app_fw_structures.h> 10 #include <arch.h> 11 #include <arch_features.h> 12 #include <dev_assign_structs.h> 13 #include <granule.h> 14 #include <sizes.h> 15 #include <smc-rmi.h> 16 #include <utils_def.h> 17 18 /* 19 * Represents the state of communication between an RMM device object and a 20 * device. The device object could be PDEV or VDEV. 21 */ 22 #define DEV_COMM_ACTIVE U(0) 23 #define DEV_COMM_ERROR U(1) 24 #define DEV_COMM_IDLE U(2) 25 #define DEV_COMM_PENDING U(3) 26 27 /* PCIe device specific details */ 28 struct pcie_dev { 29 /* Device identifier */ 30 uint64_t bdf; 31 32 /* PCIe Segment identifier of the Root Port and endpoint. */ 33 uint16_t segment_id; 34 35 /* 36 * Physical PCIe routing identifier of the Root Port to which the 37 * endpoint is connected. 38 */ 39 uint16_t root_id; 40 41 /* ECAM base address of the PCIe configuration space */ 42 uint64_t ecam_addr; 43 44 /* Certificate slot identifier */ 45 uint64_t cert_slot_id; 46 47 /* IDE stream ID */ 48 uint64_t ide_sid; 49 50 /* 51 * Base and top of requester ID range (inclusive). The value is in 52 * PCI BDF format. 53 */ 54 uint64_t rid_base; 55 uint64_t rid_top; 56 57 /* Device non-coherent address range and its range */ 58 struct rmi_address_range 59 ncoh_addr_range[PDEV_PARAM_NCOH_ADDR_RANGE_MAX]; 60 uint64_t ncoh_num_addr_range; 61 }; 62 63 /* 64 * PDEV object. Represents a communication channel between the RMM and a 65 * physical device, for example a PCIe device. 66 */ 67 struct pdev { 68 /* Pointer to this granule */ 69 struct granule *g_pdev; 70 71 /* State of this PDEV. RmiPdevState */ 72 unsigned long rmi_state; 73 74 /* Flags provided by the Host during PDEV creation. RmiPdevFlags */ 75 unsigned long rmi_flags; 76 77 /* Number of VDEVs associated with this PDEV */ 78 uint32_t num_vdevs; 79 80 /* Number and addresses of PDEV auxiliary granules */ 81 struct granule *g_aux[PDEV_PARAM_AUX_GRANULES_MAX]; 82 unsigned int num_aux; 83 84 /* 85 * Algorithm used to generate device digests. This value is returned to 86 * Realm as part of RDEV_GET_INFO call 87 */ 88 uint8_t rmi_hash_algo; 89 90 /* 91 * Digest of device certificate. This digest is calculated when RMM 92 * fetches device certificate. The content of the certificate is cached 93 * by NS host. 94 */ 95 struct dev_obj_digest cert_digest; 96 97 /* Device communiction state */ 98 unsigned int dev_comm_state; 99 100 /* The associated device */ 101 struct pcie_dev dev; 102 103 /* DA app cfg */ 104 struct app_data_cfg da_app_data; 105 }; 106 COMPILER_ASSERT(sizeof(struct pdev) <= GRANULE_SIZE); 107 108 #endif /* DEV_H */ 109