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