#if defined(ANDROID) && !defined(__LP64__)
extern void *__mmap2(void *, size_t, int, int, int, size_t);
static inline void *drm_mmap(void *addr, size_t length, int prot, int flags,
int fd, loff_t offset)
{
/* offset must be aligned to 4096 (not necessarily the page size) */
if (offset & 4095) {
errno = EINVAL;
return MAP_FAILED;
}
return __mmap2(addr, length, prot, flags, fd, (size_t) (offset >> 12));
}
#else
/* assume large file support exists */
# define drm_mmap(addr, length, prot, flags, fd, offset) \
mmap(addr, length, prot, flags, fd, offset)
static int pvr_srv_bridge_call(int fd,
uint8_t bridge_id,
uint32_t function_id,
void *input,
uint32_t input_buffer_size,
void *output,
uint32_t output_buffer_size)
{
struct drm_srvkm_cmd cmd = {
.bridge_id = bridge_id,
.bridge_func_id = function_id,
.in_data_ptr = (uint64_t)(uintptr_t)input,
.out_data_ptr = (uint64_t)(uintptr_t)output,
.in_data_size = input_buffer_size,
.out_data_size = output_buffer_size,
};
int ret = drmIoctl(fd, DRM_IOCTL_SRVKM_CMD, &cmd);
if (unlikely(ret))
return ret;
VG(VALGRIND_MAKE_MEM_DEFINED(output, output_buffer_size));
return 0U;
}