LCOV - code coverage report
Current view: top level - zephyr/arch/x86/intel64 - arch.h Hit Total Coverage
Test: new.info Lines: 0 8 0.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2019 Intel Corp.
       3             :  * SPDX-License-Identifier: Apache-2.0
       4             :  */
       5             : 
       6             : #ifndef ZEPHYR_INCLUDE_ARCH_X86_INTEL64_ARCH_H_
       7             : #define ZEPHYR_INCLUDE_ARCH_X86_INTEL64_ARCH_H_
       8             : 
       9             : #include <zephyr/arch/x86/intel64/exception.h>
      10             : #include <zephyr/arch/x86/intel64/thread.h>
      11             : #include <zephyr/arch/x86/thread_stack.h>
      12             : #if defined(CONFIG_PCIE) && !defined(_ASMLANGUAGE)
      13             : #include <zephyr/sys/iterable_sections.h>
      14             : #endif
      15             : 
      16             : #if CONFIG_ISR_STACK_SIZE != (CONFIG_ISR_SUBSTACK_SIZE * CONFIG_ISR_DEPTH)
      17             : #error "Check ISR stack configuration (CONFIG_ISR_*)"
      18             : #endif
      19             : 
      20             : #if CONFIG_ISR_SUBSTACK_SIZE % ARCH_STACK_PTR_ALIGN
      21             : #error "CONFIG_ISR_SUBSTACK_SIZE must be a multiple of 16"
      22             : #endif
      23             : 
      24             : #ifndef _ASMLANGUAGE
      25             : 
      26           0 : static ALWAYS_INLINE void sys_write64(uint64_t data, mm_reg_t addr)
      27             : {
      28             :         __asm__ volatile("movq %0, %1"
      29             :                          :
      30             :                          : "r"(data), "m" (*(volatile uint64_t *)
      31             :                                            (uintptr_t) addr)
      32             :                          : "memory");
      33             : }
      34             : 
      35           0 : static ALWAYS_INLINE uint64_t sys_read64(mm_reg_t addr)
      36             : {
      37             :         uint64_t ret;
      38             : 
      39             :         __asm__ volatile("movq %1, %0"
      40             :                          : "=r"(ret)
      41             :                          : "m" (*(volatile uint64_t *)(uintptr_t) addr)
      42             :                          : "memory");
      43             : 
      44             :         return ret;
      45             : }
      46             : 
      47           0 : static ALWAYS_INLINE unsigned int arch_irq_lock(void)
      48             : {
      49             :         unsigned long key;
      50             : 
      51             :         __asm__ volatile ("pushfq; cli; popq %0" : "=g" (key) : : "memory");
      52             : 
      53             :         return (unsigned int) key;
      54             : }
      55             : 
      56           0 : #define ARCH_EXCEPT(reason_p) do { \
      57             :         __asm__ volatile( \
      58             :                 "movq %[reason], %%rax\n\t" \
      59             :                 "int $32\n\t" \
      60             :                 : \
      61             :                 : [reason] "i" (reason_p)); \
      62             :         CODE_UNREACHABLE; /* LCOV_EXCL_LINE */ \
      63             : } while (false)
      64             : 
      65             : #ifdef CONFIG_PCIE
      66             : #define X86_RESERVE_IRQ(irq_p, name) \
      67             :         static TYPE_SECTION_ITERABLE(uint8_t, name, irq_alloc, name) = irq_p
      68             : #else
      69           0 : #define X86_RESERVE_IRQ(irq_p, name)
      70             : #endif
      71             : 
      72             : #endif /* _ASMLANGUAGE */
      73             : 
      74             : /*
      75             :  * All Intel64 interrupts are dynamically connected.
      76             :  */
      77             : 
      78           0 : #define ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \
      79             :         X86_RESERVE_IRQ(irq_p, _CONCAT(_irq_alloc_fixed, __COUNTER__)); \
      80             :         arch_irq_connect_dynamic(irq_p, priority_p,                     \
      81             :                                  (void (*)(const void *))isr_p,         \
      82             :                                  isr_param_p, flags_p)
      83             : 
      84             : #ifdef CONFIG_PCIE
      85             : 
      86             : #define ARCH_PCIE_IRQ_CONNECT(bdf_p, irq_p, priority_p,                 \
      87             :                               isr_p, isr_param_p, flags_p)              \
      88             :         X86_RESERVE_IRQ(irq_p, _CONCAT(_irq_alloc_fixed, __COUNTER__)); \
      89             :         pcie_connect_dynamic_irq(bdf_p, irq_p, priority_p,              \
      90             :                                  (void (*)(const void *))isr_p,         \
      91             :                                  isr_param_p, flags_p)
      92             : 
      93             : #endif /* CONFIG_PCIE */
      94             : 
      95             : /*
      96             :  * Thread object needs to be 16-byte aligned.
      97             :  */
      98           0 : #define ARCH_DYNAMIC_OBJ_K_THREAD_ALIGNMENT     16
      99             : 
     100             : #endif /* ZEPHYR_INCLUDE_ARCH_X86_INTEL64_ARCH_H_ */

Generated by: LCOV version 1.14