Linux Audio
Check our new training course
Embedded Linux Audio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
#ifndef __ACPI_PROCESSOR_H #define __ACPI_PROCESSOR_H #include <linux/kernel.h> #define ACPI_PROCESSOR_BUSY_METRIC 10 #define ACPI_PROCESSOR_MAX_POWER ACPI_C_STATE_COUNT #define ACPI_PROCESSOR_MAX_C2_LATENCY 100 #define ACPI_PROCESSOR_MAX_C3_LATENCY 1000 #define ACPI_PROCESSOR_MAX_THROTTLING 16 #define ACPI_PROCESSOR_MAX_THROTTLE 250 /* 25% */ #define ACPI_PROCESSOR_MAX_DUTY_WIDTH 4 /* Power Management */ struct acpi_processor_cx_policy { u32 count; int state; struct { u32 time; u32 ticks; u32 count; u32 bm; } threshold; }; struct acpi_processor_cx { u8 valid; u32 address; u32 latency; u32 latency_ticks; u32 power; u32 usage; struct acpi_processor_cx_policy promotion; struct acpi_processor_cx_policy demotion; }; struct acpi_processor_power { int state; int default_state; u32 bm_activity; struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER]; }; /* Performance Management */ struct acpi_pct_register { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 reserved; u64 address; } __attribute__ ((packed)); struct acpi_processor_px { acpi_integer core_frequency; /* megahertz */ acpi_integer power; /* milliWatts */ acpi_integer transition_latency; /* microseconds */ acpi_integer bus_master_latency; /* microseconds */ acpi_integer control; /* control value */ acpi_integer status; /* success indicator */ }; #define ACPI_PDC_REVISION_ID 0x1 struct acpi_processor_performance { unsigned int state; unsigned int platform_limit; struct acpi_pct_register control_register; struct acpi_pct_register status_register; unsigned int state_count; struct acpi_processor_px *states; /* the _PDC objects passed by the driver, if any */ struct acpi_object_list *pdc; }; /* Throttling Control */ struct acpi_processor_tx { u16 power; u16 performance; }; struct acpi_processor_throttling { int state; u32 address; u8 duty_offset; u8 duty_width; int state_count; struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING]; }; /* Limit Interface */ struct acpi_processor_lx { int px; /* performace state */ int tx; /* throttle level */ }; struct acpi_processor_limit { struct acpi_processor_lx state; /* current limit */ struct acpi_processor_lx thermal; /* thermal limit */ struct acpi_processor_lx user; /* user limit */ }; struct acpi_processor_flags { u8 power:1; u8 performance:1; u8 throttling:1; u8 limit:1; u8 bm_control:1; u8 bm_check:1; u8 reserved:2; }; struct acpi_processor { acpi_handle handle; u32 acpi_id; u32 id; int performance_platform_limit; struct acpi_processor_flags flags; struct acpi_processor_power power; struct acpi_processor_performance *performance; struct acpi_processor_throttling throttling; struct acpi_processor_limit limit; }; extern int acpi_processor_register_performance ( struct acpi_processor_performance * performance, unsigned int cpu); extern void acpi_processor_unregister_performance ( struct acpi_processor_performance * performance, unsigned int cpu); #endif