Lines Matching refs:rb
27 void scif_rb_init(struct scif_rb *rb, u32 *read_ptr, u32 *write_ptr, in scif_rb_init() argument
30 rb->rb_base = rb_base; in scif_rb_init()
31 rb->size = (1 << size); in scif_rb_init()
32 rb->read_ptr = read_ptr; in scif_rb_init()
33 rb->write_ptr = write_ptr; in scif_rb_init()
34 rb->current_read_offset = *read_ptr; in scif_rb_init()
35 rb->current_write_offset = *write_ptr; in scif_rb_init()
39 static void memcpy_torb(struct scif_rb *rb, void *header, in memcpy_torb() argument
44 if (header + size >= rb->rb_base + rb->size) { in memcpy_torb()
46 size1 = (u32)(rb->rb_base + rb->size - header); in memcpy_torb()
49 memcpy_toio((void __iomem __force *)rb->rb_base, in memcpy_torb()
57 static void memcpy_fromrb(struct scif_rb *rb, void *header, in memcpy_fromrb() argument
62 if (header + size >= rb->rb_base + rb->size) { in memcpy_fromrb()
64 size1 = (u32)(rb->rb_base + rb->size - header); in memcpy_fromrb()
68 (void __iomem __force *)rb->rb_base, size2); in memcpy_fromrb()
80 u32 scif_rb_space(struct scif_rb *rb) in scif_rb_space() argument
82 rb->current_read_offset = *rb->read_ptr; in scif_rb_space()
89 return scif_rb_ring_space(rb->current_write_offset, in scif_rb_space()
90 rb->current_read_offset, rb->size); in scif_rb_space()
102 int scif_rb_write(struct scif_rb *rb, void *msg, u32 size) in scif_rb_write() argument
106 if (scif_rb_space(rb) < size) in scif_rb_write()
108 header = rb->rb_base + rb->current_write_offset; in scif_rb_write()
109 memcpy_torb(rb, header, msg, size); in scif_rb_write()
114 rb->current_write_offset = in scif_rb_write()
115 (rb->current_write_offset + size) & (rb->size - 1); in scif_rb_write()
123 void scif_rb_commit(struct scif_rb *rb) in scif_rb_commit() argument
132 WRITE_ONCE(*rb->write_ptr, rb->current_write_offset); in scif_rb_commit()
141 WRITE_ONCE(*rb->write_ptr, rb->current_write_offset); in scif_rb_commit()
153 static void *scif_rb_get(struct scif_rb *rb, u32 size) in scif_rb_get() argument
157 if (scif_rb_count(rb, size) >= size) in scif_rb_get()
158 header = rb->rb_base + rb->current_read_offset; in scif_rb_get()
171 u32 scif_rb_get_next(struct scif_rb *rb, void *msg, u32 size) in scif_rb_get_next() argument
176 header = scif_rb_get(rb, size); in scif_rb_get_next()
179 (rb->current_read_offset + size) & (rb->size - 1); in scif_rb_get_next()
182 rb->current_read_offset = next_cmd_offset; in scif_rb_get_next()
183 memcpy_fromrb(rb, header, msg, size); in scif_rb_get_next()
192 void scif_rb_update_read_ptr(struct scif_rb *rb) in scif_rb_update_read_ptr() argument
196 new_offset = rb->current_read_offset; in scif_rb_update_read_ptr()
204 WRITE_ONCE(*rb->read_ptr, new_offset); in scif_rb_update_read_ptr()
213 WRITE_ONCE(*rb->read_ptr, new_offset); in scif_rb_update_read_ptr()
224 u32 scif_rb_count(struct scif_rb *rb, u32 size) in scif_rb_count() argument
226 if (scif_rb_ring_cnt(rb->current_write_offset, in scif_rb_count()
227 rb->current_read_offset, in scif_rb_count()
228 rb->size) < size) { in scif_rb_count()
229 rb->current_write_offset = *rb->write_ptr; in scif_rb_count()
237 return scif_rb_ring_cnt(rb->current_write_offset, in scif_rb_count()
238 rb->current_read_offset, in scif_rb_count()
239 rb->size); in scif_rb_count()