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;
}