Lines Matching refs:commonring
15 void brcmf_commonring_register_cb(struct brcmf_commonring *commonring, in brcmf_commonring_register_cb() argument
22 commonring->cr_ring_bell = cr_ring_bell; in brcmf_commonring_register_cb()
23 commonring->cr_update_rptr = cr_update_rptr; in brcmf_commonring_register_cb()
24 commonring->cr_update_wptr = cr_update_wptr; in brcmf_commonring_register_cb()
25 commonring->cr_write_rptr = cr_write_rptr; in brcmf_commonring_register_cb()
26 commonring->cr_write_wptr = cr_write_wptr; in brcmf_commonring_register_cb()
27 commonring->cr_ctx = ctx; in brcmf_commonring_register_cb()
31 void brcmf_commonring_config(struct brcmf_commonring *commonring, u16 depth, in brcmf_commonring_config() argument
34 commonring->depth = depth; in brcmf_commonring_config()
35 commonring->item_len = item_len; in brcmf_commonring_config()
36 commonring->buf_addr = buf_addr; in brcmf_commonring_config()
37 if (!commonring->inited) { in brcmf_commonring_config()
38 spin_lock_init(&commonring->lock); in brcmf_commonring_config()
39 commonring->inited = true; in brcmf_commonring_config()
41 commonring->r_ptr = 0; in brcmf_commonring_config()
42 if (commonring->cr_write_rptr) in brcmf_commonring_config()
43 commonring->cr_write_rptr(commonring->cr_ctx); in brcmf_commonring_config()
44 commonring->w_ptr = 0; in brcmf_commonring_config()
45 if (commonring->cr_write_wptr) in brcmf_commonring_config()
46 commonring->cr_write_wptr(commonring->cr_ctx); in brcmf_commonring_config()
47 commonring->f_ptr = 0; in brcmf_commonring_config()
51 void brcmf_commonring_lock(struct brcmf_commonring *commonring) in brcmf_commonring_lock() argument
52 __acquires(&commonring->lock) in brcmf_commonring_lock()
56 spin_lock_irqsave(&commonring->lock, flags); in brcmf_commonring_lock()
57 commonring->flags = flags; in brcmf_commonring_lock()
61 void brcmf_commonring_unlock(struct brcmf_commonring *commonring) in brcmf_commonring_unlock() argument
62 __releases(&commonring->lock) in brcmf_commonring_unlock()
64 spin_unlock_irqrestore(&commonring->lock, commonring->flags); in brcmf_commonring_unlock()
68 bool brcmf_commonring_write_available(struct brcmf_commonring *commonring) in brcmf_commonring_write_available() argument
74 if (commonring->r_ptr <= commonring->w_ptr) in brcmf_commonring_write_available()
75 available = commonring->depth - commonring->w_ptr + in brcmf_commonring_write_available()
76 commonring->r_ptr; in brcmf_commonring_write_available()
78 available = commonring->r_ptr - commonring->w_ptr; in brcmf_commonring_write_available()
81 if (!commonring->was_full) in brcmf_commonring_write_available()
83 if (available > commonring->depth / 8) { in brcmf_commonring_write_available()
84 commonring->was_full = false; in brcmf_commonring_write_available()
88 if (commonring->cr_update_rptr) in brcmf_commonring_write_available()
89 commonring->cr_update_rptr(commonring->cr_ctx); in brcmf_commonring_write_available()
97 if (commonring->cr_update_rptr) in brcmf_commonring_write_available()
98 commonring->cr_update_rptr(commonring->cr_ctx); in brcmf_commonring_write_available()
103 commonring->was_full = true; in brcmf_commonring_write_available()
108 void *brcmf_commonring_reserve_for_write(struct brcmf_commonring *commonring) in brcmf_commonring_reserve_for_write() argument
115 if (commonring->r_ptr <= commonring->w_ptr) in brcmf_commonring_reserve_for_write()
116 available = commonring->depth - commonring->w_ptr + in brcmf_commonring_reserve_for_write()
117 commonring->r_ptr; in brcmf_commonring_reserve_for_write()
119 available = commonring->r_ptr - commonring->w_ptr; in brcmf_commonring_reserve_for_write()
122 ret_ptr = commonring->buf_addr + in brcmf_commonring_reserve_for_write()
123 (commonring->w_ptr * commonring->item_len); in brcmf_commonring_reserve_for_write()
124 commonring->w_ptr++; in brcmf_commonring_reserve_for_write()
125 if (commonring->w_ptr == commonring->depth) in brcmf_commonring_reserve_for_write()
126 commonring->w_ptr = 0; in brcmf_commonring_reserve_for_write()
131 if (commonring->cr_update_rptr) in brcmf_commonring_reserve_for_write()
132 commonring->cr_update_rptr(commonring->cr_ctx); in brcmf_commonring_reserve_for_write()
137 commonring->was_full = true; in brcmf_commonring_reserve_for_write()
143 brcmf_commonring_reserve_for_write_multiple(struct brcmf_commonring *commonring, in brcmf_commonring_reserve_for_write_multiple() argument
151 if (commonring->r_ptr <= commonring->w_ptr) in brcmf_commonring_reserve_for_write_multiple()
152 available = commonring->depth - commonring->w_ptr + in brcmf_commonring_reserve_for_write_multiple()
153 commonring->r_ptr; in brcmf_commonring_reserve_for_write_multiple()
155 available = commonring->r_ptr - commonring->w_ptr; in brcmf_commonring_reserve_for_write_multiple()
158 ret_ptr = commonring->buf_addr + in brcmf_commonring_reserve_for_write_multiple()
159 (commonring->w_ptr * commonring->item_len); in brcmf_commonring_reserve_for_write_multiple()
161 if (*alloced + commonring->w_ptr > commonring->depth) in brcmf_commonring_reserve_for_write_multiple()
162 *alloced = commonring->depth - commonring->w_ptr; in brcmf_commonring_reserve_for_write_multiple()
163 commonring->w_ptr += *alloced; in brcmf_commonring_reserve_for_write_multiple()
164 if (commonring->w_ptr == commonring->depth) in brcmf_commonring_reserve_for_write_multiple()
165 commonring->w_ptr = 0; in brcmf_commonring_reserve_for_write_multiple()
170 if (commonring->cr_update_rptr) in brcmf_commonring_reserve_for_write_multiple()
171 commonring->cr_update_rptr(commonring->cr_ctx); in brcmf_commonring_reserve_for_write_multiple()
176 commonring->was_full = true; in brcmf_commonring_reserve_for_write_multiple()
181 int brcmf_commonring_write_complete(struct brcmf_commonring *commonring) in brcmf_commonring_write_complete() argument
183 if (commonring->f_ptr > commonring->w_ptr) in brcmf_commonring_write_complete()
184 commonring->f_ptr = 0; in brcmf_commonring_write_complete()
186 commonring->f_ptr = commonring->w_ptr; in brcmf_commonring_write_complete()
188 if (commonring->cr_write_wptr) in brcmf_commonring_write_complete()
189 commonring->cr_write_wptr(commonring->cr_ctx); in brcmf_commonring_write_complete()
190 if (commonring->cr_ring_bell) in brcmf_commonring_write_complete()
191 return commonring->cr_ring_bell(commonring->cr_ctx); in brcmf_commonring_write_complete()
197 void brcmf_commonring_write_cancel(struct brcmf_commonring *commonring, in brcmf_commonring_write_cancel() argument
200 if (commonring->w_ptr == 0) in brcmf_commonring_write_cancel()
201 commonring->w_ptr = commonring->depth - n_items; in brcmf_commonring_write_cancel()
203 commonring->w_ptr -= n_items; in brcmf_commonring_write_cancel()
207 void *brcmf_commonring_get_read_ptr(struct brcmf_commonring *commonring, in brcmf_commonring_get_read_ptr() argument
210 if (commonring->cr_update_wptr) in brcmf_commonring_get_read_ptr()
211 commonring->cr_update_wptr(commonring->cr_ctx); in brcmf_commonring_get_read_ptr()
213 *n_items = (commonring->w_ptr >= commonring->r_ptr) ? in brcmf_commonring_get_read_ptr()
214 (commonring->w_ptr - commonring->r_ptr) : in brcmf_commonring_get_read_ptr()
215 (commonring->depth - commonring->r_ptr); in brcmf_commonring_get_read_ptr()
220 return commonring->buf_addr + in brcmf_commonring_get_read_ptr()
221 (commonring->r_ptr * commonring->item_len); in brcmf_commonring_get_read_ptr()
225 int brcmf_commonring_read_complete(struct brcmf_commonring *commonring, in brcmf_commonring_read_complete() argument
228 commonring->r_ptr += n_items; in brcmf_commonring_read_complete()
229 if (commonring->r_ptr == commonring->depth) in brcmf_commonring_read_complete()
230 commonring->r_ptr = 0; in brcmf_commonring_read_complete()
232 if (commonring->cr_write_rptr) in brcmf_commonring_read_complete()
233 return commonring->cr_write_rptr(commonring->cr_ctx); in brcmf_commonring_read_complete()