blob: f680b75a3d83a5f9d8d7307e26a1ded9080c7968 [file] [log] [blame]
#ifndef _NFC_STRUCT_
#define _NFC_STRUCT_
//tbl 2.1, 2.10, 2.27
typedef union
{
unsigned int u[1];
struct
{
unsigned int :24;
unsigned int trd_num :3;
unsigned int :3;
unsigned int ct :2;
} dma;
union
{
struct
{
unsigned int cmd_type :16;
unsigned int vol_id :4;
unsigned int interrupt :1;
unsigned int dma_sel :1;
unsigned int :2;
unsigned int trd_num :3;
unsigned int :3;
unsigned int ct :2;
} read, program;
struct
{
unsigned int cmd_type :16;
unsigned int vol_id :4;
unsigned int interrupt :1;
unsigned int :3;
unsigned int trd_num :3;
unsigned int :3;
unsigned int ct :2;
} copyback, erase,
reset, set_features;
struct
{
unsigned int cmd_type :16;
unsigned int :4;
unsigned int interrupt :1;
unsigned int :3;
unsigned int trd_num :3;
unsigned int :3;
unsigned int ct :2;
} thread_reset;
} pio;
struct
{
unsigned int :20;
unsigned int interrupt :1;
unsigned int :3;
unsigned int trd_num :3;
unsigned int :3;
unsigned int ct :2;
} gen;
} nfc_cmd_0_reg_t;
// tbl 2.11, 2.14, 2.17, 2.20, 2.22, 2.24
typedef union
{
unsigned int u[1];
union
{
struct
{
unsigned int row_addr :24;
unsigned int bank :3;
unsigned int :5;
} read, program,
copyback, erase, reset;
struct
{
unsigned int feature_addr :8;
unsigned int :16;
unsigned int bank :3;
unsigned int :5;
} set_features;
} pio;
} nfc_cmd_1_reg_t;
//tbl 2.2, 2.12, 2.15, 2.18, 2.25, 2.28
typedef union
{
unsigned int u[1];
struct
{
unsigned int desc_addr_low :32;
} dma;
union
{
struct
{
unsigned int mem_addr_ptr_l :32;
} read, program;
struct
{
unsigned int row_addr :24;
unsigned int bank :3;
unsigned int :5;
} copyback;
struct
{
unsigned int feature_val :32;
} set_features;
} pio;
struct
{
unsigned int cmd_val_l :32;
} gen;
} nfc_cmd_2_reg_t;
//tbl 2.29
typedef union
{
unsigned int u[1];
struct
{
unsigned int cmd_val_h :32;
} gen;
} nfc_cmd_3_reg_t;
//tbl 2.30
typedef union
{
unsigned int u[2];
struct
{
unsigned int inst_type :6;
unsigned int twb_active :1;
unsigned int jedec_supp :1;
unsigned int :3;
union
{
struct
{
unsigned int :5;
unsigned int cmd :8;
unsigned long long :40;
} cmd_seq;
struct
{
unsigned int nbytes :3;
unsigned int :2;
unsigned int addr0 :8;
unsigned int addr1 :8;
unsigned int addr2 :8;
unsigned int addr3 :8;
unsigned int addr4 :8;
unsigned int addr5 :8;
} addr_seq;
struct
{
unsigned int direction :1;
unsigned int ecc_en :1;
unsigned int scrambler_en :1;
unsigned int erased_page_det_en :1;
unsigned int :1;
unsigned int sector_size :16;
unsigned int sector_cnt :8;
unsigned int last_sector_size :16;
unsigned int corr_cap :3;
unsigned int :5;
} data_seq;
struct
{
unsigned int f2_en :1;
unsigned long long :52;
} read_status;
struct
{
unsigned long long :53;
} reset, synchronous_reset;
struct
{
unsigned int :5;
unsigned int addr0 :8;
unsigned long long :40;
} volume_select, odt_configure,
set_features, get_features,
read_id, read_parameter_page,
zq_calibration_short,
zq_calibration_long;
struct
{
unsigned int :5;
unsigned int addr0 :8;
unsigned int addr1 :8;
unsigned int :32;
} change_write_column,
lun_get_features,
lun_set_features;
struct
{
unsigned int nbytes :3;
unsigned int :2;
unsigned int addr0 :8;
unsigned int addr1 :8;
unsigned int addr2 :8;
unsigned int :24;
} erase, read_status_enhanced,
multi_plane_block_erase,
lun_reset;
struct
{
unsigned int nbytes :3;
unsigned int :2;
unsigned int addr0 :8;
unsigned int addr1 :8;
unsigned int addr2 :8;
unsigned int addr3 :8;
unsigned int addr4 :8;
unsigned int :8;
} read, write, read_cache_random,
copyback_read, copyback_program,
change_read_column,
change_read_column_enhanced,
change_read_colunm_jedec,
multi_plane_read,
small_data_move;
struct
{
unsigned int nbytes :3;
unsigned int :2;
unsigned int addr0 :8;
unsigned int addr1 :8;
unsigned int addr2 :8;
unsigned int addr3 :8;
unsigned int addr4 :8;
unsigned int addr5 :8;
} multi_plane_block_erase_onfi_jedec;
};
};
} nfc_cmd_layout_t;
//tbl 2.5
typedef union
{
unsigned int u[1];
struct
{
unsigned int row_addr :24;
unsigned int bank :3;
unsigned int :5;
};
} nfc_flash_ptr_field_t;
//tbl 2.6
typedef union
{
unsigned int u[1];
struct
{
unsigned int mem_ptr_cont :1;
unsigned int flash_ptr_cont :1;
unsigned int :2;
unsigned int target_vol :4;
unsigned int interrupt :1;
unsigned int cont :1;
unsigned int dma_sel :1;
unsigned int :21;
};
} nfc_cmd_flags_field_t; //only low 16bits used
//tbl 2.7, 2.26, 2.32
typedef union
{
unsigned int u[1];
union
{
struct
{
unsigned int desc_err :1;
unsigned int ecc_err :1;
unsigned int max_err :8;
unsigned int :1;
unsigned int erased_page :1;
unsigned int dev_err :1;
unsigned int :1;
unsigned int fail :1;
unsigned int complete :1;
unsigned int bus_err :1;
unsigned int :7;
unsigned int err_idx :8;
} dma;
struct
{
unsigned int cmd_err :1;
unsigned int ecc_err :1;
unsigned int max_err :8;
unsigned int :1;
unsigned int erased_page :1;
unsigned int dev_err :1;
unsigned int :1;
unsigned int fail :1;
unsigned int complete :1;
unsigned int bus_err :1;
unsigned int :7;
unsigned int err_idx :8;
} pio;
struct
{
unsigned int cmd_err :1;
unsigned int ecc_err :1;
unsigned int max_err :8;
unsigned int :1;
unsigned int erased_page :1;
unsigned int :2;
unsigned int fail :1;
unsigned int complete :1;
unsigned int bus_err :1;
unsigned int :15;
} gen;
};
} nfc_status_field_t;
//tbl 2.8
typedef union
{
unsigned int u[1];
struct
{
unsigned int increment :1;
unsigned int greater :1;
unsigned int valid :1;
unsigned int :13;
unsigned int end_val :8;
unsigned int start_val :8;
};
} nfc_sync_arg_field_t;
//tbl 2.3
typedef union
{
unsigned int u[14];
struct
{
unsigned int next_ptr;
unsigned int :32;
union
{
nfc_flash_ptr_field_t flash_ptr;
unsigned int copyback_src_addr;
};
unsigned int :32;
unsigned int cmd_type; //only low 16bits used
nfc_cmd_flags_field_t cmd_flags;
union
{
unsigned int mem_ptr;
unsigned int copyback_dst_addr;
};
unsigned int :32;
nfc_status_field_t status;
unsigned int :32;
unsigned int sync_flag_ptr;
unsigned int :32;
nfc_sync_arg_field_t sync_args;
unsigned int :32;
};
} nfc_cmd_desc_t;
#endif