Author: jmallett Date: Fri Sep 24 02:41:52 2010 New Revision: 213090 URL: http://svn.freebsd.org/changeset/base/213090
Log: o) Add bus_teardown_intr for pci and ciu. This allows the Promise SATA driver to try to switch interrupt handlers at setup. It's not a very good implementation of bus_teardown_intr, though. o) Set cache line size and latency timers for PCI devices per Linux. Modified: head/sys/mips/cavium/ciu.c head/sys/mips/cavium/octopci.c Modified: head/sys/mips/cavium/ciu.c ============================================================================== --- head/sys/mips/cavium/ciu.c Fri Sep 24 00:14:24 2010 (r213089) +++ head/sys/mips/cavium/ciu.c Fri Sep 24 02:41:52 2010 (r213090) @@ -78,6 +78,8 @@ static struct resource *ciu_alloc_resour static int ciu_setup_intr(device_t, device_t, struct resource *, int, driver_filter_t *, driver_intr_t *, void *, void **); +static int ciu_teardown_intr(device_t, device_t, + struct resource *, void *); static void ciu_hinted_child(device_t, const char *, int); static void ciu_en0_intr_mask(void *); @@ -230,6 +232,19 @@ ciu_setup_intr(device_t bus, device_t ch return (0); } +static int +ciu_teardown_intr(device_t bus, device_t child, struct resource *res, + void *cookie) +{ + int error; + + error = intr_event_remove_handler(cookie); + if (error != 0) + return (error); + + return (0); +} + static void ciu_hinted_child(device_t bus, const char *dname, int dunit) { @@ -342,7 +357,7 @@ static device_method_t ciu_methods[] = { DEVMETHOD(bus_alloc_resource, ciu_alloc_resource), DEVMETHOD(bus_activate_resource,bus_generic_activate_resource), DEVMETHOD(bus_setup_intr, ciu_setup_intr), - DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + DEVMETHOD(bus_teardown_intr, ciu_teardown_intr), DEVMETHOD(bus_add_child, bus_generic_add_child), DEVMETHOD(bus_hinted_child, ciu_hinted_child), Modified: head/sys/mips/cavium/octopci.c ============================================================================== --- head/sys/mips/cavium/octopci.c Fri Sep 24 00:14:24 2010 (r213089) +++ head/sys/mips/cavium/octopci.c Fri Sep 24 02:41:52 2010 (r213090) @@ -658,6 +658,16 @@ octopci_init_device(device_t dev, unsign command |= PCIM_CMD_BUSMASTEREN; octopci_write_config(dev, b, s, f, PCIR_COMMAND, command, 1); + /* + * Set cache line size. On Octeon it should be 128 bytes, + * but according to Linux some Intel bridges have trouble + * with values over 64 bytes, so use 64 bytes. + */ + octopci_write_config(dev, b, s, f, PCIR_CACHELNSZ, 16, 1); + + /* Set latency timer. */ + octopci_write_config(dev, b, s, f, PCIR_LATTIMER, 48, 1); + /* Configure PCI-PCI bridges. */ class = octopci_read_config(dev, b, s, f, PCIR_CLASS, 1); if (class != PCIC_BRIDGE) @@ -783,6 +793,7 @@ static device_method_t octopci_methods[] DEVMETHOD(bus_activate_resource,octopci_activate_resource), DEVMETHOD(bus_deactivate_resource,bus_generic_deactivate_resource), DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), DEVMETHOD(bus_add_child, bus_generic_add_child), _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"