rbug_demarshal.c revision f3cf3d2fc2c0cb09cb1c18c08a135009904166b7
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}
94