anchor.diff:        ;; TODO wait with timeout?
         (sync:semaphore-down semaphore)
   
  -      (remhash msg-td (td->td-info ohci))
  -
         (when (/= (ldb +td-condition-code+ (td-header msg-td)) 0)
           ;; non-zero means error
           (when *error-td*
  -          (free-buffer *error-td*))
  +          (free-td ohci *error-td*))
           (setf *error-td* msg-td)
           (let ((condition-code (ldb +td-condition-code+ (td-header msg-td))))
             (error
  
positive.code:      (td-buffer-end msg-td) (+ buf-phys-addr num-bytes -1)
       (td-info-buf-size msg-td-info) num-bytes
       (td-info-buf msg-td-info) buf
       (gethash dummy-td (td->td-info ohci)) dummy-td-info
       ;; update queue tail pointer to new dummy td
       (ed-tdq-tail ed) dummy-td-phys-addr)
  
  
negative.code:       ;; TODO wait with timeout?
        (sync:semaphore-down semaphore)
  
        (when (/= (ldb +td-condition-code+ (td-header msg-td)) 0)
          (when *error-td*
            (free-td ohci *error-td*))
          (setf *error-td* msg-td)
          (let ((condition-code (ldb +td-condition-code+ (td-header msg-td))))
            (error
             "control-receive-data: Receive command failed with error ~A (#x~2,'0X)."
  