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

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

?? spacewire.c

?? RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
?? C
?? 第 1 頁 / 共 2 頁
字號:
}rtems_device_driver spacewire_console_control(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg){  rtems_libio_ioctl_args_t	*ioarg = (rtems_libio_ioctl_args_t *)arg;  SPACEWIRE_DBGC(DBGSPW_IOCALLS,"ctrl [%i,%i]\n",major, minor);    if (!ioarg)    return RTEMS_INVALID_ADDRESS;  switch(ioarg->command) {  case SPACEWIRE_IOCTRL_SET_NODEADDR:    SPACEWIRE_DBGC(DBGSPW_IOCTRL,"SPACEWIRE_IOCTRL_SET_NODEADDR %i\n",          ioarg->buffer);    SPW_PARAM(minor).nodeaddr = (unsigned int) ioarg->buffer;    /*set node address*/    SPW_WRITE(&SPW_REG(minor,nodeaddr),SPW_PARAM(minor).nodeaddr);    break;  case SPACEWIRE_IOCTRL_SET_PROTOCOL:    SPACEWIRE_DBGC(DBGSPW_IOCTRL,"SPACEWIRE_IOCTRL_SET_PROTOCOL %i\n",      ioarg->buffer);    SPW_PARAM(minor).proto = (unsigned int)  ioarg->buffer;    break;  case SPACEWIRE_IOCTRL_SET_DESTNODEADDR:    SPACEWIRE_DBGC(DBGSPW_IOCTRL,"SPACEWIRE_IOCTRL_SET_DESTNODEADDR %i\n",      ioarg->buffer);    SPW_PARAM(minor).destnodeaddr = (unsigned int) ioarg->buffer;    break;  case SPACEWIRE_IOCTRL_GET_COREBASEADDR:    SPACEWIRE_DBGC(DBGSPW_IOCTRL,"SPACEWIRE_IOCTRL_GET_BASEADDR=%i\n",      (unsigned int)SPW_PARAM(minor).regs);    *(unsigned int *)ioarg->buffer = (unsigned int )SPW_PARAM(minor).regs;    break;  case SPACEWIRE_IOCTRL_GET_COREIRQ:    SPACEWIRE_DBGC(DBGSPW_IOCTRL,"SPACEWIRE_IOCTRL_GET_COREIRQ=%i\n",      (unsigned int)SPW_PARAM(minor).irq);    *(unsigned int *)ioarg->buffer = (unsigned int )SPW_PARAM(minor).irq;    break;#ifdef SPW_BUFMALLOC  case SPACEWIRE_IOCTRL_SET_PACKETSIZE:    {      spw_ioctl_packetsize *ps = (spw_ioctl_packetsize*)ioarg->buffer;      SPACEWIRE_DBGC(DBGSPW_IOCTRL,"SPACEWIRE_IOCTRL_SET_RXPACKETSIZE \n",          ioarg->buffer);      spacewire_hw_stop(minor);      SPW_PARAM(minor).rxbufsize = ps->rxsize;      SPW_PARAM(minor).txbufsize = ps->txsize;      SPW_PARAM(minor).rxmaxlen = SPW_PARAM(minor).rxbufsize;      spacewire_buffer_alloc(minor);      spacewire_hw_startup(minor);    }    break;#endif  case SPACEWIRE_IOCTRL_GETPACKET: {      spw_ioctl_packet *p = (spw_ioctl_packet*)ioarg->buffer;      p->ret_size = spacewire_hw_receive(minor,p->buf,p->buf_size);    }    break;  case SPACEWIRE_IOCTRL_PUTPACKET:{      spw_ioctl_packet *p = (spw_ioctl_packet*)ioarg->buffer;      spacewire_hw_send(minor,p->buf,p->buf_size);    }    break;  default:    return RTEMS_NOT_DEFINED;  }  return RTEMS_SUCCESSFUL;}/* ========================================================================== */int spacewire_set_rxmaxlen(int minor) {  unsigned int rxmax;  /*set rx maxlength*/  SPW_WRITE(&SPW_REG(minor,dma0rxmax),SPW_PARAM(minor).rxmaxlen);  rxmax = SPW_READ(&SPW_REG(minor,dma0rxmax));  if (rxmax != SPW_PARAM(minor).rxmaxlen) {    printf("spacewire: error initializing rx max len (0x%x, read: 0x%x)\n",        SPW_PARAM(minor).rxmaxlen,rxmax);    return 0;  }  return 1;}int spacewire_hw_init(int minor) {  unsigned int dma0ctrl;  int ctrl = SPW_CTRL_READ(minor);  SPW_PARAM(minor).rx = (SPACEWIRE_RXBD *)    SPW_ALIGN(&SPW_PARAM(minor)._rxtable,SPACEWIRE_BDTABLE_SIZE);  SPW_PARAM(minor).tx = (SPACEWIRE_TXBD *)    SPW_ALIGN(&SPW_PARAM(minor)._txtable,SPACEWIRE_BDTABLE_SIZE);    SPACEWIRE_DBG("hw_init [minor %i]\n", minor);  SPW_PARAM(minor).is_rmap = ctrl & SPACEWIRE_CTRL_RA;  SPW_PARAM(minor).is_rxunaligned = ctrl & SPACEWIRE_CTRL_RX;  SPW_PARAM(minor).is_rmapcrc = ctrl & SPACEWIRE_CTRL_RC;    /*set node address*/  SPW_WRITE(&SPW_REG(minor,nodeaddr),SPW_PARAM(minor).nodeaddr);    /*set clock divisor*/  SPW_WRITE(&SPW_REG(minor,clockdiv),SPW_PARAM(minor).clkdiv);  if (SPW_PARAM(minor).is_rmap) {    SPW_WRITE(&SPW_REG(minor,destkey),SPW_PARAM(minor).destkey);    }  SPW_WRITE(    &SPW_REG(minor,dma0ctrl),    /*clear status, set ctrl for dma chan*/    SPACEWIRE_DMACTRL_PS|SPACEWIRE_DMACTRL_PR|      SPACEWIRE_DMACTRL_TA|SPACEWIRE_DMACTRL_RA  );  if ((dma0ctrl = SPW_READ(&SPW_REG(minor,dma0ctrl))) != 0) {    printf("spacewire: error initializing dma ctrl (0x%x)\n",dma0ctrl);  }    SPW_CTRL_WRITE(minor, SPACEWIRE_CTRL_RESET ); /*set ctrl*/  SPW_CTRL_WRITE(minor,     SPACEWIRE_CTRL_LINKSTART | (SPW_PARAM(minor).maxfreq << 5)); /*set ctrl*/  return 0;}void spacewire_hw_waitlink (int minor) {  int j;  while (SPW_LINKSTATE(SPW_STATUS_READ(minor)) != 5) {    rtems_task_wake_after(100);    sched_yield();    printf("timeout loop dev %i\n",minor);    j++;  }}int spacewire_hw_startup (int minor) {  int i,j;  unsigned int dmactrl;  SPW_STATUS_WRITE(minor,0xFF); /*clear status*/  SPW_CTRL_WRITE(minor, SPACEWIRE_CTRL_RESET ); /*set ctrl*/  SPW_CTRL_WRITE(minor,     SPACEWIRE_CTRL_LINKSTART | (SPW_PARAM(minor).maxfreq << 5)); /*set ctrl*/  sched_yield();  j = 0; i = 0;  spacewire_hw_waitlink(minor);    /* prepare transmit buffers */  for (i = 0; i < SPW_PARAM(minor).txbufcnt;i++) {    if (i+1 == SPW_PARAM(minor).txbufcnt) {      SPW_PARAM(minor).tx[i].ctrl = 0|SPACEWIRE_TXBD_WR;    } else {      SPW_PARAM(minor).tx[i].ctrl = 0;    }    SPW_PARAM(minor).tx[i].addr_data =     ((unsigned int)&SPW_PARAM(minor).ptr_txbuf0[0]) +         (i * SPW_PARAM(minor).txbufsize);  }  SPW_PARAM(minor).txcur = 0;    /* prepare receive buffers */  for (i = 0; i < SPW_PARAM(minor).rxbufcnt;i++) {    if (i+1 == SPW_PARAM(minor).rxbufcnt) {      SPW_PARAM(minor).rx[i].ctrl = SPACEWIRE_RXBD_EN|SPACEWIRE_RXBD_WR;    } else {      SPW_PARAM(minor).rx[i].ctrl = SPACEWIRE_RXBD_EN;    }    SPW_PARAM(minor).rx[i].addr =       ((unsigned int)&SPW_PARAM(minor).ptr_rxbuf0[0]) +       (i * SPW_PARAM(minor).rxbufsize);  }  SPW_PARAM(minor).rxcur = 0;  SPW_PARAM(minor).rxbufcur = -1;  spacewire_set_rxmaxlen(minor);    SPW_WRITE(&SPW_REG(minor,dma0txdesc),(unsigned int)SPW_PARAM(minor).tx);   SPW_WRITE(&SPW_REG(minor,dma0rxdesc),(unsigned int)SPW_PARAM(minor).rx);     /* start RX */  dmactrl = SPW_READ(&SPW_REG(minor,dma0ctrl));  SPW_WRITE(&SPW_REG(minor,dma0ctrl),	    (dmactrl & SPACEWIRE_PREPAREMASK_RX) |               SPACEWIRE_DMACTRL_RD | SPACEWIRE_DMACTRL_RXEN);  SPACEWIRE_DBGC(DBGSPW_TX,"0x%x: setup complete\n",SPW_PARAM(minor).regs);  return RTEMS_SUCCESSFUL;}int spacewire_hw_stop (int minor) {  unsigned int dmactrl;    /* stop RX */  dmactrl = SPW_READ(&SPW_REG(minor,dma0ctrl));  SPW_WRITE(&SPW_REG(minor,dma0ctrl),	    (dmactrl & SPACEWIRE_PREPAREMASK_RX) &               ~(SPACEWIRE_DMACTRL_RD |SPACEWIRE_DMACTRL_RXEN));  /* stop link */  SPW_CTRL_WRITE(minor,      (SPW_CTRL_READ(minor) & 0x3FD) | SPACEWIRE_CTRL_LINKDISABLE);    return RTEMS_SUCCESSFUL;}void spacewire_hw_send(int minor,unsigned char *b,int c) {  unsigned int dmactrl, ctrl;  unsigned int cur = SPW_PARAM(minor).txcur;  char *txb = SPW_PARAM(minor).ptr_txbuf0 + (cur * SPW_PARAM(minor).txbufsize);  sched_yield();  memcpy(&txb[2],b,c);    txb[0] = SPW_PARAM(minor).destnodeaddr;  txb[1] = SPW_PARAM(minor).proto;#ifdef DEBUG_SPACEWIRE_ONOFF    if (DEBUG_SPACEWIRE_FLAGS & DBGSPW_DUMP) {    int k;    for (k = 0;k < c+2;k++){      if (k % 16 == 0) {	printf ("\n");      }      printf ("%.2x(%c) ",txb[k] & 0xff,        isprint(txb[k] & 0xff) ? txb[k] & 0xff : ' ');    }    printf ("\n");  }#endif    do {    SPW_PARAM(minor).tx[0].addr_header = 0;    SPW_PARAM(minor).tx[0].len = c+2;    SPW_PARAM(minor).tx[0].addr_data = (unsigned int)txb;    SPW_PARAM(minor).tx[0].ctrl = SPACEWIRE_TXBD_WR|SPACEWIRE_TXBD_EN;        dmactrl = SPW_READ(&SPW_REG(minor,dma0ctrl));    SPW_WRITE(&SPW_REG(minor,dma0ctrl),	      (dmactrl & SPACEWIRE_PREPAREMASK_TX) | SPACEWIRE_DMACTRL_TXEN);        while((ctrl = SPW_READ((volatile void *)&SPW_PARAM(minor).tx[0].ctrl)) &               SPACEWIRE_TXBD_EN) {      sched_yield();    }    if (ctrl & SPACEWIRE_TXBD_LE) {      printf("tx error: SPACEWIRE_TXBD_LE, link error\n");    }  } while(ctrl & SPACEWIRE_TXBD_ERROR);    SPACEWIRE_DBGC(DBGSPW_TX,"0x%x: transmitted <%i> bytes\n",    SPW_PARAM(minor).regs,c+2);}int spacewire_hw_receive(int minor,unsigned char *b,int c) {  unsigned int count = 0, len, rxlen, ctrl;  unsigned int cur = SPW_PARAM(minor).rxcur;  char *rxb = SPW_PARAM(minor).ptr_rxbuf0 + (cur * SPW_PARAM(minor).rxbufsize);  SPACEWIRE_DBGC(DBGSPW_RX,"0x%x: waitin packet at pos %i\n",    SPW_PARAM(minor).regs,cur);    sched_yield();    while(1) {    ctrl = SPW_READ((volatile void *)&SPW_PARAM(minor).rx[cur].ctrl);    if (!(ctrl & SPACEWIRE_RXBD_EN)) {      break;    }    if (SPW_LINKSTATE(SPW_STATUS_READ(minor)) != 5) {      return 0;    }    sched_yield();  }  SPACEWIRE_DBGC(DBGSPW_RX,"checking packet\n",0);    len = SPACEWIRE_RXBD_LENGTH(ctrl);  if (!(ctrl & (SPACEWIRE_RXBD_ERROR & ~SPACEWIRE_RXBD_RMAPERROR))) {      if (SPW_PARAM(minor).rxbufcur == -1) {      SPACEWIRE_DBGC(DBGSPW_RX,"incoming packet len %i\n",len);      SPW_PARAM(minor).rxbufcur = 2;    }    rxlen = len - SPW_PARAM(minor).rxbufcur;    if (rxlen > c) {      rxlen = c;    }    memcpy(b,rxb+SPW_PARAM(minor).rxbufcur,rxlen);    count += rxlen;    b += rxlen;    c -= rxlen;    SPW_PARAM(minor).rxbufcur += rxlen;  } else {    if (ctrl & SPACEWIRE_RXBD_EEP) {      printf("rx error: SPACEWIRE_RXBD_EEP, error end of packet\n");    }    if (ctrl & SPACEWIRE_RXBD_EHC) {      printf("rx error: SPACEWIRE_RXBD_EHC, header crc error\n");    }      if (ctrl & SPACEWIRE_RXBD_EDC) {      printf("rx error: SPACEWIRE_RXBD_EDC, crc error\n");    }    if (ctrl & SPACEWIRE_RXBD_ETR) {      printf("rx error: SPACEWIRE_RXBD_ETR, truncated\n");    }  }    if (SPW_PARAM(minor).rxbufcur == len ||      (ctrl & (SPACEWIRE_RXBD_ERROR & ~SPACEWIRE_RXBD_RMAPERROR))) {    spacewire_rxnext(minor);  }  return count;}void spacewire_rxnext(int minor) {    unsigned int dmactrl;  unsigned int cur = SPW_PARAM(minor).rxcur;  unsigned int ctrl = SPW_READ((volatile void *)&SPW_PARAM(minor).rx[cur].ctrl);  int cur2 = cur;  cur++;  if (cur >= SPACEWIRE_RXBUFS_NR) {    cur = 0;    ctrl |= SPACEWIRE_RXBD_WR;  }  SPW_PARAM(minor).rx[cur2].ctrl = ctrl | SPACEWIRE_RXBD_EN;    SPW_PARAM(minor).rxcur = cur;  SPW_PARAM(minor).rxbufcur = -1;    /* start RX */  dmactrl = SPW_READ(&SPW_REG(minor,dma0ctrl));  SPW_WRITE(&SPW_REG(minor,dma0ctrl),	    (dmactrl & SPACEWIRE_PREPAREMASK_RX) | SPACEWIRE_DMACTRL_RD |               SPACEWIRE_DMACTRL_RXEN);  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产凹凸成av人导航| 最近日韩中文字幕| 国产精品久久久久一区| 久久99久久久久| 6080日韩午夜伦伦午夜伦| 亚洲一区视频在线观看视频| 色88888久久久久久影院按摩 | 亚洲影视在线播放| a美女胸又www黄视频久久| 国产日韩欧美一区二区三区综合| 国产精品一区二区三区四区| 久久综合九色综合久久久精品综合| 日韩精品三区四区| 色999日韩国产欧美一区二区| 亚洲国产精品久久一线不卡| 欧美三级电影精品| 亚洲国产精品自拍| 99re视频精品| 亚洲最大的成人av| 欧美特级限制片免费在线观看| 亚洲成人免费在线观看| 99久久国产综合精品麻豆| 亚洲人快播电影网| 91国偷自产一区二区三区观看| 无吗不卡中文字幕| 日韩午夜激情视频| 国产一区二区h| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人欧美一区二区三区小说| 91在线视频免费观看| 中文字幕第一页久久| 成人三级在线视频| 1区2区3区精品视频| 在线成人小视频| 亚洲成人av电影| 日韩欧美国产1| 精品一区二区在线看| 中文字幕一区二区三区四区| 一本久久综合亚洲鲁鲁五月天| 亚洲成人免费影院| 欧美电影在线免费观看| 成人免费高清在线| 亚洲一区二区av电影| 日韩欧美国产高清| 欧美亚洲一区二区三区四区| 久久aⅴ国产欧美74aaa| 国产清纯在线一区二区www| 色婷婷狠狠综合| 美日韩一级片在线观看| 国产精品色呦呦| 欧美视频在线一区二区三区 | 国产综合久久久久久久久久久久| 欧美激情一区二区三区蜜桃视频 | 国产精品99久久久久久似苏梦涵| 亚洲色图欧美激情| 欧美一二三在线| 成人网在线免费视频| 最新国产成人在线观看| 久久蜜臀中文字幕| 欧美午夜一区二区三区免费大片| 韩国一区二区在线观看| 夜夜爽夜夜爽精品视频| 中文字幕一区二区三区视频| 日韩精品一区国产麻豆| 一本大道久久a久久综合| 九色综合国产一区二区三区| 天堂va蜜桃一区二区三区| 成人免费在线观看入口| 欧美电影免费观看高清完整版在| 91久久香蕉国产日韩欧美9色| 成人高清免费在线播放| 激情小说亚洲一区| 日韩高清不卡在线| 一区二区三区中文字幕在线观看| 国产精品素人一区二区| 欧美成人欧美edvon| 欧美精品在线观看一区二区| 91原创在线视频| 亚洲激情网站免费观看| 亚洲日本va午夜在线电影| 久久亚洲综合av| 宅男在线国产精品| 成人app网站| 99久精品国产| 国产不卡一区视频| 寂寞少妇一区二区三区| 偷拍与自拍一区| 天堂va蜜桃一区二区三区| 亚洲人成精品久久久久久| 国产三级久久久| 久久久久久97三级| 久久久久久免费| 日韩精品一区二区三区视频 | 国产综合成人久久大片91| 秋霞午夜av一区二区三区| 亚洲成人在线观看视频| 一区二区三区中文在线观看| 中文字幕中文字幕一区| 国产精品久久久久天堂| 中文字幕一区二区不卡| 国产精品妹子av| 中文字幕不卡一区| 成人免费一区二区三区在线观看| 国产精品伦理在线| 亚洲女同ⅹxx女同tv| 亚欧色一区w666天堂| 美日韩黄色大片| 成人永久aaa| 欧美日韩国产综合一区二区| 26uuu精品一区二区在线观看| 中文字幕永久在线不卡| 日本在线不卡视频| 成人av在线资源网站| 欧美日韩一区二区三区四区| 久久人人97超碰com| 亚洲人被黑人高潮完整版| 蜜桃一区二区三区四区| 9久草视频在线视频精品| 欧美日韩精品欧美日韩精品一综合 | 亚洲欧美综合另类在线卡通| 日韩高清电影一区| 成人福利视频网站| 在线播放中文字幕一区| 亚洲国产精品黑人久久久| 亚洲国产成人精品视频| 日韩黄色片在线观看| 成人高清在线视频| 欧美一激情一区二区三区| 亚洲欧美怡红院| 韩国一区二区在线观看| 欧美中文字幕不卡| 国产精品视频在线看| 日本不卡视频在线| 在线观看91视频| 国产精品久久久久久久久图文区 | 色欲综合视频天天天| 欧美成人aa大片| 亚洲一区二区三区四区中文字幕| 激情文学综合网| 51精品秘密在线观看| 亚洲欧美综合网| 国产成人aaaa| 精品国产乱码久久久久久蜜臀| 亚洲在线观看免费| 国产高清精品久久久久| 日韩视频免费观看高清完整版在线观看| 国产精品久久久久久亚洲伦 | 成人高清在线视频| 久久久噜噜噜久久中文字幕色伊伊 | 久久综合久久99| 琪琪久久久久日韩精品| 欧美午夜理伦三级在线观看| 蜜臀va亚洲va欧美va天堂| www.亚洲人| 久久久久99精品一区| 免费精品99久久国产综合精品| 日本乱码高清不卡字幕| 亚洲欧美在线视频观看| 不卡的av中国片| 国产欧美久久久精品影院| 久久国产麻豆精品| 欧美一区二区视频免费观看| 婷婷成人激情在线网| 欧美日韩一区小说| 亚洲成av人**亚洲成av**| 欧美私模裸体表演在线观看| 夜夜嗨av一区二区三区中文字幕 | 亚洲人成在线播放网站岛国| 成人av影院在线| 国产欧美一区二区精品忘忧草| 国产一区二区电影| 久久精品无码一区二区三区| 国产一区二区三区四区五区美女| 欧美岛国在线观看| 精品一区二区日韩| 亚洲精品一区二区三区精华液 | 亚洲一区日韩精品中文字幕| 欧美视频在线观看一区二区| 亚洲成人动漫在线观看| 91麻豆精品久久久久蜜臀| 日本成人在线网站| 精品久久久影院| 国产盗摄精品一区二区三区在线 | 国产精品888| 国产精品网站在线| 91久久国产综合久久| 亚洲成人免费在线观看| 日韩欧美国产高清| 高清成人免费视频| 国产精品国产三级国产有无不卡 | 天天爽夜夜爽夜夜爽精品视频 | 日韩一级精品视频在线观看| 久久99精品国产麻豆婷婷| xnxx国产精品| 91美女在线观看| 日韩av午夜在线观看| 久久人人超碰精品| 色综合天天综合色综合av| 亚洲一区二区欧美日韩|