@@ -20,12 +20,16 @@ static struct {
2020 int ret ;
2121 /* Some size */
2222 uint64_t size ;
23+ /* Device mmap test values */
24+ void * mmap_base ;
25+ ssize_t mmap_size ;
26+ uint32_t mmap_flags ;
2327} simulated_values = {
2428 .ret = 0 ,
2529 .size = 0 ,
2630};
2731
28- /*** Device definition atd == API Test Dev * **/
32+ /*** Device definition of API pseudo functions **/
2933static int some_get_size (const struct device * dev , uint64_t * size )
3034{
3135 __ASSERT_NO_MSG (dev != NULL );
@@ -42,21 +46,53 @@ static int enotsup_get_size(const struct device *dev, uint64_t *size)
4246 return - ENOTSUP ;
4347}
4448
49+ static int some_mmap (const struct device * dev , void * * base , uint64_t * size ,
50+ uint32_t flags )
51+ {
52+ __ASSERT_NO_MSG (dev != NULL );
53+
54+ if (flags != simulated_values .mmap_flags ) {
55+ return - EINVAL ;
56+ }
57+
58+ if (base == NULL || size == NULL ) {
59+ return - EINVAL ;
60+ }
61+
62+ * base = simulated_values .mmap_base ;
63+ * size = simulated_values .mmap_size ;
64+
65+ return 0 ;
66+ }
67+
68+ static int enotsup_mmap (const struct device * dev , void * * base , uint64_t * size ,
69+ uint32_t flags )
70+ {
71+ ARG_UNUSED (dev );
72+ ARG_UNUSED (base );
73+ ARG_UNUSED (size );
74+ ARG_UNUSED (flags );
75+
76+ return 0 ;
77+ }
78+
4579/** Device objects **/
4680/* The device state, just to make it "ready" device */
4781static struct device_state some_dev_state = {
4882 .init_res = 0 ,
4983 .initialized = 1 ,
5084};
5185
52- /* Device with get_size */
53- static DEVICE_API (flash , size_fun_api ) = {
86+ /* Device with implemented api calls */
87+ static DEVICE_API (flash , some_fun_api ) = {
5488 .get_size = some_get_size ,
89+ .mmap = some_mmap ,
5590};
56- const static struct device size_fun_dev = {
57- "get_size" ,
91+
92+ const static struct device some_fun_dev = {
93+ "some_fun" ,
5894 NULL ,
59- & size_fun_api ,
95+ & some_fun_api ,
6096 & some_dev_state ,
6197};
6298
@@ -72,6 +108,7 @@ const static struct device no_fun_dev = {
72108/* Device with get_size implemented but returning -ENOTSUP */
73109static DEVICE_API (flash , enotsup_fun_api ) = {
74110 .get_size = enotsup_get_size ,
111+ .mmap = enotsup_mmap ,
75112};
76113static struct device enotsup_fun_dev = {
77114 "enotsup" ,
@@ -85,14 +122,53 @@ ZTEST(flash_api, test_get_size)
85122 uint64_t size = 0 ;
86123
87124 simulated_values .size = 45 ;
88- zassert_ok (flash_get_size (& size_fun_dev , & size ), "Expected success" );
125+ zassert_ok (flash_get_size (& some_fun_dev , & size ), "Expected success" );
89126 zassert_equal (size , simulated_values .size , "Size mismatch" );
90127 simulated_values .size = 46 ;
91- zassert_ok (flash_get_size (& size_fun_dev , & size ), "Expected success" );
128+ zassert_ok (flash_get_size (& some_fun_dev , & size ), "Expected success" );
92129 zassert_equal (size , simulated_values .size , "Size mismatch" );
93130 zassert_equal (flash_get_size (& no_fun_dev , & size ), - ENOSYS );
94131
95132 zassert_equal (flash_get_size (& enotsup_fun_dev , & size ), - ENOTSUP );
96133}
97134
135+
136+ ZTEST (flash_api , test_flash_mmap )
137+ {
138+ void * base = NULL ;
139+ uint64_t size = 0 ;
140+
141+ simulated_values .mmap_size = 40 ;
142+ /* Just need some pointer */
143+ simulated_values .mmap_base = (void * )& simulated_values ;
144+ /* 0 for error tests */
145+ simulated_values .mmap_flags = 0 ;
146+
147+ zassert_equal (flash_mmap (& some_fun_dev , NULL , NULL , 0 ), - EINVAL );
148+ zassert_equal (flash_mmap (& some_fun_dev , & base , NULL , 0 ), - EINVAL );
149+ zassert_equal (flash_mmap (& some_fun_dev , NULL , & size , 0 ), - EINVAL );
150+ zassert_equal (flash_mmap (& some_fun_dev , & base , & size , FLASH_MMAP_F_READ ), - EINVAL );
151+ zassert_equal (flash_mmap (& some_fun_dev , & base , & size , FLASH_MMAP_F_WRITE ), - EINVAL );
152+ zassert_equal (flash_mmap (& some_fun_dev , & base , & size ,
153+ FLASH_MMAP_F_READ | FLASH_MMAP_F_WRITE ), - EINVAL );
154+
155+ simulated_values .mmap_flags = FLASH_MMAP_F_READ ;
156+ zassert_equal (flash_mmap (& some_fun_dev , & base , & size , FLASH_MMAP_F_WRITE ), - EINVAL );
157+
158+ simulated_values .mmap_flags = FLASH_MMAP_F_WRITE ;
159+ zassert_equal (flash_mmap (& some_fun_dev , & base , & size , FLASH_MMAP_F_READ ), - EINVAL );
160+
161+ zassert_equal (flash_get_size (& enotsup_fun_dev , & size ), - ENOTSUP );
162+
163+ /* After all failures the base and size are expected to be not modified */
164+ zassert_equal (base , NULL );
165+ zassert_equal (size , 0 );
166+
167+ simulated_values .mmap_flags = FLASH_MMAP_F_READ ;
168+ zassert_ok (flash_mmap (& some_fun_dev , & base , & size , FLASH_MMAP_F_READ ));
169+ /* Expected values to be read by API and updated */
170+ zassert_equal (base , simulated_values .mmap_base );
171+ zassert_equal (size , simulated_values .mmap_size );
172+ }
173+
98174ZTEST_SUITE (flash_api , NULL , NULL , NULL , NULL , NULL );
0 commit comments