Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
6e99fe1a
Commit
6e99fe1a
authored
Jul 16, 2020
by
Manish Pandey
Committed by
TrustedFirmware Code Review
Jul 16, 2020
Browse files
Merge "IO Driver Misra Cleanup" into integration
parents
21e04cf2
d471bd9c
Changes
4
Hide whitespace changes
Inline
Side-by-side
drivers/io/io_fip.c
View file @
6e99fe1a
...
...
@@ -36,7 +36,7 @@
typedef
struct
{
unsigned
int
file_pos
;
fip_toc_entry_t
entry
;
}
file_state_t
;
}
fip_
file_state_t
;
/*
* Maintain dev_spec per FIP Device
...
...
@@ -49,7 +49,6 @@ typedef struct {
uint16_t
plat_toc_flag
;
}
fip_dev_state_t
;
static
const
uuid_t
uuid_null
;
/*
* Only one file can be open across all FIP device
* as backends like io_memmap don't support
...
...
@@ -57,7 +56,7 @@ static const uuid_t uuid_null;
* backend handle should be maintained per FIP device
* if the same support is available in the backend
*/
static
file_state_t
current_file
=
{
0
};
static
fip_
file_state_t
current_
fip_
file
=
{
0
};
static
uintptr_t
backend_dev_handle
;
static
uintptr_t
backend_image_spec
;
...
...
@@ -288,6 +287,7 @@ static int fip_file_open(io_dev_info_t *dev_info, const uintptr_t spec,
int
result
;
uintptr_t
backend_handle
;
const
io_uuid_spec_t
*
uuid_spec
=
(
io_uuid_spec_t
*
)
spec
;
static
const
uuid_t
uuid_null
=
{
{
0
}
};
/* Double braces for clang */
size_t
bytes_read
;
int
found_file
=
0
;
...
...
@@ -300,7 +300,7 @@ static int fip_file_open(io_dev_info_t *dev_info, const uintptr_t spec,
* When the system supports dynamic memory allocation we can allow more
* than one open file at a time if needed.
*/
if
(
current_file
.
entry
.
offset_address
!=
0
)
{
if
(
current_
fip_
file
.
entry
.
offset_address
!=
0
U
)
{
WARN
(
"fip_file_open : Only one open file at a time.
\n
"
);
return
-
ENOMEM
;
}
...
...
@@ -326,31 +326,32 @@ static int fip_file_open(io_dev_info_t *dev_info, const uintptr_t spec,
found_file
=
0
;
do
{
result
=
io_read
(
backend_handle
,
(
uintptr_t
)
&
current_file
.
entry
,
sizeof
(
current_file
.
entry
),
(
uintptr_t
)
&
current_
fip_
file
.
entry
,
sizeof
(
current_
fip_
file
.
entry
),
&
bytes_read
);
if
(
result
==
0
)
{
if
(
compare_uuids
(
&
current_file
.
entry
.
uuid
,
if
(
compare_uuids
(
&
current_
fip_
file
.
entry
.
uuid
,
&
uuid_spec
->
uuid
)
==
0
)
{
found_file
=
1
;
break
;
}
}
else
{
WARN
(
"Failed to read FIP (%i)
\n
"
,
result
);
goto
fip_file_open_close
;
}
}
while
(
compare_uuids
(
&
current_file
.
entry
.
uuid
,
&
uuid_null
)
!=
0
);
}
while
((
found_file
==
0
)
&&
(
compare_uuids
(
&
current_fip_file
.
entry
.
uuid
,
&
uuid_null
)
!=
0
));
if
(
found_file
==
1
)
{
/* All fine. Update entity info with file state and return. Set
* the file position to 0. The 'current_file.entry' holds
the
* base and size of the file.
* the file position to 0. The 'current_
fip_
file.entry' holds
*
the
base and size of the file.
*/
current_file
.
file_pos
=
0
;
entity
->
info
=
(
uintptr_t
)
&
current_file
;
current_
fip_
file
.
file_pos
=
0
;
entity
->
info
=
(
uintptr_t
)
&
current_
fip_
file
;
}
else
{
/* Did not find the file in the FIP. */
current_file
.
entry
.
offset_address
=
0
;
current_
fip_
file
.
entry
.
offset_address
=
0
;
result
=
-
ENOENT
;
}
...
...
@@ -368,7 +369,7 @@ static int fip_file_len(io_entity_t *entity, size_t *length)
assert
(
entity
!=
NULL
);
assert
(
length
!=
NULL
);
*
length
=
((
file_state_t
*
)
entity
->
info
)
->
entry
.
size
;
*
length
=
((
fip_
file_state_t
*
)
entity
->
info
)
->
entry
.
size
;
return
0
;
}
...
...
@@ -379,7 +380,7 @@ static int fip_file_read(io_entity_t *entity, uintptr_t buffer, size_t length,
size_t
*
length_read
)
{
int
result
;
file_state_t
*
fp
;
fip_
file_state_t
*
fp
;
size_t
file_offset
;
size_t
bytes_read
;
uintptr_t
backend_handle
;
...
...
@@ -397,7 +398,7 @@ static int fip_file_read(io_entity_t *entity, uintptr_t buffer, size_t length,
goto
fip_file_read_exit
;
}
fp
=
(
file_state_t
*
)
entity
->
info
;
fp
=
(
fip_
file_state_t
*
)
entity
->
info
;
/* Seek to the position in the FIP where the payload lives */
file_offset
=
fp
->
entry
.
offset_address
+
fp
->
file_pos
;
...
...
@@ -436,8 +437,8 @@ static int fip_file_close(io_entity_t *entity)
/* Clear our current file pointer.
* If we had malloc() we would free() here.
*/
if
(
current_file
.
entry
.
offset_address
!=
0
)
{
zeromem
(
&
current_file
,
sizeof
(
current_file
));
if
(
current_
fip_
file
.
entry
.
offset_address
!=
0
U
)
{
zeromem
(
&
current_
fip_
file
,
sizeof
(
current_
fip_
file
));
}
/* Clear the Entity info. */
...
...
drivers/io/io_memmap.c
View file @
6e99fe1a
/*
* Copyright (c) 2014-20
18
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-20
20
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -27,9 +27,9 @@ typedef struct {
uintptr_t
base
;
unsigned
long
long
file_pos
;
unsigned
long
long
size
;
}
file_state_t
;
}
memmap_
file_state_t
;
static
file_state_t
current_file
=
{
0
};
static
memmap_
file_state_t
current_
memmap_
file
=
{
0
};
/* Identify the device type as memmap */
static
io_type_t
device_type_memmap
(
void
)
...
...
@@ -71,7 +71,7 @@ static const io_dev_funcs_t memmap_dev_funcs = {
/* No state associated with this device so structure can be const */
static
const
io_dev_info_t
memmap_dev_info
=
{
static
io_dev_info_t
memmap_dev_info
=
{
.
funcs
=
&
memmap_dev_funcs
,
.
info
=
(
uintptr_t
)
NULL
};
...
...
@@ -82,8 +82,7 @@ static int memmap_dev_open(const uintptr_t dev_spec __unused,
io_dev_info_t
**
dev_info
)
{
assert
(
dev_info
!=
NULL
);
*
dev_info
=
(
io_dev_info_t
*
)
&
memmap_dev_info
;
/* cast away const */
*
dev_info
=
&
memmap_dev_info
;
return
0
;
}
...
...
@@ -109,16 +108,16 @@ static int memmap_block_open(io_dev_info_t *dev_info, const uintptr_t spec,
* spec at a time. When we have dynamic memory we can malloc and set
* entity->info.
*/
if
(
current_file
.
in_use
==
0
)
{
if
(
current_
memmap_
file
.
in_use
==
0
)
{
assert
(
block_spec
!=
NULL
);
assert
(
entity
!=
NULL
);
current_file
.
in_use
=
1
;
current_file
.
base
=
block_spec
->
offset
;
current_
memmap_
file
.
in_use
=
1
;
current_
memmap_
file
.
base
=
block_spec
->
offset
;
/* File cursor offset for seek and incremental reads etc. */
current_file
.
file_pos
=
0
;
current_file
.
size
=
block_spec
->
length
;
entity
->
info
=
(
uintptr_t
)
&
current_file
;
current_
memmap_
file
.
file_pos
=
0
;
current_
memmap_
file
.
size
=
block_spec
->
length
;
entity
->
info
=
(
uintptr_t
)
&
current_
memmap_
file
;
result
=
0
;
}
else
{
WARN
(
"A Memmap device is already active. Close first.
\n
"
);
...
...
@@ -133,13 +132,13 @@ static int memmap_block_seek(io_entity_t *entity, int mode,
signed
long
long
offset
)
{
int
result
=
-
ENOENT
;
file_state_t
*
fp
;
memmap_
file_state_t
*
fp
;
/* We only support IO_SEEK_SET for the moment. */
if
(
mode
==
IO_SEEK_SET
)
{
assert
(
entity
!=
NULL
);
fp
=
(
file_state_t
*
)
entity
->
info
;
fp
=
(
memmap_
file_state_t
*
)
entity
->
info
;
/* Assert that new file position is valid */
assert
((
offset
>=
0
)
&&
...
...
@@ -160,7 +159,7 @@ static int memmap_block_len(io_entity_t *entity, size_t *length)
assert
(
entity
!=
NULL
);
assert
(
length
!=
NULL
);
*
length
=
(
size_t
)((
file_state_t
*
)
entity
->
info
)
->
size
;
*
length
=
(
size_t
)((
memmap_
file_state_t
*
)
entity
->
info
)
->
size
;
return
0
;
}
...
...
@@ -170,13 +169,13 @@ static int memmap_block_len(io_entity_t *entity, size_t *length)
static
int
memmap_block_read
(
io_entity_t
*
entity
,
uintptr_t
buffer
,
size_t
length
,
size_t
*
length_read
)
{
file_state_t
*
fp
;
memmap_
file_state_t
*
fp
;
unsigned
long
long
pos_after
;
assert
(
entity
!=
NULL
);
assert
(
length_read
!=
NULL
);
fp
=
(
file_state_t
*
)
entity
->
info
;
fp
=
(
memmap_
file_state_t
*
)
entity
->
info
;
/* Assert that file position is valid for this read operation */
pos_after
=
fp
->
file_pos
+
length
;
...
...
@@ -198,13 +197,13 @@ static int memmap_block_read(io_entity_t *entity, uintptr_t buffer,
static
int
memmap_block_write
(
io_entity_t
*
entity
,
const
uintptr_t
buffer
,
size_t
length
,
size_t
*
length_written
)
{
file_state_t
*
fp
;
memmap_
file_state_t
*
fp
;
unsigned
long
long
pos_after
;
assert
(
entity
!=
NULL
);
assert
(
length_written
!=
NULL
);
fp
=
(
file_state_t
*
)
entity
->
info
;
fp
=
(
memmap_
file_state_t
*
)
entity
->
info
;
/* Assert that file position is valid for this write operation */
pos_after
=
fp
->
file_pos
+
length
;
...
...
@@ -230,7 +229,7 @@ static int memmap_block_close(io_entity_t *entity)
entity
->
info
=
0
;
/* This would be a mem free() if we had malloc.*/
zeromem
((
void
*
)
&
current_file
,
sizeof
(
current_file
));
zeromem
((
void
*
)
&
current_
memmap_
file
,
sizeof
(
current_
memmap_
file
));
return
0
;
}
...
...
drivers/io/io_semihosting.c
View file @
6e99fe1a
/*
* Copyright (c) 2014-20
18
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-20
20
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -51,8 +51,7 @@ static const io_dev_funcs_t sh_dev_funcs = {
};
/* No state associated with this device so structure can be const */
static
const
io_dev_info_t
sh_dev_info
=
{
static
io_dev_info_t
sh_dev_info
=
{
.
funcs
=
&
sh_dev_funcs
,
.
info
=
(
uintptr_t
)
NULL
};
...
...
@@ -63,7 +62,7 @@ static int sh_dev_open(const uintptr_t dev_spec __unused,
io_dev_info_t
**
dev_info
)
{
assert
(
dev_info
!=
NULL
);
*
dev_info
=
(
io_dev_info_t
*
)
&
sh_dev_info
;
/* cast away const */
*
dev_info
=
&
sh_dev_info
;
return
0
;
}
...
...
drivers/io/io_storage.c
View file @
6e99fe1a
/*
* Copyright (c) 2014-20
17
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-20
20
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -32,14 +32,13 @@ static unsigned int dev_count;
#if ENABLE_ASSERTIONS
/* Return a boolean value indicating whether a device connector is valid */
static
int
is_valid_dev_connector
(
const
io_dev_connector_t
*
dev_con
)
static
bool
is_valid_dev_connector
(
const
io_dev_connector_t
*
dev_con
)
{
return
(
dev_con
!=
NULL
)
&&
(
dev_con
->
dev_open
!=
NULL
);
}
/* Return a boolean value indicating whether a device handle is valid */
static
int
is_valid_dev
(
const
uintptr_t
dev_handle
)
static
bool
is_valid_dev
(
const
uintptr_t
dev_handle
)
{
const
io_dev_info_t
*
dev
=
(
io_dev_info_t
*
)
dev_handle
;
...
...
@@ -50,7 +49,7 @@ static int is_valid_dev(const uintptr_t dev_handle)
/* Return a boolean value indicating whether an IO entity is valid */
static
int
is_valid_entity
(
const
uintptr_t
handle
)
static
bool
is_valid_entity
(
const
uintptr_t
handle
)
{
const
io_entity_t
*
entity
=
(
io_entity_t
*
)
handle
;
...
...
@@ -60,7 +59,7 @@ static int is_valid_entity(const uintptr_t handle)
/* Return a boolean value indicating whether a seek mode is valid */
static
int
is_valid_seek_mode
(
io_seek_mode_t
mode
)
static
bool
is_valid_seek_mode
(
io_seek_mode_t
mode
)
{
return
((
mode
!=
IO_SEEK_INVALID
)
&&
(
mode
<
IO_SEEK_MAX
));
}
...
...
@@ -70,7 +69,8 @@ static int is_valid_seek_mode(io_seek_mode_t mode)
/* Open a connection to a specific device */
static
int
dev_open
(
const
io_dev_connector_t
*
dev_con
,
const
uintptr_t
dev_spec
,
static
int
io_storage_dev_open
(
const
io_dev_connector_t
*
dev_con
,
const
uintptr_t
dev_spec
,
io_dev_info_t
**
dev_info
)
{
assert
(
dev_info
!=
NULL
);
...
...
@@ -113,7 +113,8 @@ static int allocate_entity(io_entity_t **entity)
unsigned
int
index
=
0
;
result
=
find_first_entity
(
NULL
,
&
index
);
assert
(
result
==
0
);
*
entity
=
entity_map
[
index
]
=
&
entity_pool
[
index
];
*
entity
=
&
entity_pool
[
index
];
entity_map
[
index
]
=
&
entity_pool
[
index
];
++
entity_count
;
}
...
...
@@ -161,8 +162,7 @@ int io_dev_open(const io_dev_connector_t *dev_con, const uintptr_t dev_spec,
uintptr_t
*
handle
)
{
assert
(
handle
!=
NULL
);
return
dev_open
(
dev_con
,
dev_spec
,
(
io_dev_info_t
**
)
handle
);
return
io_storage_dev_open
(
dev_con
,
dev_spec
,
(
io_dev_info_t
**
)
handle
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment