root/src/add-ons/accelerants/radeon/radeon_accelerant.h
/*
        Copyright (c) 2002-2005, Thomas Kurschel
        

        Part of Radeon accelerant
                
        Internal header file
*/

#ifndef _RADEON_ACCELERANT_H
#define _RADEON_ACCELERANT_H


#include "radeon_interface.h"
#include "accelerant_ext.h"

#ifdef __cplusplus
extern "C" {
#endif

void    _sPrintf(const char *format, ...);
//bool    set_dprintf_enabled(bool);    /* returns old enable flag */

#define dprintf _sPrintf

extern int debug_level_flow;
extern int debug_level_info;
extern int debug_level_error;

/*#define DEBUG_WAIT_ON_MSG 1000000
#define DEBUG_WAIT_ON_ERROR 1000000*/

#define DEBUG_MSG_PREFIX "Radeon - "

#define DEBUG_MAX_LEVEL_FLOW 3

#include "debug_ext.h"


// info about this accelerant
typedef struct accelerator_info {
        shared_info *si;                        // info shared between accelerants
        virtual_card *vc;                       // associated virtual card
        vuint8 *regs;                           // pointer to mapped registers
                                                                // !! dont't make it vuint32, access macros rely on 8 bits !!

        area_id shared_info_area;       // info shared between accelerants
        area_id regs_area;                      // MM I/O registers
        area_id virtual_card_area;      // info about virtual card
        
        // mapped-in (non)-local memory;
        // as si->local_mem contains a pointer to the local frame buffer,
        // only mt_pci and mt_agp are filled directly, mt_nonlocal contains
        // a copy of either mt_pci or mt_agp, mt_local a copy of si->local_mem
        struct {
                area_id                 area;           // area of clone
                unsigned char   *data;          // CPU address of area
        } mapped_memory[mt_last+1];
        
        int accelerant_is_clone;        // true, if this is a cloned accelerant
                
        int fd;                                         // file descriptor of kernel driver
        struct log_info_t *log;
        
        area_id mode_list_area;         // cloned list of standard display modes
        display_mode *mode_list;        // list of standard display modes
} accelerator_info;


#define IS_INTERNAL_TV_OUT( tv_chip ) \
        ( (tv_chip) == tc_internal_rt1 || (tv_chip) == tc_internal_rt2 )


// vesa_modes.c
extern const display_timing vesa_mode_list[];
extern const size_t vesa_mode_list_count;

// SetDisplayMode.c
uint32 Radeon_RoundVWidth( int virtual_width, int bpp );
status_t Radeon_MoveDisplay( accelerator_info *ai, uint16 h_display_start, uint16 v_display_start );
void Radeon_EnableIRQ( accelerator_info *ai, bool enable );

// multimon.c
void Radeon_HideMultiMode( virtual_card *vc, display_mode *mode );
void Radeon_DetectMultiMode( virtual_card *vc, display_mode *mode );
void Radeon_VerifyMultiMode( virtual_card *vc, shared_info *si, display_mode *mode );
void Radeon_InitMultiModeVars( accelerator_info *ai, display_mode *mode );
status_t Radeon_CheckMultiMonTunnel( virtual_card *vc, display_mode *mode, 
        const display_mode *low, const display_mode *high, bool *isTunnel );
bool Radeon_NeedsSecondPort( display_mode *mode );
bool Radeon_DifferentPorts( display_mode *mode );


// ProposeDisplayMode.c
bool Radeon_GetFormat( int space, int *format, int *bpp );
status_t Radeon_CreateModeList( shared_info *si );

        
// dpms.c
status_t Radeon_SetDPMS( accelerator_info *ai, int crtc_idx, int mode );
uint32 Radeon_GetDPMS( accelerator_info *ai, int crtc_idx );


// Cursor.c
void Radeon_SetCursorColors( accelerator_info *ai, int crtc_idx );
void Radeon_ShowCursor( accelerator_info *ai, int crtc_idx );


// Acceleration.c
void Radeon_Init2D( accelerator_info *ai );
void Radeon_AllocateVirtualCardStateBuffer( accelerator_info *ai );
void Radeon_FreeVirtualCardStateBuffer( accelerator_info *ai );
void Radeon_FillStateBuffer( accelerator_info *ai, uint32 datatype );


// driver_wrapper.c
status_t Radeon_WaitForIdle( accelerator_info *ai, bool keep_lock );
status_t Radeon_WaitForFifo( accelerator_info *ai, int entries );
void Radeon_ResetEngine( accelerator_info *ai );

status_t Radeon_VIPRead( accelerator_info *ai, uint channel, uint address, uint32 *data );
status_t Radeon_VIPWrite( accelerator_info *ai, uint8 channel, uint address, uint32 data );
int Radeon_FindVIPDevice( accelerator_info *ai, uint32 device_id );


// settings.cpp
void Radeon_ReadSettings( virtual_card *vc );
void Radeon_WriteSettings( virtual_card *vc );


// overlay.c
void Radeon_HideOverlay( accelerator_info *ai );
status_t Radeon_UpdateOverlay( accelerator_info *ai );
void Radeon_InitOverlay( accelerator_info *ai, int crtc_idx );

// EngineManagement.c
void Radeon_Spin( uint32 delay );


// monitor_detection.c
void Radeon_DetectDisplays( accelerator_info *ai );
bool Radeon_ReadEDID( accelerator_info *ai, uint32 ddc_port, edid1_info *edid );


// palette.c
void Radeon_InitPalette( accelerator_info *ai, int crtc_idx );


// theatre_out.c
void Radeon_DetectTVOut( accelerator_info *ai );


#ifdef __cplusplus
}
#endif

#endif