/******************************************************************************//*<3131157>*/ unsigned int pfgc_fgic_dfread_num( const T_FGC_DF_SUBCLASS * df_subclass , /*<3131157>*/ unsigned char * rw_data, /*<3131157>*/ const unsigned long * rd_tbl, /*<3131157>*/ unsigned char num ) /*<3131157>*/ { /*<3131157>*/ TCOM_ID com_acc_id; /* ID *//*<3131157>*/ TCOM_FUNC com_acc_ret; /* *//*<3131157>*/ TCOM_RW_DATA com_acc_rwdata; /* *//*<3131157>*/ unsigned long accs_option; /* *//*<3131157>*/ unsigned char df_blockcmd[3]; /* DataFlash BlockCTRLCmd *//*<3131157>*/ unsigned int retval; /* *//*<3131157>*/ #ifndef DVDV_FGC_I2C_RATE_CONST /* *//*<3131157>*/ unsigned long rate; /* I2C Rate *//*<3131157>*/ #endif /* DVDV_FGC_I2C_RATE_CONST */ /*<3131157>*/ /*<3131157>*/ MFGC_RDPROC_PATH( DFGC_FGIC_DFREAD | 0x0000 ); /*<3131157>*/ /*<3131157>*/ retval = DFGC_OK; /* *//*<3131157>*/ /*<3131157>*/ /* I2C open *//*<3131157>*/ /*<PCIO034> com_acc_ret = pcom_acc_open( DCOM_DEV_DEVICE4, &com_acc_id, NULL );*//* C *//*<3131157>*/ com_acc_ret = pfgc_fgic_comopen( &com_acc_id ); /* C <PCIO034> */ /*<3131157>*/ if( com_acc_ret == DCOM_OK ) /* open *//*<3131157>*/ { /*<3131157>*/ MFGC_RDPROC_PATH( DFGC_FGIC_DFREAD | 0x0001 ); /*<3131157>*/ /*<3131157>*/ #ifndef DVDV_FGC_I2C_RATE_CONST /* *//*<3131157>*/ rate = DCOM_RATE400K; /* RATE 400K *//*<3131157>*/ com_acc_ret = pcom_acc_ioctl( com_acc_id, DCOM_DEV_DEVICE4, DCOM_IOCTL_RATE, &rate ); /* C *//*<3131157>*/ #endif /* DVDV_FGC_I2C_RATE_CONST */ /*<3131157>*/ /*<3131157>*/ com_acc_rwdata.size = 1; /* *//*<3131157>*/ accs_option = DCOM_ACCESS_MODE1; /* *//*<3131157>*/ com_acc_rwdata.option = &accs_option ;/* Normal *//*<3131157>*/ /*<3131157>*/ df_blockcmd[0] = 0x00; /* BlockCTRL 1byte *//*<3131157>*/ df_blockcmd[1] = df_subclass->subclass; /* SubClass_ID *//*<3131157>*/ df_blockcmd[2] = df_subclass->block; /* Block# *//*<3131157>*/ /*<3131157>*/ /* BlockCTRL *//*<3131157>*/ MFGC_FGRW_DTSET( com_acc_rwdata, DFBlkCtrlAdr, df_blockcmd ); /*<3131157>*/ com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C *//*<3131157>*/ /*<3131157>*/ /* BlockData Read *//*<3131157>*/ com_acc_rwdata.offset = ( unsigned long * )rd_tbl; /*<3131157>*/ com_acc_rwdata.data = ( void * )rw_data; /*<3131157>*/ com_acc_rwdata.number = num; /*<3131157>*/ com_acc_rwdata.option = NULL; /*<QAIO026> option */ com_acc_ret |= pfgc_fgic_comread( com_acc_id, &com_acc_rwdata );/* C*/ /*<3131157>*/ /*<3131157>*/ if( com_acc_ret != DCOM_OK ) /*<3131157>*/ { /* *//*<3131157>*/ MFGC_RDPROC_PATH( DFGC_FGIC_DFREAD | 0x0002 ); /*<3131157>*/ MFGC_RDPROC_ERROR( DFGC_FGIC_DFREAD | 0x0001 ); /*<3131157>*/ /*<3131157>*/ retval |= DFGC_NG; /* NG *//*<3131157>*/ /*<3131157>*/ } /* pcom_acc_read/write != DCOM_OK */ /*<3131157>*/ /*<3131157>*/ /* close *//*<3131157>*/ com_acc_ret = pcom_acc_close( com_acc_id ); /* C */ /*<3131157>*/ /*<3131157>*/ if( com_acc_ret != DCOM_OK ) /*<3131157>*/ { /* close *//*<3131157>*/ MFGC_RDPROC_PATH( DFGC_FGIC_DFREAD | 0x0003 ); /*<3131157>*/ MFGC_RDPROC_ERROR( DFGC_FGIC_DFREAD | 0x0002 ); /*<3131157>*/ /*<3131157>*/ retval |= DFGC_NG; /* NG *//*<3131157>*/ /*<3131157>*/ } /* pcom_acc_close != DCOM_OK */ /*<3131157>*/ /*<3131157>*/ } /* pcom_acc_open == DCOM_OK */ /*<3131157>*/ else /*<3131157>*/ { /* open *//*<3131157>*/ MFGC_RDPROC_PATH( DFGC_FGIC_DFREAD | 0x0004 ); /*<3131157>*/ MFGC_RDPROC_ERROR( DFGC_FGIC_DFREAD | 0x0003 ); /*<3131157>*/ /*<3131157>*/ retval |= DFGC_NG; /* NG *//*<3131157>*/ /*<3131157>*/ } /* pcom_acc_open != DCOM_OK */ /*<3131157>*/ /*<3131157>*/ MFGC_RDPROC_PATH( DFGC_FGIC_DFREAD | 0xFFFF ); /*<3131157>*/ /*<3131157>*/ return retval; /*<3131157>*/ /*<3131157>*/ } /*<3131157>*/
unsigned int pfgc_fgic_dfwrite( const T_FGC_DF_SUBCLASS * df_subclass , unsigned char * rw_data ) { TCOM_ID com_acc_id; /* ID */ TCOM_FUNC com_acc_ret; /* */ TCOM_RW_DATA com_acc_rwdata; /* */ unsigned long accs_option; /* */ unsigned char df_blockcmd[3]; /* DataFlash BlockCTRLCmd */ unsigned long df_writeadr[1]; /* DataFlash Write */ unsigned char df_data_old[1]; /* Write */ unsigned char df_data_new[1]; /* Write */ unsigned char df_checksum_old[1]; /* Write */ unsigned char df_checksum_new[1]; /* Write */ unsigned int retval; /* */ unsigned int old_status; /* Seal/FAS */ #ifndef DVDV_FGC_I2C_RATE_CONST /* */ unsigned long rate; /* I2C Rate */ #endif /* DVDV_FGC_I2C_RATE_CONST */ MFGC_RDPROC_PATH( DFGC_FGIC_DFWRITE | 0x0000 ); retval = DFGC_OK; /* */ /* FullAccessMode */ /* Sealed Write */ retval |= pfgc_fw_fullaccessmode_set( &old_status ); /* N */ /* I2C open */ /*<PCIO034> com_acc_ret = pcom_acc_open( DCOM_DEV_DEVICE4, &com_acc_id, NULL ); *//* C */ com_acc_ret = pfgc_fgic_comopen( &com_acc_id ); /* C <PCIO034> */ if( com_acc_ret == DCOM_OK ) /* open */ { MFGC_RDPROC_PATH( DFGC_FGIC_DFWRITE | 0x0001 ); #ifndef DVDV_FGC_I2C_RATE_CONST /* */ rate = DCOM_RATE400K; /* RATE 400K */ com_acc_ret = pcom_acc_ioctl( com_acc_id, DCOM_DEV_DEVICE4, DCOM_IOCTL_RATE, &rate ); /* C */ #endif /* DVDV_FGC_I2C_RATE_CONST */ com_acc_rwdata.size = 1; /* */ accs_option = DCOM_ACCESS_MODE1; /* */ com_acc_rwdata.option = &accs_option ;/* Normal */ df_blockcmd[0] = 0x00; /* BlockCTRL 1byte */ df_blockcmd[1] = df_subclass->subclass; /* SubClass_ID */ df_blockcmd[2] = df_subclass->block; /* Block# */ /* BlockCTRL */ MFGC_FGRW_DTSET( com_acc_rwdata, DFBlkCtrlAdr, df_blockcmd ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ com_acc_rwdata.option = NULL; /*<QAIO026> option */ /* Read */ MFGC_FGRW_DTSET( com_acc_rwdata, DFBlkSumAdr, df_checksum_old ); com_acc_ret |= pfgc_fgic_comread( com_acc_id, &com_acc_rwdata ); /* C */ /* Write BlockData# */ df_writeadr[0] = ( unsigned long )df_subclass->block_data; /* Write Read */ MFGC_FGRW_DTSET( com_acc_rwdata, df_writeadr, df_data_old ); com_acc_ret |= pfgc_fgic_comread( com_acc_id, &com_acc_rwdata ); /* C */ df_data_new[0] = *rw_data; /* Write */ com_acc_rwdata.option = &accs_option; /*<QAIO026> option */ /* Write */ MFGC_FGRW_DTSET( com_acc_rwdata, df_writeadr, df_data_new ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ /* Write */ df_checksum_new[0] = ( unsigned char )( ( unsigned short )0x100 + ( unsigned short )df_checksum_old[0] + ( unsigned short )df_data_old[0] - ( unsigned short )*rw_data ); /* Write */ MFGC_FGRW_DTSET( com_acc_rwdata, DFBlkSumAdr, df_checksum_new ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ if( com_acc_ret != DCOM_OK ) { /* NG */ MFGC_RDPROC_PATH( DFGC_FGIC_DFWRITE | 0x0002 ); MFGC_RDPROC_ERROR( DFGC_FGIC_DFWRITE | 0x0001 ); retval |= DFGC_NG; /* NG */ } /* pcom_acc_read/write != DCOM_OK */ /* close */ com_acc_ret = pcom_acc_close( com_acc_id ); /* C */ if( com_acc_ret != DCOM_OK ) { /* close */ MFGC_RDPROC_PATH( DFGC_FGIC_DFWRITE | 0x0003 ); MFGC_RDPROC_ERROR( DFGC_FGIC_DFWRITE | 0x0002 ); retval |= DFGC_NG; } /* pcom_acc_close != DCOM_OK */ } /* pcom_acc_open == DCOM_OK */ else { /* open */ MFGC_RDPROC_PATH( DFGC_FGIC_DFWRITE | 0x0004 ); MFGC_RDPROC_ERROR( DFGC_FGIC_DFWRITE | 0x0003 ); retval |= DFGC_NG; /* NG */ } /* pcom_acc_open != DCOM_OK */ /* FullAccessMode */ /* Sealed Read */ retval |= pfgc_fw_fullaccessmode_rev( &old_status ); /* N */ MFGC_RDPROC_PATH( DFGC_FGIC_DFWRITE | 0xFFFF ); return retval; }
unsigned int pfgc_dfs_read( unsigned short * dfs_rd_data ) { /*------------------------------------------------------------------------*/ /* */ /*------------------------------------------------------------------------*/ TCOM_ID com_acc_id; /* ID */ TCOM_FUNC com_acc_ret; /* */ TCOM_RW_DATA com_acc_rwdata; /* */ unsigned char read_reg[2]; /* */ unsigned int retval; /* */ unsigned long accs_option; /* I2C */ unsigned long rate; /* I2C Rate */ T_FGC_SYSERR_DATA syserr_info; /* SYSERR <PCIO034> */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0000 ); retval = DFGC_OK; /* */ if( dfs_rd_data == NULL ) /* NULL */ { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0001 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0001 ); MFGC_SYSERR_DATA_SET( /* SYSERR <PCIO034> */ CSYSERR_ALM_RANK_B, /* <PCIO034> */ DFGC_SYSERR_PARAM_ERR, /* <PCIO034> */ ( DFGC_DFS_READ | 0x0001 ), /* <PCIO034> */ ( unsigned long )dfs_rd_data, /* <PCIO034> */ syserr_info ); /* <PCIO034> */ pfgc_log_syserr( &syserr_info ); /* V SYSERR <PCIO034> */ retval = DFGC_NG; /* */ } /* dfs_rd_data == NULL */ else { /* NULL */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0002 ); /* open */ /*<PCIO034> com_acc_ret = pcom_acc_open( DCOM_DEV_DEVICE4, &com_acc_id, NULL ); *//* C */ com_acc_ret = pfgc_fgic_comopen( &com_acc_id ); /* C <PCIO034> */ if( com_acc_ret == DCOM_OK ) /* open */ { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0003 ); rate = DCOM_RATE400K; /* RATE 400K */ com_acc_ret = pcom_acc_ioctl( com_acc_id, DCOM_DEV_DEVICE4, DCOM_IOCTL_RATE, &rate ); /* C */ com_acc_rwdata.size = 1; /* */ accs_option = DCOM_ACCESS_MODE1 | DCOM_SEQUENTIAL_ADDR; com_acc_rwdata.option = &accs_option; /* Normal */ /* CTRL_STATUS Cmd */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, CtrlStsCmd ); com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /* C */ mdelay(1); /*<SABU>*/ read_reg[0] = 0xFF; read_reg[1] = 0xFF; com_acc_rwdata.option = NULL; /*<QAIO026> option */ /* Control() Read */ MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, read_reg ); com_acc_ret |= pfgc_fgic_comread( com_acc_id, &com_acc_rwdata ); /* C */ if( com_acc_ret == DCOM_OK ) { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0004 ); /* Read */ *dfs_rd_data = ( unsigned short )( ( unsigned )( read_reg[1] << 8 ) | read_reg[0] ); } /* pcom_acc_write/read == DCOM_OK */ else { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0005 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0002 ); retval = DFGC_NG; } /* pcom_acc_write/read != DCOM_OK */ /* close */ com_acc_ret = pcom_acc_close( com_acc_id ); /* C */ if( com_acc_ret != DCOM_OK ) { /* close */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0006 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0003 ); retval = DFGC_NG; } /* pcom_acc_close != DCOM_NG */ } /* pcom_acc_open == DCOM_OK */ else { MFGC_RDPROC_PATH( DFGC_DFS_READ | 0x0007 ); MFGC_RDPROC_ERROR( DFGC_DFS_READ | 0x0004 ); retval = DFGC_NG; } /* pcom_acc_open == DCOM_NG */ } /* dfs_rd_data != NULL */ MFGC_RDPROC_PATH( DFGC_DFS_READ | 0xFFFF ); return retval; /* return */ }