Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef __ACPI_PROCESSOR_H
  2 #define __ACPI_PROCESSOR_H
  3 
  4 #include <linux/kernel.h>
  5 #include <linux/config.h>
  6 
  7 #define ACPI_PROCESSOR_BUSY_METRIC      10
  8 
  9 #define ACPI_PROCESSOR_MAX_POWER        8
 10 #define ACPI_PROCESSOR_MAX_C2_LATENCY   100
 11 #define ACPI_PROCESSOR_MAX_C3_LATENCY   1000
 12 
 13 #define ACPI_PROCESSOR_MAX_THROTTLING   16
 14 #define ACPI_PROCESSOR_MAX_THROTTLE     250     /* 25% */
 15 #define ACPI_PROCESSOR_MAX_DUTY_WIDTH   4
 16 
 17 /* Power Management */
 18 
 19 struct acpi_processor_cx;
 20 
 21 struct acpi_power_register {
 22         u8                      descriptor;
 23         u16                     length;
 24         u8                      space_id;
 25         u8                      bit_width;
 26         u8                      bit_offset;
 27         u8                      reserved;
 28         u64                     address;
 29 } __attribute__ ((packed));
 30 
 31 
 32 struct acpi_processor_cx_policy {
 33         u32                     count;
 34         struct acpi_processor_cx *state;
 35         struct {
 36                 u32                     time;
 37                 u32                     ticks;
 38                 u32                     count;
 39                 u32                     bm;
 40         }                       threshold;
 41 };
 42 
 43 struct acpi_processor_cx {
 44         u8                      valid;
 45         u8                      type;
 46         u32                     address;
 47         u32                     latency;
 48         u32                     latency_ticks;
 49         u32                     power;
 50         u32                     usage;
 51         struct acpi_processor_cx_policy promotion;
 52         struct acpi_processor_cx_policy demotion;
 53 };
 54 
 55 struct acpi_processor_power {
 56         struct acpi_processor_cx *state;
 57         unsigned long           bm_check_timestamp;
 58         u32                     default_state;
 59         u32                     bm_activity;
 60         int                     count;
 61         struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER];
 62 };
 63 
 64 /* Performance Management */
 65 
 66 struct acpi_pct_register {
 67         u8                      descriptor;
 68         u16                     length;
 69         u8                      space_id;
 70         u8                      bit_width;
 71         u8                      bit_offset;
 72         u8                      reserved;
 73         u64                     address;
 74 } __attribute__ ((packed));
 75 
 76 struct acpi_processor_px {
 77         acpi_integer            core_frequency;         /* megahertz */
 78         acpi_integer            power;                  /* milliWatts */
 79         acpi_integer            transition_latency;     /* microseconds */
 80         acpi_integer            bus_master_latency;     /* microseconds */
 81         acpi_integer            control;                /* control value */
 82         acpi_integer            status;                 /* success indicator */
 83 };
 84 
 85 #define ACPI_PDC_REVISION_ID                   0x1
 86 
 87 struct acpi_processor_performance {
 88         unsigned int             state;
 89         unsigned int             platform_limit;
 90         struct acpi_pct_register control_register;
 91         struct acpi_pct_register status_register;
 92         unsigned int             state_count;
 93         struct acpi_processor_px *states;
 94 
 95         /* the _PDC objects passed by the driver, if any */
 96         struct acpi_object_list *pdc;
 97 };
 98 
 99 
