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

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

?? spacewire.c

?? RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  This file contains the TTY driver for the spacewire port on the LEON. * *  This driver uses the termios pseudo driver. * *  COPYRIGHT (c) 1989-1998. *  On-Line Applications Research Corporation (OAR). * *  Modified for LEON3 BSP. *  COPYRIGHT (c) 2005. *  Gaisler Research. * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  spacewire.c,v 1.1.2.1 2005/11/02 19:25:59 jiri Exp */#include <bsp.h>#include <rtems/libio.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <assert.h>#include <sched.h>#include <ctype.h>#include <rtems/bspIo.h>#define DBGSPW_IOCALLS 1#define DBGSPW_TX 2#define DBGSPW_RX 4#define DBGSPW_IOCTRL 8#define DBGSPW_DUMP 16#define DEBUG_SPACEWIRE_FLAGS -1/*#define DEBUG_SPACEWIRE_ONOFF*/ #ifdef DEBUG_SPACEWIRE_ONOFFint DEBUG_printf(const char *fmt, ...);#define SPACEWIRE_DBG(fmt, args...) \  do { \   { printf(" : %03d @ %18s()]:" fmt , __LINE__,__FUNCTION__,## args); } \  } while(0)#define SPACEWIRE_DBG2(fmt) \ do { \   { printf(" : %03d @ %18s()]:" fmt , __LINE__,__FUNCTION__); } \ } while(0)#define SPACEWIRE_DBGC(c,fmt, args...) \  do { \    if (DEBUG_SPACEWIRE_FLAGS&c) { \      printf(" : %03d @ %18s()]:" fmt , __LINE__,__FUNCTION__,## args); \    } \  } while(0)#else#define SPACEWIRE_DBG(fmt, args...)#define SPACEWIRE_DBG2(fmt, args...)#define SPACEWIRE_DBGC(fmt, args...)#endifint spacewire_hw_init(int minor);void spacewire_hw_send(int minor,unsigned char *b,int c);int spacewire_hw_receive(int minor,unsigned char *b,int c);int spacewire_hw_startup (int minor);int spacewire_hw_stop (int minor);void spacewire_hw_waitlink (int minor);void spacewire_rxnext(int minor);int _SPW_READ(void *addr) {        int tmp;                asm(" lda [%1]1, %0 "            : "=r"(tmp)            : "r"(addr)           );        return tmp;}rtems_device_driver spacewire_console_initialize(  rtems_device_major_number  major,  rtems_device_minor_number  minor,  void                      *arg);rtems_device_driver spacewire_console_open(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg);rtems_device_driver spacewire_console_close(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg);rtems_device_driver spacewire_console_read(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg);rtems_device_driver spacewire_console_write(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg);rtems_device_driver spacewire_console_control(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg);#define SPWCEWIRE_CONSOLE_DRIVER_TABLE_ENTRY \  { spacewire_console_initialize, spacewire_console_open, \    spacewire_console_close, spacewire_console_read, \    spacewire_console_write, spacewire_console_control }static rtems_driver_address_table   spacewire_driver = SPWCEWIRE_CONSOLE_DRIVER_TABLE_ENTRY;void spacewire_register() {  rtems_status_code r;  rtems_device_major_number m;  SPACEWIRE_DBG2("register driver\n");  if ((r = rtems_io_register_driver(				    0,				    &spacewire_driver,				    &m)) == RTEMS_SUCCESSFUL) {    SPACEWIRE_DBG2("success\n");  } else {    switch(r) {    case RTEMS_TOO_MANY:      SPACEWIRE_DBG2("failed RTEMS_TOO_MANY\n"); break;    case RTEMS_INVALID_NUMBER:      SPACEWIRE_DBG2("failed RTEMS_INVALID_NUMBER\n"); break;    case RTEMS_RESOURCE_IN_USE:      SPACEWIRE_DBG2("failed RTEMS_RESOURCE_IN_USE\n"); break;    default:      SPACEWIRE_DBG("failed %i\n",r); break;    }  }}#ifdef SPW_BUFMALLOC  void spacewire_buffer_alloc(int minor) {  if (SPW_PARAM(minor).ptr_rxbuf0) {    free(SPW_PARAM(minor).ptr_rxbuf0);  }  if (SPW_PARAM(minor).ptr_txbuf0) {    free(SPW_PARAM(minor).ptr_txbuf0);  }  SPW_PARAM(minor).ptr_rxbuf0 =     (char *) malloc(SPW_PARAM(minor).rxbufsize * SPW_PARAM(minor).rxbufcnt);  SPW_PARAM(minor).ptr_txbuf0 =     (char *) malloc(SPW_PARAM(minor).txbufsize * SPW_PARAM(minor).txbufcnt);}#endif/* *  Console Device Driver Entry Points * */SPACEWIRE_PARAM LEON3_Spacewire[SPACEWIRE_MAX_CORENR];  rtems_device_driver spacewire_console_initialize(  rtems_device_major_number  major,  rtems_device_minor_number  minor,  void                      *arg){  rtems_status_code status;  unsigned int iobar, conf;  int i, uarts;  char *console_name = "/dev/spacewire_a";  SPACEWIRE_DBG2("spacewire driver inizialisation\n");  rtems_termios_initialize();  /* Find spacewire cores */  i = 0; uarts = 0;  while (i < amba_conf.apbslv.devnr && uarts < SPACEWIRE_MAX_CORENR)   {    conf = amba_get_confword(amba_conf.apbslv, i, 0);    if ((amba_vendor(conf) == VENDOR_GAISLER) &&         (amba_device(conf) == GAISLER_SPACEWIRE))    {      iobar = amba_apb_get_membar(amba_conf.apbslv, i);            LEON3_Spacewire[uarts].regs =         (LEON3_SPACEWIRE_Regs_Map *) amba_iobar_start(amba_conf.apbmst, iobar);      LEON3_Spacewire[uarts].irq = amba_irq(conf);      SPACEWIRE_DBG("spacewire code at [0x%x]\n",           (unsigned int)LEON3_Spacewire[uarts].regs);            /* initialize the code with some resonable values,	 actual initialization is done later using ioctl(fd)         on the opened device */      LEON3_Spacewire[uarts].nodeaddr = 0x14;      LEON3_Spacewire[uarts].destkey = 0xBF;      LEON3_Spacewire[uarts].maxfreq = 1;      LEON3_Spacewire[uarts].clkdiv = 0;      LEON3_Spacewire[uarts].rxmaxlen = SPACEWIRE_RXPCK_SIZE;      LEON3_Spacewire[uarts].txbufsize = SPACEWIRE_TXPCK_SIZE;      LEON3_Spacewire[uarts].rxbufsize = SPACEWIRE_RXPCK_SIZE;      LEON3_Spacewire[uarts].txbufcnt = SPACEWIRE_TXBUFS_NR;      LEON3_Spacewire[uarts].rxbufcnt = SPACEWIRE_RXBUFS_NR;#ifndef SPW_BUFMALLOC        LEON3_Spacewire[uarts].ptr_rxbuf0 = &LEON3_Spacewire[uarts]._rxbuf0;      LEON3_Spacewire[uarts].ptr_txbuf0 = &LEON3_Spacewire[uarts]._txbuf0;#else      LEON3_Spacewire[uarts].ptr_rxbuf0 = 0;      LEON3_Spacewire[uarts].ptr_txbuf0 = 0;      spacewire_buffer_alloc(uarts);#endif            uarts++;    }    i++;  }    /*  Register Device Names, /dev/spacewire, /dev/spacewire_b  ... */  if (uarts) {      SPACEWIRE_DBG2("registering minor 0 as /dev/spacewire\n");    status = rtems_io_register_name( "/dev/spacewire", major, 0 );    if (status != RTEMS_SUCCESSFUL)      rtems_fatal_error_occurred(status);    for (i = 1; i < uarts; i++) {      console_name[15]++;      SPACEWIRE_DBG("registering minor %i as %s\n",i,console_name);      status = rtems_io_register_name( console_name, major, i);    }  }    /* Initialize Hardware */  for (i = 0; i < uarts; i++) {    spacewire_hw_init(i);  }    return RTEMS_SUCCESSFUL;}int spacewire_setattibutes(int minor, int nodeaddr, int proto, int dest) {  if ( minor >= SPACEWIRE_MAX_CORENR ) {    printf("minor %i too big\n",minor);    return RTEMS_INVALID_NUMBER;  }  SPW_PARAM(minor).nodeaddr = nodeaddr;  SPW_PARAM(minor).proto = proto;  SPW_PARAM(minor).destnodeaddr = dest;  /*set node address*/  SPW_WRITE(&SPW_REG(minor,nodeaddr),SPW_PARAM(minor).nodeaddr);  return RTEMS_SUCCESSFUL;}rtems_device_driver spacewire_console_open(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg){  SPACEWIRE_DBGC(DBGSPW_IOCALLS,"open [%i,%i]\n",major, minor);  if ( minor >= SPACEWIRE_MAX_CORENR ) {    SPACEWIRE_DBG("minor %i too big\n",minor);    return RTEMS_INVALID_NUMBER;  }  return spacewire_hw_startup(minor);} rtems_device_driver spacewire_console_close(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg){  SPACEWIRE_DBGC(DBGSPW_IOCALLS,"close [%i,%i]\n",major, minor);  spacewire_hw_stop(minor);  return RTEMS_SUCCESSFUL;} rtems_device_driver spacewire_console_read(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg){  rtems_libio_rw_args_t *rw_args;  unsigned32 count = 0;  rw_args = (rtems_libio_rw_args_t *) arg;  SPACEWIRE_DBGC(DBGSPW_IOCALLS,"read  [%i,%i]: buf:0x%x len:%i \n",       major, minor, (unsigned int)rw_args->buffer,rw_args->count);    count =  spacewire_hw_receive(minor,rw_args->buffer,rw_args->count);#ifdef DEBUG_SPACEWIRE_ONOFF    if (DEBUG_SPACEWIRE_FLAGS & DBGSPW_DUMP) {    int k;    for (k = 0;k < count;k++){      if (k % 16 == 0) {	printf ("\n");      }      printf ("%.2x(%c) ",rw_args->buffer[k] & 0xff,         isprint(rw_args->buffer[k] & 0xff) ? rw_args->buffer[k] & 0xff : ' ');    }    printf ("\n");  }#endif    rw_args->bytes_moved = count;  return RTEMS_SUCCESSFUL;  } rtems_device_driver spacewire_console_write(  rtems_device_major_number major,  rtems_device_minor_number minor,  void                    * arg){  rtems_libio_rw_args_t *rw_args;  int count = 0;  rw_args = (rtems_libio_rw_args_t *) arg;  SPACEWIRE_DBGC(DBGSPW_IOCALLS,"write [%i,%i]: buf:0x%x len:%i\n",         major, minor, (unsigned int)rw_args->buffer,rw_args->count);    while (rw_args->count > 0) {    int c = rw_args->count;    if (c > SPW_PARAM(minor).txbufsize-2) {      c = SPW_PARAM(minor).txbufsize-2;    }    spacewire_hw_send(minor,rw_args->buffer,c);    rw_args->count -= c;    rw_args->buffer += c;    count += c;  }    if (count >= 0) {    rw_args->bytes_moved = count;    return RTEMS_SUCCESSFUL;  }  return RTEMS_UNSATISFIED;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久97国产精华液好用吗| 中文字幕永久在线不卡| 欧美一级生活片| 久久久精品国产免大香伊| 亚洲免费毛片网站| 久久超碰97中文字幕| 91一区二区在线| 精品噜噜噜噜久久久久久久久试看 | 极品瑜伽女神91| 99久久99久久精品免费观看| 精品伦理精品一区| 天堂影院一区二区| 色婷婷一区二区三区四区| 欧美国产日韩一二三区| 精品亚洲aⅴ乱码一区二区三区| 在线看国产一区| 国产精品高清亚洲| 国产激情偷乱视频一区二区三区 | 欧美久久高跟鞋激| 亚洲日本青草视频在线怡红院| 狠狠色狠狠色综合| 日韩欧美www| 久久精品国产免费看久久精品| 欧美色涩在线第一页| 国产精品视频一区二区三区不卡| 久久精品国产精品亚洲精品| 欧美一级日韩一级| 久热成人在线视频| 欧美一区午夜视频在线观看| 午夜伊人狠狠久久| 欧美日韩三级一区二区| 亚洲一区二区三区小说| 日本道精品一区二区三区| 天天色图综合网| 在线视频一区二区三| 亚洲男人的天堂av| 色久综合一二码| 国产成人精品一区二| 欧美精品一区二区精品网| 精品一区二区三区视频在线观看| 精品国产亚洲一区二区三区在线观看 | 欧美性感一区二区三区| 亚洲午夜久久久久中文字幕久| 色悠悠久久综合| 香港成人在线视频| 7777女厕盗摄久久久| 麻豆精品视频在线观看| 精品国免费一区二区三区| 国产麻豆欧美日韩一区| 欧美激情中文字幕一区二区| 大美女一区二区三区| 一本到不卡精品视频在线观看| 亚洲欧洲成人精品av97| 日本韩国一区二区三区视频| 亚洲欧美另类久久久精品| 欧美三级在线播放| 伦理电影国产精品| 中文字幕在线一区二区三区| 色老头久久综合| 午夜精品福利一区二区三区蜜桃| 精品免费国产二区三区| 成人午夜视频免费看| 亚洲在线一区二区三区| 欧美一区二区三区性视频| 国精品**一区二区三区在线蜜桃| 国产欧美日韩精品a在线观看| 99精品久久久久久| 日韩福利电影在线| 国产精品午夜久久| 欧美日韩国产经典色站一区二区三区| 精品写真视频在线观看| 亚洲免费av观看| 日韩天堂在线观看| 色综合久久88色综合天天| 精品一区二区三区在线观看国产| 中文字幕一区二| 日韩欧美成人激情| 91网站黄www| 久久99精品一区二区三区| 亚洲精品精品亚洲| 精品对白一区国产伦| 一本色道久久综合精品竹菊| 免费成人在线视频观看| 亚洲三级在线免费| 精品国产乱码久久久久久蜜臀| 色综合久久精品| 国产精品99精品久久免费| 午夜国产精品影院在线观看| 国产精品免费丝袜| 日韩欧美成人激情| 欧美日韩国产高清一区二区三区 | 亚洲午夜久久久久久久久电影网| 久久久久国产一区二区三区四区| 91久久精品一区二区三| 国产伦精品一区二区三区免费 | 成人va在线观看| 久久99精品一区二区三区| 午夜影院久久久| 一区二区三区91| 18欧美亚洲精品| 精品国产一区二区三区久久久蜜月 | 成人av免费在线| 国精产品一区一区三区mba桃花| 亚洲五码中文字幕| 一区二区三区日韩精品视频| 中国色在线观看另类| 久久毛片高清国产| 久久尤物电影视频在线观看| 日韩一区二区中文字幕| 欧美日韩国产首页| 欧美日韩高清在线| 欧美综合亚洲图片综合区| 不卡一区二区三区四区| 激情综合网天天干| 免费成人美女在线观看.| 天天操天天干天天综合网| 一区二区三区在线视频观看| **欧美大码日韩| 国产精品传媒在线| 国产精品毛片高清在线完整版| 日韩视频一区在线观看| 日韩视频免费观看高清完整版 | 久久综合九色综合欧美98| 91麻豆精品国产91久久久久久 | 91在线视频播放地址| 97精品视频在线观看自产线路二| 成人成人成人在线视频| 91麻豆swag| 欧美在线综合视频| 色88888久久久久久影院按摩 | 午夜a成v人精品| 日本女人一区二区三区| 国内外成人在线视频| 国产精品影音先锋| 99精品欧美一区二区三区小说 | 日本成人超碰在线观看| 久热成人在线视频| 高清成人免费视频| 一本久久综合亚洲鲁鲁五月天 | 国产一区二区三区久久久| 国产一区美女在线| 不卡免费追剧大全电视剧网站| 色成人在线视频| 日韩欧美一区二区视频| 久久亚洲捆绑美女| 一区二区三区欧美亚洲| 美日韩一区二区| 成人动漫在线一区| 欧美肥妇bbw| 亚洲国产成人私人影院tom | 91丨九色丨蝌蚪丨老版| 色婷婷国产精品久久包臀 | 麻豆久久久久久久| 成人晚上爱看视频| 欧美日韩视频专区在线播放| 欧美xxxxxxxx| 亚洲香肠在线观看| 国产麻豆成人精品| 欧美男生操女生| 国产日本一区二区| 午夜精品福利视频网站| 丁香激情综合国产| 91精品国产综合久久精品app| 久久久久久久久久久久久夜| 亚洲一区二区三区四区五区中文| 美女网站一区二区| 97se亚洲国产综合自在线| 日韩三级伦理片妻子的秘密按摩| 国产精品国产三级国产普通话蜜臀| 亚洲丶国产丶欧美一区二区三区| 成人妖精视频yjsp地址| 91精品国产91久久综合桃花| 中文字幕亚洲区| 精品写真视频在线观看 | 91福利在线播放| 久久色中文字幕| 午夜精品成人在线视频| caoporm超碰国产精品| 日韩免费看的电影| 亚洲一区二区三区国产| 成人动漫视频在线| www国产精品av| 奇米色777欧美一区二区| 在线观看视频一区二区欧美日韩| 久久久久久久免费视频了| 亚洲成人高清在线| 色综合 综合色| 中文字幕av一区二区三区免费看| 久久99精品国产.久久久久 | 99久久99久久精品国产片果冻| 久久婷婷色综合| 激情av综合网| 日韩欧美国产电影| 日韩电影一区二区三区四区| 欧洲一区二区三区免费视频| 亚洲一区二区三区四区在线观看 | 国产一区亚洲一区| 久久综合精品国产一区二区三区| 婷婷综合久久一区二区三区| 69av一区二区三区|