1@startuml 2 3package arm_io_storage { 4 5 class plat_io_policy { 6 dev_handle : uintptr_t* 7 image_spec : uintptr_t 8 {abstract} check() : fctptr 9 } 10 11 class FIP_IMAGE_ID { 12 memmap_dev_handle 13 fip_block_spec 14 open_memmap() 15 } 16 17 class BL2_IMAGE_ID{ 18 fip_dev_handle 19 bl2_uuid_spec 20 open_fip() 21 } 22 23 class xxx_IMAGE_ID{ 24 fip_dev_handle 25 xxx_uuid_spec 26 open_fip() 27 } 28 29 class arm_io_storage { 30 fip_dev_con : io_dev_connector_t* 31 fip_dev_handle : uintptr_t 32 memmap_dev_con : io_dev_connector_t* 33 memmap_dev_handle : uintptr_t 34 35 fip_block_spec : io_block_spec_t 36 37 policies : plat_io_policy[1..*] 38 39 -open_fip() 40 -open_memmap() 41 42 +arm_io_setup() 43 +plat_get_image_source() 44 } 45 46 FIP_IMAGE_ID -up-|> plat_io_policy 47 BL2_IMAGE_ID -up-|> plat_io_policy 48 xxx_IMAGE_ID -up-|> plat_io_policy 49 50 arm_io_storage *-"1..*" plat_io_policy 51} 52 53package IO { 54 class io_storage { 55 io_dev_open() 56 io_dev_init() 57 io_dev_close() 58 59 .. synchronous operations .. 60 io_open() 61 io_seek() 62 io_size() 63 io_read() 64 io_write() 65 io_close() 66 67 io_register_device() 68 } 69 70 class io_fip { 71 register_io_dev_fip() 72 .. io_dev_funcs_t interface .. 73 fip_dev_funcs : io_dev_funcs_t 74 } 75 76 class io_memmap { 77 register_io_dev_memmap() 78 .. io_dev_funcs_t interface .. 79 memmap_dev_funcs : io_dev_funcs_t 80 } 81 82 interface io_driver { 83 io_entity_t 84 io_dev_info_t 85 86 .. io_dev_connector_t interface .. 87 dev_open() 88 89 .. io_dev_funcs_t interface .. 90 type() 91 open() 92 seek() 93 size() 94 read() 95 write() 96 close() 97 dev_init() 98 dev_close() 99 100 io_register_device() 101 } 102} 103arm_io_storage .. io_driver 104arm_io_storage .. io_fip 105arm_io_storage .. io_memmap 106arm_io_storage .. io_storage 107 108 109@enduml 110