diff options
Diffstat (limited to 'drivers/media/video/samsung/fimg2d4x/fimg2d_helper.h')
-rw-r--r-- | drivers/media/video/samsung/fimg2d4x/fimg2d_helper.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/drivers/media/video/samsung/fimg2d4x/fimg2d_helper.h b/drivers/media/video/samsung/fimg2d4x/fimg2d_helper.h new file mode 100644 index 0000000..83f794c --- /dev/null +++ b/drivers/media/video/samsung/fimg2d4x/fimg2d_helper.h @@ -0,0 +1,117 @@ +/* linux/drivers/media/video/samsung/fimg2d4x/fimg2d_helper.h + * + * Copyright (c) 2011 Samsung Electronics Co., Ltd. + * http://www.samsung.com/ + * + * Samsung Graphics 2D driver + * + * 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. +*/ + +#ifndef __FIMG2D_HELPER_H +#define __FIMG2D_HELPER_H + +#include <linux/sched.h> +#include "fimg2d.h" + +#define rect_w(r) ((r)->x2 - (r)->x1) +#define rect_h(r) ((r)->y2 - (r)->y1) + +static inline char *perfname(enum perf_desc id) +{ + switch (id) { + case PERF_INNERCACHE: + return "INNER$"; + case PERF_OUTERCACHE: + return "OUTER$"; + case PERF_BLIT: + return "BITBLT"; + default: + return ""; + } +} + +static inline char *imagename(enum image_object image) +{ + switch (image) { + case IDST: + return "DST"; + case ISRC: + return "SRC"; + case IMSK: + return "MSK"; + default: + return NULL; + } +} + +static inline long elapsed_usec(struct fimg2d_context *ctx, enum perf_desc desc) +{ + struct fimg2d_perf *perf = &ctx->perf[desc]; +#ifdef PERF_TIMEVAL + struct timeval *start = &perf->start; + struct timeval *end = &perf->end; + long sec, usec; + + sec = end->tv_sec - start->tv_sec; + if (end->tv_usec >= start->tv_usec) { + usec = end->tv_usec - start->tv_usec; + } else { + usec = end->tv_usec + 1000000 - start->tv_usec; + sec--; + } + return sec * 1000000 + usec; +#else + return (long)(perf->end - perf->start)/1000; +#endif +} + +static inline void perf_start(struct fimg2d_context *ctx, enum perf_desc desc) +{ + struct fimg2d_perf *perf = &ctx->perf[desc]; + + if (!perf->valid) { +#ifdef PERF_TIMEVAL + struct timeval time; + do_gettimeofday(&time); + perf->start = time; +#else + long time; + perf->start = sched_clock(); + time = perf->start / 1000; +#endif + perf->valid = 0x01; + } +} + +static inline void perf_end(struct fimg2d_context *ctx, enum perf_desc desc) +{ + struct fimg2d_perf *perf = &ctx->perf[desc]; + + if (perf->valid == 0x01) { +#ifdef PERF_TIMEVAL + struct timeval time; + do_gettimeofday(&time); + perf->end = time; +#else + long time; + perf->end = sched_clock(); + time = perf->end / 1000; +#endif + perf->valid |= 0x10; + } +} + +static inline void perf_clear(struct fimg2d_context *ctx) +{ + int i; + for (i = 0; i < MAX_PERF_DESCS; i++) + ctx->perf[i].valid = 0; +} + +void perf_print(struct fimg2d_context *ctx, int seq_no); +void fimg2d_dump_command(struct fimg2d_bltcmd *cmd); + +#endif /* __FIMG2D_HELPER_H */ |