int etna_usermem_map(etna_usermem **mem_out, void *memory, size_t size) { if(mem_out == NULL) return ETNA_INVALID_ADDR; etna_usermem *mem = ETNA_NEW(etna_usermem); mem->memory = memory; mem->size = size; if(viv_map_user_memory(memory, size, &mem->info, &mem->address)!=0) { return ETNA_INTERNAL_ERROR; } *mem_out = mem; return ETNA_OK; }
struct etna_bo *etna_bo_from_usermem(struct viv_conn *conn, void *memory, size_t size) { struct etna_bo *mem = ETNA_CALLOC_STRUCT(etna_bo); if(mem == NULL) return NULL; mem->bo_type = ETNA_BO_TYPE_USERMEM; mem->logical = memory; mem->size = size; if(viv_map_user_memory(conn, memory, size, &mem->usermem_info, &mem->address)!=0) { ETNA_FREE(mem); return NULL; } return mem; }