diff --git a/docs/porting-guide.md b/docs/porting-guide.md index eb3b86d..3070775 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -218,6 +218,21 @@ the secure memory identified by `TSP_SEC_MEM_BASE` and `TSP_SEC_MEM_SIZE` constants. +If the platform port uses the IO storage framework, the following constants +must also be defined: + +* **#define : MAX_IO_DEVICES** + + Defines the maximum number of registered IO devices. Attempting to register + more devices than this value using `io_register_device()` will fail with + IO_RESOURCES_EXHAUSTED. + +* **#define : MAX_IO_HANDLES** + + Defines the maximum number of open IO handles. Attempting to open more IO + entities than this value using `io_open()` will fail with + IO_RESOURCES_EXHAUSTED. + The following constants are optional. They should be defined when the platform memory layout implies some image overlaying like on FVP. diff --git a/include/drivers/io_driver.h b/include/drivers/io_driver.h index 867abbf..adb38b0 100644 --- a/include/drivers/io_driver.h +++ b/include/drivers/io_driver.h @@ -32,7 +32,6 @@ #define __IO_DRIVER_H__ #include -#include /* For MAX_IO_DEVICES */ #include @@ -76,20 +75,9 @@ } io_dev_funcs_t; -/* IO platform data - used to track devices registered for a specific - * platform */ -typedef struct io_plat_data { - const io_dev_info_t *devices[MAX_IO_DEVICES]; - unsigned int dev_count; -} io_plat_data_t; - - /* Operations intended to be performed during platform initialisation */ -/* Initialise the IO layer */ -void io_init(io_plat_data_t *data); - -/* Register a device driver */ +/* Register an IO device */ int io_register_device(const io_dev_info_t *dev_info); #endif /* __IO_DRIVER_H__ */ diff --git a/lib/io_storage.c b/lib/io_storage.c index 204310a..a3a8186 100644 --- a/lib/io_storage.c +++ b/lib/io_storage.c @@ -31,13 +31,10 @@ #include #include #include +#include #include -#define MAX_DEVICES(plat_data) \ - (sizeof((plat_data)->devices)/sizeof((plat_data)->devices[0])) - - /* Storage for a fixed maximum number of IO entities, definable by platform */ static io_entity_t entity_pool[MAX_IO_HANDLES]; @@ -48,9 +45,11 @@ /* Track number of allocated entities */ static unsigned int entity_count; +/* Array of fixed maximum of registered devices, definable by platform */ +static const io_dev_info_t *devices[MAX_IO_DEVICES]; -/* Used to keep a reference to platform-specific data */ -static io_plat_data_t *platform_data; +/* Number of currently registered devices */ +static unsigned int dev_count; #if DEBUG /* Extra validation functions only used in debug builds */ @@ -167,27 +166,15 @@ /* Exported API */ - -/* Initialise the IO layer */ -void io_init(io_plat_data_t *data) -{ - assert(data != NULL); - platform_data = data; -} - - /* Register a device driver */ int io_register_device(const io_dev_info_t *dev_info) { int result = IO_FAIL; assert(dev_info != NULL); - assert(platform_data != NULL); - unsigned int dev_count = platform_data->dev_count; - - if (dev_count < MAX_DEVICES(platform_data)) { - platform_data->devices[dev_count] = dev_info; - platform_data->dev_count++; + if (dev_count < MAX_IO_DEVICES) { + devices[dev_count] = dev_info; + dev_count++; result = IO_SUCCESS; } else { result = IO_RESOURCES_EXHAUSTED; diff --git a/plat/fvp/fvp_io_storage.c b/plat/fvp/fvp_io_storage.c index 1f695a6..b4a04f1 100644 --- a/plat/fvp/fvp_io_storage.c +++ b/plat/fvp/fvp_io_storage.c @@ -35,12 +35,11 @@ #include #include #include +#include #include /* For FOPEN_MODE_... */ #include -#include "fvp_def.h" /* IO devices */ -static io_plat_data_t io_data; static const io_dev_connector_t *sh_dev_con; static uintptr_t sh_dev_spec; static uintptr_t sh_init_params; @@ -172,9 +171,6 @@ { int io_result = IO_FAIL; - /* Initialise the IO layer */ - io_init(&io_data); - /* Register the IO devices on this platform */ io_result = register_io_dev_sh(&sh_dev_con); assert(io_result == IO_SUCCESS);