mirror of
https://github.com/raspberrypi/userland.git
synced 2025-12-06 04:49:12 +00:00
vc-sm-cma support
This commit is contained in:
committed by
popcornmix
parent
e3e28c7877
commit
336c8c3d1e
File diff suppressed because it is too large
Load Diff
@@ -146,14 +146,24 @@ typedef enum
|
||||
|
||||
} VCSM_CACHE_TYPE_T;
|
||||
|
||||
/* Initialize the vcsm processing with option to use vc-sm-cma which supports dmabuf export.
|
||||
**
|
||||
** Must be called once before attempting to do anything else.
|
||||
**
|
||||
** Returns 0 on success, -1 on error.
|
||||
*/
|
||||
int vcsm_init_ex( int want_export );
|
||||
|
||||
/* Initialize the vcsm processing.
|
||||
**
|
||||
** Must be called once before attempting to do anything else.
|
||||
**
|
||||
** Returns 0 on success, -1 on error.
|
||||
*/
|
||||
int vcsm_init( void );
|
||||
|
||||
inline int vcsm_init( void )
|
||||
{
|
||||
return vcsm_init_ex(0);
|
||||
}
|
||||
|
||||
/* Terminates the vcsm processing.
|
||||
**
|
||||
@@ -437,13 +447,14 @@ int vcsm_unlock_hdl_sp( unsigned int handle, int cache_no_flush );
|
||||
** 2: clean given virtual range in L1/L2
|
||||
** 3: clean+invalidate given virtual range in L1/L2
|
||||
*/
|
||||
#define VCSM_MAX_CLEAN_INVALIDATE_ENTRIES 8
|
||||
struct vcsm_user_clean_invalid_s {
|
||||
struct {
|
||||
unsigned int cmd;
|
||||
unsigned int handle;
|
||||
unsigned int addr;
|
||||
unsigned int size;
|
||||
} s[8];
|
||||
} s[VCSM_MAX_CLEAN_INVALIDATE_ENTRIES];
|
||||
};
|
||||
|
||||
int vcsm_clean_invalid( struct vcsm_user_clean_invalid_s *s );
|
||||
@@ -464,6 +475,8 @@ int vcsm_clean_invalid2( struct vcsm_user_clean_invalid2_s *s );
|
||||
|
||||
unsigned int vcsm_import_dmabuf( int dmabuf, char *name );
|
||||
|
||||
int vcsm_export_dmabuf( unsigned int vcsm_handle );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
135
host_applications/linux/libs/sm/vc_sm_cma_ioctl.h
Normal file
135
host_applications/linux/libs/sm/vc_sm_cma_ioctl.h
Normal file
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
Copyright (c) 2012, Broadcom Europe Ltd
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the copyright holder nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2019 Raspberry Pi (Trading) Ltd. All rights reserved.
|
||||
*
|
||||
* Based on vmcs_sm_ioctl.h Copyright Broadcom Corporation.
|
||||
*/
|
||||
|
||||
#ifndef __VC_SM_CMA_IOCTL_H
|
||||
#define __VC_SM_CMA_IOCTL_H
|
||||
|
||||
/* ---- Include Files ---------------------------------------------------- */
|
||||
|
||||
#include <linux/types.h> /* Needed for standard types */
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
/* ---- Constants and Types ---------------------------------------------- */
|
||||
|
||||
#define VC_SM_CMA_RESOURCE_NAME 32
|
||||
#define VC_SM_CMA_RESOURCE_NAME_DEFAULT "sm-host-resource"
|
||||
|
||||
/* Type define used to create unique IOCTL number */
|
||||
#define VC_SM_CMA_MAGIC_TYPE 'J'
|
||||
|
||||
/* IOCTL commands on /dev/vc-sm-cma */
|
||||
enum vc_sm_cma_cmd_e {
|
||||
VC_SM_CMA_CMD_ALLOC = 0x5A, /* Start at 0x5A arbitrarily */
|
||||
|
||||
VC_SM_CMA_CMD_IMPORT_DMABUF,
|
||||
|
||||
VC_SM_CMA_CMD_CLEAN_INVALID2,
|
||||
|
||||
VC_SM_CMA_CMD_LAST /* Do not delete */
|
||||
};
|
||||
|
||||
/* Cache type supported, conveniently matches the user space definition in
|
||||
* user-vcsm.h.
|
||||
*/
|
||||
enum vc_sm_cma_cache_e {
|
||||
VC_SM_CMA_CACHE_NONE,
|
||||
VC_SM_CMA_CACHE_HOST,
|
||||
VC_SM_CMA_CACHE_VC,
|
||||
VC_SM_CMA_CACHE_BOTH,
|
||||
};
|
||||
|
||||
/* IOCTL Data structures */
|
||||
struct vc_sm_cma_ioctl_alloc {
|
||||
/* user -> kernel */
|
||||
__u32 size;
|
||||
__u32 num;
|
||||
__u32 cached; /* enum vc_sm_cma_cache_e */
|
||||
__u32 pad;
|
||||
__u8 name[VC_SM_CMA_RESOURCE_NAME];
|
||||
|
||||
/* kernel -> user */
|
||||
__s32 handle;
|
||||
__u32 vc_handle;
|
||||
__u64 dma_addr;
|
||||
};
|
||||
|
||||
struct vc_sm_cma_ioctl_import_dmabuf {
|
||||
/* user -> kernel */
|
||||
__s32 dmabuf_fd;
|
||||
__u32 cached; /* enum vc_sm_cma_cache_e */
|
||||
__u8 name[VC_SM_CMA_RESOURCE_NAME];
|
||||
|
||||
/* kernel -> user */
|
||||
__s32 handle;
|
||||
__u32 vc_handle;
|
||||
__u32 size;
|
||||
__u32 pad;
|
||||
__u64 dma_addr;
|
||||
};
|
||||
|
||||
/*
|
||||
* Cache functions to be set to struct vc_sm_cma_ioctl_clean_invalid2
|
||||
* invalidate_mode.
|
||||
*/
|
||||
#define VC_SM_CACHE_OP_NOP 0x00
|
||||
#define VC_SM_CACHE_OP_INV 0x01
|
||||
#define VC_SM_CACHE_OP_CLEAN 0x02
|
||||
#define VC_SM_CACHE_OP_FLUSH 0x03
|
||||
|
||||
struct vc_sm_cma_ioctl_clean_invalid2 {
|
||||
__u32 op_count;
|
||||
__u32 pad;
|
||||
struct vc_sm_cma_ioctl_clean_invalid_block {
|
||||
__u32 invalidate_mode;
|
||||
__u32 block_count;
|
||||
void * /*__user */start_address;
|
||||
__u32 block_size;
|
||||
__u32 inter_block_stride;
|
||||
} s[0];
|
||||
};
|
||||
|
||||
/* IOCTL numbers */
|
||||
#define VC_SM_CMA_IOCTL_MEM_ALLOC\
|
||||
_IOR(VC_SM_CMA_MAGIC_TYPE, VC_SM_CMA_CMD_ALLOC,\
|
||||
struct vc_sm_cma_ioctl_alloc)
|
||||
|
||||
#define VC_SM_CMA_IOCTL_MEM_IMPORT_DMABUF\
|
||||
_IOR(VC_SM_CMA_MAGIC_TYPE, VC_SM_CMA_CMD_IMPORT_DMABUF,\
|
||||
struct vc_sm_cma_ioctl_import_dmabuf)
|
||||
|
||||
#define VC_SM_CMA_IOCTL_MEM_CLEAN_INVALID2\
|
||||
_IOR(VC_SM_CMA_MAGIC_TYPE, VC_SM_CMA_CMD_CLEAN_INVALID2,\
|
||||
struct vc_sm_cma_ioctl_clean_invalid2)
|
||||
|
||||
#endif /* __VC_SM_CMA_IOCTL_H */
|
||||
Reference in New Issue
Block a user