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

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

?? diti.c

?? 這是單板上DPRAM的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
    cleanup(chancfg);
    return;
    }

StringCopy(sema4_name, IOCTL_NAME);
sema4_name[3] = minor + '0';
if (error = sm_create(sema4_name, 0, SM_FIFO,
    &chancfg->ctl_id))
    {
    parms->err = TERM_SEM;
    parms->out_retval = error;
    cleanup(chancfg);
    return;
    }

chancfg->dflags |= OPENED;

/*---------------------------------------------------------------------*/
/* Get a mblock to use for echo and delete.                            */
/*---------------------------------------------------------------------*/
if(!(chancfg->echo_mblk = gs_allocb(3, 0)))
    {
    parms->err = TERM_NBUFF;
    cleanup(chancfg);
    return;
    }
chancfg->echo_rwprt = chancfg->echo_mblk->b_rptr;

/*---------------------------------------------------------------------*/
/* Set channel active RTS CTS                                          */
/*---------------------------------------------------------------------*/
p = doctl((Lid )chancfg->lid, SIOCSACTIVATE, (void *)0, parms);
if((p != SIOCOK) && (parms->err == SIOCCFGNOTSUPPORTED))
    parms->err = SIOCOK;
else
    {

/*---------------------------------------------------------------------*/
/* Wait for cd                                                         */
/*---------------------------------------------------------------------*/
    if(sm_p(chancfg->ctl_id, SM_WAIT, FOREVER))
        {
        parms->err = TERM_SEM;
        cleanup(chancfg);
        gs_freemsg(chancfg->echo_mblk);
        chancfg->dflags &= ~OPENED;
        return;
        }
    }
chancfg->dflags |= CONNECTED;
}

