Commit 1af540ef authored by Roberto Vargas's avatar Roberto Vargas
Browse files

Fix MISRA rule 8.4 Part 1



Rule 8.4: A compatible declaration shall be visible when
          an object or function with external linkage is defined

Fixed for:
	make DEBUG=1 PLAT=fvp LOG_LEVEL=50 all

Change-Id: I7c2ad3f5c015411c202605851240d5347e4cc8c7
Signed-off-by: default avatarRoberto Vargas <roberto.vargas@arm.com>
parent dc6aad2e
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <platform.h> #include <platform.h>
#include <platform_def.h> #include <platform_def.h>
#include <stdint.h> #include <stdint.h>
#include "bl2_private.h"
/******************************************************************************* /*******************************************************************************
......
/* /*
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -21,7 +21,7 @@ static unsigned int gicv2_compat; ...@@ -21,7 +21,7 @@ static unsigned int gicv2_compat;
* spinlock are used either at boot time (when only a single CPU is active), or * spinlock are used either at boot time (when only a single CPU is active), or
* when the system is fully coherent. * when the system is fully coherent.
*/ */
spinlock_t gic_lock; static spinlock_t gic_lock;
/* /*
* Redistributor power operations are weakly bound so that they can be * Redistributor power operations are weakly bound so that they can be
......
/* /*
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -79,6 +79,8 @@ void gicd_clr_igrpmodr(uintptr_t base, unsigned int id); ...@@ -79,6 +79,8 @@ void gicd_clr_igrpmodr(uintptr_t base, unsigned int id);
void gicr_clr_igrpmodr0(uintptr_t base, unsigned int id); void gicr_clr_igrpmodr0(uintptr_t base, unsigned int id);
void gicr_clr_igroupr0(uintptr_t base, unsigned int id); void gicr_clr_igroupr0(uintptr_t base, unsigned int id);
void gicr_set_ipriorityr(uintptr_t base, unsigned int id, unsigned int pri); void gicr_set_ipriorityr(uintptr_t base, unsigned int id, unsigned int pri);
void gicr_set_icfgr0(uintptr_t base, unsigned int id, unsigned int cfg);
void gicr_set_icfgr1(uintptr_t base, unsigned int id, unsigned int cfg);
/******************************************************************************* /*******************************************************************************
* Private GICv3 helper function prototypes * Private GICv3 helper function prototypes
......
...@@ -34,7 +34,7 @@ typedef struct tzc400_instance { ...@@ -34,7 +34,7 @@ typedef struct tzc400_instance {
uint8_t num_regions; uint8_t num_regions;
} tzc400_instance_t; } tzc400_instance_t;
tzc400_instance_t tzc400; static tzc400_instance_t tzc400;
static inline unsigned int _tzc400_read_build_config(uintptr_t base) static inline unsigned int _tzc400_read_build_config(uintptr_t base)
{ {
......
/* /*
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
* It is used to program region 0 ATTRIBUTES and ACCESS register. * It is used to program region 0 ATTRIBUTES and ACCESS register.
*/ */
#define DEFINE_TZC_COMMON_CONFIGURE_REGION0(fn_name) \ #define DEFINE_TZC_COMMON_CONFIGURE_REGION0(fn_name) \
void _tzc##fn_name##_configure_region0(uintptr_t base, \ static void _tzc##fn_name##_configure_region0(uintptr_t base, \
tzc_region_attributes_t sec_attr, \ tzc_region_attributes_t sec_attr, \
unsigned int ns_device_access) \ unsigned int ns_device_access) \
{ \ { \
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
* that function). * that function).
*/ */
#define DEFINE_TZC_COMMON_CONFIGURE_REGION(fn_name) \ #define DEFINE_TZC_COMMON_CONFIGURE_REGION(fn_name) \
void _tzc##fn_name##_configure_region(uintptr_t base, \ static void _tzc##fn_name##_configure_region(uintptr_t base, \
unsigned int filters, \ unsigned int filters, \
int region_no, \ int region_no, \
unsigned long long region_base, \ unsigned long long region_base, \
......
...@@ -83,6 +83,7 @@ register_t bl1_smc_handler(unsigned int smc_fid, ...@@ -83,6 +83,7 @@ register_t bl1_smc_handler(unsigned int smc_fid,
void bl1_print_next_bl_ep_info(const struct entry_point_info *bl_ep_info); void bl1_print_next_bl_ep_info(const struct entry_point_info *bl_ep_info);
void bl1_main(void); void bl1_main(void);
void bl1_plat_prepare_exit(entry_point_info_t *ep_info);
/* /*
* Check if the total number of FWU SMC calls are as expected. * Check if the total number of FWU SMC calls are as expected.
......
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
#ifndef BL2_H__ #ifndef BL2_H__
#define BL2_H__ #define BL2_H__
struct entry_point_info;
void bl2_main(void); void bl2_main(void);
struct entry_point_info *bl2_load_images(void);
#endif /* BL2_H__ */ #endif /* BL2_H__ */
...@@ -210,7 +210,6 @@ int load_auth_image(unsigned int image_id, image_info_t *image_data); ...@@ -210,7 +210,6 @@ int load_auth_image(unsigned int image_id, image_info_t *image_data);
#else #else
uintptr_t page_align(uintptr_t value, unsigned dir);
int load_image(meminfo_t *mem_layout, int load_image(meminfo_t *mem_layout,
unsigned int image_id, unsigned int image_id,
uintptr_t image_base, uintptr_t image_base,
...@@ -230,6 +229,7 @@ extern const char build_message[]; ...@@ -230,6 +229,7 @@ extern const char build_message[];
extern const char version_string[]; extern const char version_string[];
void print_entry_point_info(const entry_point_info_t *ep_info); void print_entry_point_info(const entry_point_info_t *ep_info);
uintptr_t page_align(uintptr_t value, unsigned dir);
#endif /*__ASSEMBLY__*/ #endif /*__ASSEMBLY__*/
......
/* /*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -19,6 +19,9 @@ typedef struct bl_mem_params_node { ...@@ -19,6 +19,9 @@ typedef struct bl_mem_params_node {
bl_params_node_t params_node_mem; bl_params_node_t params_node_mem;
} bl_mem_params_node_t; } bl_mem_params_node_t;
extern bl_mem_params_node_t *bl_mem_params_desc_ptr;
extern unsigned int bl_mem_params_desc_num;
/* /*
* Macro to register list of BL image descriptors, * Macro to register list of BL image descriptors,
* defined as an array of bl_mem_params_node_t. * defined as an array of bl_mem_params_node_t.
......
/* /*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -45,8 +45,11 @@ typedef struct pmf_svc_desc { ...@@ -45,8 +45,11 @@ typedef struct pmf_svc_desc {
/* /*
* Convenience macro to allocate memory for a PMF service. * Convenience macro to allocate memory for a PMF service.
*
* The extern declaration is there to satisfy MISRA C-2012 rule 8.4.
*/ */
#define PMF_ALLOCATE_TIMESTAMP_MEMORY(_name, _total_id) \ #define PMF_ALLOCATE_TIMESTAMP_MEMORY(_name, _total_id) \
extern unsigned long long pmf_ts_mem_ ## _name[_total_id]; \
unsigned long long pmf_ts_mem_ ## _name[_total_id] \ unsigned long long pmf_ts_mem_ ## _name[_total_id] \
__aligned(CACHE_WRITEBACK_GRANULE) \ __aligned(CACHE_WRITEBACK_GRANULE) \
__section("pmf_timestamp_array") \ __section("pmf_timestamp_array") \
...@@ -60,8 +63,13 @@ typedef struct pmf_svc_desc { ...@@ -60,8 +63,13 @@ typedef struct pmf_svc_desc {
/* /*
* Convenience macros for capturing time-stamp. * Convenience macros for capturing time-stamp.
*
* The extern declaration is there to satisfy MISRA C-2012 rule 8.4.
*/ */
#define PMF_DEFINE_CAPTURE_TIMESTAMP(_name, _flags) \ #define PMF_DEFINE_CAPTURE_TIMESTAMP(_name, _flags) \
void pmf_capture_timestamp_ ## _name( \
unsigned int tid, \
unsigned long long ts); \
void pmf_capture_timestamp_ ## _name( \ void pmf_capture_timestamp_ ## _name( \
unsigned int tid, \ unsigned int tid, \
unsigned long long ts) \ unsigned long long ts) \
...@@ -74,6 +82,9 @@ typedef struct pmf_svc_desc { ...@@ -74,6 +82,9 @@ typedef struct pmf_svc_desc {
if ((_flags) & PMF_DUMP_ENABLE) \ if ((_flags) & PMF_DUMP_ENABLE) \
__pmf_dump_timestamp(tid, ts); \ __pmf_dump_timestamp(tid, ts); \
} \ } \
void pmf_capture_timestamp_with_cache_maint_ ## _name( \
unsigned int tid, \
unsigned long long ts); \
void pmf_capture_timestamp_with_cache_maint_ ## _name( \ void pmf_capture_timestamp_with_cache_maint_ ## _name( \
unsigned int tid, \ unsigned int tid, \
unsigned long long ts) \ unsigned long long ts) \
...@@ -89,8 +100,12 @@ typedef struct pmf_svc_desc { ...@@ -89,8 +100,12 @@ typedef struct pmf_svc_desc {
/* /*
* Convenience macros for retrieving time-stamp. * Convenience macros for retrieving time-stamp.
*
* The extern declaration is there to satisfy MISRA C-2012 rule 8.4.
*/ */
#define PMF_DEFINE_GET_TIMESTAMP(_name) \ #define PMF_DEFINE_GET_TIMESTAMP(_name) \
unsigned long long pmf_get_timestamp_by_index_ ## _name( \
unsigned int tid, unsigned int cpuid, unsigned int flags);\
unsigned long long pmf_get_timestamp_by_index_ ## _name( \ unsigned long long pmf_get_timestamp_by_index_ ## _name( \
unsigned int tid, unsigned int cpuid, unsigned int flags)\ unsigned int tid, unsigned int cpuid, unsigned int flags)\
{ \ { \
...@@ -98,6 +113,8 @@ typedef struct pmf_svc_desc { ...@@ -98,6 +113,8 @@ typedef struct pmf_svc_desc {
uintptr_t base_addr = (uintptr_t) pmf_ts_mem_ ## _name; \ uintptr_t base_addr = (uintptr_t) pmf_ts_mem_ ## _name; \
return __pmf_get_timestamp(base_addr, tid, cpuid, flags);\ return __pmf_get_timestamp(base_addr, tid, cpuid, flags);\
} \ } \
unsigned long long pmf_get_timestamp_by_mpidr_ ## _name( \
unsigned int tid, u_register_t mpidr, unsigned int flags);\
unsigned long long pmf_get_timestamp_by_mpidr_ ## _name( \ unsigned long long pmf_get_timestamp_by_mpidr_ ## _name( \
unsigned int tid, u_register_t mpidr, unsigned int flags)\ unsigned int tid, u_register_t mpidr, unsigned int flags)\
{ \ { \
......
...@@ -237,4 +237,8 @@ int arm_execution_state_switch(unsigned int smc_fid, ...@@ -237,4 +237,8 @@ int arm_execution_state_switch(unsigned int smc_fid,
uint32_t cookie_lo, uint32_t cookie_lo,
void *handle); void *handle);
/* global variables */
extern plat_psci_ops_t plat_arm_psci_pm_ops;
extern const mmap_region_t plat_arm_mmap[];
#endif /* __PLAT_ARM_H__ */ #endif /* __PLAT_ARM_H__ */
...@@ -115,7 +115,7 @@ static uint64_t *xlat_table_get_empty(xlat_ctx_t *ctx) ...@@ -115,7 +115,7 @@ static uint64_t *xlat_table_get_empty(xlat_ctx_t *ctx)
/* /*
* Returns a block/page table descriptor for the given level and attributes. * Returns a block/page table descriptor for the given level and attributes.
*/ */
uint64_t xlat_desc(const xlat_ctx_t *ctx, mmap_attr_t attr, static uint64_t xlat_desc(const xlat_ctx_t *ctx, mmap_attr_t attr,
unsigned long long addr_pa, int level) unsigned long long addr_pa, int level)
{ {
uint64_t desc; uint64_t desc;
......
/* /*
* Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#include <plat_arm.h> #include <plat_arm.h>
#include <platform.h>
#include <tbbr_img_def.h> #include <tbbr_img_def.h>
#include "fvp_private.h" #include "fvp_private.h"
......
/* /*
* Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#include <plat_arm.h> #include <plat_arm.h>
#include <platform.h>
#include "fvp_def.h" #include "fvp_def.h"
#include "fvp_private.h" #include "fvp_private.h"
......
/* /*
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <secure_partition.h> #include <secure_partition.h>
#include <v2m_def.h> #include <v2m_def.h>
#include "../fvp_def.h" #include "../fvp_def.h"
#include "fvp_private.h"
/* Defines for GIC Driver build time selection */ /* Defines for GIC Driver build time selection */
#define FVP_GICV2 1 #define FVP_GICV2 1
......
/* /*
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <debug.h> #include <debug.h>
#include <errno.h> #include <errno.h>
#include <norflash.h> #include <norflash.h>
#include <platform.h>
#include <stdint.h> #include <stdint.h>
/* /*
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <psci.h> #include <psci.h>
#include <spe.h> #include <spe.h>
#include <v2m_def.h> #include <v2m_def.h>
#include "../../../../drivers/arm/gic/v3/gicv3_private.h"
#include "drivers/pwrc/fvp_pwrc.h" #include "drivers/pwrc/fvp_pwrc.h"
#include "fvp_def.h" #include "fvp_def.h"
#include "fvp_private.h" #include "fvp_private.h"
...@@ -123,7 +124,7 @@ static void fvp_power_domain_on_finish_common(const psci_power_state_t *target_s ...@@ -123,7 +124,7 @@ static void fvp_power_domain_on_finish_common(const psci_power_state_t *target_s
/******************************************************************************* /*******************************************************************************
* FVP handler called when a CPU is about to enter standby. * FVP handler called when a CPU is about to enter standby.
******************************************************************************/ ******************************************************************************/
void fvp_cpu_standby(plat_local_state_t cpu_state) static void fvp_cpu_standby(plat_local_state_t cpu_state)
{ {
assert(cpu_state == ARM_LOCAL_STATE_RET); assert(cpu_state == ARM_LOCAL_STATE_RET);
...@@ -140,7 +141,7 @@ void fvp_cpu_standby(plat_local_state_t cpu_state) ...@@ -140,7 +141,7 @@ void fvp_cpu_standby(plat_local_state_t cpu_state)
* FVP handler called when a power domain is about to be turned on. The * FVP handler called when a power domain is about to be turned on. The
* mpidr determines the CPU to be turned on. * mpidr determines the CPU to be turned on.
******************************************************************************/ ******************************************************************************/
int fvp_pwr_domain_on(u_register_t mpidr) static int fvp_pwr_domain_on(u_register_t mpidr)
{ {
int rc = PSCI_E_SUCCESS; int rc = PSCI_E_SUCCESS;
unsigned int psysr; unsigned int psysr;
...@@ -162,7 +163,7 @@ int fvp_pwr_domain_on(u_register_t mpidr) ...@@ -162,7 +163,7 @@ int fvp_pwr_domain_on(u_register_t mpidr)
* FVP handler called when a power domain is about to be turned off. The * FVP handler called when a power domain is about to be turned off. The
* target_state encodes the power state that each level should transition to. * target_state encodes the power state that each level should transition to.
******************************************************************************/ ******************************************************************************/
void fvp_pwr_domain_off(const psci_power_state_t *target_state) static void fvp_pwr_domain_off(const psci_power_state_t *target_state)
{ {
assert(target_state->pwr_domain_state[ARM_PWR_LVL0] == assert(target_state->pwr_domain_state[ARM_PWR_LVL0] ==
ARM_LOCAL_STATE_OFF); ARM_LOCAL_STATE_OFF);
...@@ -192,7 +193,7 @@ void fvp_pwr_domain_off(const psci_power_state_t *target_state) ...@@ -192,7 +193,7 @@ void fvp_pwr_domain_off(const psci_power_state_t *target_state)
* FVP handler called when a power domain is about to be suspended. The * FVP handler called when a power domain is about to be suspended. The
* target_state encodes the power state that each level should transition to. * target_state encodes the power state that each level should transition to.
******************************************************************************/ ******************************************************************************/
void fvp_pwr_domain_suspend(const psci_power_state_t *target_state) static void fvp_pwr_domain_suspend(const psci_power_state_t *target_state)
{ {
unsigned long mpidr; unsigned long mpidr;
...@@ -241,7 +242,7 @@ void fvp_pwr_domain_suspend(const psci_power_state_t *target_state) ...@@ -241,7 +242,7 @@ void fvp_pwr_domain_suspend(const psci_power_state_t *target_state)
* being turned off earlier. The target_state encodes the low power state that * being turned off earlier. The target_state encodes the low power state that
* each level has woken up from. * each level has woken up from.
******************************************************************************/ ******************************************************************************/
void fvp_pwr_domain_on_finish(const psci_power_state_t *target_state) static void fvp_pwr_domain_on_finish(const psci_power_state_t *target_state)
{ {
fvp_power_domain_on_finish_common(target_state); fvp_power_domain_on_finish_common(target_state);
...@@ -259,7 +260,7 @@ void fvp_pwr_domain_on_finish(const psci_power_state_t *target_state) ...@@ -259,7 +260,7 @@ void fvp_pwr_domain_on_finish(const psci_power_state_t *target_state)
* TODO: At the moment we reuse the on finisher and reinitialize the secure * TODO: At the moment we reuse the on finisher and reinitialize the secure
* context. Need to implement a separate suspend finisher. * context. Need to implement a separate suspend finisher.
******************************************************************************/ ******************************************************************************/
void fvp_pwr_domain_suspend_finish(const psci_power_state_t *target_state) static void fvp_pwr_domain_suspend_finish(const psci_power_state_t *target_state)
{ {
/* /*
* Nothing to be done on waking up from retention from CPU level. * Nothing to be done on waking up from retention from CPU level.
...@@ -341,13 +342,15 @@ static int fvp_node_hw_state(u_register_t target_cpu, ...@@ -341,13 +342,15 @@ static int fvp_node_hw_state(u_register_t target_cpu,
* layer. The `fake` SYSTEM_SUSPEND allows us to validate some of the driver * layer. The `fake` SYSTEM_SUSPEND allows us to validate some of the driver
* save and restore sequences on FVP. * save and restore sequences on FVP.
*/ */
void fvp_get_sys_suspend_power_state(psci_power_state_t *req_state) #if !ARM_BL31_IN_DRAM
static void fvp_get_sys_suspend_power_state(psci_power_state_t *req_state)
{ {
unsigned int i; unsigned int i;
for (i = ARM_PWR_LVL0; i <= PLAT_MAX_PWR_LVL; i++) for (i = ARM_PWR_LVL0; i <= PLAT_MAX_PWR_LVL; i++)
req_state->pwr_domain_state[i] = ARM_LOCAL_STATE_OFF; req_state->pwr_domain_state[i] = ARM_LOCAL_STATE_OFF;
} }
#endif
/******************************************************************************* /*******************************************************************************
* Handler to filter PSCI requests. * Handler to filter PSCI requests.
......
/* /*
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -8,11 +8,12 @@ ...@@ -8,11 +8,12 @@
#include <arm_config.h> #include <arm_config.h>
#include <cassert.h> #include <cassert.h>
#include <plat_arm.h> #include <plat_arm.h>
#include <platform.h>
#include <platform_def.h> #include <platform_def.h>
#include "drivers/pwrc/fvp_pwrc.h" #include "drivers/pwrc/fvp_pwrc.h"
/* The FVP power domain tree descriptor */ /* The FVP power domain tree descriptor */
unsigned char fvp_power_domain_tree_desc[FVP_CLUSTER_COUNT + 2]; static unsigned char fvp_power_domain_tree_desc[FVP_CLUSTER_COUNT + 2];
CASSERT(FVP_CLUSTER_COUNT && FVP_CLUSTER_COUNT <= 256, assert_invalid_fvp_cluster_count); CASSERT(FVP_CLUSTER_COUNT && FVP_CLUSTER_COUNT <= 256, assert_invalid_fvp_cluster_count);
......
/* /*
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <assert.h> #include <assert.h>
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <platform.h>
#include <tbbr_oid.h> #include <tbbr_oid.h>
#include "fvp_def.h" #include "fvp_def.h"
......
...@@ -7,9 +7,11 @@ ...@@ -7,9 +7,11 @@
#include <arch.h> #include <arch.h>
#include <arm_def.h> #include <arm_def.h>
#include <arm_xlat_tables.h> #include <arm_xlat_tables.h>
#include <bl1.h>
#include <bl_common.h> #include <bl_common.h>
#include <console.h> #include <console.h>
#include <plat_arm.h> #include <plat_arm.h>
#include <platform.h>
#include <platform_def.h> #include <platform_def.h>
#include <sp805.h> #include <sp805.h>
#include <utils.h> #include <utils.h>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment