#ifndef _DEV_PCI_UNICHROMEHW_H
#define _DEV_PCI_UNICHROMEHW_H
#define IGA1_HOR_TOTAL_FORMULA(x) ((x)/8)-5
#define IGA1_HOR_ADDR_FORMULA(x) ((x)/8)-1
#define IGA1_HOR_BLANK_START_FORMULA(x) ((x)/8)-1
#define IGA1_HOR_BLANK_END_FORMULA(x,y) ((x+y)/8)-1
#define IGA1_HOR_SYNC_START_FORMULA(x) ((x)/8)-1
#define IGA1_HOR_SYNC_END_FORMULA(x,y) ((x+y)/8)-1
#define IGA1_VER_TOTAL_FORMULA(x) (x)-2
#define IGA1_VER_ADDR_FORMULA(x) (x)-1
#define IGA1_VER_BLANK_START_FORMULA(x) (x)-1
#define IGA1_VER_BLANK_END_FORMULA(x,y) (x+y)-1
#define IGA1_VER_SYNC_START_FORMULA(x) (x)-1
#define IGA1_VER_SYNC_END_FORMULA(x,y) (x+y)-1
#define IGA2_HOR_TOTAL_FORMULA(x) (x)-1
#define IGA2_HOR_ADDR_FORMULA(x) (x)-1
#define IGA2_HOR_BLANK_START_FORMULA(x) (x)-1
#define IGA2_HOR_BLANK_END_FORMULA(x,y) (x+y)-1
#define IGA2_HOR_SYNC_START_FORMULA(x) (x)-1
#define IGA2_HOR_SYNC_END_FORMULA(x,y) (x+y)-1
#define IGA2_VER_TOTAL_FORMULA(x) (x)-1
#define IGA2_VER_ADDR_FORMULA(x) (x)-1
#define IGA2_VER_BLANK_START_FORMULA(x) (x)-1
#define IGA2_VER_BLANK_END_FORMULA(x,y) (x+y)-1
#define IGA2_VER_SYNC_START_FORMULA(x) (x)-1
#define IGA2_VER_SYNC_END_FORMULA(x,y) (x+y)-1
#define IGA2_HOR_TOTAL_SHADOW_FORMULA(x) (x/8)-5
#define IGA2_HOR_BLANK_END_SHADOW_FORMULA(x,y) ((x+y)/8)-1
#define IGA2_VER_TOTAL_SHADOW_FORMULA(x) (x)-2
#define IGA2_VER_ADDR_SHADOW_FORMULA(x) (x)-1
#define IGA2_VER_BLANK_START_SHADOW_FORMULA(x) (x)-1
#define IGA2_VER_BLANK_END_SHADOW_FORMULA(x,y) (x+y)-1
#define IGA2_VER_SYNC_START_SHADOW_FORMULA(x) (x)
#define IGA2_VER_SYNC_END_SHADOW_FORMULA(x,y) (x+y)
#define IGA1_HOR_TOTAL_REG_NUM 2
#define IGA1_HOR_ADDR_REG_NUM 1
#define IGA1_HOR_BLANK_START_REG_NUM 1
#define IGA1_HOR_BLANK_END_REG_NUM 3
#define IGA1_HOR_SYNC_START_REG_NUM 2
#define IGA1_HOR_SYNC_END_REG_NUM 1
#define IGA1_VER_TOTAL_REG_NUM 4
#define IGA1_VER_ADDR_REG_NUM 4
#define IGA1_VER_BLANK_START_REG_NUM 4
#define IGA1_VER_BLANK_END_REG_NUM 1
#define IGA1_VER_SYNC_START_REG_NUM 4
#define IGA1_VER_SYNC_END_REG_NUM 1
#define IGA2_SHADOW_HOR_TOTAL_REG_NUM 2
#define IGA2_SHADOW_HOR_BLANK_END_REG_NUM 1
#define IGA2_SHADOW_VER_TOTAL_REG_NUM 2
#define IGA2_SHADOW_VER_ADDR_REG_NUM 2
#define IGA2_SHADOW_VER_BLANK_START_REG_NUM 2
#define IGA2_SHADOW_VER_BLANK_END_REG_NUM 2
#define IGA2_SHADOW_VER_SYNC_START_REG_NUM 2
#define IGA2_SHADOW_VER_SYNC_END_REG_NUM 1
#define IGA2_HOR_TOTAL_REG_NUM 2
#define IGA2_HOR_ADDR_REG_NUM 2
#define IGA2_HOR_BLANK_START_REG_NUM 2
#define IGA2_HOR_BLANK_END_REG_NUM 3
#define IGA2_HOR_SYNC_START_REG_NUM 3
#define IGA2_HOR_SYNC_END_REG_NUM 2
#define IGA2_VER_TOTAL_REG_NUM 2
#define IGA2_VER_ADDR_REG_NUM 2
#define IGA2_VER_BLANK_START_REG_NUM 2
#define IGA2_VER_BLANK_END_REG_NUM 2
#define IGA2_VER_SYNC_START_REG_NUM 2
#define IGA2_VER_SYNC_END_REG_NUM 1
#define IGA1_OFFSET_REG_NUM 2
#define IGA1_OFFSER_ALIGN_BYTE 8
#define IGA1_OFFSET_FORMULA(x,y) (x*y)/IGA1_OFFSER_ALIGN_BYTE
#define IGA1_FETCH_COUNT_REG_NUM 2
#define IGA1_FETCH_COUNT_ALIGN_BYTE 16
#define IGA1_FETCH_COUNT_PATCH_VALUE 4
#define IGA1_FETCH_COUNT_FORMULA(x,y) ((x*y)/IGA1_FETCH_COUNT_ALIGN_BYTE)+ IGA1_FETCH_COUNT_PATCH_VALUE
#define IGA2_OFFSET_REG_NUM 2
#define IGA2_OFFSET_ALIGN_BYTE 8
#define IGA2_OFFSET_FORMULA(x,y) (x*y)/IGA2_OFFSET_ALIGN_BYTE
#define IGA2_FETCH_COUNT_REG_NUM 2
#define IGA2_FETCH_COUNT_ALIGN_BYTE 16
#define IGA2_FETCH_COUNT_PATCH_VALUE 0
#define IGA2_FETCH_COUNT_FORMULA(x,y) ((x*y)/IGA2_FETCH_COUNT_ALIGN_BYTE)+ IGA2_FETCH_COUNT_PATCH_VALUE
#define IGA1_STARTING_ADDR_REG_NUM 4
#define IGA2_STARTING_ADDR_REG_NUM 3
#define K800_IGA1_FIFO_MAX_DEPTH 384
#define K800_IGA1_FIFO_THRESHOLD 328
#define K800_IGA1_FIFO_HIGH_THRESHOLD 296
#define K800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 0
#define K800_IGA2_FIFO_MAX_DEPTH 384
#define K800_IGA2_FIFO_THRESHOLD 328
#define K800_IGA2_FIFO_HIGH_THRESHOLD 296
#define K800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
#define P880_IGA1_FIFO_MAX_DEPTH 192
#define P880_IGA1_FIFO_THRESHOLD 128
#define P880_IGA1_FIFO_HIGH_THRESHOLD 64
#define P880_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 0
#define P880_IGA2_FIFO_MAX_DEPTH 96
#define P880_IGA2_FIFO_THRESHOLD 64
#define P880_IGA2_FIFO_HIGH_THRESHOLD 32
#define P880_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
#define CN900_IGA1_FIFO_MAX_DEPTH 96
#define CN900_IGA1_FIFO_THRESHOLD 80
#define CN900_IGA1_FIFO_HIGH_THRESHOLD 64
#define CN900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 0
#define CN900_IGA2_FIFO_MAX_DEPTH 96
#define CN900_IGA2_FIFO_THRESHOLD 80
#define CN900_IGA2_FIFO_HIGH_THRESHOLD 32
#define CN900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
#define CX700_IGA1_FIFO_MAX_DEPTH 192
#define CX700_IGA1_FIFO_THRESHOLD 128
#define CX700_IGA1_FIFO_HIGH_THRESHOLD 128
#define CX700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 124
#define CX700_IGA2_FIFO_MAX_DEPTH 96
#define CX700_IGA2_FIFO_THRESHOLD 64
#define CX700_IGA2_FIFO_HIGH_THRESHOLD 32
#define CX700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
#define IGA1_FIFO_DEPTH_SELECT_REG_NUM 1
#define IGA1_FIFO_THRESHOLD_REG_NUM 2
#define IGA1_FIFO_HIGH_THRESHOLD_REG_NUM 2
#define IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM 1
#define IGA2_FIFO_DEPTH_SELECT_REG_NUM 3
#define IGA2_FIFO_THRESHOLD_REG_NUM 2
#define IGA2_FIFO_HIGH_THRESHOLD_REG_NUM 2
#define IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM 1
#define IGA1_FIFO_DEPTH_SELECT_FORMULA(x) (x/2)-1
#define IGA1_FIFO_THRESHOLD_FORMULA(x) (x/4)
#define IGA1_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA(x) (x/4)
#define IGA1_FIFO_HIGH_THRESHOLD_FORMULA(x) (x/4)
#define IGA2_FIFO_DEPTH_SELECT_FORMULA(x) ((x/2)/4)-1
#define IGA2_FIFO_THRESHOLD_FORMULA(x) (x/4)
#define IGA2_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA(x) (x/4)
#define IGA2_FIFO_HIGH_THRESHOLD_FORMULA(x) (x/4)
#define LCD_POWER_SEQ_TD0 500000
#define LCD_POWER_SEQ_TD1 50000
#define LCD_POWER_SEQ_TD2 0
#define LCD_POWER_SEQ_TD3 210000
#define CLE266_POWER_SEQ_UNIT 71
#define K800_POWER_SEQ_UNIT 142
#define P880_POWER_SEQ_UNIT 572
#define CLE266_POWER_SEQ_FORMULA(x) (x)/CLE266_POWER_SEQ_UNIT
#define K800_POWER_SEQ_FORMULA(x) (x)/K800_POWER_SEQ_UNIT
#define P880_POWER_SEQ_FORMULA(x) (x)/P880_POWER_SEQ_UNIT
#define LCD_POWER_SEQ_TD0_REG_NUM 2
#define LCD_POWER_SEQ_TD1_REG_NUM 2
#define LCD_POWER_SEQ_TD2_REG_NUM 2
#define LCD_POWER_SEQ_TD3_REG_NUM 2
#define CLE266_LCD_HOR_SCF_FORMULA(x,y) (((x-1)*1024)/(y-1))
#define CLE266_LCD_VER_SCF_FORMULA(x,y) (((x-1)*1024)/(y-1))
#define K800_LCD_HOR_SCF_FORMULA(x,y) (((x-1)*4096)/(y-1))
#define K800_LCD_VER_SCF_FORMULA(x,y) (((x-1)*2048)/(y-1))
#define LCD_HOR_SCALING_FACTOR_REG_NUM 3
#define LCD_VER_SCALING_FACTOR_REG_NUM 3
#define LCD_HOR_SCALING_FACTOR_REG_NUM_CLE 2
#define LCD_VER_SCALING_FACTOR_REG_NUM_CLE 2
struct io_register {
uint8_t io_addr;
uint8_t start_bit;
uint8_t end_bit;
};
struct iga1_hor_total
{
int reg_num;
struct io_register reg[IGA1_HOR_TOTAL_REG_NUM];
};
struct iga1_hor_addr {
int reg_num;
struct io_register reg[IGA1_HOR_ADDR_REG_NUM];
};
struct iga1_hor_blank_start {
int reg_num;
struct io_register reg[IGA1_HOR_BLANK_START_REG_NUM];
};
struct iga1_hor_blank_end {
int reg_num;
struct io_register reg[IGA1_HOR_BLANK_END_REG_NUM];
};
struct iga1_hor_sync_start {
int reg_num;
struct io_register reg[IGA1_HOR_SYNC_START_REG_NUM];
};
struct iga1_hor_sync_end {
int reg_num;
struct io_register reg[IGA1_HOR_SYNC_END_REG_NUM];
};
struct iga1_ver_total {
int reg_num;
struct io_register reg[IGA1_VER_TOTAL_REG_NUM];
};
struct iga1_ver_addr {
int reg_num;
struct io_register reg[IGA1_VER_ADDR_REG_NUM];
};
struct iga1_ver_blank_start {
int reg_num;
struct io_register reg[IGA1_VER_BLANK_START_REG_NUM];
};
struct iga1_ver_blank_end {
int reg_num;
struct io_register reg[IGA1_VER_BLANK_END_REG_NUM];
};
struct iga1_ver_sync_start {
int reg_num;
struct io_register reg[IGA1_VER_SYNC_START_REG_NUM];
};
struct iga1_ver_sync_end {
int reg_num;
struct io_register reg[IGA1_VER_SYNC_END_REG_NUM];
};
struct iga2_shadow_hor_total
{
int reg_num;
struct io_register reg[IGA2_SHADOW_HOR_TOTAL_REG_NUM];
};
struct iga2_shadow_hor_blank_end {
int reg_num;
struct io_register reg[IGA2_SHADOW_HOR_BLANK_END_REG_NUM];
};
struct iga2_shadow_ver_total {
int reg_num;
struct io_register reg[IGA2_SHADOW_VER_TOTAL_REG_NUM];
};
struct iga2_shadow_ver_addr {
int reg_num;
struct io_register reg[IGA2_SHADOW_VER_ADDR_REG_NUM];
};
struct iga2_shadow_ver_blank_start {
int reg_num;
struct io_register reg[IGA2_SHADOW_VER_BLANK_START_REG_NUM];
};
struct iga2_shadow_ver_blank_end {
int reg_num;
struct io_register reg[IGA2_SHADOW_VER_BLANK_END_REG_NUM];
};
struct iga2_shadow_ver_sync_start {
int reg_num;
struct io_register reg[IGA2_SHADOW_VER_SYNC_START_REG_NUM];
};
struct iga2_shadow_ver_sync_end {
int reg_num;
struct io_register reg[IGA2_SHADOW_VER_SYNC_END_REG_NUM];
};
struct iga2_hor_total {
int reg_num;
struct io_register reg[IGA2_HOR_TOTAL_REG_NUM];
};
struct iga2_hor_addr {
int reg_num;
struct io_register reg[IGA2_HOR_ADDR_REG_NUM];
};
struct iga2_hor_blank_start {
int reg_num;
struct io_register reg[IGA2_HOR_BLANK_START_REG_NUM];
};
struct iga2_hor_blank_end {
int reg_num;
struct io_register reg[IGA2_HOR_BLANK_END_REG_NUM];
};
struct iga2_hor_sync_start {
int reg_num;
struct io_register reg[IGA2_HOR_SYNC_START_REG_NUM];
};
struct iga2_hor_sync_end {
int reg_num;
struct io_register reg[IGA2_HOR_SYNC_END_REG_NUM];
};
struct iga2_ver_total {
int reg_num;
struct io_register reg[IGA2_VER_TOTAL_REG_NUM];
};
struct iga2_ver_addr {
int reg_num;
struct io_register reg[IGA2_VER_ADDR_REG_NUM];
};
struct iga2_ver_blank_start {
int reg_num;
struct io_register reg[IGA2_VER_BLANK_START_REG_NUM];
};
struct iga2_ver_blank_end {
int reg_num;
struct io_register reg[IGA2_VER_BLANK_END_REG_NUM];
};
struct iga2_ver_sync_start {
int reg_num;
struct io_register reg[IGA2_VER_SYNC_START_REG_NUM];
};
struct iga2_ver_sync_end {
int reg_num;
struct io_register reg[IGA2_VER_SYNC_END_REG_NUM];
};
struct iga1_offset {
int reg_num;
struct io_register reg[IGA1_OFFSET_REG_NUM];
};
struct iga2_offset {
int reg_num;
struct io_register reg[IGA2_OFFSET_REG_NUM];
};
struct offset{
struct iga1_offset iga1_offset_reg;
struct iga2_offset iga2_offset_reg;
};
struct iga1_fetch_count {
int reg_num;
struct io_register reg[IGA1_FETCH_COUNT_REG_NUM];
};
struct iga2_fetch_count {
int reg_num;
struct io_register reg[IGA2_FETCH_COUNT_REG_NUM];
};
struct fetch_count{
struct iga1_fetch_count iga1_fetch_count_reg;
struct iga2_fetch_count iga2_fetch_count_reg;
};
struct iga1_starting_addr {
int reg_num;
struct io_register reg[IGA1_STARTING_ADDR_REG_NUM];
};
struct iga2_starting_addr {
int reg_num;
struct io_register reg[IGA2_STARTING_ADDR_REG_NUM];
};
struct starting_addr {
struct iga1_starting_addr iga1_starting_addr_reg;
struct iga2_starting_addr iga2_starting_addr_reg;
};
struct lcd_pwd_seq_td0{
int reg_num;
struct io_register reg[LCD_POWER_SEQ_TD0_REG_NUM];
};
struct lcd_pwd_seq_td1{
int reg_num;
struct io_register reg[LCD_POWER_SEQ_TD1_REG_NUM];
};
struct lcd_pwd_seq_td2{
int reg_num;
struct io_register reg[LCD_POWER_SEQ_TD2_REG_NUM];
};
struct lcd_pwd_seq_td3{
int reg_num;
struct io_register reg[LCD_POWER_SEQ_TD3_REG_NUM];
};
struct _lcd_pwd_seq_timer{
struct lcd_pwd_seq_td0 td0;
struct lcd_pwd_seq_td1 td1;
struct lcd_pwd_seq_td2 td2;
struct lcd_pwd_seq_td3 td3;
};
struct _lcd_hor_scaling_factor{
int reg_num;
struct io_register reg[LCD_HOR_SCALING_FACTOR_REG_NUM];
};
struct _lcd_ver_scaling_factor{
int reg_num;
struct io_register reg[LCD_VER_SCALING_FACTOR_REG_NUM];
};
struct _lcd_scaling_factor{
struct _lcd_hor_scaling_factor lcd_hor_scaling_factor;
struct _lcd_ver_scaling_factor lcd_ver_scaling_factor;
};
struct pll_map {
uint32_t clk;
uint32_t cle266_pll;
uint32_t k800_pll;
uint32_t cx700_pll;
};
struct rgbLUT {
uint8_t red;
uint8_t green;
uint8_t blue;
};
struct lcd_pwd_seq_timer {
uint16_t td0;
uint16_t td1;
uint16_t td2;
uint16_t td3;
};
struct iga1_fifo_depth_select {
int reg_num;
struct io_register reg[IGA1_FIFO_DEPTH_SELECT_REG_NUM];
};
struct iga1_fifo_threshold_select {
int reg_num;
struct io_register reg[IGA1_FIFO_THRESHOLD_REG_NUM];
};
struct iga1_fifo_high_threshold_select {
int reg_num;
struct io_register reg[IGA1_FIFO_HIGH_THRESHOLD_REG_NUM];
};
struct iga1_display_queue_expire_num {
int reg_num;
struct io_register reg[IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM];
};
struct iga2_fifo_depth_select {
int reg_num;
struct io_register reg[IGA2_FIFO_DEPTH_SELECT_REG_NUM];
};
struct iga2_fifo_threshold_select {
int reg_num;
struct io_register reg[IGA2_FIFO_THRESHOLD_REG_NUM];
};
struct iga2_fifo_high_threshold_select {
int reg_num;
struct io_register reg[IGA2_FIFO_HIGH_THRESHOLD_REG_NUM];
};
struct iga2_display_queue_expire_num {
int reg_num;
struct io_register reg[IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM];
};
struct fifo_depth_select {
struct iga1_fifo_depth_select iga1_fifo_depth_select_reg;
struct iga2_fifo_depth_select iga2_fifo_depth_select_reg;
};
struct fifo_threshold_select {
struct iga1_fifo_threshold_select iga1_fifo_threshold_select_reg;
struct iga2_fifo_threshold_select iga2_fifo_threshold_select_reg;
};
struct fifo_high_threshold_select {
struct iga1_fifo_high_threshold_select iga1_fifo_high_threshold_select_reg;
struct iga2_fifo_high_threshold_select iga2_fifo_high_threshold_select_reg;
};
struct display_queue_expire_num {
struct iga1_display_queue_expire_num iga1_display_queue_expire_num_reg;
struct iga2_display_queue_expire_num iga2_display_queue_expire_num_reg;
};
struct iga1_crtc_timing {
struct iga1_hor_total hor_total;
struct iga1_hor_addr hor_addr;
struct iga1_hor_blank_start hor_blank_start;
struct iga1_hor_blank_end hor_blank_end;
struct iga1_hor_sync_start hor_sync_start;
struct iga1_hor_sync_end hor_sync_end;
struct iga1_ver_total ver_total;
struct iga1_ver_addr ver_addr;
struct iga1_ver_blank_start ver_blank_start;
struct iga1_ver_blank_end ver_blank_end;
struct iga1_ver_sync_start ver_sync_start;
struct iga1_ver_sync_end ver_sync_end;
};
struct iga2_shadow_crtc_timing {
struct iga2_shadow_hor_total hor_total_shadow;
struct iga2_shadow_hor_blank_end hor_blank_end_shadow;
struct iga2_shadow_ver_total ver_total_shadow;
struct iga2_shadow_ver_addr ver_addr_shadow;
struct iga2_shadow_ver_blank_start ver_blank_start_shadow;
struct iga2_shadow_ver_blank_end ver_blank_end_shadow;
struct iga2_shadow_ver_sync_start ver_sync_start_shadow;
struct iga2_shadow_ver_sync_end ver_sync_end_shadow;
};
struct iga2_crtc_timing {
struct iga2_hor_total hor_total;
struct iga2_hor_addr hor_addr;
struct iga2_hor_blank_start hor_blank_start;
struct iga2_hor_blank_end hor_blank_end;
struct iga2_hor_sync_start hor_sync_start;
struct iga2_hor_sync_end hor_sync_end;
struct iga2_ver_total ver_total;
struct iga2_ver_addr ver_addr;
struct iga2_ver_blank_start ver_blank_start;
struct iga2_ver_blank_end ver_blank_end;
struct iga2_ver_sync_start ver_sync_start;
struct iga2_ver_sync_end ver_sync_end;
};
#endif