You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.6 KiB
83 lines
2.6 KiB
/*
|
|
** Copyright (c) AImotive Kft. 2020
|
|
**
|
|
** The intellectual and technical concepts and implementations contained herein (including
|
|
** data structures, algorithms and essential business logic developed by AImotive Kft.) are
|
|
** proprietary to AImotive Kft., and may be covered by patents, and/or copyright law. This
|
|
** hardware or software is protected by trade secret, confidential business secret and as a
|
|
** general principle must be treated as confidential information.
|
|
**
|
|
** You may not use this hardware or software without specific prior written permission
|
|
** obtained from AImotive Kft.
|
|
**
|
|
** Access to this hardware or software is hereby forbidden to anyone except for Contracted
|
|
** Partners who have prior signed License Agreement, or Confidentiality, Non-Disclosure
|
|
** Agreements or any other equivalent Agreements explicitly covering such access and use.
|
|
**
|
|
** UNLESS OTHERWISE AGREED, THIS HARDWARE OR SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS
|
|
** OR IMPLIED WARRANTIES, INCLUDING - BUT NOT LIMITED TO - THE IMPLIED WARRANTIES OF
|
|
** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
*/
|
|
|
|
#ifndef AIWARE_RUNTIME_DEVICE_COMMON_C__HOSTBUFFER_H
|
|
#define AIWARE_RUNTIME_DEVICE_COMMON_C__HOSTBUFFER_H
|
|
#include <stdlib.h>
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
enum HostBufferType
|
|
{
|
|
HBT_INVALID = 0,
|
|
HBT_CONTIGUOUS, // Physically contiguous memory, e.g. hugepage or CMA backed
|
|
HBT_DEVICE, // Device memory mapped into CPU memory space
|
|
HBT_USER, // Userspace memory (e.g. malloc())
|
|
HBT_FD, // DMABUF backed file descriptor
|
|
};
|
|
|
|
struct ContiguousMemoryBuffer
|
|
{
|
|
void* virtBase; // virtual memory pointer for CPU access
|
|
void* physBase; // physical address mapped to DMA controller required for DMA transfers
|
|
};
|
|
|
|
struct DeviceMemoryBuffer
|
|
{
|
|
void* virtBase; // virtual memory pointer for CPU access, memory mapped
|
|
};
|
|
|
|
struct DeviceUserspaceBuffer
|
|
{
|
|
void* virtBase; // virtual memory pointer for CPU access, userspace buffer
|
|
int handle; // driver handle
|
|
size_t offset; // offset to the address imported by the driver
|
|
};
|
|
|
|
struct DeviceDMABufBuffer
|
|
{
|
|
int dmaFd; // file descriptor for Linux dmabuf
|
|
};
|
|
|
|
struct aiwHostBuffer
|
|
{
|
|
enum HostBufferType type;
|
|
union
|
|
{
|
|
struct ContiguousMemoryBuffer contig;
|
|
struct DeviceMemoryBuffer device;
|
|
struct DeviceUserspaceBuffer user;
|
|
struct DeviceDMABufBuffer dmabuf;
|
|
} d;
|
|
size_t length; // length of the buffer
|
|
};
|
|
|
|
#define AIW_HOST_BUFFER_REQUIRES_DMA(buffer) \
|
|
(((buffer)->type == HBT_CONTIGUOUS) || ((buffer)->type == HBT_USER) || ((buffer)->type == HBT_FD))
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|