SDL-1.2.14
[sdl_omap.git] / src / video / ps3 / SDL_ps3video.h
CommitLineData
e14743d1 1/*
2 * SDL - Simple DirectMedia Layer
3 * CELL BE Support for PS3 Framebuffer
4 * Copyright (C) 2008, 2009 International Business Machines Corporation
5 *
6 * This library is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
19 * USA
20 *
21 * Martin Lowinski <lowinski [at] de [dot] ibm [ibm] com>
22 * Dirk Herrendoerfer <d.herrendoerfer [at] de [dot] ibm [dot] com>
23 * SPE code based on research by:
24 * Rene Becker
25 * Thimo Emmerich
26 */
27
28#include "SDL_config.h"
29#include "../SDL_sysvideo.h"
30#include "SDL_mouse.h"
31#include "SDL_mutex.h"
32#include "spulibs/spu_common.h"
33
34#include <libspe2.h>
35#include <pthread.h>
36#include <linux/types.h>
37#include <linux/fb.h>
38#include <asm/ps3fb.h>
39#include <linux/vt.h>
40#include <termios.h>
41
42#ifndef _SDL_ps3video_h
43#define _SDL_ps3video_h
44
45/* Debugging
46 * 0: No debug messages
47 * 1: Video debug messages
48 * 2: SPE debug messages
49 * 3: Memory adresses
50 */
51#define DEBUG_LEVEL 0
52
53#ifdef DEBUG_LEVEL
54#define deprintf( level, fmt, args... ) \
55 do \
56{ \
57 if ( (unsigned)(level) <= DEBUG_LEVEL ) \
58 { \
59 fprintf( stdout, fmt, ##args ); \
60 fflush( stdout ); \
61 } \
62} while ( 0 )
63#else
64#define deprintf( level, fmt, args... )
65#endif
66
67/* Framebuffer device */
68#define PS3_DEV_FB "/dev/fb0"
69
70/* Hidden "this" pointer for the video functions */
71#define _THIS SDL_VideoDevice * this
72
73/* SPU thread data */
74typedef struct spu_data {
75 spe_context_ptr_t ctx;
76 pthread_t thread;
77 spe_program_handle_t program;
78 char * program_name;
79 unsigned int booted;
80 unsigned int keepalive;
81 unsigned int entry;
82 int error_code;
83 void * argp;
84} spu_data_t;
85
86/* Private video driver data needed for Cell support */
87struct SDL_PrivateVideoData
88{
89 const char * const fb_dev_name; /* FB-device name */
90 int fb_dev_fd; /* Descriptor-handle for fb_dev_name */
91 uint8_t * frame_buffer; /* mmap'd access to fbdev */
92
93 /* SPE threading stuff */
94 spu_data_t * fb_thread_data;
95 spu_data_t * scaler_thread_data;
96 spu_data_t * converter_thread_data;
97
98 /* screeninfo (from linux/fb.h) */
99 struct fb_fix_screeninfo fb_finfo;
100 struct fb_var_screeninfo fb_vinfo;
101 struct fb_var_screeninfo fb_orig_vinfo;
102
103 /* screeninfo (from asm/ps3fb.h) */
104 struct ps3fb_ioctl_res res;
105
106 unsigned int double_buffering;
107 uint32_t real_width; // real width of screen
108 uint32_t real_height; // real height of screen
109
110 uint32_t s_fb_pixel_size; // 32: 4 24: 3 16: 2 15: 2
111 uint32_t fb_bits_per_pixel; // 32: 32 24: 24 16: 16 15: 15
112
113 uint32_t config_count;
114
115 uint32_t s_input_line_length; // precalculated: input_width * fb_pixel_size
116 uint32_t s_bounded_input_width; // width of input (bounded by writeable width)
117 uint32_t s_bounded_input_height;// height of input (bounded by writeable height)
118 uint32_t s_bounded_input_width_offset; // offset from the left side (used for centering)
119 uint32_t s_bounded_input_height_offset; // offset from the upper side (used for centering)
120 uint32_t s_writeable_width; // width of screen which is writeable
121 uint32_t s_writeable_height; // height of screen which is writeable
122
123 uint8_t * s_center[2]; // where to begin writing our image (centered?)
124 uint32_t s_center_index;
125
126 volatile void * s_pixels __attribute__((aligned(128)));
127
128 /* Framebuffer data */
129 volatile struct fb_writer_parms_t * fb_parms __attribute__((aligned(128)));
130};
131
132#define fb_dev_name (this->hidden->fb_dev_name)
133#define fb_dev_fd (this->hidden->fb_dev_fd)
134#define frame_buffer (this->hidden->frame_buffer)
135#define fb_thread_data (this->hidden->fb_thread_data)
136#define scaler_thread_data (this->hidden->scaler_thread_data)
137#define converter_thread_data (this->hidden->converter_thread_data)
138#define fb_parms (this->hidden->fb_parms)
139#define SDL_nummodes (this->hidden->SDL_nummodes)
140#define SDL_modelist (this->hidden->SDL_modelist)
141#define SDL_videomode (this->hidden->SDL_videomode)
142#define fb_finfo (this->hidden->fb_finfo)
143#define fb_vinfo (this->hidden->fb_vinfo)
144#define fb_orig_vinfo (this->hidden->fb_orig_vinfo)
145#define res (this->hidden->res)
146#define double_buffering (this->hidden->double_buffering)
147#define real_width (this->hidden->real_width)
148#define real_height (this->hidden->real_height)
149#define s_fb_pixel_size (this->hidden->s_fb_pixel_size)
150#define fb_bits_per_pixel (this->hidden->fb_bits_per_pixel)
151#define config_count (this->hidden->config_count)
152#define s_input_line_length (this->hidden->s_input_line_length)
153#define s_bounded_input_width (this->hidden->s_bounded_input_width)
154#define s_bounded_input_height (this->hidden->s_bounded_input_height)
155#define s_bounded_input_width_offset (this->hidden->s_bounded_input_width_offset)
156#define s_bounded_input_height_offset (this->hidden->s_bounded_input_height_offset)
157#define s_writeable_width (this->hidden->s_writeable_width)
158#define s_writeable_height (this->hidden->s_writeable_height)
159#define s_center (this->hidden->s_center)
160#define s_center_index (this->hidden->s_center_index)
161#define s_pixels (this->hidden->s_pixels)
162
163#endif /* _SDL_ps3video_h */
164
165