[openfirmware] r1134 - in dev/usb2: device/serial hcd hcd/ehci

svn at openfirmware.info svn at openfirmware.info
Thu Apr 2 20:27:04 CEST 2009


Author: wmb
Date: 2009-04-02 20:27:04 +0200 (Thu, 02 Apr 2009)
New Revision: 1134

Modified:
   dev/usb2/device/serial/uart.fth
   dev/usb2/device/serial/vendor.fth
   dev/usb2/hcd/ehci/ehci.fth
   dev/usb2/hcd/hcd.fth
Log:
Added Ajays USB debug device support to USB serial driver.


Modified: dev/usb2/device/serial/uart.fth
===================================================================
--- dev/usb2/device/serial/uart.fth	2009-04-02 18:26:16 UTC (rev 1133)
+++ dev/usb2/device/serial/uart.fth	2009-04-02 18:27:04 UTC (rev 1134)
@@ -13,6 +13,16 @@
 
 : /string  ( adr len cnt -- adr' len' )  tuck - -rot + swap  ;
 
+\ Don't do this until someone calls read.  That makes the device
+\ work as a console, with separate input and output instances
+0 value read-started?
+: ?start-reading  ( -- )
+   read-started?  if  exit  then
+   read-q init-q
+   inbuf /bulk-in-pipe bulk-in-pipe begin-bulk-in
+   true to read-started?
+;
+
 external
 
 : install-abort  ( -- )  ['] poll-tty d# 100 alarm  ;   \ Check for break
@@ -21,6 +31,7 @@
 \ Read at most "len" characters into the buffer at adr, stopping when
 \ no more characters are immediately available.
 : read  ( adr len -- #read )   \ -2 for none available right now
+   ?start-reading
    rpoll
    dup  0=  if  nip exit  then                   ( adr len )
    read-q deque?  0=  if                         ( adr len )
@@ -43,9 +54,8 @@
 : open  ( -- flag )
    device set-target
    refcount @ 0=  if
-      init-buf read-q init-q
+      init-buf
       inituart rts-dtr-on
-      inbuf /bulk-in-pipe bulk-in-pipe begin-bulk-in
    then
    refcount @ 1+  refcount !
    true

Modified: dev/usb2/device/serial/vendor.fth
===================================================================
--- dev/usb2/device/serial/vendor.fth	2009-04-02 18:26:16 UTC (rev 1133)
+++ dev/usb2/device/serial/vendor.fth	2009-04-02 18:27:04 UTC (rev 1134)
@@ -3,6 +3,10 @@
 headers
 hex
 
+create uart-generic-list  here
+	525 w, 127a w,		\ Ajays USB 2.0 Debug Cable
+here swap - constant /uart-generic-list
+
 create uart-pl2303-list  here
 	557 w, 2008 w,		\ ATEN, IOGear
 	67b w, 2303 w,		\ PL2303
@@ -25,6 +29,11 @@
 	921 w, 1000 w,		\ GoHubs single port
 here swap - constant /uart-belkin-list
 
+: uart-generic?  ( vid pid -- flag )
+   uart-generic-list /uart-generic-list  find-vendor-product?
+;
+
+
 : uart-pl2303?  ( vid pid -- flag )
    uart-pl2303-list /uart-pl2303-list  find-vendor-product?
 ;
@@ -41,5 +50,7 @@
    2dup uart-pl2303?  if  2drop true exit  then
 \ Not debugged yet...
 \   2dup uart-mct?     if  2drop true exit  then
-   uart-belkin?
+   2dup uart-belkin?   if  2drop true  exit  then
+   2dup uart-generic?  if  2drop true  exit  then
+   2drop false
 ;

Modified: dev/usb2/hcd/ehci/ehci.fth
===================================================================
--- dev/usb2/hcd/ehci/ehci.fth	2009-04-02 18:26:16 UTC (rev 1133)
+++ dev/usb2/hcd/ehci/ehci.fth	2009-04-02 18:27:04 UTC (rev 1134)
@@ -27,7 +27,8 @@
    0 0 my-space h# 0200.0010 + /regs  map-in to ehci-reg
 ;
 : unmap-regs  ( -- )
-   4 my-w@  7 invert and  4 my-w!
+   \ Don't disable because somebody else might be using the controller.
+   \ 4 my-w@  7 invert and  4 my-w!
    ehci-reg  /regs  map-out  0 to ehci-reg
 ;
 
@@ -97,6 +98,32 @@
    doorbell-wait
 ;
 
+0 value dbgp-offset
+0 value dbgp-bar
+
+: find-dbgp-regs  ( -- )
+   h# 34 my-l@                   ( capability-ptr )
+   begin  dup  while             ( cap-offset )
+      dup my-b@ h# 0a =  if      ( cfg-adr )
+         2+ my-w@                ( dbgp-ptr )
+         dup h# 1fff and to dbgp-offset  ( )
+         d# 13 rshift  7 and  1- /l* h# 10 +  to dbgp-bar
+         exit
+      then                       ( cfg-adr )
+      1+ my-b@                   ( cap-offset' )
+   repeat                        ( cap-offset )
+   drop
+;
+: debug-port-active?  ( -- flag )
+   hcsparams@  h# f0.0000 and  0=  if  false exit  then
+   find-dbgp-regs
+   dbgp-offset 0=  if  false exit  then
+   \ We should take dbgp-bar into account, but for now we
+   \ just assume it's the same BAR as for the main registers.
+   dbgp-offset ehci-reg@
+   h# 1000.0000 and 0<>
+;
+
 external
 
 : start-usb  ( -- )
@@ -113,7 +140,8 @@
 ;
 
 : reset-usb  ( -- )
-   ehci-reg dup 0=  if  map-regs  then
+   ehci-reg dup 0=  if  map-regs  then  ( reg )
+   debug-port-active?  if  drop exit  then   \ Don't kill the debug port!
    usbcmd@ 2 or 1 invert and usbcmd!	\ HCReset
    d# 10 0  do
       usbcmd@ 2 and  0=  ?leave

Modified: dev/usb2/hcd/hcd.fth
===================================================================
--- dev/usb2/hcd/hcd.fth	2009-04-02 18:26:16 UTC (rev 1133)
+++ dev/usb2/hcd/hcd.fth	2009-04-02 18:27:04 UTC (rev 1134)
@@ -57,6 +57,9 @@
 \ Common routines
 \ ---------------------------------------------------------------------------
 
+: my-b@  ( offset -- b )  my-space +  " config-b@" $call-parent  ;
+: my-b!  ( b offset -- )  my-space +  " config-b!" $call-parent  ;
+
 : my-w@  ( offset -- w )  my-space +  " config-w@" $call-parent  ;
 : my-w!  ( w offset -- )  my-space +  " config-w!" $call-parent  ;
 




More information about the openfirmware mailing list