⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sci_osi.c

📁 IBM source for pallas/vulcan/vesta
💻 C
📖 第 1 页 / 共 3 页
字号:
                {                    printk("DMA mode is not supported\n");                    //rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;                }            }            else            {                rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;            }            if((p_sci_modes->man_act == 0) || (p_sci_modes->man_act == 1))            {                sci_cb[sci_id].sci_modes.man_act = p_sci_modes->man_act;            }            else            {                rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;            }            if (p_sci_modes->rw_mode < 4)            {                sci_cb[sci_id].sci_modes.rw_mode = p_sci_modes->rw_mode;            }            else            {                rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;            }        }        else        {            rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;        }    }    else    {        rc = SCI_ERROR_DRIVER_NOT_INITIALIZED;    }        if(rc != SCI_ERROR_OK)    {        PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc);    }    PDEBUG("card[%d] exit\n", (UINT) sci_id);    return(rc);}/****************************************************************************** Function:    sci_osi_get_modes**** Purpose:     Retrieve the current Smart Card modes.**** Parameters:  sci_id: zero-based number to identify smart card controller**              sci_get_modes: output pointer to Smart Card modes**** Returns:     SCI_ERROR_OK: if successful**              SCI_ERROR_DRIVER_NOT_INITIALIZED: if no successful call to**                  sci_init() has been made**              SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or**                  p_sci_modes is zero.*****************************************************************************/SCI_ERROR sci_osi_get_modes(ULONG sci_id, SCI_MODES *p_sci_modes){    SCI_ERROR rc = SCI_ERROR_OK;    PDEBUG("card[%d] enter\n", (UINT) sci_id);    if(sci_driver_init == 1)    {        if((p_sci_modes != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS))        {            p_sci_modes->emv2000 = sci_cb[sci_id].sci_modes.emv2000;            p_sci_modes->dma     = sci_cb[sci_id].sci_modes.dma;            p_sci_modes->man_act = sci_cb[sci_id].sci_modes.man_act;            p_sci_modes->rw_mode = sci_cb[sci_id].sci_modes.rw_mode;        }        else        {            rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;        }    }    else    {        rc = SCI_ERROR_DRIVER_NOT_INITIALIZED;    }    if(rc != SCI_ERROR_OK)    {        PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc);    }    PDEBUG("card[%d] exit\n", (UINT) sci_id);    return(rc);}/******************************************************************************* Function:    sci_osi_set_parameters**** Purpose:     Set the current Smart Card parameters. This function calls**              set_parameters(), which is also called internally.**** Parameters:  sci_id: zero-based number to identify smart card controller**              p_sci_parameters: input pointer to Smart Card parameters**** Returns:     SCI_ERROR_OK: if successful**              SCI_ERROR_DRIVER_NOT_INITIALIZED: if no successful call to**                  sci_init() has been made**              SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or**                  p_sci_parameters is zero.**              SCI_ERROR_CARD_NOT_ACTIVATED: if card is not activated*****************************************************************************/SCI_ERROR sci_osi_set_parameters(ULONG sci_id,                                  SCI_PARAMETERS *p_sci_parameters){    SCI_ERROR rc=SCI_ERROR_OK;    PDEBUG("card[%d] enter\n", (UINT) sci_id);    if(sci_driver_init == 1)    {        if((p_sci_parameters != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS))        {            if(sci_osi_is_card_activated(sci_id) == 1)            {                rc = sci_osi_set_para(sci_id, p_sci_parameters);            }            else            {                rc = SCI_ERROR_CARD_NOT_ACTIVATED;            }        }        else        {            rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;        }    }    else    {        rc = SCI_ERROR_DRIVER_NOT_INITIALIZED;    }    if(rc != SCI_ERROR_OK)    {        PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc);    }    PDEBUG("card[%d] exit\n", (UINT) sci_id);    return(rc);}/****************************************************************************** Function:    sci_osi_get_parameters**** Purpose:     Retrieve the current Smart Card parameters.**** Parameters:  sci_id: zero-based number to identify smart card controller**              p_sci_parameters: output pointer to Smart Card parameters**** Returns:     SCI_ERROR_OK: if successful**              SCI_ERROR_DRIVER_NOT_INITIALIZED: if no successful call to**                  sci_init() has been made**              SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or**                  p_sci_parameters is zero.**              SCI_ERROR_CARD_NOT_ACTIVATED: if card is not activated*****************************************************************************/SCI_ERROR sci_osi_get_parameters(ULONG sci_id,                                  SCI_PARAMETERS *p_sci_parameters){    SCI_ERROR rc = SCI_ERROR_OK;    PDEBUG("card[%d] enter\n", (UINT) sci_id);    if(sci_driver_init == 1)    {        if((p_sci_parameters != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS))        {            if(sci_atom_is_HW_activated(sci_id) == 1)            {                p_sci_parameters->T   = sci_cb[sci_id].sci_parameters.T;                p_sci_parameters->f   = sci_cb[sci_id].sci_parameters.f;                p_sci_parameters->ETU = sci_cb[sci_id].sci_parameters.ETU;                p_sci_parameters->WWT = sci_cb[sci_id].sci_parameters.WWT;                p_sci_parameters->CWT = sci_cb[sci_id].sci_parameters.CWT;                p_sci_parameters->BWT = sci_cb[sci_id].sci_parameters.BWT;                p_sci_parameters->EGT = sci_cb[sci_id].sci_parameters.EGT;                p_sci_parameters->clock_stop_polarity =                    sci_cb[sci_id].sci_parameters.clock_stop_polarity;                p_sci_parameters->check =                    sci_cb[sci_id].sci_parameters.check;                p_sci_parameters->P = sci_cb[sci_id].sci_parameters.P;                p_sci_parameters->I = sci_cb[sci_id].sci_parameters.I;                p_sci_parameters->U = sci_cb[sci_id].sci_parameters.U;            }            else            {                rc = SCI_ERROR_CARD_NOT_ACTIVATED;            }        }        else        {            rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE;        }    }    else    {        rc = SCI_ERROR_DRIVER_NOT_INITIALIZED;    }    if(rc != SCI_ERROR_OK)    {        PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc);    }    PDEBUG("card[%d] exit\n", (UINT) sci_id);    return(rc);}/******************************************************************************* Function:    sci_osi_tx_start**** Purpose:     Enter transmit (tx) state.**** Parameters:  sci_id: zero-based number to identify smart card controller**              num_bytes: number of bytes to write from out buffer*****************************************************************************/void sci_osi_tx_start(ULONG sci_id, ULONG num_bytes){    /* initialize control block values */    sci_cb[sci_id].state = SCI_STATE_TX;    sci_cb[sci_id].error = SCI_ERROR_OK;    /* reset pointers to start of buffer */    sci_cb[sci_id].p_read = sci_cb[sci_id].buffer;    sci_cb[sci_id].p_write = sci_cb[sci_id].buffer;    sci_atom_tx_start(sci_id, num_bytes);}/******************************************************************************* Function:    sci_osi_rx_start**** Purpose:     Enter recieve(rx) state.**** Parameters:  sci_id: zero-based number to identify smart card controller*****************************************************************************/void sci_osi_rx_start(ULONG sci_id){    sci_cb[sci_id].state = SCI_STATE_RX;    /* reset pointers to start of buffer */    sci_cb[sci_id].p_read  = sci_cb[sci_id].buffer;    sci_cb[sci_id].p_write = sci_cb[sci_id].buffer;    sci_cb[sci_id].first_rx       = 0;    sci_cb[sci_id].rx_complete    = 0;    sci_cb[sci_id].bytes_expected = -1;    sci_atom_rx_start(sci_id);}/******************************************************************************* Function:    sci_osi_set_para**** Purpose:     Set the current Smart Card parameters.**** Parameters:  sci_id: zero-based number to identify smart card controller**              p_sci_parameters: input pointer to Smart Card parameters**** Returns:     SCI_ERROR_OK: if successful**              SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or**                  p_sci_parameters is zero.*****************************************************************************/SCI_ERROR sci_osi_set_para(ULONG sci_id, SCI_PARAMETERS *p_sci_parameters){    SCI_ERROR rc = SCI_ERROR_OK;    if((p_sci_parameters != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS))    {        rc = sci_osi_set_para_T    (sci_id, p_sci_parameters);        rc = sci_osi_set_para_f    (sci_id, p_sci_parameters);        rc = sci_osi_set_para_ETU  (sci_id, p_sci_parameters);        rc = sci_osi_set_para_WWT  (sci_id, p_sci_parameters);        rc = sci_osi_set_para_CWT  (sci_id, p_sci_parameters);        rc = sci_osi_set_para_BWT  (sci_id, p_sci_parameters);        rc = sci_osi_set_para_EGT  (sci_id, p_sci_parameters);        rc = sci_osi_set_para_CLK_p(sci_id, p_sci_parameters);        rc = sci_osi_set_para_check(sci_id, p_sci_parameters);        rc = sci_osi_set_para_class(sci_id, p_sci_parameters);        /* programming not supported, just set the values */        sci_cb[sci_id].sci_parameters.P = p_sci_parameters->P;        sci_cb[sci_id].sci_parameters.I = p_sci_parameters->I;    }    else    {        rc=SCI_ERROR_PARAMETER_OUT_OF_RANGE;    }    return(rc);}/******************************************************************************* Function:    sci_osi_set_para_T**** Purpose:     Set the current Smart Card parameters of T.**** Parameters:  sci_id: zero-based number to identify smart card controller**              p_sci_parameters: input pointer to Smart Card parameters**** Returns:     SCI_ERROR_OK: if successful**              SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or**                  p_sci_parameters is zero.**************************************************************************/SCI_ERROR sci_osi_set_para_T(ULONG sci_id, SCI_PARAMETERS *p_sci_parameters){    SCI_ERROR rc = SCI_ERROR_OK;    ULONG k_state;    /* set the protocol T=0 or 1 of sci */    if((p_sci_parameters->T == 0) || (p_sci_parameters->T == 1))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -