Lines Matching defs:mbus

20 static void mon_stop(struct mon_bus *mbus);
21 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus);
33 * This must be called with mon_lock taken because of mbus->ref.
35 void mon_reader_add(struct mon_bus *mbus, struct mon_reader *r)
40 spin_lock_irqsave(&mbus->lock, flags);
41 if (mbus->nreaders == 0) {
42 if (mbus == &mon_bus0) {
49 mbus->u_bus->monitored = 1;
52 mbus->nreaders++;
53 list_add_tail(&r->r_link, &mbus->r_list);
54 spin_unlock_irqrestore(&mbus->lock, flags);
56 kref_get(&mbus->ref);
62 * This is called with mon_lock taken, so we can decrement mbus->ref.
64 void mon_reader_del(struct mon_bus *mbus, struct mon_reader *r)
68 spin_lock_irqsave(&mbus->lock, flags);
70 --mbus->nreaders;
71 if (mbus->nreaders == 0)
72 mon_stop(mbus);
73 spin_unlock_irqrestore(&mbus->lock, flags);
75 kref_put(&mbus->ref, mon_bus_drop);
80 static void mon_bus_submit(struct mon_bus *mbus, struct urb *urb)
86 spin_lock_irqsave(&mbus->lock, flags);
87 mbus->cnt_events++;
88 list_for_each (pos, &mbus->r_list) {
92 spin_unlock_irqrestore(&mbus->lock, flags);
97 struct mon_bus *mbus;
99 if ((mbus = ubus->mon_bus) != NULL)
100 mon_bus_submit(mbus, urb);
106 static void mon_bus_submit_error(struct mon_bus *mbus, struct urb *urb, int error)
112 spin_lock_irqsave(&mbus->lock, flags);
113 mbus->cnt_events++;
114 list_for_each (pos, &mbus->r_list) {
118 spin_unlock_irqrestore(&mbus->lock, flags);
123 struct mon_bus *mbus;
125 if ((mbus = ubus->mon_bus) != NULL)
126 mon_bus_submit_error(mbus, urb, error);
132 static void mon_bus_complete(struct mon_bus *mbus, struct urb *urb, int status)
138 spin_lock_irqsave(&mbus->lock, flags);
139 mbus->cnt_events++;
140 list_for_each (pos, &mbus->r_list) {
144 spin_unlock_irqrestore(&mbus->lock, flags);
149 struct mon_bus *mbus;
151 if ((mbus = ubus->mon_bus) != NULL)
152 mon_bus_complete(mbus, urb, status);
161 static void mon_stop(struct mon_bus *mbus)
166 if (mbus == &mon_bus0) {
168 mbus = list_entry(p, struct mon_bus, bus_link);
172 if (mbus->nreaders == 0 && (ubus = mbus->u_bus) != NULL)
180 if (mon_bus0.nreaders == 0 && (ubus = mbus->u_bus) != NULL) {
207 struct mon_bus *mbus = ubus->mon_bus;
210 list_del(&mbus->bus_link);
211 if (mbus->text_inited)
212 mon_text_del(mbus);
213 if (mbus->bin_inited)
214 mon_bin_del(mbus);
216 mon_dissolve(mbus, ubus);
217 kref_put(&mbus->ref, mon_bus_drop);
250 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus)
259 mbus->u_bus = NULL;
269 struct mon_bus *mbus = container_of(r, struct mon_bus, ref);
270 kfree(mbus);
281 struct mon_bus *mbus;
283 if ((mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL)) == NULL)
285 kref_init(&mbus->ref);
286 spin_lock_init(&mbus->lock);
287 INIT_LIST_HEAD(&mbus->r_list);
293 mbus->u_bus = ubus;
294 ubus->mon_bus = mbus;
296 mbus->text_inited = mon_text_add(mbus, ubus);
297 mbus->bin_inited = mon_bin_add(mbus, ubus);
300 list_add_tail(&mbus->bus_link, &mon_buses);
310 struct mon_bus *mbus = &mon_bus0;
312 kref_init(&mbus->ref);
313 spin_lock_init(&mbus->lock);
314 INIT_LIST_HEAD(&mbus->r_list);
316 mbus->text_inited = mon_text_add(mbus, NULL);
317 mbus->bin_inited = mon_bin_add(mbus, NULL);
331 struct mon_bus *mbus;
337 mbus = list_entry(p, struct mon_bus, bus_link);
338 if (mbus->u_bus->busnum == num) {
339 return mbus;
382 struct mon_bus *mbus;
392 mbus = list_entry(p, struct mon_bus, bus_link);
395 if (mbus->text_inited)
396 mon_text_del(mbus);
397 if (mbus->bin_inited)
398 mon_bin_del(mbus);
405 if (mbus->nreaders) {
408 mbus->nreaders, mbus->u_bus->busnum);
409 atomic_set(&mbus->ref.refcount, 2); /* Force leak */
412 mon_dissolve(mbus, mbus->u_bus);
413 kref_put(&mbus->ref, mon_bus_drop);
416 mbus = &mon_bus0;
417 if (mbus->text_inited)
418 mon_text_del(mbus);
419 if (mbus->bin_inited)
420 mon_bin_del(mbus);