feat(lib/granule): Add dev_granule object type

Define dev_granule structure type and add device granule
objects to manage device memory in PCI regions.
Define device granule states:
- DEV_GRANULE_STATE_NS
- DEV_GRANULE_STATE_DELEGATED
- DEV_GRANULE_STATE_MAPPED
Add locking primitives and access functions for
dev_granule objects.
Add dev_granules[RMM_MAX_DEV_GRANULES] array of
dev_granule structures.

Change-Id: I857095a997f78d2c39b3958056460112f3b34595
Signed-off-by: AlexeiFedorov <Alexei.Fedorov@arm.com>
diff --git a/plat/host/host_cbmc/src/tb_common.c b/plat/host/host_cbmc/src/tb_common.c
index 8dab5d6..c9f786c 100644
--- a/plat/host/host_cbmc/src/tb_common.c
+++ b/plat/host/host_cbmc/src/tb_common.c
@@ -66,17 +66,17 @@
 	 * NOTE: the explicit pointer to integer type cast is necessary, as CBMC
 	 * check fails without it.
 	 */
-	if (GRANULE_ALIGNED(addr) && (uint64_t)granules_buffer <= addr &&
-		addr < (uint64_t)granules_buffer + sizeof(granules_buffer)) {
+	if (GRANULE_ALIGNED(addr) && (uint64_t)host_dram_buffer <= addr &&
+		addr < (uint64_t)host_dram_buffer + sizeof(host_dram_buffer)) {
 		/*
 		 * Keep these assserts for sanitary check, there was situation
 		 * these asserts fail possibly due to CBMC dislike type
 		 * conversion between number and pointer
 		 */
 		ASSERT(GRANULE_ALIGNED(addr), "internal: `_valid_pa`, addr in alignment");
-		ASSERT(addr >= (uint64_t)granules_buffer,
+		ASSERT(addr >= (uint64_t)host_dram_buffer,
 			"internal: `_valid_pa`, addr in lower range");
-		ASSERT(addr < (uint64_t)granules_buffer + sizeof(granules_buffer),
+		ASSERT(addr < (uint64_t)host_dram_buffer + sizeof(host_dram_buffer),
 			"internal: `_valid_pa`, addr in upper range");
 		return true;
 	}
@@ -85,7 +85,7 @@
 
 struct granule *pa_to_granule_metadata_ptr(uint64_t addr)
 {
-	uint64_t idx = (addr - (uint64_t)granules_buffer)/GRANULE_SIZE;
+	uint64_t idx = (addr - (uint64_t)host_dram_buffer)/GRANULE_SIZE;
 
 	__ASSERT(idx >= 0, "internal: `_pa_to_granule_metadata_ptr`, addr is in lower range");
 	__ASSERT(idx < RMM_MAX_GRANULES,
@@ -99,29 +99,29 @@
 	if (!valid_granule_metadata_ptr(g_ptr)) {
 		return NULL;
 	}
-	return granules_buffer + (g_ptr - granules) * GRANULE_SIZE;
+	return host_dram_buffer + (g_ptr - granules) * GRANULE_SIZE;
 }
 
 uint64_t granule_metadata_ptr_to_pa(struct granule *g_ptr)
 {
-	return (uint64_t)granules_buffer + (g_ptr - granules) * GRANULE_SIZE;
+	return (uint64_t)host_dram_buffer + (g_ptr - granules) * GRANULE_SIZE;
 }
 
 void *pa_to_granule_buffer_ptr(uint64_t addr)
 {
-	__ASSERT((unsigned char *)addr - granules_buffer >= 0,
+	__ASSERT((unsigned char *)addr - host_dram_buffer >= 0,
 		"internal: `_pa_to_granule_buffer_ptr`, addr is in lower range");
 	/*
 	 * CBMC has difficulty doing an integer->object mapping, when the
 	 * integer is the address of the expected object, and the integer is not
 	 * derived from a pointer.
 	 * So instead of simply returning addr we need to tell CBMC that the
-	 * object we are looking for is in the `granules_buffer` array, at an
+	 * object we are looking for is in the `host_dram_buffer` array, at an
 	 * offset. To calculate the offset we can use `addr`, and the address of
-	 * `granules_buffer`.
+	 * `host_dram_buffer`.
 	 * For details see https://github.com/diffblue/cbmc/issues/8103
 	 */
-	return (void *)granules_buffer + ((unsigned char *)addr - granules_buffer);
+	return (void *)host_dram_buffer + ((unsigned char *)addr - host_dram_buffer);
 }
 
 bool valid_granule_metadata_ptr(struct granule *p)
@@ -132,7 +132,7 @@
 
 /*
  * Return the first index of `number` of unused continuous indice to both
- * `granules` and `granules_buffer` arrays.
+ * `granules` and `host_dram_buffer` arrays.
  */
 size_t next_index(void)
 {
@@ -159,7 +159,7 @@
 	unsigned long index = next_index();
 	unsigned long offset = index * GRANULE_SIZE;
 
-	(void)memcpy(granules_buffer + offset, content, size);
+	(void)memcpy(host_dram_buffer + offset, content, size);
 	used_granules_buffer[index] = true;
 }
 
@@ -179,7 +179,7 @@
 	}
 
 	granules[index] = *granule_metadata;
-	(void)memcpy(granules_buffer + offset, src_page, src_size);
+	(void)memcpy(host_dram_buffer + offset, src_page, src_size);
 	used_granules_buffer[index] = true;
 	return &granules[index];
 }
@@ -195,14 +195,14 @@
 
 enum granule_gpt get_granule_gpt(uint64_t addr)
 {
-	uint64_t idx = (addr - (uint64_t)granules_buffer)/GRANULE_SIZE;
+	uint64_t idx = (addr - (uint64_t)host_dram_buffer)/GRANULE_SIZE;
 
 	return granule_gpt_array[idx];
 }
 
 void set_granule_gpt(uint64_t addr, enum granule_gpt granule_gpt)
 {
-	uint64_t idx = (addr - (uint64_t)granules_buffer)/GRANULE_SIZE;
+	uint64_t idx = (addr - (uint64_t)host_dram_buffer)/GRANULE_SIZE;
 
 	granule_gpt_array[idx] = granule_gpt;
 }