Logo Search packages:      
Sourcecode: xserver-xorg-video-ati version File versions

CD_Structs.h

/*
 * Copyright 2006-2007 Advanced Micro Devices, Inc.  
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

/*++

Module Name:

CD_Struct.h

Abstract:

Defines Script Language commands

Revision History:

NEG:26.08.2002    Initiated.
--*/

#ifndef _CD_STRUCTS_H_
#define _CD_STRUCTS_H_

#include "CD_binding.h"

/* Endaianness should be specified before inclusion,
 * default to little endian
 */
#ifndef ATOM_BIG_ENDIAN
#error Endian not specified
#endif

#ifdef            UEFI_BUILD
typedef     UINT16**    PTABLE_UNIT_TYPE;
typedef     UINTN       TABLE_UNIT_TYPE;
#else
typedef     UINT16*           PTABLE_UNIT_TYPE;
typedef     UINT16            TABLE_UNIT_TYPE;
#endif

#include <regsdef.h> //This important file is dynamically generated based on the ASIC!!!!

#define PARSER_MAJOR_REVISION 5
#define PARSER_MINOR_REVISION 0

//#include "atombios.h"
#if (PARSER_TYPE==DRIVER_TYPE_PARSER)
#ifdef FGL_LINUX
#pragma pack(push,1)
#else
#pragma pack(push)
#pragma pack(1)
#endif
#endif

#include "CD_Common_Types.h"
#include "CD_Opcodes.h"
typedef UINT16                      WORK_SPACE_SIZE;
typedef enum _CD_STATUS{
    CD_SUCCESS,
    CD_CALL_TABLE,
    CD_COMPLETED=0x10,
    CD_GENERAL_ERROR=0x80,
    CD_INVALID_OPCODE,
    CD_NOT_IMPLEMENTED,
    CD_EXEC_TABLE_NOT_FOUND,
    CD_EXEC_PARAMETER_ERROR,
    CD_EXEC_PARSER_ERROR,
    CD_INVALID_DESTINATION_TYPE,
    CD_UNEXPECTED_BEHAVIOR,
    CD_INVALID_SWITCH_OPERAND_SIZE
}CD_STATUS;

#define PARSER_STRINGS                  0
#define PARSER_DEC                      1
#define PARSER_HEX                      2

#define DB_CURRENT_COMMAND_TABLE    0xFF

#define TABLE_FORMAT_BIOS           0
#define TABLE_FORMAT_EASF           1

#define EASF_TABLE_INDEX_MASK       0xfc
#define EASF_TABLE_ATTR_MASK        0x03

#define CD_ERROR(a)    (((INTN) (a)) > CD_COMPLETED)
#define CD_ERROR_OR_COMPLETED(a)    (((INTN) (a)) > CD_SUCCESS)


#if (BIOS_PARSER==1)
#ifdef _H2INC
#define STACK_BASED
#else
extern __segment farstack;
#define STACK_BASED __based(farstack)
#endif
#else
#define STACK_BASED
#endif

typedef enum _COMPARE_FLAGS{
    Below,
    Equal,
    Above,
    NotEqual,
    Overflow,
    NoCondition
}COMPARE_FLAGS;

typedef UINT16 IO_BASE_ADDR;

typedef struct _BUS_DEV_FUNC_PCI_ADDR{
    UINT8   Register;
    UINT8   Function;
    UINT8   Device;
    UINT8   Bus;
} BUS_DEV_FUNC_PCI_ADDR;

typedef struct _BUS_DEV_FUNC{
    UINT8   Function : 3;
    UINT8   Device   : 5;
    UINT8   Bus;
} BUS_DEV_FUNC;

#ifndef     UEFI_BUILD
typedef struct _PCI_CONFIG_ACCESS_CF8{
    UINT32  Reg     : 8;
    UINT32  Func    : 3;
    UINT32  Dev     : 5;
    UINT32  Bus     : 8;
    UINT32  Reserved: 7;
    UINT32  Enable  : 1;
} PCI_CONFIG_ACCESS_CF8;
#endif

typedef enum _MEM_RESOURCE {
    Stack_Resource,
    FrameBuffer_Resource,
    BIOS_Image_Resource
}MEM_RESOURCE;

