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 if ((mbus = ubus->mon_bus) != NULL) in mon_submit()
100 mon_bus_submit(mbus, urb); in mon_submit()
106 static void mon_bus_submit_error(struct mon_bus *mbus, struct urb *urb, int error) in mon_bus_submit_error() argument
112 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_submit_error()
113 mbus->cnt_events++; in mon_bus_submit_error()
114 list_for_each (pos, &mbus->r_list) { in mon_bus_submit_error()
118 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_submit_error()
123 struct mon_bus *mbus; in mon_submit_error() local
125 if ((mbus = ubus->mon_bus) != NULL) in mon_submit_error()
126 mon_bus_submit_error(mbus, urb, error); in mon_submit_error()
132 static void mon_bus_complete(struct mon_bus *mbus, struct urb *urb, int status) in mon_bus_complete() argument
138 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_complete()
139 mbus->cnt_events++; in mon_bus_complete()
140 list_for_each (pos, &mbus->r_list) { in mon_bus_complete()
144 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_complete()
149 struct mon_bus *mbus; in mon_complete() local
151 if ((mbus = ubus->mon_bus) != NULL) in mon_complete()
152 mon_bus_complete(mbus, urb, status); in mon_complete()
161 static void mon_stop(struct mon_bus *mbus) in mon_stop() argument
166 if (mbus == &mon_bus0) { in mon_stop()
168 mbus = list_entry(p, struct mon_bus, bus_link); in mon_stop()
172 if (mbus->nreaders == 0 && (ubus = mbus->u_bus) != NULL) in mon_stop()
180 if (mon_bus0.nreaders == 0 && (ubus = mbus->u_bus) != NULL) { in mon_stop()
207 struct mon_bus *mbus = ubus->mon_bus; in mon_bus_remove() local
210 list_del(&mbus->bus_link); in mon_bus_remove()
211 if (mbus->text_inited) in mon_bus_remove()
212 mon_text_del(mbus); in mon_bus_remove()
213 if (mbus->bin_inited) in mon_bus_remove()
214 mon_bin_del(mbus); in mon_bus_remove()
216 mon_dissolve(mbus, ubus); in mon_bus_remove()
217 kref_put(&mbus->ref, mon_bus_drop); in mon_bus_remove()
250 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus) in mon_dissolve() argument
259 mbus->u_bus = NULL; in mon_dissolve()
269 struct mon_bus *mbus = container_of(r, struct mon_bus, ref); in mon_bus_drop() local
270 kfree(mbus); in mon_bus_drop()
281 struct mon_bus *mbus; in mon_bus_init() local
283 if ((mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL)) == NULL) in mon_bus_init()
285 kref_init(&mbus->ref); in mon_bus_init()
286 spin_lock_init(&mbus->lock); in mon_bus_init()
287 INIT_LIST_HEAD(&mbus->r_list); in mon_bus_init()
293 mbus->u_bus = ubus; in mon_bus_init()
294 ubus->mon_bus = mbus; in mon_bus_init()
296 mbus->text_inited = mon_text_add(mbus, ubus); in mon_bus_init()
297 mbus->bin_inited = mon_bin_add(mbus, ubus); in mon_bus_init()
300 list_add_tail(&mbus->bus_link, &mon_buses); in mon_bus_init()
310 struct mon_bus *mbus = &mon_bus0; in mon_bus0_init() local
312 kref_init(&mbus->ref); in mon_bus0_init()
313 spin_lock_init(&mbus->lock); in mon_bus0_init()
314 INIT_LIST_HEAD(&mbus->r_list); in mon_bus0_init()
316 mbus->text_inited = mon_text_add(mbus, NULL); in mon_bus0_init()
317 mbus->bin_inited = mon_bin_add(mbus, NULL); in mon_bus0_init()
331 struct mon_bus *mbus; in mon_bus_lookup() local
337 mbus = list_entry(p, struct mon_bus, bus_link); in mon_bus_lookup()
338 if (mbus->u_bus->busnum == num) { in mon_bus_lookup()
339 return mbus; in mon_bus_lookup()
382 struct mon_bus *mbus; in mon_exit() local
392 mbus = list_entry(p, struct mon_bus, bus_link); in mon_exit()
395 if (mbus->text_inited) in mon_exit()
396 mon_text_del(mbus); in mon_exit()
397 if (mbus->bin_inited) in mon_exit()
398 mon_bin_del(mbus); in mon_exit()
405 if (mbus->nreaders) { in mon_exit()
408 mbus->nreaders, mbus->u_bus->busnum); in mon_exit()
409 atomic_set(&mbus->ref.refcount, 2); /* Force leak */ in mon_exit()
412 mon_dissolve(mbus, mbus->u_bus); in mon_exit()
413 kref_put(&mbus->ref, mon_bus_drop); in mon_exit()
416 mbus = &mon_bus0; in mon_exit()
417 if (mbus->text_inited) in mon_exit()
418 mon_text_del(mbus); in mon_exit()
419 if (mbus->bin_inited) in mon_exit()
420 mon_bin_del(mbus); in mon_exit()