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

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

?? sja1000p.c

?? sja1000 peliCAN模式 在linux下面的驅動程序。
?? C
?? 第 1 頁 / 共 2 頁
字號:

  pchip->write_register( DISABLE_INTERRUPTS, 
			 pchip->vbase_addr + SJAIER); //disable interrupts for a moment
  sja1000p_read( pchip );
  pchip->write_register( ENABLE_INTERRUPTS,
			 pchip->vbase_addr + SJAIER); //enable interrupts
  return 1;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_pre_write_config

#define MAX_TRANSMIT_WAIT_LOOPS 200

int sja1000p_pre_write_config( struct chip_t *pchip, struct canmsg_t *pmsg )
{
  int i=0; 
  unsigned int id = 0;

  /* Wait until Transmit Buffer Status is released */
  while ( !( pchip->read_register( pchip->vbase_addr +  SJASR ) & SR_TBS ) && 
	  i++ < MAX_TRANSMIT_WAIT_LOOPS ) {
    udelay (i );
  }
	
  if ( !( pchip->read_register( pchip->vbase_addr +  SJASR) & SR_TBS ) ) {
    CANMSG("Transmit timed out, cancelling\n");
    // here we should check if there is no write/select waiting for this
    // transmit. If so, set error ret and wake up.
    // CHECKME: if we do not disable IER_TIE (TX IRQ) here we get interrupt
    // immediately
    pchip->write_register( CMR_AT, pchip->vbase_addr + SJACMR );
    i=0;
    while ( !( pchip->read_register( pchip->vbase_addr + SJASR ) & SR_TBS) &&
	    i++ < MAX_TRANSMIT_WAIT_LOOPS ) {
      udelay( i );
    }
    if ( !( pchip->read_register( pchip->vbase_addr +  SJASR) & SR_TBS ) ) {
      CANMSG("Could not cancel, please reset\n");
      return -EIO;
    }
  }
  pmsg->length &= FRM_DLC_M;
  pchip->write_register( ( ( pmsg->flags & MSG_EXT )? FRM_FF:0 ) |
		 ( ( pmsg->flags & MSG_RTR ) ? FRM_RTR : 0) |
		 pmsg->length, pchip->vbase_addr + SJAFRM );
  if ( pmsg->flags & MSG_EXT ) {
    id = pmsg->id<<3;
    pchip->write_register( id & 0xff, pchip->vbase_addr + SJAID3 );
    id >>= 8;
    pchip->write_register( id & 0xff, pchip->vbase_addr + SJAID2 );
    id >>= 8;
    pchip->write_register( id & 0xff, pchip->vbase_addr + SJAID1 );
    id >>= 8;
    pchip->write_register( id, pchip->vbase_addr + SJAID0);
    for( i=0; i < pmsg->length; i++) {
      pchip->write_register( pmsg->data[i], pchip->vbase_addr + SJADATE + i );
    }
  } else {
    id = pmsg->id >> 5;
    pchip->write_register( id & 0xff, pchip->vbase_addr + SJAID0 );
    id >>= 8;
    pchip->write_register( id & 0xff, pchip->vbase_addr + SJAID1 );
    for(i=0; i < pmsg->length; i++) {
      pchip->write_register( pmsg->data[ i ], pchip->vbase_addr + SJADATS + i );
    }
  }
  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_send_msg

int sja1000p_send_msg( struct chip_t *pchip, int bRtr )
{
  pchip->write_register( CMR_TR, pchip->vbase_addr + SJACMR );
  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_check_tx_stat

int sja1000p_check_tx_stat( struct chip_t *pchip )
{
  if ( pchip->read_register( pchip->vbase_addr + SJASR ) & SR_TCS)
    return 0;
  else
    return 1;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_set_btregs

int sja1000p_set_btregs( struct chip_t *pchip, 
			 u16 btr0, 
			 u16 btr1)
{
  if ( sja1000p_enable_configuration( pchip ) )
    return -ENODEV;

  pchip->write_register( btr0, pchip->vbase_addr + SJABTR0 );
  pchip->write_register( btr1, pchip->vbase_addr + SJABTR1 );

  sja1000p_disable_configuration(pchip);

  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_start_chip

int sja1000p_start_chip( struct chip_t *pchip )
{
  enum sja1000_PeliCAN_MOD flags;

  flags = pchip->read_register( pchip->vbase_addr + SJAMOD) & 
    (MOD_LOM|MOD_STM|MOD_AFM|MOD_SM);
  pchip->write_register( flags, pchip->vbase_addr + SJAMOD );

  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_stop_chip

int sja1000p_stop_chip( struct chip_t *pchip )
{
  enum sja1000_PeliCAN_MOD flags;

  flags = pchip->read_register( pchip->vbase_addr + SJAMOD) & 
    ( MOD_LOM | MOD_STM | MOD_AFM | MOD_SM );
  pchip->write_register( flags | MOD_RM, pchip->vbase_addr + SJAMOD );

  return 0;
}


///////////////////////////////////////////////////////////////////////////////
// sja1000p_remote_request

int sja1000p_remote_request( struct chip_t *pchip )
{
  CANMSG("sja1000p_remote_request not implemented\n");
  return -ENOSYS;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_standard_mask

int sja1000p_standard_mask( struct chip_t *pchip, 
			    u16 code,
			    u16 mask)
{
  CANMSG("sja1000p_standard_mask not implemented\n");
  return -ENOSYS;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_clear_objects

int sja1000p_clear_objects( struct chip_t *pchip )
{
  CANMSG("sja1000p_clear_objects not implemented\n");
  return -ENOSYS;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_config_irqs

int sja1000p_config_irqs( struct chip_t *pchip, u16 irqs )
{
  CANMSG("sja1000p_config_irqs not implemented\n");
  return -ENOSYS;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_irq_handler

void sja1000p_irq_handler( int irq, void *dev_id, struct pt_regs *regs )
{
  int irq_register;
  struct chip_t *pchip = (struct chip_t *)dev_id;
  //struct canfifo_t *pfifo = pchip->pmsgobj[ 0 ]->pfifo;

  //put_reg = pchip->write_register;
  //get_reg = pchip->read_register;

  irq_register = pchip->read_register( pchip->vbase_addr + SJAIR );

  //	DEBUGMSG( "sja1000_irq_handler: SJAIR:%02x\n",irq_register);
  //	DEBUGMSG( "sja1000_irq_handler: SJASR:%02x\n",
  //		  pchip->read_register( pchip->vbase_addr + SJASR ) );

  if ( ( irq_register & ( IR_BEI|IR_EPI|IR_DOI|IR_EI|IR_TI|IR_RI ) ) == 0 ) {
    return;
  }

  if ( ( irq_register & IR_RI ) != 0 ) {

    sja1000p_read( pchip );
    pchip->rv = 0;

    if ( waitqueue_active( &pchip->fifo.readq ) ) {
      wake_up_interruptible( &pchip->fifo.readq );
    }
  }
  if ( ( irq_register & IR_TI) != 0 ) {
    pchip->rv = 0;
    if ( waitqueue_active( &pchip->fifo.writeq ) ) {
      wake_up_interruptible( &pchip->fifo.writeq );
    }
  }
  if ( ( irq_register & (IR_EI|IR_BEI|IR_EPI|IR_DOI)) != 0 ) { 

    // Some error happened
    CANMSG( "Error: status register: 0x%x irq_register: 0x%02x\n",
	    pchip->read_register( pchip->vbase_addr + SJASR ), irq_register );
    // FIXME: chip should be brought to usable state. 
    // Transmission cancelled if in progress.
    // Reset flag set to 0 if chip is already off the bus. Full state report
    pchip->rv = -1;

    if ( waitqueue_active( &pchip->fifo.writeq ) )
      wake_up_interruptible( &pchip->fifo.writeq );

    if (waitqueue_active( &pchip->fifo.readq ) )
      wake_up_interruptible( &pchip->fifo.readq );
  }

  return;
}

///////////////////////////////////////////////////////////////////////////////
//爏ja1000p_register

int sja1000p_register(struct chip_t *pchip )
{
  CANMSG("initializing sja1000p chip operations\n");
  pchip->chip_config = sja1000p_chip_config;
  pchip->set_baud_rate = sja1000p_baud_rate;
  pchip->set_standard_mask = sja1000p_standard_mask;
  pchip->set_extended_mask = sja1000p_extended_mask;
  pchip->set_message15_mask = sja1000p_extended_mask;
  pchip->clear_objects = sja1000p_clear_objects;
  pchip->config_irqs = sja1000p_config_irqs;
  pchip->pre_read_config = sja1000p_pre_read_config;
  pchip->pre_write_config = sja1000p_pre_write_config;
  pchip->send_msg = sja1000p_send_msg;
  pchip->check_tx_stat = sja1000p_check_tx_stat;
  pchip->remote_request = sja1000p_remote_request;
  pchip->enable_configuration = sja1000p_enable_configuration;
  pchip->disable_configuration = sja1000p_disable_configuration;
  pchip->set_btregs = sja1000p_set_btregs;
  pchip->start_chip = sja1000p_start_chip;
  pchip->stop_chip = sja1000p_stop_chip;
  pchip->irq_handler = sja1000p_irq_handler;

  return 0;
}








?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区二区三区av| 国产成人精品免费| 亚洲精品亚洲人成人网在线播放| 精品国产不卡一区二区三区| 日韩欧美123| 欧美激情一区二区三区全黄| 欧美激情中文字幕一区二区| 中文字幕一区在线观看| 亚洲精品乱码久久久久久| 一区二区三区色| 日韩成人免费电影| 国产白丝精品91爽爽久久| 成人ar影院免费观看视频| 在线看国产日韩| 欧美精品在线一区二区| 精品蜜桃在线看| 中文字幕在线观看一区| 日韩中文字幕1| 波多野结衣中文一区| 欧美日韩国产123区| 久久久www免费人成精品| 中文字幕一区三区| 奇米一区二区三区| 色婷婷国产精品| 日本一区二区不卡视频| 日韩和欧美的一区| 91香蕉视频在线| 国产亚洲自拍一区| 日韩av中文字幕一区二区| 久久精品国产99国产精品| 成人精品视频网站| 欧美一区三区二区| 欧美性做爰猛烈叫床潮| 精品电影一区二区| 日韩电影网1区2区| 欧美在线看片a免费观看| 久久精品一二三| 激情综合色综合久久综合| 欧美日韩mp4| 亚洲成av人片一区二区梦乃| 97aⅴ精品视频一二三区| 亚洲欧洲日本在线| 丰满白嫩尤物一区二区| 欧美激情综合网| 99精品视频一区二区| 国产精品午夜电影| 99久久免费国产| 中文字幕中文字幕在线一区| 成人黄色一级视频| 亚洲欧美日韩系列| 欧美日韩mp4| 老司机精品视频在线| 精品国精品国产| 成人app在线观看| 亚洲午夜久久久久久久久电影网 | 国产成人av一区二区三区在线 | 国产日本欧美一区二区| 国产福利精品导航| 亚洲精选一二三| 4438成人网| caoporn国产精品| 午夜精品福利一区二区蜜股av| 精品免费视频.| 91小宝寻花一区二区三区| 秋霞影院一区二区| 综合婷婷亚洲小说| 精品久久久久久久人人人人传媒| 成人高清免费观看| 日韩中文字幕不卡| 亚洲久草在线视频| 中文字幕不卡在线播放| 日韩一区二区不卡| 国产宾馆实践打屁股91| 亚洲欧美经典视频| 精品国产乱码久久久久久浪潮| 成人黄色软件下载| 久久99精品一区二区三区| 亚洲精品高清在线| 国产精品久久久久一区二区三区| 欧美一级搡bbbb搡bbbb| 欧美在线一二三四区| 色婷婷综合久久| 91网上在线视频| 色综合婷婷久久| 一本大道久久a久久精二百| 99久久综合精品| 波多野结衣精品在线| 国产不卡高清在线观看视频| 久久99久久精品| 国产在线播放一区| 国产综合久久久久影院| 国产精品一区二区三区网站| 国产在线乱码一区二区三区| 裸体一区二区三区| 国产在线看一区| 91老师国产黑色丝袜在线| 国产91丝袜在线18| 色欧美片视频在线观看| 日本丶国产丶欧美色综合| 一本色道亚洲精品aⅴ| 欧亚洲嫩模精品一区三区| 在线精品视频免费播放| 欧美一区二区三区精品| 久久久久一区二区三区四区| 一区二区三区欧美日| 久久精品99久久久| aaa亚洲精品一二三区| 欧美顶级少妇做爰| 久久久国产精品麻豆| 亚洲一级二级在线| 国产精品1区二区.| 欧美肥胖老妇做爰| 欧美国产成人精品| 亚洲成人精品一区二区| www.视频一区| 日韩美女视频一区二区在线观看| 国产精品国产三级国产| 精品一区二区av| 制服丝袜中文字幕亚洲| 亚洲欧洲日韩一区二区三区| 久久精品免费观看| 制服丝袜中文字幕亚洲| 26uuu另类欧美亚洲曰本| 久久综合九色综合欧美亚洲| 亚洲国产欧美日韩另类综合| 粉嫩一区二区三区在线看| 日韩一区二区三区精品视频| 亚洲精选一二三| 欧美亚洲国产一区二区三区va| 国产精品美女久久久久久久网站| 捆绑变态av一区二区三区| 欧美一级黄色录像| 蜜桃视频在线观看一区二区| 欧美精品在线观看播放| 亚洲国产另类av| 欧美揉bbbbb揉bbbbb| 亚洲高清免费观看 | 欧美高清在线视频| 成人蜜臀av电影| 亚洲国产一区二区视频| 在线亚洲免费视频| 天堂蜜桃一区二区三区| 欧美一卡在线观看| 国产99久久久精品| 亚洲尤物视频在线| 51午夜精品国产| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩三级av在线播放| 9久草视频在线视频精品| 亚洲精品乱码久久久久久日本蜜臀| 在线免费观看一区| 久久66热偷产精品| 国产精品情趣视频| 日韩一区二区三区电影在线观看 | 国产日韩亚洲欧美综合| 一本在线高清不卡dvd| 奇米影视一区二区三区小说| 国产精品国模大尺度视频| 91精品午夜视频| 91丨porny丨蝌蚪视频| 国产在线麻豆精品观看| 无码av中文一区二区三区桃花岛| 欧美xxxx老人做受| 欧美性大战久久| 成人黄色一级视频| 精品一区二区三区在线观看| 天天综合网天天综合色| 国产精品视频免费| 国产三级欧美三级| 精品国产乱码久久久久久1区2区 | 99视频国产精品| 日本不卡123| 日韩av一级电影| 奇米影视7777精品一区二区| 亚洲激情校园春色| 中文字幕亚洲一区二区av在线| 日韩精品一区二区三区蜜臀| 在线电影欧美成精品| 欧美日韩一区二区在线视频| 成人av电影在线| av在线播放成人| 欧美亚洲高清一区二区三区不卡| 极品少妇xxxx精品少妇| 日本aⅴ亚洲精品中文乱码| 毛片av一区二区| 国产精品性做久久久久久| 久久99国产精品久久99果冻传媒| 美女www一区二区| 高清国产一区二区| 日本精品视频一区二区三区| 欧美日本一道本| 91精品国产色综合久久不卡蜜臀| 日韩久久久久久| 综合色中文字幕| 日本一道高清亚洲日美韩| 国产一区二三区| 91丨porny丨中文| 欧美成人女星排行榜| 亚洲欧洲无码一区二区三区| 免费的成人av|