亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? diti.c

?? 這是單板上DPRAM的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
            /*---------------------------------------------------------*/
            if (sm_p(chancfg->wra_id, SM_WAIT, FOREVER))
                {
                parms->err = TERM_SEM;
                return;
                }

            chancfg->dflags |= WAITING;
            SerialSend((Lid)chancfg->lid, echo_mblk);
            if(sm_p(chancfg->txc_id, SM_WAIT, FOREVER))
                {

                /*-----------------------------------------------------*/
                /* semaphore failed clean up and return.               */
                /*-----------------------------------------------------*/
                chancfg->dflags &= ~WAITING;
                parms->err = TERM_SEM;
                parms->out_retval = conio->length - length;

                /*-----------------------------------------------------*/
                /* Restore echo mblock pointer so it can be reused.    */
                /*-----------------------------------------------------*/
                echo_mblk->b_rptr = chancfg->echo_rwprt;
                echo_mblk->b_wptr = chancfg->echo_rwprt;

                /*-----------------------------------------------------*/
                /* Free the message block if it is empty.              */
                /*-----------------------------------------------------*/
                if(mblk->b_rptr >= mblk->b_wptr)
                    {
                    gs_freemsg(mblk);
                    chancfg->rdmblk = 0;
                    SerialIoctl((Lid)chancfg->lid, SIOCREPLENISH, (void *)0);
                    }

                /*-----------------------------------------------------*/
                /* Free the semaphores which control the device.       */
                /*-----------------------------------------------------*/
                sm_v(chancfg->rda_id);
                sm_v(chancfg->wra_id);
                return;
                }

            chancfg->dflags &= ~WAITING;

            /*---------------------------------------------------------*/
            /* Free write semphore so others can write.                */
            /*---------------------------------------------------------*/
            sm_v(chancfg->wra_id);

            /*---------------------------------------------------------*/
            /* Restore echo mblock pointer so it can be reused.        */
            /*---------------------------------------------------------*/
            echo_mblk->b_rptr = chancfg->echo_rwprt;
            echo_mblk->b_wptr = chancfg->echo_rwprt;
            }

        /*-------------------------------------------------------------*/
        /* Update the user buffer/canonical queue with character       */
	/* received.                                                   */
	/*-------------------------------------------------------------*/
	*buffp++ = character;
        characters_received++;
        if ((chancfg->termio.c_lflag & ICANON) &&
            (characters_received >= 128))
            {
            can_mblk->b_wptr = buffp;
            msg[0] = (unsigned long)can_mblk;
            msg[1] = 0;
            error = q_send(chancfg->can_id, msg);
            if (error != 0)
               {
               parms->err = error;
               sm_v(chancfg->rda_id);
               return;
               }
            can_mblk = gs_allocb((int)128, 0);
            if (can_mblk == NULL)
               {
               parms->err = TERM_NBUFF;
               sm_v(chancfg->rda_id);
               return;
               }
            buffp = can_mblk->b_wptr;
            characters_received = 0;
            }

       if (!(chancfg->termio.c_lflag & ICANON))
          length--;

        /*-------------------------------------------------------------*/
        /* Check for end of record if in canonical mode.               */
        /* If end of record is reached, copy the characters from       */
        /* canonical queue to user buffer and return.                  */
        /*-------------------------------------------------------------*/
        if ((chancfg->termio.c_lflag & ICANON) &&
            ((character == chancfg->termio.c_cc[VEOL]) ||
             (character == chancfg->termio.c_cc[VEOF])))
            {
            if(mblk->b_rptr >= mblk->b_wptr)
                {
                gs_freemsg(mblk);
                chancfg->rdmblk = 0;
                SerialIoctl((Lid)chancfg->lid, SIOCREPLENISH, (void *)0);
                }
            
            if (characters_received > 0)
                {
                can_mblk->b_wptr = buffp;
                msg[0] = (unsigned long)can_mblk;
                msg[1] = 0;
                error = q_send(chancfg->can_id, msg);
                if (error != 0)
                   {
                   parms->err = error;
                   sm_v(chancfg->rda_id);
                   return;
                   }
                }
 
            error = q_receive(chancfg->can_id, Q_NOWAIT, 0, msg);
            if (error != 0)
                {
                parms->err = error;
                parms->out_retval = conio->length - length;
                sm_v(chancfg->rda_id);
                return;
                }
            else
                {
                length = conio->length;
                buffp = conio->buffp;
                mblk = (mblk_t *)msg[0];
                while (length) 
                   {
                   *buffp++ = *mblk->b_rptr++;
                   length--;
                   if (mblk->b_rptr >= mblk->b_wptr)
                       {
                       gs_freemsg(mblk);
                       if (length) 
                          {
                          if (q_receive(chancfg->can_id, Q_NOWAIT, 0, msg) == 0)
                              mblk = (mblk_t *)msg[0];
                          else
                              break;
                          }
                       }
                    } /* while */
                if ((mblk->b_rptr < mblk->b_wptr) && 
                    ((*mblk->b_rptr == chancfg->termio.c_cc[VEOL]) ||
                    (*mblk->b_rptr == chancfg->termio.c_cc[VEOF])))
                    mblk->b_rptr++;

                if (mblk->b_rptr < mblk->b_wptr)
                    chancfg->cnmblk = mblk;
                else
                    chancfg->cnmblk = 0;
 
                parms->out_retval = conio->length - length;
                sm_v(chancfg->rda_id);
                return;
                }
             }
        } /* end while(mblk->b_rptr < mblk->b_wptr) */

    /*-----------------------------------------------------------------*/
    /* Free the message block if it is empty.                          */
    /*-----------------------------------------------------------------*/
    if(mblk->b_rptr >= mblk->b_wptr)
        {
        gs_freemsg(mblk);
        chancfg->rdmblk = 0;
        SerialIoctl((Lid)chancfg->lid, SIOCREPLENISH, (void *)0);

        /*-------------------------------------------------------------*/
        /* Since this is the end of the mblk buffer status should be   */
        /* check for terminating condition. If a break was received or */
        /* a delimiter was found or carrier was dropped then terminate */
        /* this read.                                                  */
        /*-------------------------------------------------------------*/
        if(b_flags & SIOCBREAKR)
            {
            parms->err = TERM_BRKINT;
            parms->out_retval = conio->length - length;

            /*---------------------------------------------------------*/
            /* Free the semaphore which controls access to the device. */
            /*---------------------------------------------------------*/
            sm_v(chancfg->rda_id);

            return;
            }
        else if(b_flags & SIOCCONTROL)
            {

            /*---------------------------------------------------------*/
            /* Free the semaphore which controls access to the device. */
            /*---------------------------------------------------------*/
            if (sm_v(chancfg->rda_id))
                {
                parms->err = TERM_SEM;
                }

            parms->out_retval = conio->length - length;
            return;
            }
        else if(b_flags & SIOCCDLOST)
            {
            parms->err = TERM_DCDINT;
            parms->out_retval = conio->length - length;

            /*---------------------------------------------------------*/
            /* Free the semaphore which controls access to the device. */
            /*---------------------------------------------------------*/
            sm_v(chancfg->rda_id);

            return;
            }
        }

    /*-----------------------------------------------------------------*/
    /* Now test for the non canonical mode case where VMIN and VTIME   */
    /* are set. For this mode VTIME is a inter character timer once    */
    /* the first character has been received.                          */
    /*-----------------------------------------------------------------*/
    if (!(chancfg->termio.c_lflag & ICANON) &&
        (chancfg->termio.c_cc[VMIN] &&
        chancfg->termio.c_cc[VTIME] &&
        start_ticks && characters_received > 1))
        {
        /*-------------------------------------------------------------*/
        /* Get current ticks for timed input.                          */
        /*-------------------------------------------------------------*/
        if(tm_get(&date, &time, &ticks))

            /*---------------------------------------------------------*/
            /* If call fails break out to return.                      */
            /*---------------------------------------------------------*/
            break;

        else if (ticks - start_ticks >= vtime)
            /*---------------------------------------------------------*/
            /* Time expired between characters.                        */
            /*---------------------------------------------------------*/
            break;

        else if (characters_received >= chancfg->termio.c_cc[VMIN])
            /*---------------------------------------------------------*/
            /* Got VMIN characters break to return.                    */
            /*---------------------------------------------------------*/
            break;
        }

    /*-----------------------------------------------------------------*/
    /* Now test for the non canonical mode case where VMIN only        */
    /* is set.  For this mode we will not return to the call until     */
    /* VMIN characters have been received.                             */
    /*-----------------------------------------------------------------*/
    else if (!(chancfg->termio.c_lflag & ICANON) &&
        (chancfg->termio.c_cc[VMIN] &&
        characters_received >= chancfg->termio.c_cc[VMIN]))
        break;
    } /* end of while(1) */