typedef enum _PORTS{
    ATI_RegsPort,
    PCI_Port,
    SystemIO_Port
}PORTS;

typedef enum _OPERAND_TYPE {
    typeRegister,
    typeParamSpace,
    typeWorkSpace,
    typeFrameBuffer,
    typeIndirect,
    typeDirect,
    typePLL,
    typeMC
}OPERAND_TYPE;

typedef enum _DESTINATION_OPERAND_TYPE {
    destRegister,
    destParamSpace,
    destWorkSpace,
    destFrameBuffer,
    destPLL,
    destMC
}DESTINATION_OPERAND_TYPE;

typedef enum _SOURCE_OPERAND_TYPE {
    sourceRegister,
    sourceParamSpace,
    sourceWorkSpace,
    sourceFrameBuffer,
    sourceIndirect,
    sourceDirect,
    sourcePLL,
    sourceMC
}SOURCE_OPERAND_TYPE;

typedef enum _ALIGNMENT_TYPE {
    alignmentDword,
    alignmentLowerWord,
    alignmentMiddleWord,
    alignmentUpperWord,
    alignmentByte0,
    alignmentByte1,
    alignmentByte2,
    alignmentByte3
}ALIGNMENT_TYPE;


#define INDIRECT_IO_READ    0
#define INDIRECT_IO_WRITE   0x80
#define INDIRECT_IO_MM      0
#define INDIRECT_IO_PLL     1
#define INDIRECT_IO_MC      2

typedef struct _PARAMETERS_TYPE{
    UINT8   Destination;
    UINT8   Source;
}PARAMETERS_TYPE;
/* The following structures don't used to allocate any type of objects(variables).
   they are serve the only purpose: Get proper access to data(commands), found in the tables*/
typedef struct _PA_BYTE_BYTE{
    UINT8         PA_Destination;
    UINT8         PA_Source;
    UINT8         PA_Padding[8];
}PA_BYTE_BYTE;
typedef struct _PA_BYTE_WORD{
    UINT8         PA_Destination;
    UINT16        PA_Source;
    UINT8         PA_Padding[7];
}PA_BYTE_WORD;
typedef struct _PA_BYTE_DWORD{
    UINT8         PA_Destination;
    UINT32        PA_Source;
    UINT8         PA_Padding[5];
}PA_BYTE_DWORD;
typedef struct _PA_WORD_BYTE{
    UINT16        PA_Destination;
    UINT8         PA_Source;
    UINT8         PA_Padding[7];
}PA_WORD_BYTE;
typedef struct _PA_WORD_WORD{
    UINT16        PA_Destination;
    UINT16        PA_Source;
    UINT8         PA_Padding[6];
}PA_WORD_WORD;
typedef struct _PA_WORD_DWORD{
    UINT16        PA_Destination;
    UINT32        PA_Source;
    UINT8         PA_Padding[4];
}PA_WORD_DWORD;
typedef struct _PA_WORD_XX{
    UINT16        PA_Destination;
    UINT8         PA_Padding[8];
}PA_WORD_XX;
typedef struct _PA_BYTE_XX{
    UINT8         PA_Destination;
    UINT8         PA_Padding[9];
}PA_BYTE_XX;
/*The following 6 definitions used for Mask operation*/
typedef struct _PA_BYTE_BYTE_BYTE{
    UINT8         PA_Destination;
    UINT8         PA_AndMaskByte;
    UINT8         PA_OrMaskByte;
    UINT8         PA_Padding[7];
}PA_BYTE_BYTE_BYTE;
typedef struct _PA_BYTE_WORD_WORD{
    UINT8         PA_Destination;
    UINT16        PA_AndMaskWord;
    UINT16        PA_OrMaskWord;
    UINT8         PA_Padding[5];
}PA_BYTE_WORD_WORD;
typedef struct _PA_BYTE_DWORD_DWORD{
    UINT8         PA_Destination;
    UINT32        PA_AndMaskDword;
    UINT32        PA_OrMaskDword;
    UINT8         PA_Padding;
}PA_BYTE_DWORD_DWORD;
typedef struct _PA_WORD_BYTE_BYTE{
    UINT16        PA_Destination;
    UINT8         PA_AndMaskByte;
    UINT8         PA_OrMaskByte;
    UINT8         PA_Padding[6];
}PA_WORD_BYTE_BYTE;
typedef struct _PA_WORD_WORD_WORD{
    UINT16        PA_Destination;
    UINT16        PA_AndMaskWord;
    UINT16        PA_OrMaskWord;
    UINT8         PA_Padding[4];
}PA_WORD_WORD_WORD;
typedef struct _PA_WORD_DWORD_DWORD{
    UINT16        PA_Destination;
    UINT32        PA_AndMaskDword;
    UINT32        PA_OrMaskDword;
}PA_WORD_DWORD_DWORD;


