2 * Copyright (C) ARM Limited 2012-2013. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
10 #define ESCAPE_CODE 0x1c
11 #define STRING_ANNOTATION 0x06
12 #define NAME_CHANNEL_ANNOTATION 0x07
13 #define NAME_GROUP_ANNOTATION 0x08
14 #define VISUAL_ANNOTATION 0x04
15 #define MARKER_ANNOTATION 0x05
17 static void kannotate_write(const char *ptr, unsigned int size)
23 retval = annotate_write(NULL, &ptr[pos], size - pos, &offset);
25 printk(KERN_WARNING "gator: kannotate_write failed with return value %d\n", retval);
32 void gator_annotate_channel(int channel, const char *str)
34 int str_size = strlen(str) & 0xffff;
35 long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16) | ((long long)str_size << 48);
36 kannotate_write((char *)&header, sizeof(header));
37 kannotate_write(str, str_size);
40 EXPORT_SYMBOL(gator_annotate_channel);
42 void gator_annotate(const char *str)
44 gator_annotate_channel(0, str);
47 EXPORT_SYMBOL(gator_annotate);
49 void gator_annotate_channel_color(int channel, int color, const char *str)
51 int str_size = (strlen(str) + 4) & 0xffff;
53 header[0] = ESCAPE_CODE;
54 header[1] = STRING_ANNOTATION;
55 *(u32 *)(&header[2]) = channel;
56 *(u16 *)(&header[6]) = str_size;
57 *(u32 *)(&header[8]) = color;
58 kannotate_write((char *)&header, sizeof(header));
59 kannotate_write(str, str_size - 4);
62 EXPORT_SYMBOL(gator_annotate_channel_color);
64 void gator_annotate_color(int color, const char *str)
66 gator_annotate_channel_color(0, color, str);
69 EXPORT_SYMBOL(gator_annotate_color);
71 void gator_annotate_channel_end(int channel)
73 long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16);
74 kannotate_write((char *)&header, sizeof(header));
77 EXPORT_SYMBOL(gator_annotate_channel_end);
79 void gator_annotate_end(void)
81 gator_annotate_channel_end(0);
84 EXPORT_SYMBOL(gator_annotate_end);
86 void gator_annotate_name_channel(int channel, int group, const char* str)
88 int str_size = strlen(str) & 0xffff;
90 header[0] = ESCAPE_CODE;
91 header[1] = NAME_CHANNEL_ANNOTATION;
92 *(u32 *)(&header[2]) = channel;
93 *(u32 *)(&header[6]) = group;
94 *(u16 *)(&header[10]) = str_size;
95 kannotate_write((char *)&header, sizeof(header));
96 kannotate_write(str, str_size);
99 EXPORT_SYMBOL(gator_annotate_name_channel);
101 void gator_annotate_name_group(int group, const char* str)
103 int str_size = strlen(str) & 0xffff;
104 long long header = ESCAPE_CODE | (NAME_GROUP_ANNOTATION << 8) | (group << 16) | ((long long)str_size << 48);
105 kannotate_write((char *)&header, sizeof(header));
106 kannotate_write(str, str_size);
109 EXPORT_SYMBOL(gator_annotate_name_group);
111 void gator_annotate_visual(const char *data, unsigned int length, const char *str)
113 int str_size = strlen(str) & 0xffff;
114 int visual_annotation = ESCAPE_CODE | (VISUAL_ANNOTATION << 8) | (str_size << 16);
115 kannotate_write((char *)&visual_annotation, sizeof(visual_annotation));
116 kannotate_write(str, str_size);
117 kannotate_write((char *)&length, sizeof(length));
118 kannotate_write(data, length);
121 EXPORT_SYMBOL(gator_annotate_visual);
123 void gator_annotate_marker(void)
125 int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8);
126 kannotate_write((char *)&header, sizeof(header));
129 EXPORT_SYMBOL(gator_annotate_marker);
131 void gator_annotate_marker_str(const char *str)
133 int str_size = strlen(str) & 0xffff;
134 int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16);
135 kannotate_write((char *)&header, sizeof(header));
136 kannotate_write(str, str_size);
139 EXPORT_SYMBOL(gator_annotate_marker_str);
141 void gator_annotate_marker_color(int color)
143 long long header = (ESCAPE_CODE | (MARKER_ANNOTATION << 8) | 0x00040000 | ((long long)color << 32));
144 kannotate_write((char *)&header, sizeof(header));
147 EXPORT_SYMBOL(gator_annotate_marker_color);
149 void gator_annotate_marker_color_str(int color, const char *str)
151 int str_size = (strlen(str) + 4) & 0xffff;
152 long long header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16) | ((long long)color << 32);
153 kannotate_write((char *)&header, sizeof(header));
154 kannotate_write(str, str_size - 4);
157 EXPORT_SYMBOL(gator_annotate_marker_color_str);