1d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin/* 2fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed * Copyright (c) 2012-2017, The Linux Foundation. All rights reserved. 3d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * 4d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * Redistribution and use in source and binary forms, with or without 5d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * modification, are permitted provided that the following conditions are 6d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * met: 7d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * * Redistributions of source code must retain the above copyright 8d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * notice, this list of conditions and the following disclaimer. 9d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * * Redistributions in binary form must reproduce the above 10d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * copyright notice, this list of conditions and the following 11d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * disclaimer in the documentation and/or other materials provided 12d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * with the distribution. 13d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * * Neither the name of The Linux Foundation nor the names of its 14d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * contributors may be used to endorse or promote products derived 15d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * from this software without specific prior written permission. 16d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * 17d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin */ 29d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 30d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <errno.h> 31d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <string.h> 32d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <sys/mman.h> 33d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <cutils/log.h> 34d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <gralloc_priv.h> 35d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <inttypes.h> 36d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include "qdMetaData.h" 37d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 38a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmedstatic int validateAndMap(private_handle_t* handle) { 39a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (private_handle_t::validate(handle)) { 40a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed ALOGE("%s: Private handle is invalid - handle:%p id: %" PRIu64, 41a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed __func__, handle, handle->id); 42d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin return -1; 43d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin } 44d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin if (handle->fd_metadata == -1) { 45a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed ALOGE("%s: Invalid metadata fd - handle:%p id: %" PRIu64 "fd: %d", 46a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed __func__, handle, handle->id, handle->fd_metadata); 47d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin return -1; 48d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin } 49a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed 50a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (!handle->base_metadata) { 51a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed unsigned long size = ROUND_UP_PAGESIZE(sizeof(MetaData_t)); 52a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed void *base = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, 53a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed handle->fd_metadata, 0); 54a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (base == reinterpret_cast<void*>(MAP_FAILED)) { 55a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed ALOGE("%s: metadata mmap failed - handle:%p id: %" PRIu64 "fd: %d err: %s", 56a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed __func__, handle, handle->id, handle->fd_metadata, strerror(errno)); 57a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed 58a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return -1; 59a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed } 60a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed handle->base_metadata = (uintptr_t) base; 61d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin } 62a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return 0; 63a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed} 64a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed 65a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmedint setMetaData(private_handle_t *handle, DispParamType paramType, 66a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed void *param) { 67a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed auto err = validateAndMap(handle); 68a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (err != 0) 69a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return err; 70a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed 71a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed MetaData_t *data = reinterpret_cast <MetaData_t *>(handle->base_metadata); 72a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed // If parameter is NULL reset the specific MetaData Key 73a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (!param) { 74a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed data->operation &= ~paramType; 75a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed // reset param 76a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return 0; 77d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin } 78a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed 79d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->operation |= paramType; 80d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin switch (paramType) { 81d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case PP_PARAM_INTERLACED: 82d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->interlaced = *((int32_t *)param); 83d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 84d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case UPDATE_BUFFER_GEOMETRY: 85d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->bufferDim = *((BufferDim_t *)param); 86d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 87d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case UPDATE_REFRESH_RATE: 8852af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch data->refreshrate = *((float *)param); 89d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 90d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case UPDATE_COLOR_SPACE: 91d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->colorSpace = *((ColorSpace_t *)param); 92d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 93d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case MAP_SECURE_BUFFER: 94d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->mapSecureBuffer = *((int32_t *)param); 95d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 96d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case S3D_FORMAT: 97d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->s3dFormat = *((uint32_t *)param); 98d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 99d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case LINEAR_FORMAT: 100d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->linearFormat = *((uint32_t *)param); 101d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 102d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case SET_IGC: 103d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->igc = *((IGC_t *)param); 104d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 105d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin case SET_SINGLE_BUFFER_MODE: 106d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin data->isSingleBufferMode = *((uint32_t *)param); 107d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 108860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja case SET_VT_TIMESTAMP: 109860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja data->vtTimeStamp = *((uint64_t *)param); 110860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja break; 111d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin default: 112d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin ALOGE("Unknown paramType %d", paramType); 113d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin break; 114d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin } 115d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin return 0; 116d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin} 11752af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch 11852af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetschint getMetaData(private_handle_t *handle, DispFetchParamType paramType, 11952af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch void *param) { 120a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed int ret = validateAndMap(handle); 121a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (ret != 0) 122a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return ret; 123a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed MetaData_t *data = reinterpret_cast <MetaData_t *>(handle->base_metadata); 124a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed // Make sure we send 0 only if the operation queried is present 125a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed ret = -EINVAL; 12652af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch 12752af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch switch (paramType) { 12852af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_PP_PARAM_INTERLACED: 129fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & PP_PARAM_INTERLACED) { 130fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((int32_t *)param) = data->interlaced; 131fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 132fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 13352af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 13452af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_BUFFER_GEOMETRY: 135fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & UPDATE_BUFFER_GEOMETRY) { 136fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((BufferDim_t *)param) = data->bufferDim; 137fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 138fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 13952af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 14052af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_REFRESH_RATE: 141fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & UPDATE_REFRESH_RATE) { 142fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((float *)param) = data->refreshrate; 143fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 144fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 14552af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 14652af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_COLOR_SPACE: 147fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & UPDATE_COLOR_SPACE) { 148fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((ColorSpace_t *)param) = data->colorSpace; 149fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 150fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 15152af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 15252af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_MAP_SECURE_BUFFER: 153fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & MAP_SECURE_BUFFER) { 154fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((int32_t *)param) = data->mapSecureBuffer; 155fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 156fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 15752af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 15852af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_S3D_FORMAT: 159fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & S3D_FORMAT) { 160fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((uint32_t *)param) = data->s3dFormat; 161fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 162fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 16352af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 16452af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_LINEAR_FORMAT: 165fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & LINEAR_FORMAT) { 166fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((uint32_t *)param) = data->linearFormat; 167fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 168fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 16952af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 17052af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_IGC: 171fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & SET_IGC) { 172fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((IGC_t *)param) = data->igc; 173fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 174fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 17552af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 17652af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch case GET_SINGLE_BUFFER_MODE: 177fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & SET_SINGLE_BUFFER_MODE) { 178fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((uint32_t *)param) = data->isSingleBufferMode; 179fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 180fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 18152af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 182860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja case GET_VT_TIMESTAMP: 183fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed if (data->operation & SET_VT_TIMESTAMP) { 184fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed *((uint64_t *)param) = data->vtTimeStamp; 185fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed ret = 0; 186fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed } 187860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja break; 18852af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch default: 18952af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch ALOGE("Unknown paramType %d", paramType); 19052af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch break; 19152af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch } 192fd72def91cb5849335f3b249fc048d66e4301bcfNaseer Ahmed return ret; 19352af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch} 19452af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch 19552af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetschint copyMetaData(struct private_handle_t *src, struct private_handle_t *dst) { 196a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed auto err = validateAndMap(src); 197a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (err != 0) 198a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return err; 19952af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch 200a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed err = validateAndMap(dst); 201a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed if (err != 0) 202a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed return err; 20352af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch 204a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed unsigned long size = ROUND_UP_PAGESIZE(sizeof(MetaData_t)); 205a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed MetaData_t *src_data = reinterpret_cast <MetaData_t *>(src->base_metadata); 206a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed MetaData_t *dst_data = reinterpret_cast <MetaData_t *>(dst->base_metadata); 207a8ef6bc5761a81de073e64a0eb4ad3a95dc80883Naseer Ahmed memcpy(src_data, dst_data, size); 20852af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch return 0; 20952af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch} 210