;;; -*- Mode:LISP; Package:GREY; Base:10 -*-


(compiler:define-micro-properties %io-space-write-sync (address word timeout-count status-address status-mask status-value)
  )

(defun %io-space-write-sync (address word timeout-count status-address status-mask status-value)
  "Loop waiting for (= (logand status-mask (%io-space-read status-address)))
then (%io-space-write address word)."
  (do ((j 0 (the fixnum (1+ j))))
      ((= (the fixnum status-value)
	  (logand (the fixnum status-mask)
		  (the fixnum (%io-space-read status-address))))
       (%io-space-write address word))
    (if (= (the fixnum j) (the fixnum timeout-count))
	(cerror :yes nil "%IO-SPACE-WRITE-SYNC timeout"))))