1dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz/*
2dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Copyright 2009 VMware, Inc.
3dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * All Rights Reserved.
4dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz *
5dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Permission is hereby granted, free of charge, to any person obtaining a
6dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * copy of this software and associated documentation files (the "Software"),
7dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * to deal in the Software without restriction, including without limitation
8dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * on the rights to use, copy, modify, merge, publish, distribute, sub
9dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * license, and/or sell copies of the Software, and to permit persons to whom
10dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * the Software is furnished to do so, subject to the following conditions:
11dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz *
12dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * The above copyright notice and this permission notice (including the next
13dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * paragraph) shall be included in all copies or substantial portions of the
14dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Software.
15dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz *
16dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
19dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * VMWARE AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
20dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * USE OR OTHER DEALINGS IN THE SOFTWARE.
23dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz */
24dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz
25dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz#include "rbug.h"
26dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz
27dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz/**
28dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Small function that looks at the proto_header and selects the correct
29dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * demarshal functions and return the result.
30dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz */
31dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_header * rbug_demarshal(struct rbug_proto_header *header)
32dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{
33dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	switch(header->opcode) {
34dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_NOOP:
35dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_noop(header);
36dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_PING:
37dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_ping(header);
38dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_ERROR:
39dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_error(header);
40dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_PING_REPLY:
41dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_ping_reply(header);
42dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_ERROR_REPLY:
43dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_error_reply(header);
44dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_LIST:
45dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_list(header);
46dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_INFO:
47dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_info(header);
48dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_WRITE:
49dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_write(header);
50dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_READ:
51dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_read(header);
52dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_LIST_REPLY:
53dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_list_reply(header);
54dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_INFO_REPLY:
55dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_info_reply(header);
56dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_TEXTURE_READ_REPLY:
57dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_texture_read_reply(header);
58dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_CONTEXT_LIST:
59dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_list(header);
60dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_CONTEXT_INFO:
61dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_info(header);
62384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_BLOCK:
63384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_draw_block(header);
64384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_STEP:
65384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_draw_step(header);
66384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_UNBLOCK:
67384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_draw_unblock(header);
68f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_RULE:
69f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_draw_rule(header);
70384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz	case RBUG_OP_CONTEXT_FLUSH:
71384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_flush(header);
72dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_CONTEXT_LIST_REPLY:
73dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_list_reply(header);
74dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_CONTEXT_INFO_REPLY:
75dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_info_reply(header);
76384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_BLOCKED:
77384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_context_draw_blocked(header);
78dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_SHADER_LIST:
79dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_shader_list(header);
80dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_SHADER_INFO:
81dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_shader_info(header);
82dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_SHADER_DISABLE:
83dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_shader_disable(header);
84dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_SHADER_REPLACE:
85dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_shader_replace(header);
86dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_SHADER_LIST_REPLY:
87dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_shader_list_reply(header);
88dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	case RBUG_OP_SHADER_INFO_REPLY:
89dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return (struct rbug_header *)rbug_demarshal_shader_info_reply(header);
90dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	default:
91dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz		return NULL;
92dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz	}
93dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz}
9400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz
9500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantzconst char* rbug_proto_get_name(enum rbug_opcode opcode)
9600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz{
9700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	switch(opcode) {
9800272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_NOOP:
9900272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_NOOP";
10000272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_PING:
10100272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_PING";
10200272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_ERROR:
10300272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_ERROR";
10400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_PING_REPLY:
10500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_PING_REPLY";
10600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_ERROR_REPLY:
10700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_ERROR_REPLY";
10800272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_LIST:
10900272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_LIST";
11000272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_INFO:
11100272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_INFO";
11200272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_WRITE:
11300272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_WRITE";
11400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_READ:
11500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_READ";
11600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_LIST_REPLY:
11700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_LIST_REPLY";
11800272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_INFO_REPLY:
11900272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_INFO_REPLY";
12000272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_TEXTURE_READ_REPLY:
12100272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_TEXTURE_READ_REPLY";
12200272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_LIST:
12300272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_LIST";
12400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_INFO:
12500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_INFO";
12600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_BLOCK:
12700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_DRAW_BLOCK";
12800272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_STEP:
12900272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_DRAW_STEP";
13000272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_UNBLOCK:
13100272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_DRAW_UNBLOCK";
13200272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_RULE:
13300272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_DRAW_RULE";
13400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_FLUSH:
13500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_FLUSH";
13600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_LIST_REPLY:
13700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_LIST_REPLY";
13800272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_INFO_REPLY:
13900272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_INFO_REPLY";
14000272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_CONTEXT_DRAW_BLOCKED:
14100272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_CONTEXT_DRAW_BLOCKED";
14200272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_SHADER_LIST:
14300272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_SHADER_LIST";
14400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_SHADER_INFO:
14500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_SHADER_INFO";
14600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_SHADER_DISABLE:
14700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_SHADER_DISABLE";
14800272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_SHADER_REPLACE:
14900272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_SHADER_REPLACE";
15000272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_SHADER_LIST_REPLY:
15100272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_SHADER_LIST_REPLY";
15200272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	case RBUG_OP_SHADER_INFO_REPLY:
15300272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return "RBUG_OP_SHADER_INFO_REPLY";
15400272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	default:
15500272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz		return NULL;
15600272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz	}
15700272e9e0991c7dab111cbea0acfd6adadece994Jakob Bornecrantz}
158