typedef union _PARAMETER_ACCESS {
    PA_BYTE_XX                ByteXX;
    PA_BYTE_BYTE        ByteByte;
    PA_BYTE_WORD        ByteWord;
    PA_BYTE_DWORD       ByteDword;
    PA_WORD_BYTE        WordByte;
    PA_WORD_WORD        WordWord;
    PA_WORD_DWORD       WordDword;
    PA_WORD_XX                WordXX;
/*The following 6 definitions used for Mask operation*/
    PA_BYTE_BYTE_BYTE   ByteByteAndByteOr;
    PA_BYTE_WORD_WORD   ByteWordAndWordOr;
    PA_BYTE_DWORD_DWORD ByteDwordAndDwordOr;
    PA_WORD_BYTE_BYTE   WordByteAndByteOr;
    PA_WORD_WORD_WORD   WordWordAndWordOr;
    PA_WORD_DWORD_DWORD WordDwordAndDwordOr;
}PARAMETER_ACCESS;

typedef     struct _COMMAND_ATTRIBUTE {
#if ATOM_BIG_ENDIAN
    UINT8         DestinationAlignment:2;
    UINT8         SourceAlignment:3;
    UINT8         Source:3;
#else
    UINT8         Source:3;
    UINT8         SourceAlignment:3;
    UINT8         DestinationAlignment:2;
#endif
}COMMAND_ATTRIBUTE;

typedef struct _SOURCE_DESTINATION_ALIGNMENT{
    UINT8                           DestAlignment;
    UINT8                           SrcAlignment;
}SOURCE_DESTINATION_ALIGNMENT;
typedef struct _MULTIPLICATION_RESULT{
    UINT32                                                  Low32Bit;
    UINT32                                                  High32Bit;
}MULTIPLICATION_RESULT;
typedef struct _DIVISION_RESULT{
    UINT32                                                  Quotient32;
    UINT32                                                  Reminder32;
}DIVISION_RESULT;
typedef union _DIVISION_MULTIPLICATION_RESULT{
    MULTIPLICATION_RESULT           Multiplication;
    DIVISION_RESULT                             Division;
}DIVISION_MULTIPLICATION_RESULT;
typedef struct _COMMAND_HEADER {
    UINT8                           Opcode;
    COMMAND_ATTRIBUTE         Attribute;
}COMMAND_HEADER;

typedef struct _GENERIC_ATTRIBUTE_COMMAND{
    COMMAND_HEADER                  Header;
    PARAMETER_ACCESS          Parameters;
} GENERIC_ATTRIBUTE_COMMAND;

typedef struct    _COMMAND_TYPE_1{
    UINT8                           Opcode;
    PARAMETER_ACCESS          Parameters;
} COMMAND_TYPE_1;

typedef struct    _COMMAND_TYPE_OPCODE_OFFSET16{
    UINT8                           Opcode;
    UINT16                          CD_Offset16;
} COMMAND_TYPE_OPCODE_OFFSET16;

typedef struct    _COMMAND_TYPE_OPCODE_OFFSET32{
    UINT8                           Opcode;
    UINT32                          CD_Offset32;
} COMMAND_TYPE_OPCODE_OFFSET32;

typedef struct    _COMMAND_TYPE_OPCODE_VALUE_BYTE{
    UINT8                           Opcode;
    UINT8                           Value;
} COMMAND_TYPE_OPCODE_VALUE_BYTE;

typedef union  _COMMAND_SPECIFIC_UNION{
    UINT8   ContinueSwitch;
    UINT8   ControlOperandSourcePosition;
    UINT8   IndexInMasterTable;
} COMMAND_SPECIFIC_UNION;


