| 1 |
|
| 2 | |
| 3 | * Copyright (C) 2012 Samsung Electronics.
|
| 4 | * Kyungmin Park <[email protected]>
|
| 5 | * Tomasz Figa <[email protected]>
|
| 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 |
|
| 20 | struct 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 |
|
| 56 | extern 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 |
|
| 72 | static inline void register_firmware_ops(const struct firmware_ops *ops)
|
| 73 | {
|
| 74 | BUG_ON(!ops);
|
| 75 |
|
| 76 | firmware_ops = ops;
|
| 77 | }
|
| 78 |
|
| 79 | #endif
|