100 
101 /* Throttling Control */
102 
103 struct acpi_processor_tx {
104         u16                     power;
105         u16                     performance;
106 };
107 
108 struct acpi_processor_throttling {
109         int                     state;
110         u32                     address;
111         u8                      duty_offset;
112         u8                      duty_width;
113         int                     state_count;
114         struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING];
115 };
116 
117 /* Limit Interface */
118 
119 struct acpi_processor_lx {
120         int                     px;             /* performace state */  
121         int                     tx;             /* throttle level */
122 };
123 
124 struct acpi_processor_limit {
125         struct acpi_processor_lx state;         /* current limit */
126         struct acpi_processor_lx thermal;       /* thermal limit */
127         struct acpi_processor_lx user;          /* user limit */
128 };
129 
130 
131 struct acpi_processor_flags {
132         u8                      power:1;
133         u8                      performance:1;
134         u8                      throttling:1;
135         u8                      limit:1;
136         u8                      bm_control:1;
137         u8                      bm_check:1;
138         u8                      has_cst:1;
139         u8                      power_setup_done:1;
140 };
141 
142 struct acpi_processor {
143         acpi_handle             handle;
144         u32                     acpi_id;
145         u32                     id;
146         u32                     pblk;
147         int                     performance_platform_limit;
148         struct acpi_processor_flags flags;
149         struct acpi_processor_power power;
150         struct acpi_processor_performance *performance;
151         struct acpi_processor_throttling throttling;
152         struct acpi_processor_limit limit;
153 };
154 
155 struct acpi_processor_errata {
156         u8                      smp;
157         struct {
158                 u8                      throttle:1;
159                 u8                      fdma:1;
160                 u8                      reserved:6;
161                 u32                     bmisx;
162         }                       piix4;
163 };
164 
165 extern int acpi_processor_register_performance (
166         struct acpi_processor_performance * performance,
167         unsigned int cpu);
168 extern void acpi_processor_unregister_performance (
169         struct acpi_processor_performance * performance,
170         unsigned int cpu);
171 
172 /* note: this locks both the calling module and the processor module
173          if a _PPC object exists, rmmod is disallowed then */
174 int acpi_processor_notify_smm(struct module *calling_module);
175 
176 
177 
178 /* for communication between multiple parts of the processor kernel module */
179 extern struct acpi_processor    *processors[NR_CPUS];
180 extern struct acpi_processor_errata errata;
181 
182 /* in processor_perflib.c */
183 #ifdef CONFIG_CPU_FREQ
184 void acpi_processor_ppc_init(void);
185 void acpi_processor_ppc_exit(void);
186 int acpi_processor_ppc_has_changed(struct acpi_processor *pr);
187 #else
188 static inline void acpi_processor_ppc_init(void) { return; }
189 static inline void acpi_processor_ppc_exit(void) { return; }
190 static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) {
191         static unsigned int printout = 1;
192         if (printout) {
193                 printk(KERN_WARNING "Warning: Processor Platform Limit event detected, but not handled.\n");
194                 printk(KERN_WARNING "Consider compiling CPUfreq support into your kernel.\n");
195                 printout = 0;
196         }
197         return 0;
198 }
199 #endif /* CONFIG_CPU_FREQ */
200 
201 /* in processor_throttling.c */
202 int acpi_processor_get_throttling_info (struct acpi_processor *pr);
203 int acpi_processor_set_throttling (struct acpi_processor *pr, int state);
204 int acpi_processor_throttling_open_fs(struct inode *inode, struct file *file);
205 ssize_t acpi_processor_write_throttling (
206         struct file             *file,
207         const char              __user *buffer,
208         size_t                  count,
209         loff_t                  *data);
210 extern struct file_operations acpi_processor_throttling_fops;
211 
212 /* in processor_idle.c */
213 int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *device);
214 int acpi_processor_cst_has_changed (struct acpi_processor *pr);
215 int acpi_processor_power_exit(struct acpi_processor *pr, struct acpi_device *device);
216 
217 
218 /* in processor_thermal.c */
219 int acpi_processor_get_limit_info (struct acpi_processor *pr);
220 int acpi_processor_limit_open_fs(struct inode *inode, struct file *file);
221 ssize_t acpi_processor_write_limit (
222         struct file             *file,
223         const char              __user *buffer,
224         size_t                  count,
225         loff_t                  *data);
226 extern struct file_operations acpi_processor_limit_fops;
227 
228 #ifdef CONFIG_CPU_FREQ
229 void acpi_thermal_cpufreq_init(void);
230 void acpi_thermal_cpufreq_exit(void);
231 #else
232 static inline void acpi_thermal_cpufreq_init(void) { return; }
233 static inline void acpi_thermal_cpufreq_exit(void) { return; }
234 #endif
235 
236 
237 #endif
238 
  This page was automatically generated by the LXR engine.