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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pcan_fifo.c

?? CAN 驅(qū)動編程
?? C
字號:
//****************************************************************************// Copyright (C) 2001,2002,2003  PEAK System-Technik GmbH//// linux@peak-system.com// www.peak-system.com//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.//// Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)//****************************************************************************//****************************************************************************//// pcan_fifo.c - manages the ringbuffers for read and write data//// $Log: pcan_fifo.c,v $// Revision 1.12  2003/03/02 10:58:07  klaus// merged USB thread into main path//// Revision 1.11  2003/03/02 10:58:07  klaus// merged USB thread into main path//// Revision 1.10.2.7  2003/02/09 13:18:09  klaus// modifications to support linux 2.2.19 kernels//// Revision 1.10.2.6  2003/02/09 13:18:09  klaus// modifications to support linux 2.2.19 kernels//// Revision 1.10.2.5  2003/01/29 20:34:20  klaus// release_20030129_a and release_20030129_u released//// Revision 1.10.2.4  2003/01/29 20:34:20  klaus// release_20030129_a and release_20030129_u released//// Revision 1.10.2.3  2003/01/28 23:28:26  klaus// reorderd pcan_usb.c and pcan_usb_kernel.c, tidied up//// Revision 1.10.2.2  2003/01/08 22:21:48  klaus// fixed version 1.3 problem, write has still a deadlock////****************************************************************************//****************************************************************************// INCLUDES#include <src/pcan_common.h> #include <linux/types.h>#include <linux/errno.h>    // error codes#ifdef LINUX_22#include <asm/system.h>     // cli(), save_flags(), restore_flags()#endif#include <linux/spinlock.h> // <asm/spinlock.h>, where are the diffs?#include <src/pcan_fifo.h> //****************************************************************************// DEFINES//****************************************************************************// GLOBALS//****************************************************************************// LOCALS//****************************************************************************// CODE  int pcan_fifo_reset(register FIFO_MANAGER *anchor){  spin_lock_irqsave(&anchor->lock, anchor->flags);	anchor->dwTotal       = 0; 	anchor->nStored       = 0; 	anchor->r = anchor->w = anchor->bufferBegin; // nothing to read  anchor->bPutClaimed   = 0;  anchor->bGetClaimed   = 0;	spin_unlock_irqrestore(&anchor->lock, anchor->flags);  // DPRINTK(KERN_DEBUG "%s: pcan_fifo_reset() %d %p %p %d\n", DEVICE_NAME, anchor->nStored, anchor->r, anchor->w, anchor->bGetClaimed);  return 0;}int pcan_fifo_init(register FIFO_MANAGER *anchor, void *bufferBegin, void *bufferEnd, int nCount, u16 wCopySize){	anchor->wCopySize   = wCopySize;	anchor->wStepSize   = (bufferBegin == bufferEnd) ? 0 : ((bufferEnd - bufferBegin) / (nCount - 1));	anchor->nCount      = nCount;	anchor->bufferBegin = bufferBegin;	anchor->bufferEnd   = bufferEnd;	anchor->flags       = 0;		// check for fatal program errors	if ((anchor->wStepSize < anchor->wCopySize) || (anchor->bufferBegin > anchor->bufferEnd) || (nCount <= 1))	  return -EINVAL;		spin_lock_init(&anchor->lock);  return pcan_fifo_reset(anchor);}//----------------------------------------------------------------------------// the functiony claim and ..put or ..get are always a timingly narrow related// pair. Never there should be a .._claim_.. without a .._put or .._get! int pcan_fifo_claim_for_put(register FIFO_MANAGER *anchor, void **pvPutData){  int err = 0;    if (anchor->bPutClaimed)    err = EAGAIN;  else  {    spin_lock_irqsave(&anchor->lock, anchor->flags);      if (anchor->nStored < anchor->nCount)    {      anchor->bPutClaimed = 1;      *pvPutData = anchor->w;    }    else    {	    spin_unlock_irqrestore(&anchor->lock, anchor->flags);        *pvPutData = NULL;      err = -ENOSPC;    }  }    return err;}int pcan_fifo_put(register FIFO_MANAGER *anchor){  // DPRINTK(KERN_DEBUG "%s: pcan_fifo_put() %d %p %p %d\n", DEVICE_NAME, anchor->nStored, anchor->r, anchor->w, anchor->bPutClaimed);  if (!anchor->bPutClaimed)    return -EDEADLOCK;  anchor->nStored++;  anchor->dwTotal++;  if (anchor->w < anchor->bufferEnd)    anchor->w += anchor->wStepSize;   // increment to next  else    anchor->w = anchor->bufferBegin;  // start from begin  	anchor->bPutClaimed = 0; 	spin_unlock_irqrestore(&anchor->lock, anchor->flags); 	  return 0;}int pcan_fifo_put_reject(register FIFO_MANAGER *anchor){  // DPRINTK(KERN_DEBUG "%s: pcan_fifo_put_reject() %d %p %p %d\n", DEVICE_NAME, anchor->nStored, anchor->r, anchor->w, anchor->bPutClaimed);  if (!anchor->bPutClaimed)    return -EDEADLOCK;	anchor->bPutClaimed = 0; 	spin_unlock_irqrestore(&anchor->lock, anchor->flags); 	  return 0;}//----------------------------------------------------------------------------// the functiony claim and ..put or ..get are always a timingly narrow related// pair. There should never be a .._claim_.. without a .._put or .._get! int pcan_fifo_claim_for_get(register FIFO_MANAGER *anchor, void **pvGetData){  int err = 0;    if (anchor->bGetClaimed)    err = EAGAIN;  else  {    spin_lock_irqsave(&anchor->lock, anchor->flags);      if (anchor->nStored > 0)    {       anchor->bGetClaimed = 1;       *pvGetData = anchor->r;    }    else    {	    spin_unlock_irqrestore(&anchor->lock, anchor->flags);      *pvGetData = NULL;	    err = -ENODATA;    }  }    return err;}int pcan_fifo_get(register FIFO_MANAGER *anchor){  // DPRINTK(KERN_DEBUG "%s: pcan_fifo_get() %d %p %p %d\n", DEVICE_NAME, anchor->nStored, anchor->r, anchor->w, anchor->bGetClaimed);  if (!anchor->bGetClaimed)    return -EDEADLOCK;      anchor->nStored--;  if (anchor->r < anchor->bufferEnd)    anchor->r += anchor->wStepSize;  // increment to next     else    anchor->r = anchor->bufferBegin; // start from begin  	anchor->bGetClaimed = 0; 	spin_unlock_irqrestore(&anchor->lock, anchor->flags);	  return 0;}int pcan_fifo_get_reject(register FIFO_MANAGER *anchor){  // DPRINTK(KERN_DEBUG "%s: pcan_fifo_get_reject() %d %p %p %d\n", DEVICE_NAME, anchor->nStored, anchor->r, anchor->w, anchor->bGetClaimed);  if (!anchor->bGetClaimed)    return -EDEADLOCK;    	anchor->bGetClaimed = 0; 	spin_unlock_irqrestore(&anchor->lock, anchor->flags);	  return 0;}//----------------------------------------------------------------------------// returns the current count of elements in fifoint pcan_fifo_status(FIFO_MANAGER *anchor){  return anchor->nStored;}//----------------------------------------------------------------------------// returns 0 if the fifo is fullint pcan_fifo_near_full(FIFO_MANAGER *anchor){  return (anchor->nStored < (anchor->nCount - 1));} //----------------------------------------------------------------------------// returns 0 if the fifo is emptyint pcan_fifo_empty(FIFO_MANAGER *anchor){  return anchor->nStored;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级欧美一级| 国产精品久久久一本精品| 国产性做久久久久久| 中文字幕一区av| 日韩电影免费在线观看网站| 成人视屏免费看| 欧美久久婷婷综合色| 中文字幕一区二区三区四区不卡| 日韩国产欧美视频| 91蜜桃视频在线| 久久综合久久鬼色中文字| 亚洲大片精品永久免费| 成人黄色a**站在线观看| 精品av综合导航| 日本视频在线一区| 在线中文字幕一区| 国产精品久久夜| 国产精品亚洲第一区在线暖暖韩国 | 久久综合久色欧美综合狠狠| 亚洲一区二区在线观看视频| 国产精品一区二区在线看| 欧美一级黄色片| 亚洲韩国一区二区三区| 91婷婷韩国欧美一区二区| 国产精品亲子乱子伦xxxx裸| 视频精品一区二区| 亚洲一区二区三区中文字幕| 性做久久久久久免费观看欧美| 欧美最猛黑人xxxxx猛交| 午夜精品一区在线观看| 日韩欧美激情在线| jizz一区二区| 丝袜国产日韩另类美女| www成人在线观看| va亚洲va日韩不卡在线观看| 首页欧美精品中文字幕| 国产亚洲va综合人人澡精品| 欧美中文字幕久久| 精品一区二区三区在线观看 | 99vv1com这只有精品| 日韩电影网1区2区| 国产精品无遮挡| 欧美久久一二区| 欧美国产日产图区| 国产精品自在在线| 一区二区三区蜜桃| 精品国产一区久久| 91同城在线观看| 麻豆精品视频在线观看免费| 国产精品传媒视频| 欧美成人精品3d动漫h| 在线视频欧美精品| 国产福利精品导航| 亚洲va国产天堂va久久en| 国产午夜久久久久| 91精品国产综合久久久久久漫画| 成人永久免费视频| 美日韩黄色大片| 亚洲一区二区视频在线| 中文字幕国产一区二区| 91精品国产91久久久久久一区二区| thepron国产精品| 国产精品影视在线观看| 美女在线观看视频一区二区| 亚洲图片欧美综合| 亚洲男人电影天堂| 欧美国产视频在线| 精品噜噜噜噜久久久久久久久试看 | 视频一区二区国产| 樱花草国产18久久久久| 欧美激情在线免费观看| 精品久久人人做人人爰| 欧美电影一区二区| 欧美日韩视频在线一区二区| 91性感美女视频| 国产成人免费在线视频| 久久99国产乱子伦精品免费| 亚洲成年人影院| 亚洲小少妇裸体bbw| **性色生活片久久毛片| 国产女主播在线一区二区| 久久久久亚洲蜜桃| 精品国产三级电影在线观看| 91精品国产品国语在线不卡| 欧美日韩国产精品自在自线| 91久久奴性调教| 在线视频一区二区三| 在线国产亚洲欧美| 欧美在线一二三| 色狠狠综合天天综合综合| 91网站在线播放| 色欧美片视频在线观看| 91国偷自产一区二区开放时间| 99国产精品视频免费观看| www.欧美日韩国产在线| av在线综合网| 91日韩在线专区| 欧洲一区二区三区免费视频| 日本道精品一区二区三区| 色婷婷久久久亚洲一区二区三区 | 国产精品88av| 国产成人丝袜美腿| 国产91精品久久久久久久网曝门| 国产91丝袜在线播放九色| 成人av在线资源| 一本久久a久久免费精品不卡| 一本一本大道香蕉久在线精品| 91免费版在线看| 欧美视频三区在线播放| 91精品中文字幕一区二区三区| 日韩一级完整毛片| 久久久www成人免费无遮挡大片| 久久精品人人做人人爽人人| 国产精品久久午夜| 亚洲图片欧美色图| 黑人精品欧美一区二区蜜桃| 福利一区在线观看| 91国偷自产一区二区开放时间| 在线播放中文一区| 久久久亚洲欧洲日产国码αv| 日韩理论片中文av| 香蕉成人伊视频在线观看| 九九视频精品免费| 99久久婷婷国产综合精品| 精品视频免费在线| 久久综合九色综合久久久精品综合| 国产精品家庭影院| 亚洲va欧美va天堂v国产综合| 久久99国产乱子伦精品免费| 99re这里只有精品视频首页| 3d动漫精品啪啪一区二区竹菊| 久久众筹精品私拍模特| 亚洲精品国产成人久久av盗摄| 日本不卡视频在线观看| 成人久久18免费网站麻豆| 欧美日韩在线直播| 欧美激情中文不卡| 日韩高清一区在线| 99久久精品免费精品国产| 日韩一级片在线播放| 日韩毛片精品高清免费| 国内久久精品视频| 欧美性猛交一区二区三区精品| 亚洲精品在线三区| 亚洲风情在线资源站| 成人av在线资源网站| 日韩欧美国产一区二区在线播放| 日韩毛片一二三区| 国产一区二区三区免费播放| 欧美视频在线一区| 国产女人aaa级久久久级| 日韩电影免费一区| 日本高清免费不卡视频| 欧美激情综合五月色丁香小说| 日本中文一区二区三区| 在线视频观看一区| 国产精品不卡在线观看| 国产中文字幕一区| 91精品中文字幕一区二区三区| 亚洲精品五月天| 成人在线视频首页| 久久久久久一二三区| 日韩成人av影视| 色成人在线视频| 日韩一区在线播放| 成人免费看的视频| 国产亚洲综合在线| 日韩电影在线免费| 欧美老女人第四色| 亚洲国产三级在线| 91福利视频久久久久| 国产精品高潮呻吟久久| 成人亚洲精品久久久久软件| 精品久久人人做人人爰| 久久精品国产亚洲高清剧情介绍 | 国产精品麻豆久久久| 国产一区二区在线观看免费| 欧美一级生活片| 蜜臀久久99精品久久久久久9 | 久热成人在线视频| 欧美男女性生活在线直播观看| 一区二区三区四区五区视频在线观看 | 成人性生交大片免费看中文| 久久久久久久免费视频了| 老司机午夜精品99久久| 91精品国产综合久久香蕉的特点| 肉丝袜脚交视频一区二区| 欧美日韩免费一区二区三区| 亚洲国产成人高清精品| 欧洲亚洲精品在线| 亚洲va在线va天堂| 欧美一二三四在线| 久久成人久久爱| 久久久久久99久久久精品网站| 国产中文字幕一区| 国产精品麻豆欧美日韩ww| 97久久精品人人做人人爽| 亚洲人成精品久久久久久| 91日韩一区二区三区| 亚洲国产精品嫩草影院|