anchor.diff:    size
     avail-offset
     used-offset
  -  n-free-descriptors
  +  (n-free-descriptors (sys.int::make-semaphore :name "Virt-Queue n-free descriptors")
  +                      :read-only t)
     next-free-descriptor
     last-seen-used)
   
  
positive.code:                  (len (vring-used-elem-len tx-queue ring-entry)))
              #+nil(format t "TX ring entry: ~D  buffer: ~D  len ~D~%" ring-entry id len)
              ;; Packet sent. Add the descriptor back to the freelist.
              (push id (virtio-net-free-tx-buffers dev)))
            (setf (virtqueue-last-seen-used tx-queue)
                  (ldb (byte 16 0) (1+ (virtqueue-last-seen-used tx-queue))))))))
  
  (defun transmit-one (dev packet)
    ;; Allocate a free TX descriptor.
    (sys.int::process-wait "Virtio-Net TX descriptor"
                           (lambda ()
                             (virtio-net-free-tx-buffers dev)))
    (let* ((tx-queue (aref (virtio-device-virtqueues dev) +net-transmitq+))
           (hdr-desc (pop (virtio-net-free-tx-buffers dev)))
           ;; Bleah. Do a terrible phys->offset conversion.
  
negative.code:                 (setf (vring-desc-address tx-queue pkt-desc) (+ phys (* i +tx-buffer-size+) +virtio-net-hdr-size+)
                        (vring-desc-length tx-queue pkt-desc) (- +tx-buffer-size+ +virtio-net-hdr-size+)
                        (vring-desc-flags tx-queue pkt-desc) 0)
                  (push hdr-desc (virtio-net-free-tx-buffers dev))
                  (sys.int::signal-semaphore (virtio-net-n-free-tx-buffers dev))))))
          (sys.net:register-nic dev)
          ;; Unmask the IRQ.
          (setf (sys.int::isa-pic-interrupt-handler (sys.int::pci-irq-line pci-device))
  