| @startuml |
| |
| package arm_io_storage { |
| |
| class plat_io_policy { |
| dev_handle : uintptr_t* |
| image_spec : uintptr_t |
| {abstract} check() : fctptr |
| } |
| |
| class FIP_IMAGE_ID { |
| memmap_dev_handle |
| fip_block_spec |
| open_memmap() |
| } |
| |
| class BL2_IMAGE_ID{ |
| fip_dev_handle |
| bl2_uuid_spec |
| open_fip() |
| } |
| |
| class xxx_IMAGE_ID{ |
| fip_dev_handle |
| xxx_uuid_spec |
| open_fip() |
| } |
| |
| class arm_io_storage { |
| fip_dev_con : io_dev_connector_t* |
| fip_dev_handle : uintptr_t |
| memmap_dev_con : io_dev_connector_t* |
| memmap_dev_handle : uintptr_t |
| |
| fip_block_spec : io_block_spec_t |
| |
| policies : plat_io_policy[1..*] |
| |
| -open_fip() |
| -open_memmap() |
| |
| +arm_io_setup() |
| +plat_get_image_source() |
| } |
| |
| FIP_IMAGE_ID -up-|> plat_io_policy |
| BL2_IMAGE_ID -up-|> plat_io_policy |
| xxx_IMAGE_ID -up-|> plat_io_policy |
| |
| arm_io_storage *-"1..*" plat_io_policy |
| } |
| |
| package IO { |
| class io_storage { |
| io_dev_open() |
| io_dev_init() |
| io_dev_close() |
| |
| .. synchronous operations .. |
| io_open() |
| io_seek() |
| io_size() |
| io_read() |
| io_write() |
| io_close() |
| |
| io_register_device() |
| } |
| |
| class io_fip { |
| register_io_dev_fip() |
| .. io_dev_funcs_t interface .. |
| fip_dev_funcs : io_dev_funcs_t |
| } |
| |
| class io_memmap { |
| register_io_dev_memmap() |
| .. io_dev_funcs_t interface .. |
| memmap_dev_funcs : io_dev_funcs_t |
| } |
| |
| interface io_driver { |
| io_entity_t |
| io_dev_info_t |
| |
| .. io_dev_connector_t interface .. |
| dev_open() |
| |
| .. io_dev_funcs_t interface .. |
| type() |
| open() |
| seek() |
| size() |
| read() |
| write() |
| close() |
| dev_init() |
| dev_close() |
| |
| io_register_device() |
| } |
| } |
| arm_io_storage .. io_driver |
| arm_io_storage .. io_fip |
| arm_io_storage .. io_memmap |
| arm_io_storage .. io_storage |
| |
| |
| @enduml |