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/* 26dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * This file holds the function implementation for one of the rbug extensions. 27dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Prototypes and declerations of functions and structs is in the same folder 28dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * in the header file matching this file's name. 29dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 30dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * The functions starting rbug_send_* encodes a call to the write format and 31dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * sends that to the supplied connection, while functions starting with 32dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * rbug_demarshal_* demarshal data in the wire protocol. 33dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * 34dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz * Functions ending with _reply are replies to requests. 35dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz */ 36dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 37dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz#include "rbug_internal.h" 38fc3bac8a407dc2a2804236e1e2b813a3991fa84fAaron Watry#include "rbug_context.h" 39dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 40dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_context_list(struct rbug_connection *__con, 41dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 42dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 43dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 44dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 45dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 46dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 47dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 48dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 49dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 50dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 51dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 52dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 53dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 54dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 55dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 56dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 57dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_LIST)); 58dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 59dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 60dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 61dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 62dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 63dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 64dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 65dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 66dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_LIST, __len); 67dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 68dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 69dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 70dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 71dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 72dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 73dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 74dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 75dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_context_info(struct rbug_connection *__con, 76dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 77dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 78dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 79dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 80dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 81dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 82dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 83dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 84dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 85dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 86dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 87dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 88dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 89dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 90dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 91dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 92dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 93dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 94dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_INFO)); 95dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 96dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 97dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 98dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 99dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 100dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 101dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 102dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 103dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 104dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_INFO, __len); 105dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 106dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 107dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 108dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 109dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 110dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 111dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 112dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 113384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzint rbug_send_context_draw_block(struct rbug_connection *__con, 114dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 115384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_block_t block, 116dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 117dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 118dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 119dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 120dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 121dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 122dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 123dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 124dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 125384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(4); /* block */ 126dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 127dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 128dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 129dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 130dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 131dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 132dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 133dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 134384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_DRAW_BLOCK)); 135dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 136dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 137384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, rbug_block_t, block); /* block */ 138dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 139dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 140dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 141dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 142dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 143dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 144dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 145384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_DRAW_BLOCK, __len); 146dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 147dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 148dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 149dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 150dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 151dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 152dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 153dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 154384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzint rbug_send_context_draw_step(struct rbug_connection *__con, 155384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_context_t context, 156384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_block_t step, 157384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t *__serial) 158384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz{ 159384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t __len = 0; 160384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t __pos = 0; 161384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint8_t *__data = NULL; 162384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz int __ret = 0; 163384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 164384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* header */ 165384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* context */ 166384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(4); /* step */ 167384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 168384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz /* align */ 169384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz PAD(__len, 8); 170384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 171384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 172384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!__data) 173384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return -ENOMEM; 174384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 175384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_DRAW_STEP)); 176384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 177384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 178384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, rbug_block_t, step); /* step */ 179384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 180384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz /* final pad */ 181384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz PAD(__pos, 8); 182384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 183384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (__pos != __len) { 184384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __ret = -EINVAL; 185384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz } else { 186384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_DRAW_STEP, __len); 187384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_write(__con, __data, __len); 188384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 189384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz } 190384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 191384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz FREE(__data); 192384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return __ret; 193384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz} 194384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 195384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzint rbug_send_context_draw_unblock(struct rbug_connection *__con, 196dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t context, 197384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_block_t unblock, 198dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 199dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 200dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 201dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 202dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 203dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 204dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 205dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 206dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* context */ 207384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(4); /* unblock */ 208dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 209dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 210dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 211dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 212dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 213dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 214dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 215dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 216384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_DRAW_UNBLOCK)); 217dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 218dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 219384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, rbug_block_t, unblock); /* unblock */ 220dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 221dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 222dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 223dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 224dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 225dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 226dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 227384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_DRAW_UNBLOCK, __len); 228384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_write(__con, __data, __len); 229384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 230384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz } 231384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 232384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz FREE(__data); 233384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return __ret; 234384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz} 235384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 236f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantzint rbug_send_context_draw_rule(struct rbug_connection *__con, 237f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_context_t context, 238f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_shader_t vertex, 239f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_shader_t fragment, 240f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_texture_t texture, 241f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_texture_t surface, 242f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_block_t block, 243f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz uint32_t *__serial) 244f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz{ 245f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t __len = 0; 246f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t __pos = 0; 247f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint8_t *__data = NULL; 248f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz int __ret = 0; 249f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 250f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* header */ 251f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* context */ 252f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* vertex */ 253f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* fragment */ 254f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* texture */ 255f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* surface */ 256f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(4); /* block */ 257f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 258f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz /* align */ 259f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz PAD(__len, 8); 260f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 261f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 262f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (!__data) 263f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return -ENOMEM; 264f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 265f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_DRAW_RULE)); 266f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 267f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 268f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(8, rbug_shader_t, vertex); /* vertex */ 269f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(8, rbug_shader_t, fragment); /* fragment */ 270f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(8, rbug_texture_t, texture); /* texture */ 271f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(8, rbug_texture_t, surface); /* surface */ 272f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(4, rbug_block_t, block); /* block */ 273f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 274f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz /* final pad */ 275f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz PAD(__pos, 8); 276f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 277f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (__pos != __len) { 278f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz __ret = -EINVAL; 279f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz } else { 280f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_DRAW_RULE, __len); 281f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz rbug_connection_write(__con, __data, __len); 282f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 283f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz } 284f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 285f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz FREE(__data); 286f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return __ret; 287f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz} 288f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 289f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantzint rbug_send_context_flush(struct rbug_connection *__con, 290f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_context_t context, 291f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz uint32_t *__serial) 292f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz{ 293f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t __len = 0; 294f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t __pos = 0; 295f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint8_t *__data = NULL; 296f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz int __ret = 0; 297f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 298f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* header */ 299f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN(8); /* context */ 300f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 301f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz /* align */ 302f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz PAD(__len, 8); 303f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 304f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 305f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (!__data) 306f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return -ENOMEM; 307f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 308f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_FLUSH)); 309f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 310f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 311f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 312f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz /* final pad */ 313f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz PAD(__pos, 8); 314f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 315f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (__pos != __len) { 316f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz __ret = -EINVAL; 317f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz } else { 318f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_FLUSH, __len); 319f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz rbug_connection_write(__con, __data, __len); 320f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 321f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz } 322f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 323f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz FREE(__data); 324f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return __ret; 325f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz} 326f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 327dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_context_list_reply(struct rbug_connection *__con, 328dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t serial, 329dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_context_t *contexts, 330dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t contexts_len, 331dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 332dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 333dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 334dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 335dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 336dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 337dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 338dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 339dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(4); /* serial */ 340dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN_ARRAY(8, contexts); /* contexts */ 341dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 342dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 343dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 344dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 345dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 346dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 347dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 348dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 349dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_LIST_REPLY)); 350dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 351dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, serial); /* serial */ 352dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE_ARRAY(8, rbug_context_t, contexts); /* contexts */ 353dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 354dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 355dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 356dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 357dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 358dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 359dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 360dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_LIST_REPLY, __len); 361dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 362dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 363dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 364dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 365dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 366dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 367dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 368dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 369dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzint rbug_send_context_info_reply(struct rbug_connection *__con, 370dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t serial, 371384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_shader_t vertex, 372384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_shader_t fragment, 373f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz rbug_texture_t *texs, 374f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t texs_len, 375dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_texture_t *cbufs, 376dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t cbufs_len, 377384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_texture_t zsbuf, 378384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_block_t blocker, 379384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_block_t blocked, 380dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t *__serial) 381dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 382dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __len = 0; 383dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t __pos = 0; 384dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *__data = NULL; 385dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz int __ret = 0; 386dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 387dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(8); /* header */ 388dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN(4); /* serial */ 389384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* vertex */ 390384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* fragment */ 391f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz LEN_ARRAY(8, texs); /* texs */ 392dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz LEN_ARRAY(8, cbufs); /* cbufs */ 393384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* zsbuf */ 394384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(4); /* blocker */ 395384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(4); /* blocked */ 396dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 397dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* align */ 398dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__len, 8); 399dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 400dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 401dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!__data) 402dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return -ENOMEM; 403dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 404dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_INFO_REPLY)); 405dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 406dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE(4, uint32_t, serial); /* serial */ 407384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(8, rbug_shader_t, vertex); /* vertex */ 408384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(8, rbug_shader_t, fragment); /* fragment */ 409f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz WRITE_ARRAY(8, rbug_texture_t, texs); /* texs */ 410dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz WRITE_ARRAY(8, rbug_texture_t, cbufs); /* cbufs */ 411384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(8, rbug_texture_t, zsbuf); /* zsbuf */ 412384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, rbug_block_t, blocker); /* blocker */ 413384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, rbug_block_t, blocked); /* blocked */ 414dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 415dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz /* final pad */ 416dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz PAD(__pos, 8); 417dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 418dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (__pos != __len) { 419dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = -EINVAL; 420dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } else { 421dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_INFO_REPLY, __len); 422dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz rbug_connection_write(__con, __data, __len); 423dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 424dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz } 425dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 426dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz FREE(__data); 427dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return __ret; 428dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 429dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 430384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzint rbug_send_context_draw_blocked(struct rbug_connection *__con, 431384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_context_t context, 432384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_block_t block, 433384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t *__serial) 434384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz{ 435384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t __len = 0; 436384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t __pos = 0; 437384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint8_t *__data = NULL; 438384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz int __ret = 0; 439384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 440384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* header */ 441384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(8); /* context */ 442384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz LEN(4); /* block */ 443384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 444384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz /* align */ 445384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz PAD(__len, 8); 446384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 447384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __data = (uint8_t*)MALLOC(__len); 448384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!__data) 449384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return -ENOMEM; 450384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 451384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_DRAW_BLOCKED)); 452384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, uint32_t, ((uint32_t)(__len / 4))); 453384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(8, rbug_context_t, context); /* context */ 454384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz WRITE(4, rbug_block_t, block); /* block */ 455384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 456384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz /* final pad */ 457384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz PAD(__pos, 8); 458384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 459384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (__pos != __len) { 460384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __ret = -EINVAL; 461384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz } else { 462384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_send_start(__con, RBUG_OP_CONTEXT_DRAW_BLOCKED, __len); 463384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz rbug_connection_write(__con, __data, __len); 464384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz __ret = rbug_connection_send_finish(__con, __serial); 465384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz } 466384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 467384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz FREE(__data); 468384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return __ret; 469384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz} 470384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 471dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_context_list * rbug_demarshal_context_list(struct rbug_proto_header *header) 472dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 473dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_context_list *ret; 474dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 475dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 476dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 4777faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_LIST) 478dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 479dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 480dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 481dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 482dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 483dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 484dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 485dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 486dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 487dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 488dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 489dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 490dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_context_info * rbug_demarshal_context_info(struct rbug_proto_header *header) 491dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 492dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 493dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 494dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 495dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_context_info *ret; 496dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 497dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 498dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 4997faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_INFO) 500dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 501dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 502dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 503dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 504dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 505dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 506dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 507dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 508dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 509dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 510dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 511dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 512dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 513dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 514dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 515dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 516dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 517384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzstruct rbug_proto_context_draw_block * rbug_demarshal_context_draw_block(struct rbug_proto_header *header) 518384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz{ 519384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t len = 0; 520384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t pos = 0; 521384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint8_t *data = NULL; 522384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz struct rbug_proto_context_draw_block *ret; 523384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 524384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!header) 525384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 5267faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_DRAW_BLOCK) 527384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 528384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 529384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz pos = 0; 530384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz len = header->length * 4; 531384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz data = (uint8_t*)&header[1]; 532384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret = MALLOC(sizeof(*ret)); 533384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!ret) 534384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 535384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 536384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret->header.__message = header; 537384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret->header.opcode = header->opcode; 538384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 539384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 540384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(4, rbug_block_t, block); /* block */ 541384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 542384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return ret; 543384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz} 544384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 545384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzstruct rbug_proto_context_draw_step * rbug_demarshal_context_draw_step(struct rbug_proto_header *header) 546384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz{ 547384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t len = 0; 548384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t pos = 0; 549384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint8_t *data = NULL; 550384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz struct rbug_proto_context_draw_step *ret; 551384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 552384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!header) 553384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 5547faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_DRAW_STEP) 555384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 556384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 557384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz pos = 0; 558384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz len = header->length * 4; 559384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz data = (uint8_t*)&header[1]; 560384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret = MALLOC(sizeof(*ret)); 561384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!ret) 562384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 563384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 564384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret->header.__message = header; 565384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret->header.opcode = header->opcode; 566384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 567384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 568384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(4, rbug_block_t, step); /* step */ 569384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 570384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return ret; 571384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz} 572384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 573384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzstruct rbug_proto_context_draw_unblock * rbug_demarshal_context_draw_unblock(struct rbug_proto_header *header) 574dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 575dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 576dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 577dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 578384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz struct rbug_proto_context_draw_unblock *ret; 579dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 580dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 581dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 5827faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_DRAW_UNBLOCK) 583dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 584dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 585dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 586dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 587dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 588dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 589dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 590dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 591dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 592dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 593dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 594dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 595dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 596384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(4, rbug_block_t, unblock); /* unblock */ 597dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 598dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 599dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 600dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 601f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantzstruct rbug_proto_context_draw_rule * rbug_demarshal_context_draw_rule(struct rbug_proto_header *header) 602f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz{ 603f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t len = 0; 604f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t pos = 0; 605f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint8_t *data = NULL; 606f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz struct rbug_proto_context_draw_rule *ret; 607f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 608f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (!header) 609f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return NULL; 6107faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_DRAW_RULE) 611f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return NULL; 612f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 613f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz pos = 0; 614f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz len = header->length * 4; 615f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz data = (uint8_t*)&header[1]; 616f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 617f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (!ret) 618f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return NULL; 619f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 620f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz ret->header.__message = header; 621f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz ret->header.opcode = header->opcode; 622f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 623f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 624f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(8, rbug_shader_t, vertex); /* vertex */ 625f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(8, rbug_shader_t, fragment); /* fragment */ 626f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(8, rbug_texture_t, texture); /* texture */ 627f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(8, rbug_texture_t, surface); /* surface */ 628f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(4, rbug_block_t, block); /* block */ 629f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 630f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return ret; 631f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz} 632f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 633f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantzstruct rbug_proto_context_flush * rbug_demarshal_context_flush(struct rbug_proto_header *header) 634f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz{ 635f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t len = 0; 636f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint32_t pos = 0; 637f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz uint8_t *data = NULL; 638f3cf3d2fc2c0cb09cb1c18c08a135009904166b7Jakob Bornecrantz struct rbug_proto_context_flush *ret; 639f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 640f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (!header) 641f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return NULL; 6427faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_FLUSH) 643f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return NULL; 644f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 645f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz pos = 0; 646f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz len = header->length * 4; 647f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz data = (uint8_t*)&header[1]; 648f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 649f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz if (!ret) 650f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return NULL; 651f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 652f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz ret->header.__message = header; 653f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz ret->header.opcode = header->opcode; 654f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 655f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 656f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 657f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz return ret; 658f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz} 659f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz 660dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_context_list_reply * rbug_demarshal_context_list_reply(struct rbug_proto_header *header) 661dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 662dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 663dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 664dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 665dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_context_list_reply *ret; 666dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 667dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 668dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 6697faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_LIST_REPLY) 670dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 671dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 672dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 673dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 674dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 675dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 676dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 677dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 678dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 679dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 680dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 681dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 682dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(4, uint32_t, serial); /* serial */ 683dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ_ARRAY(8, rbug_context_t, contexts); /* contexts */ 684dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 685dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 686dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 687dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 688dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantzstruct rbug_proto_context_info_reply * rbug_demarshal_context_info_reply(struct rbug_proto_header *header) 689dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz{ 690dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t len = 0; 691dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint32_t pos = 0; 692dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz uint8_t *data = NULL; 693dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz struct rbug_proto_context_info_reply *ret; 694dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 695dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!header) 696dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 6977faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_INFO_REPLY) 698dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 699dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 700dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz pos = 0; 701dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz len = header->length * 4; 702dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz data = (uint8_t*)&header[1]; 703dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret = MALLOC(sizeof(*ret)); 704dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz if (!ret) 705dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return NULL; 706dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 707dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.__message = header; 708dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz ret->header.opcode = header->opcode; 709dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 710dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ(4, uint32_t, serial); /* serial */ 711384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(8, rbug_shader_t, vertex); /* vertex */ 712384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(8, rbug_shader_t, fragment); /* fragment */ 713f0c21c02945f8379decfa3b2f294651d6b5af8efJakob Bornecrantz READ_ARRAY(8, rbug_texture_t, texs); /* texs */ 714dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz READ_ARRAY(8, rbug_texture_t, cbufs); /* cbufs */ 715384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(8, rbug_texture_t, zsbuf); /* zsbuf */ 716384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(4, rbug_block_t, blocker); /* blocker */ 717384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(4, rbug_block_t, blocked); /* blocked */ 718384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 719384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return ret; 720384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz} 721384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 722384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantzstruct rbug_proto_context_draw_blocked * rbug_demarshal_context_draw_blocked(struct rbug_proto_header *header) 723384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz{ 724384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t len = 0; 725384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint32_t pos = 0; 726384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz uint8_t *data = NULL; 727384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz struct rbug_proto_context_draw_blocked *ret; 728384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 729384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!header) 730384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 7317faa37adf84c7fdc393a0e795c924ea9b047f235Jakob Bornecrantz if (header->opcode != (int32_t)RBUG_OP_CONTEXT_DRAW_BLOCKED) 732384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 733384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 734384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz pos = 0; 735384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz len = header->length * 4; 736384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz data = (uint8_t*)&header[1]; 737384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret = MALLOC(sizeof(*ret)); 738384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz if (!ret) 739384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz return NULL; 740384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 741384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret->header.__message = header; 742384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz ret->header.opcode = header->opcode; 743384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz 744384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(8, rbug_context_t, context); /* context */ 745384bbe278d7e634cf1af5f786bfbde651c14df62Jakob Bornecrantz READ(4, rbug_block_t, block); /* block */ 746dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz 747dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz return ret; 748dfa4ebcbcc9c7e9e7562f73a4ddc367756623e5eJakob Bornecrantz} 749