/***********************************************************************/
/* TermRead: Read from a channel                                       */
/*                                                                     */
/*      INPUTS: struct ioparms                                         */
/*              ioparms->in_iopb    points to a TermIO type            */
/*              ioparms->in_dev     device number                      */
/*              TermIO->buffp        points to buffer to read into     */
/*              TermIO->length       length of buffer                  */
/*                                                                     */
/*     OUTPUTS: ioparms->out_retval number of characters read          */
/*              ioparms->err        error code or 0 if OK              */
/*              ioparms->used       1                                  */
/*                                                                     */
/*     RETURNS:                                                        */
/*              TERM_NINIT driver not initialized                      */
/*              TERM_NOPEN minor device has not been opened            */
/*              TERM_MINOR Invalid minor device                        */
/*              TERM_BRKINT Terminated by a break character            */
/*              TERM_DCDINT Terminated by loss of DCD                  */
/*              TERM_RXERR data receive error                          */
/*              TERM_SEM Semaphore error                               */
/*              TERM_QUE que error                                     */
/*              TERM_ROPER redirect operation error                    */
/*                                                                     */
/***********************************************************************/
void TermRead (struct ioparms *parms)
{
ChanCfg *chancfg;
TermIO *conio = (TermIO *) parms->in_iopb;
mblk_t *mblk, *echo_mblk, *can_mblk=NULL;
                       /* =NULL, -- chg by szg for restraining warning*/
unsigned short minor;
unsigned long b_flags, wait, length, msg[4], error, timeout_ticks;
unsigned char *buffp, character;
unsigned short    c_iflag, c_oflag;
static unsigned long read_access_tid;
unsigned long ret;
unsigned long oldprio, imask;
unsigned long date, time, ticks, start_ticks, vtime;
int characters_received;

/*---------------------------------------------------------------------*/
/* Set elements of the ioparms structure to their default values.      */
/* used - will tell pSOS we're using stack interface                   */
/* out_retval - is used to pass additional error information to the    */
/*              user.                                                  */
/* err - will contain an error code (0 for success)                    */
/*---------------------------------------------------------------------*/
parms->used = 1;
parms->out_retval = 0;
parms->err = 0;

/*---------------------------------------------------------------------*/
/* Check to see if the driver has been initiatized.                    */
/*---------------------------------------------------------------------*/
if (!Term_Init_Done)
    {
    parms->err = TERM_NINIT;
    return;
    }

/*---------------------------------------------------------------------*/
/* Check to see if the minor device ic in range.                       */
/*---------------------------------------------------------------------*/
if((minor = MINOR(parms->in_dev)) > BSP_SERIAL)
    {
    parms->err = TERM_MINOR;
    return;
    }

/*---------------------------------------------------------------------*/
/* Check to see if the minor device is 0 (default console). If so      */
/* set the minor device to the actual channel being used as the        */
/* system console.                                                     */
/*---------------------------------------------------------------------*/
if(minor == 0)
    minor = SysConsole;

chancfg = &DChanCfg[minor];

/*---------------------------------------------------------------------*/
/* Check to see if minor device has been opened.                       */
/*---------------------------------------------------------------------*/
if(!(chancfg->dflags & OPENED))
    {
    parms->err = TERM_NOPEN;
    return;
    }

/*---------------------------------------------------------------------*/
/* If count is zero return now on error                                */
/*---------------------------------------------------------------------*/
if (!(length = conio->length))
    return;

/*---------------------------------------------------------------------*/
/* Get the semaphore which controls access to the device.              */
/* To avoid the problem of a task being deleted while in this section  */
/* of code and no other task being able to get in after that the       */
/* semaphore is programmed to time out. At each time out a check       */
/* will be made to see if the task that currently has this section     */
/* of code is still alive. If it is not, sm_v will be called to clean  */
/* up the semphore.                                                    */
/*---------------------------------------------------------------------*/
while (ret = sm_p(chancfg->rda_id, SM_WAIT,
                  (anchor->psosct->kc_ticks2sec/2)))
    {
    if (ret == ERR_TIMEOUT)
        {
        /*-------------------------------------------------------------*/
        /* Check to see if the task that is currently blocking access  */
        /* is still running.                                           */
        /*-------------------------------------------------------------*/
        if(ret = t_setpri(read_access_tid, 0, &oldprio))
            {
            if(ret == ERR_OBJDEL)
                {
                /*-----------------------------------------------------*/
                /* Task that is blocking access has been deleted.      */
                /* Clean up access semaphore.                          */
                /*-----------------------------------------------------*/
                sm_v(chancfg->rda_id);

                /*-----------------------------------------------------*/
                /* Go back and try again.                              */
                /*-----------------------------------------------------*/
                continue;
                }
            else
                {
                /*-----------------------------------------------------*/
                /* Some other error has happened just return.          */
                /*-----------------------------------------------------*/
                parms->err = TERM_SEM;
                return;
                }
            }
        else
            /*---------------------------------------------------------*/
            /* Valid task still waiting in this section go back and    */
            /* wait some more.                                         */
            /*---------------------------------------------------------*/
            continue;

        }
    else
        {
        parms->err = TERM_SEM;
        return;
        }
    }

/*---------------------------------------------------------------------*/
/* Save off the tasks ID to be used if task is deleted                 */
/*---------------------------------------------------------------------*/
t_ident((char *)0, 0, &read_access_tid);

/*---------------------------------------------------------------------*/
/* Check to see if any current mblk from canonical queue available. If */
/* not, check to see if any mblks available in the canonical queue. If */
/* available, copy the characters from the mblk to user buffer until   */
/* there are any characters in the canonical queue or until the read   */
/* count is satisfied. If no mblk available in the canonical queue,    */
/* proceed on to read mblks from the receive queue, process character  */
/* if needed and then copy to user buffer (if in non canonical mode) or*/
/* to canonical queue (if in canonical mode).                          */
/*---------------------------------------------------------------------*/
mblk = 0;
if (chancfg->cnmblk)
    mblk = chancfg->cnmblk;
else
    if (q_receive(chancfg->can_id, Q_NOWAIT, 0, msg) == 0)
        mblk = (mblk_t *)msg[0];
if (mblk)
    {
    buffp = conio->buffp;
    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;
    }

/*---------------------------------------------------------------------*/
/* Set the characters_received for VMIN VTIME processing               */
/*---------------------------------------------------------------------*/
characters_received = 0;
if (chancfg->termio.c_lflag & ICANON)
   {
   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;
   }
else
   buffp = conio->buffp;

/*---------------------------------------------------------------------*/
/* The following variables are set to make lint not complain.          */
/*---------------------------------------------------------------------*/
timeout_ticks = 0;
start_ticks = 0;
vtime = 0;

/*---------------------------------------------------------------------*/
/* Fill the callers buffer until length is reached or a error is found */
/* or a control character is found.                                    */
/*---------------------------------------------------------------------*/
while(1)
    {
    if (!(chancfg->termio.c_lflag & ICANON) && (length == 0))
       break;
    
    /*-----------------------------------------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久无码国产精品| 欧美精品久久99久久在免费线| 国产呦萝稀缺另类资源| 美女尤物国产一区| 日本亚洲一区二区| 强制捆绑调教一区二区| 蜜臀av性久久久久蜜臀aⅴ| 天天综合网天天综合色| 天堂蜜桃91精品| 男女男精品视频网| 久久精品久久精品| 国产综合色视频| 国产成人无遮挡在线视频| 成人爱爱电影网址| 在线视频中文字幕一区二区| 在线精品亚洲一区二区不卡| 欧美色视频在线| 91精品国产综合久久精品app| 69av一区二区三区| 精品久久久久久综合日本欧美| 久久久久国产精品麻豆| 亚洲国产精品高清| 一级做a爱片久久| 午夜精品久久久久久不卡8050 | 国内精品第一页| 国产91丝袜在线播放九色| 波多野结衣的一区二区三区| 在线亚洲一区观看| 欧美一区二区三区成人| 久久久综合视频| 亚洲欧美视频在线观看视频| 婷婷综合五月天| 国产中文一区二区三区| 91丨九色丨尤物| 欧美精品 国产精品| 国产日韩精品一区二区三区 | 精品一区中文字幕| 成人午夜在线免费| 欧美伊人久久久久久午夜久久久久| 欧美日韩色综合| 久久久青草青青国产亚洲免观| 亚洲天堂a在线| 免费观看在线综合| 91免费看片在线观看| 91麻豆精品国产91久久久久| 日本一区二区三区四区| 午夜精品福利一区二区三区蜜桃| 精油按摩中文字幕久久| 91国偷自产一区二区三区成为亚洲经典 | 国内成人精品2018免费看| 99精品视频一区| 日韩精品一区二区三区老鸭窝| 欧美国产精品一区二区三区| 亚洲bdsm女犯bdsm网站| 丁香啪啪综合成人亚洲小说| 91精品中文字幕一区二区三区| 国产精品视频九色porn| 久久爱www久久做| 欧美三级电影网| 国产精品大尺度| 久久99久久精品| 欧美日产在线观看| 综合欧美一区二区三区| 韩国v欧美v日本v亚洲v| 欧美日韩免费视频| 成人免费在线视频观看| 激情综合色播激情啊| 欧美高清视频www夜色资源网| 国产精品卡一卡二| 久草热8精品视频在线观看| 欧美制服丝袜第一页| 国产精品对白交换视频 | 欧美肥妇bbw| 亚洲精选视频免费看| 国产成人一级电影| 久久综合九色综合97_久久久| 亚洲.国产.中文慕字在线| 色综合一区二区| 欧美国产丝袜视频| 国产成人啪免费观看软件| 欧美电影免费观看高清完整版| 亚洲成人午夜影院| 欧洲人成人精品| 亚洲欧美日韩小说| 99在线精品免费| 国产欧美精品一区aⅴ影院 | 99久久免费精品高清特色大片| 久久一区二区三区国产精品| 蜜臀精品一区二区三区在线观看| 欧美日韩一区不卡| 亚洲一区中文在线| 欧美色网一区二区| 亚洲综合无码一区二区| 色欧美片视频在线观看 | 99精品视频一区二区三区| 国产精品理论片| 成人av在线资源| 国产精品免费aⅴ片在线观看| 国产精品88av| 久久久久久久久伊人| 国模娜娜一区二区三区| 久久久精品国产免大香伊| 国产成人丝袜美腿| 国产精品嫩草99a| 成人av资源下载| 亚洲日本丝袜连裤袜办公室| 色欧美片视频在线观看在线视频| 亚洲精品视频观看| 在线亚洲一区二区| 午夜激情久久久| 日韩一二三四区| 九九**精品视频免费播放| 久久色.com| www.一区二区| 亚洲免费av观看| 欧美日韩精品二区第二页| 日韩影院在线观看| 欧美一卡二卡三卡| 国产在线国偷精品免费看| 日本一区二区动态图| 91麻豆精东视频| 婷婷六月综合网| 欧美成人video| 成人福利视频网站| 一区二区三区高清不卡| 欧美一区二区三区在线观看| 国产一区二区三区在线看麻豆| 国产精品久久久久影院色老大| 色狠狠色狠狠综合| 蜜臀久久99精品久久久久久9| 国产亚洲综合av| 色婷婷综合久久久久中文 | 麻豆精品在线播放| 国产日韩欧美一区二区三区综合| av不卡在线观看| 亚洲国产精品久久艾草纯爱| 欧美成人一区二区三区片免费| 国产成人一区二区精品非洲| 一区二区在线观看免费视频播放| 欧美精品在线观看播放| 国产一区二区不卡在线 | 91老师片黄在线观看| 日一区二区三区| 欧美—级在线免费片| 欧美日韩国产123区| 国产一区 二区 三区一级| 亚洲一区二区三区国产| 精品国产123| 在线精品亚洲一区二区不卡| 国产一区二区电影| 午夜欧美大尺度福利影院在线看| 精品国产乱码久久久久久闺蜜| 一本大道综合伊人精品热热| 久久精品国内一区二区三区| 亚洲精品福利视频网站| 精品久久久网站| 欧美日本国产视频| av电影天堂一区二区在线 | 7777精品伊人久久久大香线蕉的 | 久久精品免费观看| 一区二区三区四区视频精品免费 | 久久精品人人做人人综合 | 色94色欧美sute亚洲线路一ni| 久88久久88久久久| 亚洲影院在线观看| 中文一区二区完整视频在线观看| 制服丝袜中文字幕一区| 91视频国产资源| 国产麻豆精品久久一二三| 日韩二区三区在线观看| 中文字幕乱码亚洲精品一区| 日韩视频在线你懂得| 欧美在线影院一区二区| www.激情成人| 国产综合成人久久大片91| 五月综合激情网| 亚洲一区二区三区四区在线| 国产精品久久久久影视| 精品国产凹凸成av人导航| 欧美精品在线观看播放| 欧美性受xxxx黑人xyx| voyeur盗摄精品| 成人性生交大片免费看视频在线| 久久精品国产亚洲aⅴ| 视频一区二区三区中文字幕| 樱桃国产成人精品视频| 成人欧美一区二区三区白人| 亚洲国产高清在线| 国产欧美一区二区精品婷婷| 日韩免费视频一区二区| 91精品国产综合久久福利软件| 在线观看日韩国产| 在线观看中文字幕不卡| 色综合天天性综合| av资源网一区| av亚洲精华国产精华精| 成人av免费在线观看| 成人黄色在线看| 99久久99久久综合| 色综合久久中文综合久久牛|