/*-----------------------------------------------------------------*/
/* Free the semaphore which controls access to the device.         */
/*-----------------------------------------------------------------*/
if (sm_v(chancfg->rda_id))
    {
    parms->err = TERM_SEM;
    }
parms->out_retval = conio->length - length;
}

/***********************************************************************/
/* TermWrite: write to the minor device.                               */
/*                                                                     */
/*      INPUTS: struct ioparms                                         */
/*              ioparms->in_iopb    points to a TermIO type            */
/*              ioparms->in_dev     device number                      */
/*              TermIO->buffp        points to buffer to write         */
/*              TermIO->length       length of buffer                  */
/*                                                                     */
/*     OUTPUTS: ioparms->out_retval number of characters written       */
/*              ioparms->err        error code or 0 if OK              */
/*              ioparms->used       1                                  */
/*                                                                     */
/*     RETURNS:                                                        */
/*              TERM_NINIT driver not initialized

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91高清视频免费看| 国产成人综合亚洲网站| 欧美在线不卡一区| 亚洲欧美日韩人成在线播放| 成人综合婷婷国产精品久久蜜臀 | 日本一区二区三区久久久久久久久不| 蜜臀精品久久久久久蜜臀| 日韩一区二区电影| 国产精品自在在线| 综合婷婷亚洲小说| 欧美综合一区二区三区| 男男gaygay亚洲| 国产欧美一二三区| 欧美系列日韩一区| 久久 天天综合| 欧美国产亚洲另类动漫| 91美女片黄在线| 人人超碰91尤物精品国产| 久久久欧美精品sm网站| 91污片在线观看| 天天射综合影视| 久久综合九色综合97_久久久| 大胆欧美人体老妇| 日日欢夜夜爽一区| 国产亚洲自拍一区| 在线免费观看日韩欧美| 久久99精品国产麻豆婷婷洗澡| 日本一二三四高清不卡| 欧美日韩免费电影| 国产精品18久久久久久久久| 亚洲综合网站在线观看| 精品久久久久久久久久久久久久久久久 | 91香蕉视频mp4| 日韩av电影一区| 国产精品久久久久久久浪潮网站| 欧美军同video69gay| 成人永久aaa| 久久成人羞羞网站| 亚洲国产一区二区a毛片| 国产亚洲成年网址在线观看| 欧美精品日日鲁夜夜添| heyzo一本久久综合| 奇米在线7777在线精品 | 首页亚洲欧美制服丝腿| 国产亚洲欧美中文| 日韩欧美成人一区| 欧洲一区二区三区免费视频| 国产精品一区二区三区四区| 秋霞国产午夜精品免费视频| 亚洲免费av网站| 国产日产欧美一区| 日韩欧美亚洲另类制服综合在线| 在线看国产一区| 91麻豆精品在线观看| 国产传媒日韩欧美成人| 国产资源在线一区| 日本在线播放一区二区三区| 亚洲尤物在线视频观看| 亚洲人成网站精品片在线观看| 国产日产欧美一区| 国产午夜精品一区二区三区嫩草| 欧美一区二区三区四区在线观看 | 成人午夜视频在线观看| 狠狠色综合日日| 久久精品国产一区二区| 视频在线在亚洲| 亚洲高清免费观看高清完整版在线观看| 欧美国产日韩一二三区| 精品国精品国产| 日韩亚洲欧美在线观看| 欧美一区二区女人| 日韩一区二区在线免费观看| 欧美精品久久天天躁| 欧美精品1区2区3区| 欧美顶级少妇做爰| 欧美一级免费大片| 日韩欧美国产高清| 欧美岛国在线观看| 精品久久久久久最新网址| 精品久久久久久综合日本欧美 | 91精品国模一区二区三区| 在线一区二区三区四区五区| 在线观看av一区| 欧美日韩一区二区三区四区五区| 色婷婷久久综合| 欧美性大战久久久久久久蜜臀| 日本高清无吗v一区| 欧美日韩一区二区三区在线看| 欧美日韩三级在线| 日韩一区二区三| 久久久久久久久久电影| 中文字幕免费不卡| 一级女性全黄久久生活片免费| 亚洲午夜久久久久| 日本vs亚洲vs韩国一区三区二区| 久久国产人妖系列| 盗摄精品av一区二区三区| 色诱视频网站一区| 91精品一区二区三区在线观看| 日韩午夜激情av| 国产三级精品三级| 亚洲欧美日韩在线播放| 午夜精品久久久久久久99樱桃| 日本成人在线一区| 国产成人av电影在线播放| 91在线观看免费视频| 欧美日韩大陆在线| 精品国产乱码久久久久久免费 | 欧美唯美清纯偷拍| 在线电影一区二区三区| 久久综合色天天久久综合图片| 国产精品久久久久国产精品日日| 亚洲第一综合色| 精品一区二区av| 91免费视频网| 日韩午夜精品电影| 亚洲人一二三区| 精品一区二区三区欧美| av在线播放成人| 日韩欧美专区在线| 亚洲欧洲精品一区二区精品久久久| 亚洲国产精品自拍| 丁香六月久久综合狠狠色| 欧美精品 日韩| 国产精品久久久久久久蜜臀| 三级在线观看一区二区| 成人av电影观看| 精品免费国产二区三区| 洋洋av久久久久久久一区| 国产美女精品在线| 欧美精品v国产精品v日韩精品| 亚洲欧洲精品一区二区三区不卡| 青椒成人免费视频| 91国偷自产一区二区使用方法| 久久久精品国产99久久精品芒果| 亚洲国产精品一区二区久久| 不卡一区中文字幕| 欧美成人福利视频| 亚洲123区在线观看| 成人av网址在线观看| 久久综合色8888| 久久精品免费观看| 欧美日韩精品欧美日韩精品| 中文字幕亚洲一区二区va在线| 激情文学综合网| 欧美精品久久99| 亚洲成人中文在线| 色综合天天综合网天天看片| 欧美国产欧美综合| 黄色资源网久久资源365| 91精品免费在线观看| 亚洲最大的成人av| 色天使色偷偷av一区二区| 亚洲国产高清aⅴ视频| 国产毛片一区二区| 日韩精品一区二区三区在线 | 在线观看www91| 亚洲六月丁香色婷婷综合久久| 成人一区二区视频| 久久中文字幕电影| 国产一区二区三区免费观看| 日韩一区二区三区电影在线观看 | 懂色av一区二区三区免费观看 | 国产精品久久久久久妇女6080| 国产九色sp调教91| 国产亚洲欧美中文| 高清视频一区二区| 国产精品久久久一本精品 | 久久99日本精品| 精品少妇一区二区| 久久超碰97中文字幕| 精品电影一区二区| 国产老妇另类xxxxx| 久久综合999| 成人午夜又粗又硬又大| 国产精品不卡在线观看| 99re视频精品| 亚洲综合免费观看高清在线观看 | 欧美日韩国产影片| 亚洲h动漫在线| 日韩一区二区在线观看视频播放| 青草国产精品久久久久久| 日韩精品一区二区在线观看| 国产在线精品免费av| 国产欧美精品国产国产专区| youjizz国产精品| 亚洲午夜在线电影| 在线综合亚洲欧美在线视频| 韩国欧美国产一区| 日韩一区有码在线| 欧美精品欧美精品系列| 国产麻豆精品久久一二三| 亚洲国产精品ⅴa在线观看| 色中色一区二区| 蜜臀va亚洲va欧美va天堂| 国产视频一区二区在线观看| 91无套直看片红桃| 日韩电影在线观看一区| 久久久精品tv| 欧美日韩一区小说|