2013-06-19 15:54:11 +04:00
/*
* rcar_du_plane . h - - R - Car Display Unit Planes
*
* Copyright ( C ) 2013 Renesas Corporation
*
* Contact : Laurent Pinchart ( laurent . pinchart @ ideasonboard . com )
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*/
# ifndef __RCAR_DU_PLANE_H__
# define __RCAR_DU_PLANE_H__
2013-06-16 23:02:49 +04:00
# include <linux/mutex.h>
# include <drm/drmP.h>
# include <drm/drm_crtc.h>
2013-06-19 15:54:11 +04:00
struct rcar_du_format_info ;
2013-06-16 23:01:02 +04:00
struct rcar_du_group ;
2013-06-19 15:54:11 +04:00
/* The RCAR DU has 8 hardware planes, shared between KMS planes and CRTCs. As
* using KMS planes requires at least one of the CRTCs being enabled , no more
* than 7 KMS planes can be available . We thus create 7 KMS planes and
* 9 software planes ( one for each KMS planes and one for each CRTC ) .
*/
# define RCAR_DU_NUM_KMS_PLANES 7
# define RCAR_DU_NUM_HW_PLANES 8
# define RCAR_DU_NUM_SW_PLANES 9
struct rcar_du_plane {
2013-06-16 23:01:02 +04:00
struct rcar_du_group * group ;
2013-06-19 15:54:11 +04:00
struct drm_crtc * crtc ;
bool enabled ;
int hwindex ; /* 0-based, -1 means unused */
unsigned int alpha ;
unsigned int colorkey ;
unsigned int zpos ;
const struct rcar_du_format_info * format ;
unsigned long dma [ 2 ] ;
unsigned int pitch ;
unsigned int width ;
unsigned int height ;
unsigned int src_x ;
unsigned int src_y ;
unsigned int dst_x ;
unsigned int dst_y ;
} ;
2013-06-16 23:02:49 +04:00
struct rcar_du_planes {
struct rcar_du_plane planes [ RCAR_DU_NUM_SW_PLANES ] ;
unsigned int free ;
struct mutex lock ;
struct drm_property * alpha ;
struct drm_property * colorkey ;
struct drm_property * zpos ;
} ;
2013-06-16 23:01:02 +04:00
int rcar_du_planes_init ( struct rcar_du_group * rgrp ) ;
int rcar_du_planes_register ( struct rcar_du_group * rgrp ) ;
2013-06-16 21:18:31 +04:00
2013-06-19 15:54:11 +04:00
void rcar_du_plane_setup ( struct rcar_du_plane * plane ) ;
void rcar_du_plane_update_base ( struct rcar_du_plane * plane ) ;
void rcar_du_plane_compute_base ( struct rcar_du_plane * plane ,
struct drm_framebuffer * fb ) ;
int rcar_du_plane_reserve ( struct rcar_du_plane * plane ,
const struct rcar_du_format_info * format ) ;
void rcar_du_plane_release ( struct rcar_du_plane * plane ) ;
# endif /* __RCAR_DU_PLANE_H__ */