typedef struct _CD_GENERIC_BYTE{
#if ATOM_BIG_ENDIAN
    UINT16                          PS_SizeInDwordsUsedByCallingTable:5;
    UINT16                          CurrentPort:2;
    UINT16                          CommandAccessType:3;
    UINT16                          CurrentParameterSize:3;
    UINT16                          CommandType:3;
#else
    UINT16                          CommandType:3;
    UINT16                          CurrentParameterSize:3;
    UINT16                          CommandAccessType:3;
    UINT16                          CurrentPort:2;
    UINT16                          PS_SizeInDwordsUsedByCallingTable:5;
#endif
}CD_GENERIC_BYTE;

typedef UINT8     COMMAND_TYPE_OPCODE_ONLY;

typedef UINT8  COMMAND_HEADER_POINTER;


#if (PARSER_TYPE==BIOS_TYPE_PARSER)

typedef struct _DEVICE_DATA   {
    UINT32  STACK_BASED       *pParameterSpace;
    UINT8                                                   *pBIOS_Image;
    UINT8                                       format;
#if (IO_INTERFACE==PARSER_INTERFACE)
    IO_BASE_ADDR                          IOBase;
#endif
}  DEVICE_DATA;

#else

typedef struct _DEVICE_DATA   {
    UINT32                                      *pParameterSpace;
    VOID                                              *CAIL;
    UINT8                                       *pBIOS_Image;
    UINT32                                      format;
} DEVICE_DATA;

#endif

struct _PARSER_TEMP_DATA;
typedef UINT32 WORKSPACE_POINTER;

struct      _WORKING_TABLE_DATA{
    UINT8                                                                                                         * pTableHead;
    COMMAND_HEADER_POINTER                                                    * IP;             // Commands pointer
    WORKSPACE_POINTER   STACK_BASED                               * pWorkSpace;
    struct _WORKING_TABLE_DATA STACK_BASED  * prevWorkingTableData;
};



typedef struct    _PARSER_TEMP_DATA{
    DEVICE_DATA   STACK_BASED                                     *pDeviceData;
    struct _WORKING_TABLE_DATA STACK_BASED            *pWorkingTableData;
    UINT32                                                                                      SourceData32;
    UINT32                                                                                      DestData32;
    DIVISION_MULTIPLICATION_RESULT              MultiplicationOrDivision;
    UINT32                                                                                      Index;
    UINT32                                              CurrentFB_Window;
    UINT32                                              IndirectData;
    UINT16                                                                                      CurrentRegBlock;
    TABLE_UNIT_TYPE                                                                             CurrentDataBlock;
    UINT16                              AttributesData;
//  UINT8                               *IndirectIOTable;
    UINT8                               *IndirectIOTablePointer;
    GENERIC_ATTRIBUTE_COMMAND                               *pCmd;                  //CurrentCommand;
    SOURCE_DESTINATION_ALIGNMENT                CD_Mask;
    PARAMETERS_TYPE                                                                 ParametersType;
    CD_GENERIC_BYTE                                                                 Multipurpose;
    UINT8                                                                                             CompareFlags;
    COMMAND_SPECIFIC_UNION                                        CommandSpecific;
    CD_STATUS                                                                                   Status;
    UINT8                               Shift2MaskConverter;
    UINT8                                                                                         CurrentPortID;
} PARSER_TEMP_DATA;


typedef struct _WORKING_TABLE_DATA  WORKING_TABLE_DATA;



typedef VOID (*COMMANDS_DECODER)(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
typedef VOID (*WRITE_IO_FUNCTION)(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
typedef UINT32 (*READ_IO_FUNCTION)(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
typedef UINT32 (*CD_GET_PARAMETERS)(PARSER_TEMP_DATA STACK_BASED * pParserTempData);

typedef struct _COMMANDS_PROPERTIES
{
    COMMANDS_DECODER  function;
    UINT8             destination;
    UINT8             headersize;
} COMMANDS_PROPERTIES;

typedef struct _INDIRECT_IO_PARSER_COMMANDS
{
    COMMANDS_DECODER  func;
    UINT8             csize;
} INDIRECT_IO_PARSER_COMMANDS;

#if (PARSER_TYPE==DRIVER_TYPE_PARSER)
#pragma pack(pop)
#endif

#endif

Generated by  Doxygen 1.6.0   Back to index