Lines Matching refs:ring
36 struct ring
44 volatile struct ring *ring;
58 struct qxl_ring *ring;
60 ring = malloc (sizeof *ring);
61 if (!ring)
64 ring->ring = (volatile struct ring *)header;
65 ring->element_size = element_size;
66 ring->n_elements = n_elements;
67 ring->io_port_prod_notify = io_port_prod_notify;
68 ring->qxl = qxl;
69 return ring;
73 qxl_ring_push (struct qxl_ring *ring,
76 volatile struct qxl_ring_header *header = &(ring->ring->header);
91 idx = header->prod & (ring->n_elements - 1);
92 elt = ring->ring->elements + idx * ring->element_size;
96 memcpy((void *)elt, new_elt, ring->element_size);
103 ioport_write (ring->qxl, ring->io_port_prod_notify, 0);
108 qxl_ring_pop (struct qxl_ring *ring,
111 volatile struct qxl_ring_header *header = &(ring->ring->header);
118 idx = header->cons & (ring->n_elements - 1);
119 ring_elt = ring->ring->elements + idx * ring->element_size;
121 memcpy (element, (void *)ring_elt, ring->element_size);
129 qxl_ring_wait_idle (struct qxl_ring *ring)
131 while (ring->ring->header.cons != ring->ring->header.prod)
139 qxl_ring_request_notify (struct qxl_ring *ring)
141 ring->ring->header.notify_on_prod = ring->ring->header.prod + 1;
143 ring->ring->header.notify_on_prod);
147 qxl_ring_cons (struct qxl_ring *ring)
149 return ring->ring->header.cons;
153 qxl_ring_prod (struct qxl_ring *ring)
155 return ring->ring->header.prod;