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 /* Common definitions/makros for SPUs */ 29 30 #ifndef _SPU_COMMON_H 31 #define _SPU_COMMON_H 32 33 #include <stdio.h> 34 #include <stdint.h> 35 #include <string.h> 36 37 /* Tag management */ 38 #define DMA_WAIT_TAG(_tag) \ 39 mfc_write_tag_mask(1<<(_tag)); \ 40 mfc_read_tag_status_all(); 41 42 /* SPU mailbox messages */ 43 #define SPU_READY 0 44 #define SPU_START 1 45 #define SPU_FIN 2 46 #define SPU_EXIT 3 47 48 /* Tags */ 49 #define RETR_BUF 0 50 #define STR_BUF 1 51 #define TAG_INIT 2 52 53 /* Buffersizes */ 54 #define MAX_HDTV_WIDTH 1920 55 #define MAX_HDTV_HEIGHT 1080 56 /* One stride of HDTV */ 57 #define BUFFER_SIZE 7680 58 59 /* fb_writer ppu/spu exchange parms */ 60 struct fb_writer_parms_t { 61 uint8_t *data; 62 uint8_t *center; 63 uint32_t out_line_stride; 64 uint32_t in_line_stride; 65 uint32_t bounded_input_height; 66 uint32_t bounded_input_width; 67 uint32_t fb_pixel_size; 68 69 /* This padding is to fulfill the need for 16 byte alignment. On parm change, update! */ 70 char padding[4]; 71 } __attribute__((aligned(128))); 72 73 /* yuv2rgb ppu/spu exchange parms */ 74 struct yuv2rgb_parms_t { 75 uint8_t* y_plane; 76 uint8_t* v_plane; 77 uint8_t* u_plane; 78 79 uint8_t* dstBuffer; 80 81 unsigned int src_pixel_width; 82 unsigned int src_pixel_height; 83 84 /* This padding is to fulfill the need for 16 byte alignment. On parm change, update! */ 85 char padding[128 - ((4 * sizeof(uint8_t *) + 2 * sizeof(unsigned int)) & 0x7F)]; 86 } __attribute__((aligned(128))); 87 88 /* bilin_scaler ppu/spu exchange parms */ 89 struct scale_parms_t { 90 uint8_t* y_plane; 91 uint8_t* v_plane; 92 uint8_t* u_plane; 93 94 uint8_t* dstBuffer; 95 96 unsigned int src_pixel_width; 97 unsigned int src_pixel_height; 98 99 unsigned int dst_pixel_width; 100 unsigned int dst_pixel_height; 101 102 /* This padding is to fulfill the need for 16 byte alignment. On parm change, update! */ 103 char padding[128 - ((4 * sizeof(uint8_t *) + 4 * sizeof(unsigned int)) & 0x7F)]; 104 } __attribute__((aligned(128))); 105 106 #endif /* _SPU_COMMON_H */ 107 108 109