On Sun, Jan 19, 2014 at 11:56 PM, Mark Kettenis <[email protected]> wrote:
> Currently not able to test this myself. Can somebody verify that
> hotplug a *real* expresscard device still works?
>
> Thanks,
>
> Mark
>
>
> Index: ppb.c
> ===================================================================
> RCS file: /home/cvs/src/sys/dev/pci/ppb.c,v
> retrieving revision 1.56
> diff -u -p -r1.56 ppb.c
> --- ppb.c 6 Dec 2013 21:03:04 -0000 1.56
> +++ ppb.c 20 Jan 2014 04:52:48 -0000
> @@ -35,8 +35,8 @@
> #include <sys/systm.h>
> #include <sys/kernel.h>
> #include <sys/device.h>
> +#include <sys/task.h>
> #include <sys/timeout.h>
> -#include <sys/workq.h>
>
> #include <dev/pci/pcireg.h>
> #include <dev/pci/pcivar.h>
> @@ -70,6 +70,9 @@ struct ppb_softc {
> struct extent *sc_pmemex;
> struct device *sc_psc;
> int sc_cap_off;
> + struct task sc_insert_task;
> + struct task sc_rescan_task;
> + struct task sc_remove_task;
> struct timeout sc_to;
>
> bus_addr_t sc_iobase, sc_iolimit;
> @@ -173,6 +176,11 @@ ppbattach(struct device *parent, struct
> /* Check for PCI Express capabilities and setup hotplug support. */
> if (pci_get_capability(pc, pa->pa_tag, PCI_CAP_PCIEXPRESS,
> &sc->sc_cap_off, ®) && (reg & PCI_PCIE_XCAP_SI)) {
> + task_set(&sc->sc_insert_task, ppb_hotplug_insert, sc, NULL);
> + task_set(&sc->sc_rescan_task, ppb_hotplug_rescan, sc, NULL);
> + task_set(&sc->sc_remove_task, ppb_hotplug_remove, sc, NULL);
> + timeout_set(&sc->sc_to, ppb_hotplug_insert_finish, sc);
> +
> #ifdef __i386__
> if (pci_intr_map(pa, &ih) == 0)
> sc->sc_intrhand = pci_intr_establish(pc, ih, IPL_BIO,
> @@ -193,8 +201,6 @@ ppbattach(struct device *parent, struct
> reg |= (PCI_PCIE_SLCSR_HPE | PCI_PCIE_SLCSR_PDE);
> pci_conf_write(pc, pa->pa_tag,
> sc->sc_cap_off + PCI_PCIE_SLCSR, reg);
> -
> - timeout_set(&sc->sc_to, ppb_hotplug_insert_finish,
> sc);
> }
> }
>
> @@ -646,9 +652,9 @@ ppb_intr(void *arg)
> sc->sc_cap_off + PCI_PCIE_SLCSR);
> if (reg & PCI_PCIE_SLCSR_PDC) {
> if (reg & PCI_PCIE_SLCSR_PDS)
> - workq_add_task(NULL, 0, ppb_hotplug_insert, sc, NULL);
> + task_add(systq, &sc->sc_insert_task);
> else
> - workq_add_task(NULL, 0, ppb_hotplug_remove, sc, NULL);
> + task_add(systq, &sc->sc_remove_task);
>
> /* Clear interrupts. */
> pci_conf_write(sc->sc_pc, sc->sc_tag,
> @@ -686,7 +692,9 @@ ppb_hotplug_insert(void *arg1, void *arg
> void
> ppb_hotplug_insert_finish(void *arg)
> {
> - workq_add_task(NULL, 0, ppb_hotplug_rescan, arg, NULL);
> + struct ppb_softc *sc = arg;
> +
> + task_add(systq, &sc->sc_rescan_task);
> }
>
> int
>
Hello, i have issue with the ppb (still trying to know if it is
hardware or software).
I do not use hotplug.
i <Just> plug two pci card into a pci express slot using a Pericom
Pci-to-Pci bridge.
After 4 days the kernel informs me i lost connection to the cards (vr
driver and rl driver), it may comes from a power problem.
I notice there is <hole> in the code, like :
/* XXX Powerup the card. */
My question is more about the driver itself, it did not change a lot
since 1994 , while netbsd apparently move to a complete different
driver :
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/ppbus/?only_with_tag=HEAD
Are those driving the same chipset family ?
any info on that ?
Best regards,
--
---------------------------------------------------------------------------------------------------------------------
() ascii ribbon campaign - against html e-mail
/\