Lines Matching refs:port

104 static void attach_driver_chain(struct parport *port)  in attach_driver_chain()  argument
109 drv->attach(port); in attach_driver_chain()
113 static void detach_driver_chain(struct parport *port) in detach_driver_chain() argument
118 drv->detach (port); in detach_driver_chain()
156 struct parport *port; in parport_register_driver() local
162 list_for_each_entry(port, &portlist, list) in parport_register_driver()
163 drv->attach(port); in parport_register_driver()
189 struct parport *port; in parport_unregister_driver() local
193 list_for_each_entry(port, &portlist, list) in parport_unregister_driver()
194 drv->detach(port); in parport_unregister_driver()
198 static void free_port (struct parport *port) in free_port() argument
202 list_del(&port->full_list); in free_port()
205 kfree(port->probe_info[d].class_name); in free_port()
206 kfree(port->probe_info[d].mfr); in free_port()
207 kfree(port->probe_info[d].model); in free_port()
208 kfree(port->probe_info[d].cmdset); in free_port()
209 kfree(port->probe_info[d].description); in free_port()
212 kfree(port->name); in free_port()
213 kfree(port); in free_port()
224 struct parport *parport_get_port (struct parport *port) in parport_get_port() argument
226 atomic_inc (&port->ref_count); in parport_get_port()
227 return port; in parport_get_port()
238 void parport_put_port (struct parport *port) in parport_put_port() argument
240 if (atomic_dec_and_test (&port->ref_count)) in parport_put_port()
242 free_port (port); in parport_put_port()
358 void parport_announce_port (struct parport *port) in parport_announce_port() argument
364 parport_daisy_init(port); in parport_announce_port()
367 if (!port->dev) in parport_announce_port()
370 port->name); in parport_announce_port()
372 parport_proc_register(port); in parport_announce_port()
375 list_add_tail(&port->list, &portlist); in parport_announce_port()
377 struct parport *slave = port->slaves[i-1]; in parport_announce_port()
384 attach_driver_chain (port); in parport_announce_port()
386 struct parport *slave = port->slaves[i-1]; in parport_announce_port()
412 void parport_remove_port(struct parport *port) in parport_remove_port() argument
419 detach_driver_chain (port); in parport_remove_port()
423 parport_daisy_fini(port); in parport_remove_port()
425 struct parport *slave = port->slaves[i-1]; in parport_remove_port()
433 port->ops = &dead_ops; in parport_remove_port()
435 list_del_init(&port->list); in parport_remove_port()
437 struct parport *slave = port->slaves[i-1]; in parport_remove_port()
445 parport_proc_unregister(port); in parport_remove_port()
448 struct parport *slave = port->slaves[i-1]; in parport_remove_port()
524 parport_register_device(struct parport *port, const char *name, in parport_register_device() argument
531 if (port->physport->flags & PARPORT_FLAG_EXCL) { in parport_register_device()
534 port->name); in parport_register_device()
540 …printk(KERN_INFO "%s: refused to register lurking device (%s) without callbacks\n", port->name, na… in parport_register_device()
550 if (!try_module_get(port->ops->owner)) { in parport_register_device()
554 parport_get_port (port); in parport_register_device()
558 printk(KERN_WARNING "%s: memory squeeze, couldn't register %s.\n", port->name, name); in parport_register_device()
564 printk(KERN_WARNING "%s: memory squeeze, couldn't register %s.\n", port->name, name); in parport_register_device()
569 tmp->port = port; in parport_register_device()
585 spin_lock(&port->physport->pardevice_lock); in parport_register_device()
588 if (port->physport->devices) { in parport_register_device()
589 spin_unlock (&port->physport->pardevice_lock); in parport_register_device()
592 "device %s\n", port->name, name); in parport_register_device()
595 port->flags |= PARPORT_FLAG_EXCL; in parport_register_device()
598 tmp->next = port->physport->devices; in parport_register_device()
602 if (port->physport->devices) in parport_register_device()
603 port->physport->devices->prev = tmp; in parport_register_device()
604 port->physport->devices = tmp; in parport_register_device()
605 spin_unlock(&port->physport->pardevice_lock); in parport_register_device()
615 port->ops->init_state(tmp, tmp->state); in parport_register_device()
616 if (!test_and_set_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags)) { in parport_register_device()
617 port->proc_device = tmp; in parport_register_device()
627 parport_put_port (port); in parport_register_device()
628 module_put(port->ops->owner); in parport_register_device()
642 struct parport *port; in parport_unregister_device() local
651 port = dev->port->physport; in parport_unregister_device()
653 if (port->proc_device == dev) { in parport_unregister_device()
654 port->proc_device = NULL; in parport_unregister_device()
655 clear_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags); in parport_unregister_device()
659 if (port->cad == dev) { in parport_unregister_device()
661 port->name, dev->name); in parport_unregister_device()
665 spin_lock(&port->pardevice_lock); in parport_unregister_device()
671 port->devices = dev->next; in parport_unregister_device()
674 port->flags &= ~PARPORT_FLAG_EXCL; in parport_unregister_device()
676 spin_unlock(&port->pardevice_lock); in parport_unregister_device()
680 spin_lock_irq(&port->waitlist_lock); in parport_unregister_device()
681 if (dev->waitprev || dev->waitnext || port->waithead == dev) { in parport_unregister_device()
685 port->waithead = dev->waitnext; in parport_unregister_device()
689 port->waittail = dev->waitprev; in parport_unregister_device()
691 spin_unlock_irq(&port->waitlist_lock); in parport_unregister_device()
696 module_put(port->ops->owner); in parport_unregister_device()
697 parport_put_port (port); in parport_unregister_device()
714 struct parport *port, *result = NULL; in parport_find_number() local
720 list_for_each_entry(port, &portlist, list) { in parport_find_number()
721 if (port->number == number) { in parport_find_number()
722 result = parport_get_port (port); in parport_find_number()
744 struct parport *port, *result = NULL; in parport_find_base() local
750 list_for_each_entry(port, &portlist, list) { in parport_find_base()
751 if (port->base == base) { in parport_find_base()
752 result = parport_get_port (port); in parport_find_base()
775 struct parport *port = dev->port->physport; in parport_claim() local
778 if (port->cad == dev) { in parport_claim()
780 dev->port->name,dev->name); in parport_claim()
785 write_lock_irqsave (&port->cad_lock, flags); in parport_claim()
786 if ((oldcad = port->cad) != NULL) { in parport_claim()
790 port->ops->save_state(port, dev->state); in parport_claim()
794 if (port->cad != oldcad) { in parport_claim()
799 port->name, oldcad->name); in parport_claim()
800 if (port->cad) in parport_claim()
810 spin_lock_irq (&port->waitlist_lock); in parport_claim()
814 port->waithead = dev->waitnext; in parport_claim()
818 port->waittail = dev->waitprev; in parport_claim()
819 spin_unlock_irq (&port->waitlist_lock); in parport_claim()
824 port->cad = dev; in parport_claim()
828 if (dev->port->muxport >= 0) { in parport_claim()
830 port->muxsel = dev->port->muxport; in parport_claim()
836 if (!parport_daisy_select (port, dev->daisy, in parport_claim()
838 port->daisy = dev->daisy; in parport_claim()
843 port->ops->restore_state(port, dev->state); in parport_claim()
844 write_unlock_irqrestore(&port->cad_lock, flags); in parport_claim()
855 spin_lock (&port->waitlist_lock); in parport_claim()
859 dev->waitprev = port->waittail; in parport_claim()
860 if (port->waittail) { in parport_claim()
861 port->waittail->waitnext = dev; in parport_claim()
862 port->waittail = dev; in parport_claim()
864 port->waithead = port->waittail = dev; in parport_claim()
866 spin_unlock (&port->waitlist_lock); in parport_claim()
868 write_unlock_irqrestore (&port->cad_lock, flags); in parport_claim()
923 if (dev->port->physport->cad != dev) in parport_claim_or_block()
926 dev->port->physport->cad ? in parport_claim_or_block()
927 dev->port->physport->cad->name:"nobody"); in parport_claim_or_block()
945 struct parport *port = dev->port->physport; in parport_release() local
950 write_lock_irqsave(&port->cad_lock, flags); in parport_release()
951 if (port->cad != dev) { in parport_release()
952 write_unlock_irqrestore (&port->cad_lock, flags); in parport_release()
954 "when not owner\n", port->name, dev->name); in parport_release()
960 if (dev->port->muxport >= 0) { in parport_release()
962 port->muxsel = -1; in parport_release()
967 parport_daisy_deselect_all (port); in parport_release()
968 port->daisy = -1; in parport_release()
972 port->cad = NULL; in parport_release()
973 write_unlock_irqrestore(&port->cad_lock, flags); in parport_release()
976 port->ops->save_state(port, dev->state); in parport_release()
981 for (pd = port->waithead; pd; pd = pd->waitnext) { in parport_release()
989 if (dev->port->cad) /* racy but no matter */ in parport_release()
992 printk(KERN_ERR "%s: don't know how to wake %s\n", port->name, pd->name); in parport_release()
999 for (pd = port->devices; (port->cad == NULL) && pd; pd = pd->next) { in parport_release()
1007 struct parport *port = dev_id; in parport_irq_handler() local
1009 parport_generic_irq(port); in parport_irq_handler()