linux/arch/arm/include/asm/firmware.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (C) 2012 Samsung Electronics.
   4 * Kyungmin Park <kyungmin.park@samsung.com>
   5 * Tomasz Figa <t.figa@samsung.com>
   6 */
   7
   8#ifndef __ASM_ARM_FIRMWARE_H
   9#define __ASM_ARM_FIRMWARE_H
  10
  11#include <linux/bug.h>
  12
  13/*
  14 * struct firmware_ops
  15 *
  16 * A structure to specify available firmware operations.
  17 *
  18 * A filled up structure can be registered with register_firmware_ops().
  19 */
  20struct firmware_ops {
  21        /*
  22         * Inform the firmware we intend to enter CPU idle mode
  23         */
  24        int (*prepare_idle)(unsigned long mode);
  25        /*
  26         * Enters CPU idle mode
  27         */
  28        int (*do_idle)(unsigned long mode);
  29        /*
  30         * Sets boot address of specified physical CPU
  31         */
  32        int (*set_cpu_boot_addr)(int cpu, unsigned long boot_addr);
  33        /*
  34         * Gets boot address of specified physical CPU
  35         */
  36        int (*get_cpu_boot_addr)(int cpu, unsigned long *boot_addr);
  37        /*
  38         * Boots specified physical CPU
  39         */
  40        int (*cpu_boot)(int cpu);
  41        /*
  42         * Initializes L2 cache
  43         */
  44        int (*l2x0_init)(void);
  45        /*
  46         * Enter system-wide suspend.
  47         */
  48        int (*suspend)(void);
  49        /*
  50         * Restore state of privileged hardware after system-wide suspend.
  51         */
  52        int (*resume)(void);
  53};
  54
  55/* Global pointer for current firmware_ops structure, can't be NULL. */
  56extern const struct firmware_ops *firmware_ops;
  57
  58/*
  59 * call_firmware_op(op, ...)
  60 *
  61 * Checks if firmware operation is present and calls it,
  62 * otherwise returns -ENOSYS
  63 */
  64#define call_firmware_op(op, ...)                                       \
  65        ((firmware_ops->op) ? firmware_ops->op(__VA_ARGS__) : (-ENOSYS))
  66
  67/*
  68 * register_firmware_ops(ops)
  69 *
  70 * A function to register platform firmware_ops struct.
  71 */
  72static inline void register_firmware_ops(const struct firmware_ops *ops)
  73{
  74        BUG_ON(!ops);
  75
  76        firmware_ops = ops;
  77}
  78
  79#endif
  80