Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS

Test cases to verify device objects. More...

Data Structures

struct  init_record
 

Functions

void test_dummy_device (void)
 Test device object binding. More...
 
static void test_dynamic_name (void)
 Test device binding for existing device. More...
 
static void test_bogus_dynamic_name (void)
 Test device binding for non-existing device. More...
 
static void test_null_dynamic_name (void)
 Test device binding for passing null name. More...
 
static __pinned_func int add_init_record (bool pre_kernel)
 
static __pinned_func int pre1_fn (const struct device *dev)
 
static __pinned_func int pre2_fn (const struct device *dev)
 
static int post_fn (const struct device *dev)
 
static int app_fn (const struct device *dev)
 
 SYS_INIT (pre1_fn, PRE_KERNEL_1, 0)
 
 SYS_INIT (pre2_fn, PRE_KERNEL_2, 0)
 
 SYS_INIT (post_fn, POST_KERNEL, 0)
 
 SYS_INIT (app_fn, APPLICATION, 0)
 
static int null_driver_init (const struct device *dev)
 
 SYS_INIT (null_driver_init, POST_KERNEL, 0)
 
void test_pre_kernel_detection (void)
 Test detection of initialization before kernel services available. More...
 
static void test_enable_and_disable_automatic_runtime_pm (void)
 
static void test_build_suspend_device_list (void)
 
void test_dummy_device_pm (void)
 
void test_device_init_level (void)
 Test initialization level for device driver instances. More...
 
void test_device_init_priority (void)
 Test initialization priorities for device driver instances. More...
 
void test_abstraction_driver_common (void)
 Test abstraction of device drivers with common functionalities. More...
 
void test_mmio_single (void)
 Test DEVICE_MMIO_* macros. More...
 
void test_mmio_multiple (void)
 Test DEVICE_MMIO_NAMED_* macros. More...
 
void test_mmio_toplevel (void)
 Test DEVICE_MMIO_TOPLEVEL_* macros. More...
 

Variables

static __pinned_bss struct init_record init_records [4]
 
static __pinned_data struct init_recordrp = init_records
 
int init_level_sequence [4]
 
int init_priority_sequence [4]
 
unsigned int seq_level_cnt
 
unsigned int seq_priority_cnt
 

Detailed Description

Test cases to verify device objects.

Verify zephyr device driver apis with different device types

Function Documentation

◆ add_init_record()

static __pinned_func int add_init_record ( bool  pre_kernel)
static

◆ app_fn()

static int app_fn ( const struct device dev)
static

◆ null_driver_init()

static int null_driver_init ( const struct device dev)
static

◆ post_fn()

static int post_fn ( const struct device dev)
static

◆ pre1_fn()

static __pinned_func int pre1_fn ( const struct device dev)
static

◆ pre2_fn()

static __pinned_func int pre2_fn ( const struct device dev)
static

◆ SYS_INIT() [1/5]

SYS_INIT ( app_fn  ,
APPLICATION  ,
 
)

◆ SYS_INIT() [2/5]

SYS_INIT ( null_driver_init  ,
POST_KERNEL  ,
 
)

◆ SYS_INIT() [3/5]

SYS_INIT ( post_fn  ,
POST_KERNEL  ,
 
)

◆ SYS_INIT() [4/5]

SYS_INIT ( pre1_fn  ,
PRE_KERNEL_1  ,
 
)

◆ SYS_INIT() [5/5]

SYS_INIT ( pre2_fn  ,
PRE_KERNEL_2  ,
 
)

◆ test_abstraction_driver_common()

void test_abstraction_driver_common ( void  )

#include <tests/kernel/device/src/main.c>

Test abstraction of device drivers with common functionalities.

Abstraction of device drivers with common functionalities shall be provided as an intermediate interface between applications and device drivers, where such interface is implemented by individual device drivers. We verify this by following step:

  1. Define a subsystem api for drivers.
  2. Define and create two driver instances.
  3. Two drivers call the same subsystem API, and we verify that each driver instance will call their own implementations.

◆ test_bogus_dynamic_name()

static void test_bogus_dynamic_name ( void  )
static

#include <tests/kernel/device/src/main.c>

Test device binding for non-existing device.

Validates binding of a random device driver(non-defined driver) named "ANOTHER_BOGUS_NAME".

See also
device_get_binding(), DEVICE_DEFINE()

◆ test_build_suspend_device_list()

static void test_build_suspend_device_list ( void  )
static

◆ test_device_init_level()

void test_device_init_level ( void  )

#include <tests/kernel/device/src/main.c>

