aboutsummaryrefslogtreecommitdiff
path: root/driver/gator_annotate_kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/gator_annotate_kernel.c')
-rw-r--r--driver/gator_annotate_kernel.c132
1 files changed, 86 insertions, 46 deletions
diff --git a/driver/gator_annotate_kernel.c b/driver/gator_annotate_kernel.c
index bc68fa8..67d2d6c 100644
--- a/driver/gator_annotate_kernel.c
+++ b/driver/gator_annotate_kernel.c
@@ -8,11 +8,13 @@
*/
#define ESCAPE_CODE 0x1c
-#define STRING_ANNOTATION 0x03
+#define STRING_ANNOTATION 0x06
+#define NAME_CHANNEL_ANNOTATION 0x07
+#define NAME_GROUP_ANNOTATION 0x08
#define VISUAL_ANNOTATION 0x04
#define MARKER_ANNOTATION 0x05
-static void kannotate_write(const char* ptr, unsigned int size)
+static void kannotate_write(const char *ptr, unsigned int size)
{
int retval;
int pos = 0;
@@ -27,91 +29,129 @@ static void kannotate_write(const char* ptr, unsigned int size)
}
}
-static void gator_annotate_code(char code)
+void gator_annotate_channel(int channel, const char *str)
{
- int header = ESCAPE_CODE | (code << 8);
- kannotate_write((char*)&header, sizeof(header));
+ int str_size = strlen(str) & 0xffff;
+ long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16) | ((long long)str_size << 48);
+ kannotate_write((char *)&header, sizeof(header));
+ kannotate_write(str, str_size);
}
-static void gator_annotate_code_str(char code, const char* string)
-{
- int str_size = strlen(string) & 0xffff;
- int header = ESCAPE_CODE | (code << 8) | (str_size << 16);
- kannotate_write((char*)&header, sizeof(header));
- kannotate_write(string, str_size);
-}
+EXPORT_SYMBOL(gator_annotate_channel);
-static void gator_annotate_code_color(char code, int color)
+void gator_annotate(const char *str)
{
- long long header = (ESCAPE_CODE | (code << 8) | 0x00040000 | ((long long)color << 32));
- kannotate_write((char*)&header, sizeof(header));
+ gator_annotate_channel(0, str);
}
-static void gator_annotate_code_color_str(char code, int color, const char* string)
+EXPORT_SYMBOL(gator_annotate);
+
+void gator_annotate_channel_color(int channel, int color, const char *str)
{
- int str_size = (strlen(string) + 4) & 0xffff;
- long long header = ESCAPE_CODE | (code << 8) | (str_size << 16) | ((long long)color << 32);
- kannotate_write((char*)&header, sizeof(header));
- kannotate_write(string, str_size - 4);
+ int str_size = (strlen(str) + 4) & 0xffff;
+ char header[12];
+ header[0] = ESCAPE_CODE;
+ header[1] = STRING_ANNOTATION;
+ *(u32 *)(&header[2]) = channel;
+ *(u16 *)(&header[6]) = str_size;
+ *(u32 *)(&header[8]) = color;
+ kannotate_write((char *)&header, sizeof(header));
+ kannotate_write(str, str_size - 4);
}
-// String annotation
-void gator_annotate(const char* string)
+EXPORT_SYMBOL(gator_annotate_channel_color);
+
+void gator_annotate_color(int color, const char *str)
{
- gator_annotate_code_str(STRING_ANNOTATION, string);
+ gator_annotate_channel_color(0, color, str);
}
-EXPORT_SYMBOL(gator_annotate);
-// String annotation with color
-void gator_annotate_color(int color, const char* string)
+EXPORT_SYMBOL(gator_annotate_color);
+
+void gator_annotate_channel_end(int channel)
{
- gator_annotate_code_color_str(STRING_ANNOTATION, color, string);
+ long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16);
+ kannotate_write((char *)&header, sizeof(header));
}
-EXPORT_SYMBOL(gator_annotate_color);
-// Terminate an annotation
+EXPORT_SYMBOL(gator_annotate_channel_end);
+
void gator_annotate_end(void)
{
- gator_annotate_code(STRING_ANNOTATION);
+ gator_annotate_channel_end(0);
}
+
EXPORT_SYMBOL(gator_annotate_end);
-// Image annotation with optional string
-void gator_annotate_visual(const char* data, unsigned int length, const char* string)
+void gator_annotate_name_channel(int channel, int group, const char* str)
+{
+ int str_size = strlen(str) & 0xffff;
+ char header[12];
+ header[0] = ESCAPE_CODE;
+ header[1] = NAME_CHANNEL_ANNOTATION;
+ *(u32 *)(&header[2]) = channel;
+ *(u32 *)(&header[6]) = group;
+ *(u16 *)(&header[10]) = str_size;
+ kannotate_write((char *)&header, sizeof(header));
+ kannotate_write(str, str_size);
+}
+
+EXPORT_SYMBOL(gator_annotate_name_channel);
+
+void gator_annotate_name_group(int group, const char* str)
+{
+ int str_size = strlen(str) & 0xffff;
+ long long header = ESCAPE_CODE | (NAME_GROUP_ANNOTATION << 8) | (group << 16) | ((long long)str_size << 48);
+ kannotate_write((char *)&header, sizeof(header));
+ kannotate_write(str, str_size);
+}
+
+EXPORT_SYMBOL(gator_annotate_name_group);
+
+void gator_annotate_visual(const char *data, unsigned int length, const char *str)
{
- int str_size = strlen(string) & 0xffff;
+ int str_size = strlen(str) & 0xffff;
int visual_annotation = ESCAPE_CODE | (VISUAL_ANNOTATION << 8) | (str_size << 16);
- kannotate_write((char*)&visual_annotation, sizeof(visual_annotation));
- kannotate_write(string, str_size);
- kannotate_write((char*)&length, sizeof(length));
+ kannotate_write((char *)&visual_annotation, sizeof(visual_annotation));
+ kannotate_write(str, str_size);
+ kannotate_write((char *)&length, sizeof(length));
kannotate_write(data, length);
}
+
EXPORT_SYMBOL(gator_annotate_visual);
-// Marker annotation
void gator_annotate_marker(void)
{
- gator_annotate_code(MARKER_ANNOTATION);
+ int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8);
+ kannotate_write((char *)&header, sizeof(header));
}
+
EXPORT_SYMBOL(gator_annotate_marker);
-// Marker annotation with a string
-void gator_annotate_marker_str(const char* string)
+void gator_annotate_marker_str(const char *str)
{
- gator_annotate_code_str(MARKER_ANNOTATION, string);
+ int str_size = strlen(str) & 0xffff;
+ int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16);
+ kannotate_write((char *)&header, sizeof(header));
+ kannotate_write(str, str_size);
}
+
EXPORT_SYMBOL(gator_annotate_marker_str);
-// Marker annotation with a color
void gator_annotate_marker_color(int color)
{
- gator_annotate_code_color(MARKER_ANNOTATION, color);
+ long long header = (ESCAPE_CODE | (MARKER_ANNOTATION << 8) | 0x00040000 | ((long long)color << 32));
+ kannotate_write((char *)&header, sizeof(header));
}
+
EXPORT_SYMBOL(gator_annotate_marker_color);
-// Marker annotation with a string and color
-void gator_annotate_marker_color_str(int color, const char* string)
+void gator_annotate_marker_color_str(int color, const char *str)
{
- gator_annotate_code_color_str(MARKER_ANNOTATION, color, string);
+ int str_size = (strlen(str) + 4) & 0xffff;
+ long long header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16) | ((long long)color << 32);
+ kannotate_write((char *)&header, sizeof(header));
+ kannotate_write(str, str_size - 4);
}
+
EXPORT_SYMBOL(gator_annotate_marker_color_str);