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