Test initialization level for device driver instances.

After the defined device instances have initialized, we check the sequence number that each driver stored during initialization. If the sequence of initial level stored is corresponding with our expectation, it means assigning the level for driver instance works.

◆ test_device_init_priority()

void test_device_init_priority ( void  )

#include <tests/kernel/device/src/main.c>

Test initialization priorities for device driver instances.

details After the defined device instances have initialized, we check the sequence number that each driver stored during initialization. If the sequence of initial priority stored is corresponding with our expectation, it means assigning the priority for driver instance works.

◆ test_dummy_device()

void test_dummy_device ( void  )

#include <tests/kernel/device/src/main.c>

Test device object binding.

Validates device binding for an existing and a non-existing device object. It creates a dummy_driver device object with basic init and configuration information and validates its binding.

Validates three kinds situations of driver object:

  1. A non-existing device object.
  2. An existing device object with basic init and configuration information.
  3. A failed init device object.
See also
device_get_binding(), DEVICE_DEFINE()

◆ test_dummy_device_pm()

void test_dummy_device_pm ( void  )

◆ test_dynamic_name()

static void test_dynamic_name ( void  )
static

#include <tests/kernel/device/src/main.c>

Test device binding for existing device.

Validates device binding for an existing device object.

See also
device_get_binding(), DEVICE_DEFINE()

◆ test_enable_and_disable_automatic_runtime_pm()

static void test_enable_and_disable_automatic_runtime_pm ( void  )
static

◆ test_mmio_multiple()

void test_mmio_multiple ( void  )

#include <tests/kernel/device/src/mmio.c>

Test DEVICE_MMIO_NAMED_* macros.

We show that we can make mapping calls and that the address returned by DEVICE_MMIO_NAMED_GET() is not NULL, indicating that the kernel mapped stuff somewhere.

We show that this works for a device instance that has two named regions, 'corge' and 'grault' that respectively come from DTS instances 1 and 2.

We also perform some checks depending on configuration:

  • If MMIO addresses are maintained in RAM, check that the ROM struct was populated correctly.
  • If MMIO addresses are maintained in ROM, check that the DTS info, the ROM region, and the result of DEVICE_MMIO_NAMED_GET() all point to the same address. We show that no extra memory is used in dev_data.

◆ test_mmio_single()

void test_mmio_single ( void  )

#include <tests/kernel/device/src/mmio.c>

Test DEVICE_MMIO_* macros.

We show that we can make mapping calls and that the address returned by DEVICE_MMIO_GET() is not NULL, indicating that the kernel mapped stuff somewhere.

We also perform some checks depending on configuration:

  • If MMIO addresses are maintained in RAM, check that the ROM struct was populated correctly.
  • If MMIO addresses are maintained in ROM, check that the DTS info, the ROM region, and the result of DEVICE_MMIO_GET() all point to the same address. We show that no extra memory is used in dev_data.

◆ test_mmio_toplevel()

void test_mmio_toplevel ( void  )

#include <tests/kernel/device/src/mmio.c>

Test DEVICE_MMIO_TOPLEVEL_* macros.

We show that we can make mapping calls and that the address returned by DEVICE_MMIO_TOPLEVEL_GET() is not NULL, indicating that the kernel mapped stuff somewhere.

We do this for two different MMIO toplevel instances; one declared statically and one not.

We also perform some checks depending on configuration:

  • If MMIO addresses are maintained in RAM, check that the ROM struct was populated correctly.
  • If MMIO addresses are maintained in ROM, check that the DTS info, the ROM region, and the result of DEVICE_MMIO_TOPLEVEL_GET() all point to the same address

◆ test_null_dynamic_name()

static void test_null_dynamic_name ( void  )
static

#include <tests/kernel/device/src/main.c>

Test device binding for passing null name.

Validates device binding for device object when given dynamic name is null.

See also
device_get_binding(), DEVICE_DEFINE()

◆ test_pre_kernel_detection()

void test_pre_kernel_detection ( void  )

#include <tests/kernel/device/src/main.c>

Test detection of initialization before kernel services available.

Confirms check is correct.

See also
k_is_pre_kernel()

Variable Documentation

◆ init_level_sequence

int init_level_sequence[4]
extern

◆ init_priority_sequence

int init_priority_sequence[4]
extern

◆ init_records

__pinned_bss struct init_record init_records[4]
static

◆ rp

__pinned_data struct init_record* rp = init_records
static

◆ seq_level_cnt

unsigned int seq_level_cnt
extern

◆ seq_priority_cnt

unsigned int seq_priority_cnt
extern