mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-16 22:28:18 +00:00
Rework i.MX53 framebuffer driver
* Simplify IPU register definitions using templates * Distinguish between i.MX53 QSB and SMD board in driver * Support IPU specific overlay mechanism by framebuffer session extension
This commit is contained in:
committed by
Norman Feske
parent
4fe158a320
commit
0950b2f340
46
os/include/platform/imx53/imx_framebuffer_session/client.h
Normal file
46
os/include/platform/imx53/imx_framebuffer_session/client.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* \brief Client-side i.MX53 specific framebuffer interface
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2013-02-26
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__IMX_FRAMEBUFFER_SESSION__CLIENT_H_
|
||||
#define _INCLUDE__IMX_FRAMEBUFFER_SESSION__CLIENT_H_
|
||||
|
||||
#include <framebuffer_session/capability.h>
|
||||
#include <imx_framebuffer_session/imx_framebuffer_session.h>
|
||||
#include <base/rpc_client.h>
|
||||
|
||||
namespace Framebuffer {
|
||||
|
||||
struct Imx_client : Genode::Rpc_client<Imx_session>
|
||||
{
|
||||
explicit Imx_client(Capability<Imx_session> session)
|
||||
: Genode::Rpc_client<Imx_session>(session) { }
|
||||
|
||||
Genode::Dataspace_capability dataspace() {
|
||||
return call<Rpc_dataspace>(); }
|
||||
|
||||
void release() { call<Rpc_release>(); }
|
||||
|
||||
Mode mode() const { return call<Rpc_mode>(); }
|
||||
|
||||
void mode_sigh(Genode::Signal_context_capability sigh) {
|
||||
call<Rpc_mode_sigh>(sigh); }
|
||||
|
||||
void refresh(int x, int y, int w, int h) {
|
||||
call<Rpc_refresh>(x, y, w, h); }
|
||||
|
||||
void overlay(Genode::addr_t phys_addr, int x, int y, int alpha) {
|
||||
call<Rpc_overlay>(phys_addr, x, y, alpha); }
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__IMX_FRAMEBUFFER_SESSION__CLIENT_H_ */
|
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* \brief Connection to i.MX53 specific frame-buffer service
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2013-02-26
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2008-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__IMX_FRAMEBUFFER_SESSION__CONNECTION_H_
|
||||
#define _INCLUDE__IMX_FRAMEBUFFER_SESSION__CONNECTION_H_
|
||||
|
||||
#include <imx_framebuffer_session/client.h>
|
||||
#include <util/arg_string.h>
|
||||
#include <base/connection.h>
|
||||
|
||||
namespace Framebuffer {
|
||||
|
||||
class Imx_connection : public Genode::Connection<Imx_session>,
|
||||
public Imx_client
|
||||
{
|
||||
private:
|
||||
|
||||
/**
|
||||
* Create session and return typed session capability
|
||||
*/
|
||||
Capability<Imx_session> _connect(unsigned width, unsigned height,
|
||||
Mode::Format format)
|
||||
{
|
||||
using namespace Genode;
|
||||
|
||||
enum { ARGBUF_SIZE = 128 };
|
||||
char argbuf[ARGBUF_SIZE];
|
||||
|
||||
/* donate ram quota for storing server-side meta data */
|
||||
strncpy(argbuf, "ram_quota=8K", sizeof(argbuf));
|
||||
|
||||
/* set optional session-constructor arguments */
|
||||
if (width)
|
||||
Arg_string::set_arg(argbuf, sizeof(argbuf), "fb_width", width);
|
||||
if (height)
|
||||
Arg_string::set_arg(argbuf, sizeof(argbuf), "fb_height", height);
|
||||
if (format != Mode::INVALID)
|
||||
Arg_string::set_arg(argbuf, sizeof(argbuf), "fb_format", format);
|
||||
|
||||
return session(argbuf);
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* \param width desired frame-buffer width
|
||||
* \param height desired frame-buffer height
|
||||
* \param mode desired pixel format
|
||||
*
|
||||
* The specified values are not enforced. After creating the
|
||||
* session, you should validate the actual frame-buffer attributes
|
||||
* by calling the 'info' function of the frame-buffer interface.
|
||||
*/
|
||||
Imx_connection(unsigned width = 0,
|
||||
unsigned height = 0,
|
||||
Mode::Format format = Mode::INVALID)
|
||||
: Genode::Connection<Imx_session>(_connect(width, height, format)),
|
||||
Imx_client(cap()) { }
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__IMX_FRAMEBUFFER_SESSION__CONNECTION_H_ */
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* \brief i.MX53 specific framebuffer session extension
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2013-02-26
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__IMX_FRAMEBUFFER_SESSION__IMX_FRAMEBUFFER_SESSION_H_
|
||||
#define _INCLUDE__IMX_FRAMEBUFFER_SESSION__IMX_FRAMEBUFFER_SESSION_H_
|
||||
|
||||
#include <base/capability.h>
|
||||
#include <base/rpc.h>
|
||||
#include <framebuffer_session/framebuffer_session.h>
|
||||
|
||||
namespace Framebuffer {
|
||||
|
||||
struct Imx_session : Session
|
||||
{
|
||||
virtual ~Imx_session() { }
|
||||
|
||||
/**
|
||||
* Set overlay properties
|
||||
*
|
||||
* \param phys_base physical base address of overlay framebuffer
|
||||
* \param x horizontal position in pixel
|
||||
* \param y vertical position in pixel
|
||||
* \param alpha alpha transparency value of overlay (0-255)
|
||||
*/
|
||||
virtual void overlay(Genode::addr_t phys_base, int x, int y, int alpha) = 0;
|
||||
|
||||
|
||||
/*********************
|
||||
** RPC declaration **
|
||||
*********************/
|
||||
|
||||
GENODE_RPC(Rpc_overlay, void, overlay, Genode::addr_t, int, int, int);
|
||||
|
||||
GENODE_RPC_INTERFACE_INHERIT(Session, Rpc_overlay);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__IMX_FRAMEBUFFER_SESSION__IMX_FRAMEBUFFER_SESSION_H_ */
|
Reference in New Issue
Block a user