Blame view
include/linux/clockchips.h
5.14 KB
d316c57ff [PATCH] clockeven... |
1 2 3 4 5 6 7 8 9 |
/* linux/include/linux/clockchips.h * * This file contains the structure definitions for clockchips. * * If you are not a clockchip, or the time of day code, you should * not be including this file! */ #ifndef _LINUX_CLOCKCHIPS_H #define _LINUX_CLOCKCHIPS_H |
de68d9b17 clockevents: Allo... |
10 |
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BUILD |
d316c57ff [PATCH] clockeven... |
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <linux/clocksource.h> #include <linux/cpumask.h> #include <linux/ktime.h> #include <linux/notifier.h> struct clock_event_device; /* Clock event mode commands */ enum clock_event_mode { CLOCK_EVT_MODE_UNUSED = 0, CLOCK_EVT_MODE_SHUTDOWN, CLOCK_EVT_MODE_PERIODIC, CLOCK_EVT_MODE_ONESHOT, |
18de5bc4c clockevents: fix ... |
25 |
CLOCK_EVT_MODE_RESUME, |
d316c57ff [PATCH] clockeven... |
26 27 28 29 30 31 32 |
}; /* Clock event notification values */ enum clock_event_nofitiers { CLOCK_EVT_NOTIFY_ADD, CLOCK_EVT_NOTIFY_BROADCAST_ON, CLOCK_EVT_NOTIFY_BROADCAST_OFF, |
1595f452f clockevents: intr... |
33 |
CLOCK_EVT_NOTIFY_BROADCAST_FORCE, |
d316c57ff [PATCH] clockeven... |
34 35 36 37 |
CLOCK_EVT_NOTIFY_BROADCAST_ENTER, CLOCK_EVT_NOTIFY_BROADCAST_EXIT, CLOCK_EVT_NOTIFY_SUSPEND, CLOCK_EVT_NOTIFY_RESUME, |
94df7de02 hrtimers: allow t... |
38 |
CLOCK_EVT_NOTIFY_CPU_DYING, |
d316c57ff [PATCH] clockeven... |
39 40 41 42 43 44 45 46 |
CLOCK_EVT_NOTIFY_CPU_DEAD, }; /* * Clock event features */ #define CLOCK_EVT_FEAT_PERIODIC 0x000001 #define CLOCK_EVT_FEAT_ONESHOT 0x000002 |
65516f8a7 clockevents: Add ... |
47 |
#define CLOCK_EVT_FEAT_KTIME 0x000004 |
d316c57ff [PATCH] clockeven... |
48 49 50 51 52 53 |
/* * x86(64) specific misfeatures: * * - Clockevent source stops in C3 State and needs broadcast support. * - Local APIC timer is used as a dummy device. */ |
65516f8a7 clockevents: Add ... |
54 55 |
#define CLOCK_EVT_FEAT_C3STOP 0x000008 #define CLOCK_EVT_FEAT_DUMMY 0x000010 |
d316c57ff [PATCH] clockeven... |
56 57 58 |
/** * struct clock_event_device - clock event device descriptor |
847b2f42b clockevents: Rest... |
59 60 |
* @event_handler: Assigned by the framework to be called by the low * level handler of the event source |
65516f8a7 clockevents: Add ... |
61 62 |
* @set_next_event: set next event function using a clocksource delta * @set_next_ktime: set next event function using a direct ktime value |
847b2f42b clockevents: Rest... |
63 |
* @next_event: local storage for the next event in oneshot mode |
d316c57ff [PATCH] clockeven... |
64 65 66 67 |
* @max_delta_ns: maximum delta value in ns * @min_delta_ns: minimum delta value in ns * @mult: nanosecond to cycles multiplier * @shift: nanoseconds to cycles divisor (power of two) |
847b2f42b clockevents: Rest... |
68 69 70 71 72 |
* @mode: operating mode assigned by the management code * @features: features * @retries: number of forced programming retries * @set_mode: set mode function * @broadcast: function to broadcast events |
57f0fcbe1 clockevents: Prov... |
73 74 |
* @min_delta_ticks: minimum delta value in ticks stored for reconfiguration * @max_delta_ticks: maximum delta value in ticks stored for reconfiguration |
847b2f42b clockevents: Rest... |
75 |
* @name: ptr to clock event name |
d316c57ff [PATCH] clockeven... |
76 |
* @rating: variable to rate clock event devices |
ce0be1273 clockchips.h: ker... |
77 78 |
* @irq: IRQ number (only for non CPU local devices) * @cpumask: cpumask to indicate for which CPUs this device works |
d316c57ff [PATCH] clockeven... |
79 |
* @list: list head for the management code |
d316c57ff [PATCH] clockeven... |
80 81 |
*/ struct clock_event_device { |
847b2f42b clockevents: Rest... |
82 83 84 |
void (*event_handler)(struct clock_event_device *); int (*set_next_event)(unsigned long evt, struct clock_event_device *); |
65516f8a7 clockevents: Add ... |
85 86 |
int (*set_next_ktime)(ktime_t expires, struct clock_event_device *); |
847b2f42b clockevents: Rest... |
87 |
ktime_t next_event; |
97813f2fe nohz: Allow 32-bi... |
88 89 |
u64 max_delta_ns; u64 min_delta_ns; |
23af368e9 clockevents: Use ... |
90 91 |
u32 mult; u32 shift; |
847b2f42b clockevents: Rest... |
92 93 94 95 96 97 98 |
enum clock_event_mode mode; unsigned int features; unsigned long retries; void (*broadcast)(const struct cpumask *mask); void (*set_mode)(enum clock_event_mode mode, struct clock_event_device *); |
57f0fcbe1 clockevents: Prov... |
99 100 |
unsigned long min_delta_ticks; unsigned long max_delta_ticks; |
847b2f42b clockevents: Rest... |
101 |
const char *name; |
d316c57ff [PATCH] clockeven... |
102 103 |
int rating; int irq; |
320ab2b0b cpumask: convert ... |
104 |
const struct cpumask *cpumask; |
d316c57ff [PATCH] clockeven... |
105 |
struct list_head list; |
847b2f42b clockevents: Rest... |
106 |
} ____cacheline_aligned; |
d316c57ff [PATCH] clockeven... |
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
/* * Calculate a multiplication factor for scaled math, which is used to convert * nanoseconds based values to clock ticks: * * clock_ticks = (nanoseconds * factor) >> shift. * * div_sc is the rearranged equation to calculate a factor from a given clock * ticks / nanoseconds ratio: * * factor = (clock_ticks << shift) / nanoseconds */ static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec, int shift) { uint64_t tmp = ((uint64_t)ticks) << shift; do_div(tmp, nsec); return (unsigned long) tmp; } /* Clock event layer functions */ |
97813f2fe nohz: Allow 32-bi... |
129 130 |
extern u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt); |
d316c57ff [PATCH] clockeven... |
131 |
extern void clockevents_register_device(struct clock_event_device *dev); |
57f0fcbe1 clockevents: Prov... |
132 133 134 |
extern void clockevents_config_and_register(struct clock_event_device *dev, u32 freq, unsigned long min_delta, unsigned long max_delta); |
80b816b73 clockevents: Prov... |
135 |
extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); |
d316c57ff [PATCH] clockeven... |
136 137 |
extern void clockevents_exchange_device(struct clock_event_device *old, struct clock_event_device *new); |
d316c57ff [PATCH] clockeven... |
138 139 140 |
extern void clockevents_set_mode(struct clock_event_device *dev, enum clock_event_mode mode); extern int clockevents_register_notifier(struct notifier_block *nb); |
d316c57ff [PATCH] clockeven... |
141 |
extern int clockevents_program_event(struct clock_event_device *dev, |
d1748302f clockevents: Make... |
142 |
ktime_t expires, bool force); |
d316c57ff [PATCH] clockeven... |
143 |
|
7c1e76897 clockevents: prev... |
144 |
extern void clockevents_handle_noop(struct clock_event_device *dev); |
7d2f944a2 clocksource: Prov... |
145 146 147 148 149 150 |
static inline void clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) { return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC, freq, minsec); } |
de68d9b17 clockevents: Allo... |
151 |
#ifdef CONFIG_GENERIC_CLOCKEVENTS |
d316c57ff [PATCH] clockeven... |
152 |
extern void clockevents_notify(unsigned long reason, void *arg); |
d316c57ff [PATCH] clockeven... |
153 |
#else |
de68d9b17 clockevents: Allo... |
154 155 156 157 |
# define clockevents_notify(reason, arg) do { } while (0) #endif #else /* CONFIG_GENERIC_CLOCKEVENTS_BUILD */ |
d316c57ff [PATCH] clockeven... |
158 |
|
d316c57ff [PATCH] clockeven... |
159 160 161 162 163 |
#define clockevents_notify(reason, arg) do { } while (0) #endif #endif |