anchor.diff:             (msg-td (phys-addr->array (ed-tdq-head ed)))
              (msg-buf (alloc-buffer/8 (buf-pool ohci) 8))
              (dummy-td (alloc-td ohci))
  +           (td-info (make-td-info :event-type (endpoint-event-type endpoint)
  +                                  :endpoint endpoint
  +                                  :buf-size 8
  +                                  :buf msg-buf))
              (semaphore (device-semaphore device)))
   
         (encode-td msg-td +td-partial-buffer+ +pid-setup-token+ 3 +td-toggle-0+
  
positive.code:       ;; TODO wait with timeout?
        (sync:semaphore-down semaphore)
  
        (remhash msg-td (td->endpoint ohci))
        (free-buffer msg-buf)
  
        (when (/= (ldb +td-condition-code+ (td-header msg-td)) 0)
  
negative.code:            (msg-td (phys-addr->array (ed-tdq-head ed)))
             (msg-buf (alloc-buffer/8 (buf-pool ohci) 8))
             (dummy-td (alloc-td ohci))
             (td-info (make-td-info :event-type (endpoint-event-type endpoint)
                                    :endpoint endpoint
                                    :buf-size 8
                                    :buf msg-buf))
             (semaphore (device-semaphore device)))
  
        (encode-td msg-td +td-partial-buffer+ +pid-setup-token+ 3 +td-toggle-0+
  