===================================

Linux/RMT Responsive Link$B$N%G%P%$%9%I%i%$%P(B

2006/DEC/26

===================================


1. $B35MW(B
===================================
$B$3$N%G%P%$%9%I%i%$%P$O(BRMT(Responsive Multithreaded Processor)$B$N(B
Responsive Link$BMQ$N(BCHAR$B7?$N%G%P%$%9%I%i%$%P$G$9!#(B


2. $B%G%P%$%9%I%i%$%P$N35MW(B
===================================

2.1 $BA4BN9=@.(B
-----------------------------------
$B0J2<$K(BResponsive Link$BMQ$N(BCHAR$B7?%G%P%$%9%I%i%$%P$NA4BN9=@.$r<($7$^$9!#(B

WRITE$B%a%=%C%I(B
---------------
| [FileWrite] | ----> [FIFO] ----> [DPM_DATA_OUT] ----------------------
---------------$B!!!!!!!!(B .FNK |       |                                   |
     $B",!!%;%^%U%)%m%C%/(B $B!C(B |>>>>>>>|                                   |
                        $B!C(B       |                                     |
                        $B!C%Q%1%C%H$NAw?.>u67$r4F;k(B                     |
                        $B!C(B       |                                     |
                        $B!C(B       |$BAw?.$5$l$?%Q%1%C%H$rE>Aw(B             |
                        $B!C(B       |                                     |
                        ##################                             V
                        #   RT Thread    # ----10us$B<~4|$G5/>2(B       [link 0] <->
                        ##################                             |
                        $B!C(B       |                                     |
                        $B!C%Q%1%C%H$N<u?.>u67$r4F;k(B                     |
                        $B!C(B       |                                     |
                        $B!C(B       |$B<u?.$5$l$?%Q%1%C%H$rE>Aw(B             |
                        $B!C(B       |                                     |
READ$B%a%=%C%I(B   $B!!(B       $B!C(B |<<<<<<<|                                   |
---------------         $B#V(B |       |                                   |
| [FileREAD]  | <---- [FIFO]       [DPM_DATA_IN]  <---------------------
---------------
     $B",!!%;%^%U%)%m%C%/(B

                                                                                        
2.2 $B5!G=(B
-----------------------------------
  $B!&(Bwrite$B%7%9%F%`%3!<%k$r;H$C$?%Q%1%C%H$NAw?.(B
    $B!&(BData Packet$B$N%5%$%:C10L(B(64$B%P%$%H(B)$B$G$N(Bwrite$B$,2DG=!#(B64$B%P%$%H$NG\?t0J30$N(B
      $B>l9g$K$O(BIO$B%(%i!<$rJV$7$^$9!#(B
    $B!&(Bwrite$B;~$K(BFIFO$B$K6u$-$,$"$k>l9g$K$O!"=q$-9~$_2DG=$J%Q%1%C%H?tJ,=q$-9~$_!"(B
      $B=q$-9~$s$@%5%$%:$rJV$7$^$9!#$^$?(BFIFO$B$K6u$-$,L5$$>l9g$K$O!"6u$-$,$G$-$k(B
      $B$^$G%V%m%C%/$7$^$9!#(B
    $B!&(BFIFO$BFb$N%G!<%?$O!"(B10us$B<~4|$G5/>2$9$k<B;~4V%9%l%C%I$K$h$j!"(BDPM_DATA_OUT
      $B$X$HE>Aw$5$l$^$9!#0lEY$N5/>2<~4|$GE>Aw$5$l$k:GBg$N%Q%1%C%H?t$O(B15$B%Q%1%C(B
      $B%H$G$9!#(B

  $B!&(Bread$B%7%9%F%`%3!<%k$r;H$C$?%Q%1%C%H$N<u?.(B
    $B!&(BData Packet$B$N%5%$%:C10L(B(64$B%P%$%H(B)$B$G$N(Bread$B$,2DG=!#(B64$B%P%$%H$NG\?t0J30$N(B
$B!!!!(B  $B>l9g$K$O(BIO$B%(%i!<$rJV$7$^$9!#(B
    $B!&(Bread$B;~$K(BFIFO$BFb$K%G!<%?$,$"$k>l9g$K$O!"FI$_9~$_2DG=$J%Q%1%C%H?tJ,FI$_9~(B
$B!!!!(B  $B$_!"FI$_9~$s$@%5%$%:$rJV$7$^$9!#(BFIFO$BFb$K%Q%1%C%H$,L5$$>l9g$K$O!"%G!<%?(B
      $B$,E>Aw$5$l$k$^$G%V%m%C%/$7$^$9!#(B
    $B!&(B10us$B<~4|$G5/>2$9$k<B;~4V%9%l%C%I$K$h$j!"(BDPM_DATA_IN$BFb$N%G!<%?$O(BFIFO$B$KE>(B
      $BAw$5$l$^$9!#(B

  $B!&(Bioctl$B%a%=%C%I$r;H$C$?(BFIFO$B%5%$%:$NJQ99$H<hF@(B
    $B!&(BDPM_DATA_IN/_OUT$BMQ$N(BFIFO$B%5%$%:$O(B2$B$NN_>hC10L$GJQ99$,2DG=(B($B:G>.(B: 2^7=128
      $B%P%$%H(B)$B$G$9!#(B
      $B$?$@$7!"JQ99$9$k:]$K$O(BFIFO$B$NCf?H$,6u$K$J$C$F$$$kI,MW$,$"$j$^$9!#(B
    $B!&(Bioctl$B$N%3%^%s%IDj5A(B
       #define RLDATA_IOC_MAGIC  'k'
       #define RLDATA_PUTOSIZE    _IOW(RLDATA_IOC_MAGIC, 1, int)       
       #define RLDATA_PUTISIZE    _IOW(RLDATA_IOC_MAGIC, 2, int)       
       #define RLDATA_GETOSIZE    _IOR(RLDATA_IOC_MAGIC, 3, int)       
       #define RLDATA_GETISIZE    _IOR(RLDATA_IOC_MAGIC, 4, int)       

      $B!&(BRLDATA_PUTOSIZE   DPM_DATA_OUT$BMQ$N(BFIFO$B%5%$%:$NJQ99(B
          usage
            unsigned int size_pow;
            ioctl(fd, RLDATA_PUTOSIZE, size_pow));
          input
            DPM_DATA_OUT$BMQ$N(BFIFO$B%5%$%:$r(B2$B$N2?>h$K$9$k$+$r;XDj(B($B:G>.CM(B: 7)
          outputs:        
            $BL5$7(B
          error return:
            ENINVAL       size_pow$B$,(B7(=128$B%P%$%H(B)$B$h$j$b>.$5$JCM$@$C$?>l9g(B
            ENOMEM        $B%a%b%j$,3NJ]$G$-$J$+$C$?>l9g(B
            EBUSY         FIFO$BFb$K%G!<%?$,;D$C$F$$$?>l9g(B

      $B!&(BRLDATA_PUTISIZE   DPM_DATA_IN$BMQ$N(BFIFO$B%5%$%:$NJQ99(B
          usage
            int size_pow;
            ioctl(fd, RLDATA_PUTISIZE, size_pow));
          input
            DPM_DATA_IN$BMQ$N(BFIFO$B%5%$%:$r(B2$B$N2?>h$K$9$k$+$r;XDj(B($B:G>.CM(B: 7)
          outputs:        
            $BL5$7(B
          error return:             
            ENINVAL       size_pow$B$,(B7(=128$B%P%$%H(B)$B$h$j$b>.$5$JCM$@$C$?>l9g(B
            ENOMEM        $B%a%b%j$,3NJ]$G$-$J$+$C$?>l9g(B
            EBUSY         FIFO$BFb$K%G!<%?$,;D$C$F$$$?>l9g(B
          
      $B!&(BRLDATA_GETOSIZE   DPM_DATA_OUT$BMQ$N(BFIFO$B%5%$%:$N<hF@(B
          usage
            int size_pow;
            ioctl(fd, RLDATA_GETOSIZE, &size_pow));
          input
            $BL5$7(B
          outputs:        
            DPM_DATA_OUT$BMQ$N(BFIFO$B%5%$%:$,(B2$B$N2?>h$G$"$k$+(B
          error return:
            EFAULT        $BM?$($i$l$?%]%$%s%?$,L58z$N>l9g(B

      $B!&(BRLDATA_GETISIZE   DPM_DATA_IN$BMQ$N(BFIFO$B%5%$%:$N<hF@(B
          usage
            int size_pow;
            ioctl(fd, RLDATA_GETISIZE, &size_pow));
          input
            $BL5$7(B
          outputs:        
            DPM_DATA_IN$BMQ$N(BFIFO$B%5%$%:$,(B2$B$N2?>h$G$"$k$+(B
          error return:
            EFAULT        $BM?$($i$l$?%]%$%s%?$,L58z$N>l9g(B

    $B!&(Bread/write$B$KBP$9$k%;%l%/%H(B

2.3 $B%k!<%F%#%s%0%F!<%V%k$NJT=8(B
-----------------------------------
  $B!&(BResponsive Link$B$N%k!<%F%#%s%0%F!<%V%k$NFbMF$rJQ99$9$k$K$O!"%l%8%9%?$N%k!<%F(B
    $B%#%s%0%F!<%V%kItJ,(B(0xFFFE2000:$B%"%I%l%9It(B, 0xFFFE3000:$B%j%s%/It(B)$B$r!"(Bmmap$B$9$k$3(B
    $B$H$G%"%/%;%9$9$kI,MW$,$"$j$^$9!#(B
    $B$?$@$7!"(B/dev/mem$B$r(Bmmap$B$7$F%k!<%F%#%s%0%F!<%V%k$r%a%b%j%^%C%W$9$k:]$K$O!"%*%U(B
    $B%;%C%H(B0x80000000$B$r%^%C%WBP>]$N%"%I%l%9$+$i0z$/I,MW$,$"$j$^$9!#(B

    ex)$B%k!<%F%#%s%0%F!<%V%k$N%"%I%l%9It$r(Bmmap$B$rMQ$$$F%^%C%T%s%0!#(B 
      mapped = mmap(0, len, PROT_READ | PROT_WRITE,
                                MAP_SHARED, fp, 0xfffe2000 - 0x80000000);
