diff options
| author | Wengang Wu <wgw@motorola.com> | 2014-02-27 16:06:00 -0600 |
|---|---|---|
| committer | James Wylder <jwylder@motorola.com> | 2014-03-05 17:47:30 -0600 |
| commit | 9324804a1754c81b55b24e37e87707c9151a3afb (patch) | |
| tree | 6b12aee8b90b0f9d623db97a46e6aadaf0bdc68f /drivers/gpu/pvr/services4/system/omap4/sgxfreq.h | |
| parent | 784d7e49932e090b3c611ea063a88106425eab92 (diff) | |
| download | olio-linux-3.10-9324804a1754c81b55b24e37e87707c9151a3afb.tar.xz olio-linux-3.10-9324804a1754c81b55b24e37e87707c9151a3afb.zip | |
IKXCLOCK-343 Initial TI SGX Android DDK version 1.9@2166536
Original source code pulled in from TI SGX Android DDK 1.9@2166536
Change-Id: Ibcdb0016a6b1ca2e26583c578eb690cc9cd57708
Diffstat (limited to 'drivers/gpu/pvr/services4/system/omap4/sgxfreq.h')
| -rw-r--r-- | drivers/gpu/pvr/services4/system/omap4/sgxfreq.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/drivers/gpu/pvr/services4/system/omap4/sgxfreq.h b/drivers/gpu/pvr/services4/system/omap4/sgxfreq.h new file mode 100644 index 00000000000..ff6fc88d4a6 --- /dev/null +++ b/drivers/gpu/pvr/services4/system/omap4/sgxfreq.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2012 Texas Instruments, Inc + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef SGXFREQ_H +#define SGXFREQ_H + +#include <linux/device.h> +#include <linux/time.h> + +#define SGXFREQ_NAME_LEN 16 + +//#define SGXFREQ_DEBUG_FTRACE +#if defined(SGXFREQ_DEBUG_FTRACE) +#define SGXFREQ_TRACE(...) trace_printk(__VA_ARGS__) +#else +#define SGXFREQ_TRACE(...) +#endif + +struct sgxfreq_sgx_data { + bool clk_on; + bool active; +}; + +struct sgxfreq_governor { + char name[SGXFREQ_NAME_LEN]; + int (*gov_start) (struct sgxfreq_sgx_data *data); + void (*gov_stop) (void); + void (*sgx_clk_on) (void); + void (*sgx_clk_off) (void); + void (*sgx_active) (void); + void (*sgx_idle) (void); + void (*sgx_frame_done) (void); + struct list_head governor_list; +}; + +/* sgxfreq_init must be called before any other api */ +int sgxfreq_init(struct device *dev); +int sgxfreq_deinit(void); + +int sgxfreq_register_governor(struct sgxfreq_governor *governor); +void sgxfreq_unregister_governor(struct sgxfreq_governor *governor); + +int sgxfreq_set_governor(const char *name); + +int sgxfreq_get_freq_list(unsigned long **pfreq_list); + +unsigned long sgxfreq_get_freq_min(void); +unsigned long sgxfreq_get_freq_max(void); + +unsigned long sgxfreq_get_freq_floor(unsigned long freq); +unsigned long sgxfreq_get_freq_ceil(unsigned long freq); + +unsigned long sgxfreq_get_freq(void); +unsigned long sgxfreq_get_freq_request(void); +unsigned long sgxfreq_get_freq_limit(void); + +unsigned long sgxfreq_set_freq_request(unsigned long freq_request); +unsigned long sgxfreq_set_freq_limit(unsigned long freq_limit); + +unsigned long sgxfreq_get_total_active_time(void); +unsigned long sgxfreq_get_total_idle_time(void); + +/* Helper functions */ +static inline unsigned long __tv2msec(struct timeval tv) +{ + return (tv.tv_sec * 1000) + (tv.tv_usec / 1000); +} + +static inline unsigned long __delta32(unsigned long a, unsigned long b) +{ + if (a >= b) + return a - b; + else + return 1 + (0xFFFFFFFF - b) + a; +} + +/* External notifications to sgxfreq */ +void sgxfreq_notif_sgx_clk_on(void); +void sgxfreq_notif_sgx_clk_off(void); +void sgxfreq_notif_sgx_active(void); +void sgxfreq_notif_sgx_idle(void); +void sgxfreq_notif_sgx_frame_done(void); + +#endif |