Esempio n. 1
0
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;

}
Esempio n. 2
0
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                   */

}
Esempio n. 3
0
/******************************************************************************//*<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>*/
Esempio n. 4
0
unsigned int pfgc_dfs_write( unsigned long * dfs_wr_data )
{
    /*------------------------------------------------------------------------*/
    /*                                                                        */
    /*------------------------------------------------------------------------*/
    TCOM_ID         com_acc_id;                   /*                 ID       */
    TCOM_FUNC       com_acc_ret;                  /*                          */
    TCOM_RW_DATA    com_acc_rwdata;               /*                          */
    unsigned int    old_status;                   /* Seal/FAS                 */
    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_WRITE | 0x0000 );

    retval = DFGC_OK;                             /*                          */

    /*------------------------------------------------------------------------*/
    /*                                                                        */
    /*------------------------------------------------------------------------*/
    if( dfs_wr_data == NULL )                     /*     NULL                 */
    {
        MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0001 );
        MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0001 );

        MFGC_SYSERR_DATA_SET(                     /* SYSERR         <PCIO034> */
                    CSYSERR_ALM_RANK_B,                          /* <PCIO034> */
                    DFGC_SYSERR_PARAM_ERR,                       /* <PCIO034> */
                    ( DFGC_DFS_WRITE | 0x0001 ),                 /* <PCIO034> */
                    ( unsigned long )dfs_wr_data,                /* <PCIO034> */
                    syserr_info );                               /* <PCIO034> */
        pfgc_log_syserr( &syserr_info );          /*  V SYSERR      <PCIO034> */

        retval = DFGC_NG;                         /*                          */

    } /* dfs_wr_data == NULL */
    else if( *dfs_wr_data == DFGC_DFS_ON )
    {                                             /*         ON               */
        MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0002 );

                                                  /* FullAccess               */
        retval = pfgc_fw_fullaccessmode_set( &old_status ); /*   N                        */

                                                  /*                 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_WRITE | 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                   */

                                                  /* RESET Cmd                */
            MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, FgicResetCmd );
            com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /*   C */

            mdelay(2000); /*<SABU>*/

                                                  /* IT_ENABLE Cmd            */
            MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, ItEnableCmd );
            com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /*   C */

            mdelay(2000); /*<SABU>*/

                                                  /* Seal Cmd                 */
            MFGC_FGRW_DTSET( com_acc_rwdata, CtrlRegAdr, SealCmd );
            com_acc_ret |= pfgc_fgic_comwrite( com_acc_id, &com_acc_rwdata ); /*   C */

            mdelay( DFGC_WAIT_SEALED );           /* Seal Cmd Wait            */

            if( com_acc_ret != DCOM_OK )
            {                                     /*                   err    */
                MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0004 );
                MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0002 );
                retval = DFGC_NG;
            } /* pcom_acc_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_DFS_WRITE | 0x0005 );
                MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0003 );

                retval = DFGC_NG;

            } /* pcom_acc_close != DCOM_OK */

        } /* pcom_acc_open == DCOM_OK */
        else
        {
            MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0006 );
            MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0004 );

            retval = DFGC_NG;

        } /* pcom_acc_open != DCOM_OK */

    } /* *dfs_wr_data == DFGC_DFS_ON */
    else if( *dfs_wr_data == DFGC_DFS_OFF )
    {                                             /*         OFF              */
        MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0007 );

                                                  /* FullAccess               */
        retval = pfgc_fw_fullaccessmode_set( &old_status ); /*   N                        */

    } /* *dfs_wr_data == DFGC_DFS_OFF */
    else
    {                                             /*                          */
        MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0x0008 );
        MFGC_RDPROC_ERROR( DFGC_DFS_WRITE | 0x0005 );

        retval = DFGC_NG;

    } /* *dfs_wr_data == ??? */

    MFGC_RDPROC_PATH( DFGC_DFS_WRITE | 0xFFFF );

    return retval;                                /* return                   */

}