|  | /* SPDX-License-Identifier: GPL-2.0-only */ | 
|  | /* | 
|  | * Copyright (C) 2012 Samsung Electronics. | 
|  | * Kyungmin Park <[email protected]> | 
|  | * Tomasz Figa <[email protected]> | 
|  | */ | 
|  |  | 
|  | #ifndef __ASM_ARM_FIRMWARE_H | 
|  | #define __ASM_ARM_FIRMWARE_H | 
|  |  | 
|  | #include <linux/bug.h> | 
|  |  | 
|  | /* | 
|  | * struct firmware_ops | 
|  | * | 
|  | * A structure to specify available firmware operations. | 
|  | * | 
|  | * A filled up structure can be registered with register_firmware_ops(). | 
|  | */ | 
|  | struct firmware_ops { | 
|  | /* | 
|  | * Inform the firmware we intend to enter CPU idle mode | 
|  | */ | 
|  | int (*prepare_idle)(unsigned long mode); | 
|  | /* | 
|  | * Enters CPU idle mode | 
|  | */ | 
|  | int (*do_idle)(unsigned long mode); | 
|  | /* | 
|  | * Sets boot address of specified physical CPU | 
|  | */ | 
|  | int (*set_cpu_boot_addr)(int cpu, unsigned long boot_addr); | 
|  | /* | 
|  | * Gets boot address of specified physical CPU | 
|  | */ | 
|  | int (*get_cpu_boot_addr)(int cpu, unsigned long *boot_addr); | 
|  | /* | 
|  | * Boots specified physical CPU | 
|  | */ | 
|  | int (*cpu_boot)(int cpu); | 
|  | /* | 
|  | * Initializes L2 cache | 
|  | */ | 
|  | int (*l2x0_init)(void); | 
|  | /* | 
|  | * Enter system-wide suspend. | 
|  | */ | 
|  | int (*suspend)(void); | 
|  | /* | 
|  | * Restore state of privileged hardware after system-wide suspend. | 
|  | */ | 
|  | int (*resume)(void); | 
|  | }; | 
|  |  | 
|  | /* Global pointer for current firmware_ops structure, can't be NULL. */ | 
|  | extern const struct firmware_ops *firmware_ops; | 
|  |  | 
|  | /* | 
|  | * call_firmware_op(op, ...) | 
|  | * | 
|  | * Checks if firmware operation is present and calls it, | 
|  | * otherwise returns -ENOSYS | 
|  | */ | 
|  | #define call_firmware_op(op, ...)					\ | 
|  | ((firmware_ops->op) ? firmware_ops->op(__VA_ARGS__) : (-ENOSYS)) | 
|  |  | 
|  | /* | 
|  | * register_firmware_ops(ops) | 
|  | * | 
|  | * A function to register platform firmware_ops struct. | 
|  | */ | 
|  | static inline void register_firmware_ops(const struct firmware_ops *ops) | 
|  | { | 
|  | BUG_ON(!ops); | 
|  |  | 
|  | firmware_ops = ops; | 
|  | } | 
|  |  | 
|  | #endif |