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
8ae3a91c
"vscode:/vscode.git/clone" did not exist on "852a44094a3bb4df39f8f778bc7ada2ddda09727"
Commit
8ae3a91c
authored
Aug 09, 2020
by
Madhukar Pappireddy
Committed by
TrustedFirmware Code Review
Aug 09, 2020
Browse files
Merge "MISRA cleanup in mem_region and semihosting files" into integration
parents
024fe67f
633fa4cd
Changes
2
Show whitespace changes
Inline
Side-by-side
lib/semihosting/semihosting.c
View file @
8ae3a91c
/*
* Copyright (c) 2013-20
19
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-20
20
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -14,8 +14,7 @@
#define SEMIHOSTING_SUPPORTED 1
#endif
long
semihosting_call
(
unsigned
long
operation
,
uintptr_t
system_block_address
);
long
semihosting_call
(
unsigned
long
operation
,
uintptr_t
system_block_address
);
typedef
struct
{
const
char
*
file_name
;
...
...
@@ -52,8 +51,7 @@ long semihosting_file_open(const char *file_name, size_t mode)
open_block
.
mode
=
mode
;
open_block
.
name_length
=
strlen
(
file_name
);
return
semihosting_call
(
SEMIHOSTING_SYS_OPEN
,
(
uintptr_t
)
&
open_block
);
return
semihosting_call
(
SEMIHOSTING_SYS_OPEN
,
(
uintptr_t
)
&
open_block
);
}
long
semihosting_file_seek
(
long
file_handle
,
ssize_t
offset
)
...
...
@@ -64,11 +62,11 @@ long semihosting_file_seek(long file_handle, ssize_t offset)
seek_block
.
handle
=
file_handle
;
seek_block
.
location
=
offset
;
result
=
semihosting_call
(
SEMIHOSTING_SYS_SEEK
,
(
uintptr_t
)
&
seek_block
);
result
=
semihosting_call
(
SEMIHOSTING_SYS_SEEK
,
(
uintptr_t
)
&
seek_block
);
if
(
result
)
if
(
result
!=
0
)
{
result
=
semihosting_call
(
SEMIHOSTING_SYS_ERRNO
,
0
);
}
return
result
;
}
...
...
@@ -78,41 +76,42 @@ long semihosting_file_read(long file_handle, size_t *length, uintptr_t buffer)
smh_file_read_write_block_t
read_block
;
long
result
=
-
EINVAL
;
if
((
length
==
NULL
)
||
(
buffer
==
(
uintptr_t
)
NULL
))
if
((
length
==
NULL
)
||
(
buffer
==
(
uintptr_t
)
NULL
))
{
return
result
;
}
read_block
.
handle
=
file_handle
;
read_block
.
buffer
=
buffer
;
read_block
.
length
=
*
length
;
result
=
semihosting_call
(
SEMIHOSTING_SYS_READ
,
(
uintptr_t
)
&
read_block
);
result
=
semihosting_call
(
SEMIHOSTING_SYS_READ
,
(
uintptr_t
)
&
read_block
);
if
(
result
==
*
length
)
{
return
-
EINVAL
;
}
else
if
(
result
<
*
length
)
{
*
length
-=
result
;
return
0
;
}
else
}
else
{
return
result
;
}
}
long
semihosting_file_write
(
long
file_handle
,
size_t
*
length
,
long
semihosting_file_write
(
long
file_handle
,
size_t
*
length
,
const
uintptr_t
buffer
)
{
smh_file_read_write_block_t
write_block
;
long
result
=
-
EINVAL
;
if
((
length
==
NULL
)
||
(
buffer
==
(
uintptr_t
)
NULL
))
if
((
length
==
NULL
)
||
(
buffer
==
(
uintptr_t
)
NULL
))
{
return
-
EINVAL
;
}
write_block
.
handle
=
file_handle
;
write_block
.
buffer
=
(
uintptr_t
)
buffer
;
/* cast away const */
write_block
.
length
=
*
length
;
result
=
semihosting_call
(
SEMIHOSTING_SYS_WRITE
,
(
uintptr_t
)
&
write_block
);
(
uintptr_t
)
&
write_block
);
*
length
=
result
;
...
...
@@ -121,14 +120,12 @@ long semihosting_file_write(long file_handle,
long
semihosting_file_close
(
long
file_handle
)
{
return
semihosting_call
(
SEMIHOSTING_SYS_CLOSE
,
(
uintptr_t
)
&
file_handle
);
return
semihosting_call
(
SEMIHOSTING_SYS_CLOSE
,
(
uintptr_t
)
&
file_handle
);
}
long
semihosting_file_length
(
long
file_handle
)
{
return
semihosting_call
(
SEMIHOSTING_SYS_FLEN
,
(
uintptr_t
)
&
file_handle
);
return
semihosting_call
(
SEMIHOSTING_SYS_FLEN
,
(
uintptr_t
)
&
file_handle
);
}
char
semihosting_read_char
(
void
)
...
...
@@ -138,12 +135,12 @@ char semihosting_read_char(void)
void
semihosting_write_char
(
char
character
)
{
semihosting_call
(
SEMIHOSTING_SYS_WRITEC
,
(
uintptr_t
)
&
character
);
semihosting_call
(
SEMIHOSTING_SYS_WRITEC
,
(
uintptr_t
)
&
character
);
}
void
semihosting_write_string
(
char
*
string
)
{
semihosting_call
(
SEMIHOSTING_SYS_WRITE0
,
(
uintptr_t
)
string
);
semihosting_call
(
SEMIHOSTING_SYS_WRITE0
,
(
uintptr_t
)
string
);
}
long
semihosting_system
(
char
*
command_line
)
...
...
@@ -154,7 +151,7 @@ long semihosting_system(char *command_line)
system_block
.
command_length
=
strlen
(
command_line
);
return
semihosting_call
(
SEMIHOSTING_SYS_SYSTEM
,
(
uintptr_t
)
&
system_block
);
(
uintptr_t
)
&
system_block
);
}
long
semihosting_get_flen
(
const
char
*
file_name
)
...
...
@@ -162,16 +159,17 @@ long semihosting_get_flen(const char *file_name)
long
file_handle
;
long
length
;
assert
(
semihosting_connection_supported
());
assert
(
semihosting_connection_supported
()
!=
0
);
file_handle
=
semihosting_file_open
(
file_name
,
FOPEN_MODE_RB
);
if
(
file_handle
==
-
1
)
if
(
file_handle
==
-
1
)
{
return
file_handle
;
}
/* Find the length of the file */
length
=
semihosting_file_length
(
file_handle
);
return
semihosting_file_close
(
file_handle
)
?
-
1
:
length
;
return
(
semihosting_file_close
(
file_handle
)
!=
0
)
?
-
1
:
length
;
}
long
semihosting_download_file
(
const
char
*
file_name
,
...
...
@@ -183,23 +181,27 @@ long semihosting_download_file(const char *file_name,
long
file_handle
;
/* Null pointer check */
if
(
!
buf
)
if
(
buf
==
0U
)
{
return
ret
;
}
assert
(
semihosting_connection_supported
());
assert
(
semihosting_connection_supported
()
!=
0
);
file_handle
=
semihosting_file_open
(
file_name
,
FOPEN_MODE_RB
);
if
(
file_handle
==
-
1
)
if
(
file_handle
==
-
1
)
{
return
ret
;
}
/* Find the actual length of the file */
length
=
semihosting_file_length
(
file_handle
);
if
(
length
==
-
1
)
if
(
length
==
(
size_t
)(
-
1
))
{
goto
semihosting_fail
;
}
/* Signal error if we do not have enough space for the file */
if
(
length
>
buf_size
)
if
(
length
>
buf_size
)
{
goto
semihosting_fail
;
}
/*
* A successful read will return 0 in which case we pass back
...
...
@@ -207,10 +209,11 @@ long semihosting_download_file(const char *file_name,
* value indicating an error.
*/
ret
=
semihosting_file_read
(
file_handle
,
&
length
,
buf
);
if
(
ret
)
if
(
ret
!=
0
)
{
goto
semihosting_fail
;
else
ret
=
length
;
}
else
{
ret
=
(
long
)
length
;
}
semihosting_fail:
semihosting_file_close
(
file_handle
);
...
...
@@ -222,9 +225,9 @@ void semihosting_exit(uint32_t reason, uint32_t subcode)
#ifdef __aarch64__
uint64_t
parameters
[]
=
{
reason
,
subcode
};
(
void
)
semihosting_call
(
SEMIHOSTING_SYS_EXIT
,
(
uintptr_t
)
&
parameters
);
(
void
)
semihosting_call
(
SEMIHOSTING_SYS_EXIT
,
(
uintptr_t
)
&
parameters
);
#else
/* The subcode is not supported on AArch32. */
(
void
)
semihosting_call
(
SEMIHOSTING_SYS_EXIT
,
reason
);
(
void
)
semihosting_call
(
SEMIHOSTING_SYS_EXIT
,
reason
);
#endif
}
lib/utils/mem_region.c
View file @
8ae3a91c
...
...
@@ -33,7 +33,7 @@ void clear_mem_regions(mem_region_t *tbl, size_t nregions)
size_t
i
;
assert
(
tbl
!=
NULL
);
assert
(
nregions
>
0
);
assert
(
nregions
>
0
U
);
for
(
i
=
0
;
i
<
nregions
;
i
++
)
{
assert
(
tbl
->
nbytes
>
0
);
...
...
@@ -64,28 +64,32 @@ void clear_map_dyn_mem_regions(struct mem_region *regions,
const
unsigned
int
attr
=
MT_MEMORY
|
MT_RW
|
MT_NS
;
assert
(
regions
!=
NULL
);
assert
(
nregions
>
0
&&
chunk
>
0
);
for
(
;
nregions
--
;
regions
++
)
{
begin
=
regions
->
base
;
size
=
regions
->
nbytes
;
if
((
begin
&
(
chunk
-
1
))
!=
0
||
(
size
&
(
chunk
-
1
))
!=
0
)
{
assert
(
nregions
!=
0U
);
assert
(
chunk
!=
0U
);
for
(
unsigned
int
i
=
0U
;
i
<
nregions
;
i
++
)
{
begin
=
regions
[
i
].
base
;
size
=
regions
[
i
].
nbytes
;
if
(((
begin
&
(
chunk
-
1U
))
!=
0U
)
||
((
size
&
(
chunk
-
1U
))
!=
0U
))
{
INFO
(
"PSCI: Not correctly aligned region
\n
"
);
panic
();
}
while
(
size
>
0
)
{
while
(
size
>
0
U
)
{
r
=
mmap_add_dynamic_region
(
begin
,
va
,
chunk
,
attr
);
if
(
r
!=
0
)
{
INFO
(
"PSCI: mmap_add_dynamic_region failed with %d
\n
"
,
r
);
INFO
(
"PSCI: %s failed with %d
\n
"
,
"mmap_add_dynamic_region"
,
r
);
panic
();
}
zero_normalmem
((
void
*
)
va
,
chunk
);
zero_normalmem
((
void
*
)
va
,
chunk
);
r
=
mmap_remove_dynamic_region
(
va
,
chunk
);
if
(
r
!=
0
)
{
INFO
(
"PSCI: mmap_remove_dynamic_region failed with %d
\n
"
,
r
);
INFO
(
"PSCI: %s failed with %d
\n
"
,
"mmap_remove_dynamic_region"
,
r
);
panic
();
}
...
...
@@ -115,18 +119,19 @@ int mem_region_in_array_chk(mem_region_t *tbl, size_t nregions,
size_t
i
;
assert
(
tbl
!=
NULL
);
assert
(
nbytes
>
0
);
assert
(
nbytes
!=
0
U
);
assert
(
!
check_uptr_overflow
(
addr
,
nbytes
-
1
));
region_start
=
addr
;
region_end
=
addr
+
(
nbytes
-
1
);
for
(
i
=
0
;
i
<
nregions
;
i
++
)
{
region_end
=
addr
+
(
nbytes
-
1
U
);
for
(
i
=
0
U
;
i
<
nregions
;
i
++
)
{
assert
(
tbl
->
nbytes
>
0
);
assert
(
!
check_uptr_overflow
(
tbl
->
base
,
tbl
->
nbytes
-
1
));
start
=
tbl
->
base
;
end
=
start
+
(
tbl
->
nbytes
-
1
);
if
(
region_start
>=
start
&&
region_end
<=
end
)
if
(
(
region_start
>=
start
)
&&
(
region_end
<=
end
)
)
{
return
0
;
}
tbl
++
;
}
...
...
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