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