Lines Matching refs:mbus

21 static void mon_stop(struct mon_bus *mbus);
22 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus);
36 void mon_reader_add(struct mon_bus *mbus, struct mon_reader *r) in mon_reader_add() argument
41 spin_lock_irqsave(&mbus->lock, flags); in mon_reader_add()
42 if (mbus->nreaders == 0) { in mon_reader_add()
43 if (mbus == &mon_bus0) { in mon_reader_add()
50 mbus->u_bus->monitored = 1; in mon_reader_add()
53 mbus->nreaders++; in mon_reader_add()
54 list_add_tail(&r->r_link, &mbus->r_list); in mon_reader_add()
55 spin_unlock_irqrestore(&mbus->lock, flags); in mon_reader_add()
57 kref_get(&mbus->ref); in mon_reader_add()
65 void mon_reader_del(struct mon_bus *mbus, struct mon_reader *r) in mon_reader_del() argument
69 spin_lock_irqsave(&mbus->lock, flags); in mon_reader_del()
71 --mbus->nreaders; in mon_reader_del()
72 if (mbus->nreaders == 0) in mon_reader_del()
73 mon_stop(mbus); in mon_reader_del()
74 spin_unlock_irqrestore(&mbus->lock, flags); in mon_reader_del()
76 kref_put(&mbus->ref, mon_bus_drop); in mon_reader_del()
81 static void mon_bus_submit(struct mon_bus *mbus, struct urb *urb) in mon_bus_submit() argument
87 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_submit()
88 mbus->cnt_events++; in mon_bus_submit()
89 list_for_each (pos, &mbus->r_list) { in mon_bus_submit()
93 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_submit()
98 struct mon_bus *mbus; in mon_submit() local
100 mbus = ubus->mon_bus; in mon_submit()
101 if (mbus != NULL) in mon_submit()
102 mon_bus_submit(mbus, urb); in mon_submit()
108 static void mon_bus_submit_error(struct mon_bus *mbus, struct urb *urb, int error) in mon_bus_submit_error() argument
114 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_submit_error()
115 mbus->cnt_events++; in mon_bus_submit_error()
116 list_for_each (pos, &mbus->r_list) { in mon_bus_submit_error()
120 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_submit_error()
125 struct mon_bus *mbus; in mon_submit_error() local
127 mbus = ubus->mon_bus; in mon_submit_error()
128 if (mbus != NULL) in mon_submit_error()
129 mon_bus_submit_error(mbus, urb, error); in mon_submit_error()
135 static void mon_bus_complete(struct mon_bus *mbus, struct urb *urb, int status) in mon_bus_complete() argument
141 spin_lock_irqsave(&mbus->lock, flags); in mon_bus_complete()
142 mbus->cnt_events++; in mon_bus_complete()
143 list_for_each (pos, &mbus->r_list) { in mon_bus_complete()
147 spin_unlock_irqrestore(&mbus->lock, flags); in mon_bus_complete()
152 struct mon_bus *mbus; in mon_complete() local
154 mbus = ubus->mon_bus; in mon_complete()
155 if (mbus != NULL) in mon_complete()
156 mon_bus_complete(mbus, urb, status); in mon_complete()
165 static void mon_stop(struct mon_bus *mbus) in mon_stop() argument
170 if (mbus == &mon_bus0) { in mon_stop()
172 mbus = list_entry(p, struct mon_bus, bus_link); in mon_stop()
176 if (mbus->nreaders == 0 && (ubus = mbus->u_bus) != NULL) in mon_stop()
184 if (mon_bus0.nreaders == 0 && (ubus = mbus->u_bus) != NULL) { in mon_stop()
211 struct mon_bus *mbus = ubus->mon_bus; in mon_bus_remove() local
214 list_del(&mbus->bus_link); in mon_bus_remove()
215 if (mbus->text_inited) in mon_bus_remove()
216 mon_text_del(mbus); in mon_bus_remove()
217 if (mbus->bin_inited) in mon_bus_remove()
218 mon_bin_del(mbus); in mon_bus_remove()
220 mon_dissolve(mbus, ubus); in mon_bus_remove()
221 kref_put(&mbus->ref, mon_bus_drop); in mon_bus_remove()
254 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus) in mon_dissolve() argument
263 mbus->u_bus = NULL; in mon_dissolve()
273 struct mon_bus *mbus = container_of(r, struct mon_bus, ref); in mon_bus_drop() local
274 kfree(mbus); in mon_bus_drop()
285 struct mon_bus *mbus; in mon_bus_init() local
287 mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL); in mon_bus_init()
288 if (mbus == NULL) in mon_bus_init()
290 kref_init(&mbus->ref); in mon_bus_init()
291 spin_lock_init(&mbus->lock); in mon_bus_init()
292 INIT_LIST_HEAD(&mbus->r_list); in mon_bus_init()
298 mbus->u_bus = ubus; in mon_bus_init()
299 ubus->mon_bus = mbus; in mon_bus_init()
301 mbus->text_inited = mon_text_add(mbus, ubus); in mon_bus_init()
302 mbus->bin_inited = mon_bin_add(mbus, ubus); in mon_bus_init()
305 list_add_tail(&mbus->bus_link, &mon_buses); in mon_bus_init()
315 struct mon_bus *mbus = &mon_bus0; in mon_bus0_init() local
317 kref_init(&mbus->ref); in mon_bus0_init()
318 spin_lock_init(&mbus->lock); in mon_bus0_init()
319 INIT_LIST_HEAD(&mbus->r_list); in mon_bus0_init()
321 mbus->text_inited = mon_text_add(mbus, NULL); in mon_bus0_init()
322 mbus->bin_inited = mon_bin_add(mbus, NULL); in mon_bus0_init()
336 struct mon_bus *mbus; in mon_bus_lookup() local
342 mbus = list_entry(p, struct mon_bus, bus_link); in mon_bus_lookup()
343 if (mbus->u_bus->busnum == num) { in mon_bus_lookup()
344 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 kref_get(&mbus->ref); /* 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()