Lines Matching refs:mbus
20 static void mon_stop(struct mon_bus *mbus);
21 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus);
35 void mon_reader_add(struct mon_bus *mbus, struct mon_reader *r) in mon_reader_add() argument
40 spin_lock_irqsave(&mbus->lock, flags); in mon_reader_add()
41 if (mbus->nreaders == 0) { in mon_reader_add()
42 if (mbus == &mon_bus0) { in mon_reader_add()
49 mbus->u_bus->monitored = 1; in mon_reader_add()
52 mbus->nreaders++; in mon_reader_add()
53 list_add_tail(&r->r_link, &mbus->r_list); in mon_reader_add()
54 spin_unlock_irqrestore(&mbus->lock, flags); in mon_reader_add()
56 kref_get(&mbus->ref); in mon_reader_add()
64 void mon_reader_del(struct mon_bus *mbus, struct mon_reader *r) in mon_reader_del() argument
68 spin_lock_irqsave(&mbus->lock, flags); in mon_reader_del()
70 --mbus->nreaders; in mon_reader_del()
71 if (mbus->nreaders == 0) in mon_reader_del()
72 mon_stop(mbus); in mon_reader_del()
73 spin_unlock_irqrestore(&mbus->lock, flags); in mon_reader_del()
75 kref_put(&mbus->ref, mon_bus_drop); in mon_reader_del()
80 static void mon_bus_submit(struct mon_bus *mbus, struct urb *urb) in mon_bus_submit() argument
86 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_submit()
87 mbus->cnt_events++; in mon_bus_submit()
88 list_for_each (pos, &mbus->r_list) { in mon_bus_submit()
92 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_submit()
97 struct mon_bus *mbus; in mon_submit() local
99 mbus = ubus->mon_bus; in mon_submit()
100 if (mbus != NULL) in mon_submit()
101 mon_bus_submit(mbus, urb); in mon_submit()
107 static void mon_bus_submit_error(struct mon_bus *mbus, struct urb *urb, int error) in mon_bus_submit_error() argument
113 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_submit_error()
114 mbus->cnt_events++; in mon_bus_submit_error()
115 list_for_each (pos, &mbus->r_list) { in mon_bus_submit_error()
119 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_submit_error()
124 struct mon_bus *mbus; in mon_submit_error() local
126 mbus = ubus->mon_bus; in mon_submit_error()
127 if (mbus != NULL) in mon_submit_error()
128 mon_bus_submit_error(mbus, urb, error); in mon_submit_error()
134 static void mon_bus_complete(struct mon_bus *mbus, struct urb *urb, int status) in mon_bus_complete() argument
140 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_complete()
141 mbus->cnt_events++; in mon_bus_complete()
142 list_for_each (pos, &mbus->r_list) { in mon_bus_complete()
146 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_complete()
151 struct mon_bus *mbus; in mon_complete() local
153 mbus = ubus->mon_bus; in mon_complete()
154 if (mbus != NULL) in mon_complete()
155 mon_bus_complete(mbus, urb, status); in mon_complete()
164 static void mon_stop(struct mon_bus *mbus) in mon_stop() argument
169 if (mbus == &mon_bus0) { in mon_stop()
171 mbus = list_entry(p, struct mon_bus, bus_link); in mon_stop()
175 if (mbus->nreaders == 0 && (ubus = mbus->u_bus) != NULL) in mon_stop()
183 if (mon_bus0.nreaders == 0 && (ubus = mbus->u_bus) != NULL) { in mon_stop()
210 struct mon_bus *mbus = ubus->mon_bus; in mon_bus_remove() local
213 list_del(&mbus->bus_link); in mon_bus_remove()
214 if (mbus->text_inited) in mon_bus_remove()
215 mon_text_del(mbus); in mon_bus_remove()
216 if (mbus->bin_inited) in mon_bus_remove()
217 mon_bin_del(mbus); in mon_bus_remove()
219 mon_dissolve(mbus, ubus); in mon_bus_remove()
220 kref_put(&mbus->ref, mon_bus_drop); in mon_bus_remove()
253 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus) in mon_dissolve() argument
262 mbus->u_bus = NULL; in mon_dissolve()
272 struct mon_bus *mbus = container_of(r, struct mon_bus, ref); in mon_bus_drop() local
273 kfree(mbus); in mon_bus_drop()
284 struct mon_bus *mbus; in mon_bus_init() local
286 mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL); in mon_bus_init()
287 if (mbus == NULL) in mon_bus_init()
289 kref_init(&mbus->ref); in mon_bus_init()
290 spin_lock_init(&mbus->lock); in mon_bus_init()
291 INIT_LIST_HEAD(&mbus->r_list); in mon_bus_init()
297 mbus->u_bus = ubus; in mon_bus_init()
298 ubus->mon_bus = mbus; in mon_bus_init()
300 mbus->text_inited = mon_text_add(mbus, ubus); in mon_bus_init()
301 mbus->bin_inited = mon_bin_add(mbus, ubus); in mon_bus_init()
304 list_add_tail(&mbus->bus_link, &mon_buses); in mon_bus_init()
314 struct mon_bus *mbus = &mon_bus0; in mon_bus0_init() local
316 kref_init(&mbus->ref); in mon_bus0_init()
317 spin_lock_init(&mbus->lock); in mon_bus0_init()
318 INIT_LIST_HEAD(&mbus->r_list); in mon_bus0_init()
320 mbus->text_inited = mon_text_add(mbus, NULL); in mon_bus0_init()
321 mbus->bin_inited = mon_bin_add(mbus, NULL); in mon_bus0_init()
335 struct mon_bus *mbus; in mon_bus_lookup() local
341 mbus = list_entry(p, struct mon_bus, bus_link); in mon_bus_lookup()
342 if (mbus->u_bus->busnum == num) { in mon_bus_lookup()
343 return mbus; in mon_bus_lookup()
386 struct mon_bus *mbus; in mon_exit() local
396 mbus = list_entry(p, struct mon_bus, bus_link); in mon_exit()
399 if (mbus->text_inited) in mon_exit()
400 mon_text_del(mbus); in mon_exit()
401 if (mbus->bin_inited) in mon_exit()
402 mon_bin_del(mbus); in mon_exit()
409 if (mbus->nreaders) { in mon_exit()
412 mbus->nreaders, mbus->u_bus->busnum); in mon_exit()
413 atomic_set(&mbus->ref.refcount, 2); /* Force leak */ in mon_exit()
416 mon_dissolve(mbus, mbus->u_bus); in mon_exit()
417 kref_put(&mbus->ref, mon_bus_drop); in mon_exit()
420 mbus = &mon_bus0; in mon_exit()
421 if (mbus->text_inited) in mon_exit()
422 mon_text_del(mbus); in mon_exit()
423 if (mbus->bin_inited) in mon_exit()
424 mon_bin_del(mbus); in mon_exit()