kolibrios/programs/system/drivers/rhd/AtomBios/includes/CD_Structs.h
Sergey Semyonov (Serge) 4cc87fbe7d Radeon modesetting. Father of all "C" drivers.
git-svn-id: svn://kolibrios.org@955 a494cfbc-eb01-0410-851d-a64ba20cac60
2008-12-13 07:51:28 +00:00

465 lines
12 KiB
C

/*
* 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.
--*/
#include "CD_binding.h"
#ifndef _CD_STRUCTS_H_
#define _CD_STRUCTS_H_
#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 {
UINT8 Source:3;
UINT8 SourceAlignment:3;
UINT8 DestinationAlignment:2;
}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{
UINT16 CommandType:3;
UINT16 CurrentParameterSize:3;
UINT16 CommandAccessType:3;
UINT16 CurrentPort:2;
UINT16 PS_SizeInDwordsUsedByCallingTable:5;
}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