Lines Matching refs:info
179 int (*io_setup)(struct smi_info *info);
180 void (*io_cleanup)(struct smi_info *info);
181 int (*irq_setup)(struct smi_info *info);
182 void (*irq_cleanup)(struct smi_info *info);
185 void (*addr_source_cleanup)(struct smi_info *info);
1420 static void std_irq_cleanup(struct smi_info *info) in std_irq_cleanup() argument
1422 if (info->si_type == SI_BT) in std_irq_cleanup()
1424 info->io.outputb(&info->io, IPMI_BT_INTMASK_REG, 0); in std_irq_cleanup()
1425 free_irq(info->irq, info); in std_irq_cleanup()
1428 static int std_irq_setup(struct smi_info *info) in std_irq_setup() argument
1432 if (!info->irq) in std_irq_setup()
1435 if (info->si_type == SI_BT) { in std_irq_setup()
1436 rv = request_irq(info->irq, in std_irq_setup()
1440 info); in std_irq_setup()
1443 info->io.outputb(&info->io, IPMI_BT_INTMASK_REG, in std_irq_setup()
1446 rv = request_irq(info->irq, in std_irq_setup()
1450 info); in std_irq_setup()
1452 dev_warn(info->dev, "%s unable to claim interrupt %d," in std_irq_setup()
1454 DEVICE_NAME, info->irq); in std_irq_setup()
1455 info->irq = 0; in std_irq_setup()
1457 info->irq_cleanup = std_irq_cleanup; in std_irq_setup()
1458 dev_info(info->dev, "Using irq %d\n", info->irq); in std_irq_setup()
1509 static void port_cleanup(struct smi_info *info) in port_cleanup() argument
1511 unsigned int addr = info->io.addr_data; in port_cleanup()
1515 for (idx = 0; idx < info->io_size; idx++) in port_cleanup()
1516 release_region(addr + idx * info->io.regspacing, in port_cleanup()
1517 info->io.regsize); in port_cleanup()
1521 static int port_setup(struct smi_info *info) in port_setup() argument
1523 unsigned int addr = info->io.addr_data; in port_setup()
1529 info->io_cleanup = port_cleanup; in port_setup()
1535 switch (info->io.regsize) { in port_setup()
1537 info->io.inputb = port_inb; in port_setup()
1538 info->io.outputb = port_outb; in port_setup()
1541 info->io.inputb = port_inw; in port_setup()
1542 info->io.outputb = port_outw; in port_setup()
1545 info->io.inputb = port_inl; in port_setup()
1546 info->io.outputb = port_outl; in port_setup()
1549 dev_warn(info->dev, "Invalid register size: %d\n", in port_setup()
1550 info->io.regsize); in port_setup()
1560 for (idx = 0; idx < info->io_size; idx++) { in port_setup()
1561 if (request_region(addr + idx * info->io.regspacing, in port_setup()
1562 info->io.regsize, DEVICE_NAME) == NULL) { in port_setup()
1565 release_region(addr + idx * info->io.regspacing, in port_setup()
1566 info->io.regsize); in port_setup()
1623 static void mem_cleanup(struct smi_info *info) in mem_cleanup() argument
1625 unsigned long addr = info->io.addr_data; in mem_cleanup()
1628 if (info->io.addr) { in mem_cleanup()
1629 iounmap(info->io.addr); in mem_cleanup()
1631 mapsize = ((info->io_size * info->io.regspacing) in mem_cleanup()
1632 - (info->io.regspacing - info->io.regsize)); in mem_cleanup()
1638 static int mem_setup(struct smi_info *info) in mem_setup() argument
1640 unsigned long addr = info->io.addr_data; in mem_setup()
1646 info->io_cleanup = mem_cleanup; in mem_setup()
1652 switch (info->io.regsize) { in mem_setup()
1654 info->io.inputb = intf_mem_inb; in mem_setup()
1655 info->io.outputb = intf_mem_outb; in mem_setup()
1658 info->io.inputb = intf_mem_inw; in mem_setup()
1659 info->io.outputb = intf_mem_outw; in mem_setup()
1662 info->io.inputb = intf_mem_inl; in mem_setup()
1663 info->io.outputb = intf_mem_outl; in mem_setup()
1667 info->io.inputb = mem_inq; in mem_setup()
1668 info->io.outputb = mem_outq; in mem_setup()
1672 dev_warn(info->dev, "Invalid register size: %d\n", in mem_setup()
1673 info->io.regsize); in mem_setup()
1684 mapsize = ((info->io_size * info->io.regspacing) in mem_setup()
1685 - (info->io.regspacing - info->io.regsize)); in mem_setup()
1690 info->io.addr = ioremap(addr, mapsize); in mem_setup()
1691 if (info->io.addr == NULL) { in mem_setup()
1780 struct smi_info *info = kzalloc(sizeof(*info), GFP_KERNEL); in smi_info_alloc() local
1782 if (info) in smi_info_alloc()
1783 spin_lock_init(&info->si_lock); in smi_info_alloc()
1784 return info; in smi_info_alloc()
1803 struct smi_info *info; in hotmod_handler() local
1901 info = smi_info_alloc(); in hotmod_handler()
1902 if (!info) { in hotmod_handler()
1907 info->addr_source = SI_HOTMOD; in hotmod_handler()
1908 info->si_type = si_type; in hotmod_handler()
1909 info->io.addr_data = addr; in hotmod_handler()
1910 info->io.addr_type = addr_space; in hotmod_handler()
1912 info->io_setup = mem_setup; in hotmod_handler()
1914 info->io_setup = port_setup; in hotmod_handler()
1916 info->io.addr = NULL; in hotmod_handler()
1917 info->io.regspacing = regspacing; in hotmod_handler()
1918 if (!info->io.regspacing) in hotmod_handler()
1919 info->io.regspacing = DEFAULT_REGSPACING; in hotmod_handler()
1920 info->io.regsize = regsize; in hotmod_handler()
1921 if (!info->io.regsize) in hotmod_handler()
1922 info->io.regsize = DEFAULT_REGSPACING; in hotmod_handler()
1923 info->io.regshift = regshift; in hotmod_handler()
1924 info->irq = irq; in hotmod_handler()
1925 if (info->irq) in hotmod_handler()
1926 info->irq_setup = std_irq_setup; in hotmod_handler()
1927 info->slave_addr = ipmb; in hotmod_handler()
1929 rv = add_smi(info); in hotmod_handler()
1931 kfree(info); in hotmod_handler()
1934 rv = try_smi_init(info); in hotmod_handler()
1936 cleanup_one_si(info); in hotmod_handler()
1965 struct smi_info *info; in hardcode_find_bmc() local
1971 info = smi_info_alloc(); in hardcode_find_bmc()
1972 if (!info) in hardcode_find_bmc()
1975 info->addr_source = SI_HARDCODED; in hardcode_find_bmc()
1979 info->si_type = SI_KCS; in hardcode_find_bmc()
1981 info->si_type = SI_SMIC; in hardcode_find_bmc()
1983 info->si_type = SI_BT; in hardcode_find_bmc()
1988 kfree(info); in hardcode_find_bmc()
1994 info->io_setup = port_setup; in hardcode_find_bmc()
1995 info->io.addr_data = ports[i]; in hardcode_find_bmc()
1996 info->io.addr_type = IPMI_IO_ADDR_SPACE; in hardcode_find_bmc()
1999 info->io_setup = mem_setup; in hardcode_find_bmc()
2000 info->io.addr_data = addrs[i]; in hardcode_find_bmc()
2001 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in hardcode_find_bmc()
2006 kfree(info); in hardcode_find_bmc()
2010 info->io.addr = NULL; in hardcode_find_bmc()
2011 info->io.regspacing = regspacings[i]; in hardcode_find_bmc()
2012 if (!info->io.regspacing) in hardcode_find_bmc()
2013 info->io.regspacing = DEFAULT_REGSPACING; in hardcode_find_bmc()
2014 info->io.regsize = regsizes[i]; in hardcode_find_bmc()
2015 if (!info->io.regsize) in hardcode_find_bmc()
2016 info->io.regsize = DEFAULT_REGSPACING; in hardcode_find_bmc()
2017 info->io.regshift = regshifts[i]; in hardcode_find_bmc()
2018 info->irq = irqs[i]; in hardcode_find_bmc()
2019 if (info->irq) in hardcode_find_bmc()
2020 info->irq_setup = std_irq_setup; in hardcode_find_bmc()
2021 info->slave_addr = slave_addrs[i]; in hardcode_find_bmc()
2023 if (!add_smi(info)) { in hardcode_find_bmc()
2024 if (try_smi_init(info)) in hardcode_find_bmc()
2025 cleanup_one_si(info); in hardcode_find_bmc()
2028 kfree(info); in hardcode_find_bmc()
2064 static void acpi_gpe_irq_cleanup(struct smi_info *info) in acpi_gpe_irq_cleanup() argument
2066 if (!info->irq) in acpi_gpe_irq_cleanup()
2069 acpi_remove_gpe_handler(NULL, info->irq, &ipmi_acpi_gpe); in acpi_gpe_irq_cleanup()
2072 static int acpi_gpe_irq_setup(struct smi_info *info) in acpi_gpe_irq_setup() argument
2076 if (!info->irq) in acpi_gpe_irq_setup()
2080 info->irq, in acpi_gpe_irq_setup()
2083 info); in acpi_gpe_irq_setup()
2085 dev_warn(info->dev, "%s unable to claim ACPI GPE %d," in acpi_gpe_irq_setup()
2086 " running polled\n", DEVICE_NAME, info->irq); in acpi_gpe_irq_setup()
2087 info->irq = 0; in acpi_gpe_irq_setup()
2090 info->irq_cleanup = acpi_gpe_irq_cleanup; in acpi_gpe_irq_setup()
2091 dev_info(info->dev, "Using ACPI GPE %d\n", info->irq); in acpi_gpe_irq_setup()
2144 struct smi_info *info; in try_init_spmi() local
2152 info = smi_info_alloc(); in try_init_spmi()
2153 if (!info) { in try_init_spmi()
2158 info->addr_source = SI_SPMI; in try_init_spmi()
2164 info->si_type = SI_KCS; in try_init_spmi()
2167 info->si_type = SI_SMIC; in try_init_spmi()
2170 info->si_type = SI_BT; in try_init_spmi()
2173 kfree(info); in try_init_spmi()
2178 kfree(info); in try_init_spmi()
2184 info->irq = spmi->GPE; in try_init_spmi()
2185 info->irq_setup = acpi_gpe_irq_setup; in try_init_spmi()
2188 info->irq = spmi->GlobalSystemInterrupt; in try_init_spmi()
2189 info->irq_setup = std_irq_setup; in try_init_spmi()
2192 info->irq = 0; in try_init_spmi()
2193 info->irq_setup = NULL; in try_init_spmi()
2198 info->io.regspacing = spmi->addr.bit_width / 8; in try_init_spmi()
2200 info->io.regspacing = DEFAULT_REGSPACING; in try_init_spmi()
2202 info->io.regsize = info->io.regspacing; in try_init_spmi()
2203 info->io.regshift = spmi->addr.bit_offset; in try_init_spmi()
2206 info->io_setup = mem_setup; in try_init_spmi()
2207 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in try_init_spmi()
2209 info->io_setup = port_setup; in try_init_spmi()
2210 info->io.addr_type = IPMI_IO_ADDR_SPACE; in try_init_spmi()
2212 kfree(info); in try_init_spmi()
2216 info->io.addr_data = spmi->addr.address; in try_init_spmi()
2219 (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem", in try_init_spmi()
2220 info->io.addr_data, info->io.regsize, info->io.regspacing, in try_init_spmi()
2221 info->irq); in try_init_spmi()
2223 rv = add_smi(info); in try_init_spmi()
2225 kfree(info); in try_init_spmi()
2256 struct smi_info *info; in ipmi_pnp_probe() local
2267 info = smi_info_alloc(); in ipmi_pnp_probe()
2268 if (!info) in ipmi_pnp_probe()
2271 info->addr_source = SI_ACPI; in ipmi_pnp_probe()
2275 info->addr_info.acpi_info.acpi_handle = handle; in ipmi_pnp_probe()
2286 info->si_type = SI_KCS; in ipmi_pnp_probe()
2289 info->si_type = SI_SMIC; in ipmi_pnp_probe()
2292 info->si_type = SI_BT; in ipmi_pnp_probe()
2304 info->io_setup = port_setup; in ipmi_pnp_probe()
2305 info->io.addr_type = IPMI_IO_ADDR_SPACE; in ipmi_pnp_probe()
2309 info->io_setup = mem_setup; in ipmi_pnp_probe()
2310 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in ipmi_pnp_probe()
2317 info->io.addr_data = res->start; in ipmi_pnp_probe()
2319 info->io.regspacing = DEFAULT_REGSPACING; in ipmi_pnp_probe()
2321 (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? in ipmi_pnp_probe()
2325 if (res_second->start > info->io.addr_data) in ipmi_pnp_probe()
2326 info->io.regspacing = res_second->start - info->io.addr_data; in ipmi_pnp_probe()
2328 info->io.regsize = DEFAULT_REGSPACING; in ipmi_pnp_probe()
2329 info->io.regshift = 0; in ipmi_pnp_probe()
2334 info->irq = tmp; in ipmi_pnp_probe()
2335 info->irq_setup = acpi_gpe_irq_setup; in ipmi_pnp_probe()
2337 info->irq = pnp_irq(dev, 0); in ipmi_pnp_probe()
2338 info->irq_setup = std_irq_setup; in ipmi_pnp_probe()
2341 info->dev = &dev->dev; in ipmi_pnp_probe()
2342 pnp_set_drvdata(dev, info); in ipmi_pnp_probe()
2344 dev_info(info->dev, "%pR regsize %d spacing %d irq %d\n", in ipmi_pnp_probe()
2345 res, info->io.regsize, info->io.regspacing, in ipmi_pnp_probe()
2346 info->irq); in ipmi_pnp_probe()
2348 rv = add_smi(info); in ipmi_pnp_probe()
2350 kfree(info); in ipmi_pnp_probe()
2355 kfree(info); in ipmi_pnp_probe()
2361 struct smi_info *info = pnp_get_drvdata(dev); in ipmi_pnp_remove() local
2363 cleanup_one_si(info); in ipmi_pnp_remove()
2455 struct smi_info *info; in try_init_dmi() local
2457 info = smi_info_alloc(); in try_init_dmi()
2458 if (!info) { in try_init_dmi()
2463 info->addr_source = SI_SMBIOS; in try_init_dmi()
2468 info->si_type = SI_KCS; in try_init_dmi()
2471 info->si_type = SI_SMIC; in try_init_dmi()
2474 info->si_type = SI_BT; in try_init_dmi()
2477 kfree(info); in try_init_dmi()
2483 info->io_setup = mem_setup; in try_init_dmi()
2484 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in try_init_dmi()
2488 info->io_setup = port_setup; in try_init_dmi()
2489 info->io.addr_type = IPMI_IO_ADDR_SPACE; in try_init_dmi()
2493 kfree(info); in try_init_dmi()
2498 info->io.addr_data = ipmi_data->base_addr; in try_init_dmi()
2500 info->io.regspacing = ipmi_data->offset; in try_init_dmi()
2501 if (!info->io.regspacing) in try_init_dmi()
2502 info->io.regspacing = DEFAULT_REGSPACING; in try_init_dmi()
2503 info->io.regsize = DEFAULT_REGSPACING; in try_init_dmi()
2504 info->io.regshift = 0; in try_init_dmi()
2506 info->slave_addr = ipmi_data->slave_addr; in try_init_dmi()
2508 info->irq = ipmi_data->irq; in try_init_dmi()
2509 if (info->irq) in try_init_dmi()
2510 info->irq_setup = std_irq_setup; in try_init_dmi()
2513 (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem", in try_init_dmi()
2514 info->io.addr_data, info->io.regsize, info->io.regspacing, in try_init_dmi()
2515 info->irq); in try_init_dmi()
2517 if (add_smi(info)) in try_init_dmi()
2518 kfree(info); in try_init_dmi()
2550 static void ipmi_pci_cleanup(struct smi_info *info) in ipmi_pci_cleanup() argument
2552 struct pci_dev *pdev = info->addr_source_data; in ipmi_pci_cleanup()
2557 static int ipmi_pci_probe_regspacing(struct smi_info *info) in ipmi_pci_probe_regspacing() argument
2559 if (info->si_type == SI_KCS) { in ipmi_pci_probe_regspacing()
2563 info->io.regsize = DEFAULT_REGSIZE; in ipmi_pci_probe_regspacing()
2564 info->io.regshift = 0; in ipmi_pci_probe_regspacing()
2565 info->io_size = 2; in ipmi_pci_probe_regspacing()
2566 info->handlers = &kcs_smi_handlers; in ipmi_pci_probe_regspacing()
2570 info->io.regspacing = regspacing; in ipmi_pci_probe_regspacing()
2571 if (info->io_setup(info)) { in ipmi_pci_probe_regspacing()
2572 dev_err(info->dev, in ipmi_pci_probe_regspacing()
2577 info->io.outputb(&info->io, 1, 0x10); in ipmi_pci_probe_regspacing()
2579 status = info->io.inputb(&info->io, 1); in ipmi_pci_probe_regspacing()
2580 info->io_cleanup(info); in ipmi_pci_probe_regspacing()
2594 struct smi_info *info; in ipmi_pci_probe() local
2596 info = smi_info_alloc(); in ipmi_pci_probe()
2597 if (!info) in ipmi_pci_probe()
2600 info->addr_source = SI_PCI; in ipmi_pci_probe()
2605 info->si_type = SI_SMIC; in ipmi_pci_probe()
2609 info->si_type = SI_KCS; in ipmi_pci_probe()
2613 info->si_type = SI_BT; in ipmi_pci_probe()
2617 kfree(info); in ipmi_pci_probe()
2625 kfree(info); in ipmi_pci_probe()
2629 info->addr_source_cleanup = ipmi_pci_cleanup; in ipmi_pci_probe()
2630 info->addr_source_data = pdev; in ipmi_pci_probe()
2633 info->io_setup = port_setup; in ipmi_pci_probe()
2634 info->io.addr_type = IPMI_IO_ADDR_SPACE; in ipmi_pci_probe()
2636 info->io_setup = mem_setup; in ipmi_pci_probe()
2637 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in ipmi_pci_probe()
2639 info->io.addr_data = pci_resource_start(pdev, 0); in ipmi_pci_probe()
2641 info->io.regspacing = ipmi_pci_probe_regspacing(info); in ipmi_pci_probe()
2642 info->io.regsize = DEFAULT_REGSIZE; in ipmi_pci_probe()
2643 info->io.regshift = 0; in ipmi_pci_probe()
2645 info->irq = pdev->irq; in ipmi_pci_probe()
2646 if (info->irq) in ipmi_pci_probe()
2647 info->irq_setup = std_irq_setup; in ipmi_pci_probe()
2649 info->dev = &pdev->dev; in ipmi_pci_probe()
2650 pci_set_drvdata(pdev, info); in ipmi_pci_probe()
2653 &pdev->resource[0], info->io.regsize, info->io.regspacing, in ipmi_pci_probe()
2654 info->irq); in ipmi_pci_probe()
2656 rv = add_smi(info); in ipmi_pci_probe()
2658 kfree(info); in ipmi_pci_probe()
2667 struct smi_info *info = pci_get_drvdata(pdev); in ipmi_pci_remove() local
2668 cleanup_one_si(info); in ipmi_pci_remove()
2692 struct smi_info *info; in ipmi_probe() local
2732 info = smi_info_alloc(); in ipmi_probe()
2734 if (!info) { in ipmi_probe()
2740 info->si_type = (enum si_type) match->data; in ipmi_probe()
2741 info->addr_source = SI_DEVICETREE; in ipmi_probe()
2742 info->irq_setup = std_irq_setup; in ipmi_probe()
2745 info->io_setup = port_setup; in ipmi_probe()
2746 info->io.addr_type = IPMI_IO_ADDR_SPACE; in ipmi_probe()
2748 info->io_setup = mem_setup; in ipmi_probe()
2749 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in ipmi_probe()
2752 info->io.addr_data = resource.start; in ipmi_probe()
2754 info->io.regsize = regsize ? be32_to_cpup(regsize) : DEFAULT_REGSIZE; in ipmi_probe()
2755 info->io.regspacing = regspacing ? be32_to_cpup(regspacing) : DEFAULT_REGSPACING; in ipmi_probe()
2756 info->io.regshift = regshift ? be32_to_cpup(regshift) : 0; in ipmi_probe()
2758 info->irq = irq_of_parse_and_map(dev->dev.of_node, 0); in ipmi_probe()
2759 info->dev = &dev->dev; in ipmi_probe()
2762 info->io.addr_data, info->io.regsize, info->io.regspacing, in ipmi_probe()
2763 info->irq); in ipmi_probe()
2765 dev_set_drvdata(&dev->dev, info); in ipmi_probe()
2767 ret = add_smi(info); in ipmi_probe()
2769 kfree(info); in ipmi_probe()
2807 struct smi_info *info; in ipmi_parisc_probe() local
2810 info = smi_info_alloc(); in ipmi_parisc_probe()
2812 if (!info) { in ipmi_parisc_probe()
2818 info->si_type = SI_KCS; in ipmi_parisc_probe()
2819 info->addr_source = SI_DEVICETREE; in ipmi_parisc_probe()
2820 info->io_setup = mem_setup; in ipmi_parisc_probe()
2821 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in ipmi_parisc_probe()
2822 info->io.addr_data = dev->hpa.start; in ipmi_parisc_probe()
2823 info->io.regsize = 1; in ipmi_parisc_probe()
2824 info->io.regspacing = 1; in ipmi_parisc_probe()
2825 info->io.regshift = 0; in ipmi_parisc_probe()
2826 info->irq = 0; /* no interrupt */ in ipmi_parisc_probe()
2827 info->irq_setup = NULL; in ipmi_parisc_probe()
2828 info->dev = &dev->dev; in ipmi_parisc_probe()
2830 dev_dbg(&dev->dev, "addr 0x%lx\n", info->io.addr_data); in ipmi_parisc_probe()
2832 dev_set_drvdata(&dev->dev, info); in ipmi_parisc_probe()
2834 rv = add_smi(info); in ipmi_parisc_probe()
2836 kfree(info); in ipmi_parisc_probe()
3353 struct smi_info *info; in default_find_bmc() local
3363 info = smi_info_alloc(); in default_find_bmc()
3364 if (!info) in default_find_bmc()
3367 info->addr_source = SI_DEFAULT; in default_find_bmc()
3369 info->si_type = ipmi_defaults[i].type; in default_find_bmc()
3370 info->io_setup = port_setup; in default_find_bmc()
3371 info->io.addr_data = ipmi_defaults[i].port; in default_find_bmc()
3372 info->io.addr_type = IPMI_IO_ADDR_SPACE; in default_find_bmc()
3374 info->io.addr = NULL; in default_find_bmc()
3375 info->io.regspacing = DEFAULT_REGSPACING; in default_find_bmc()
3376 info->io.regsize = DEFAULT_REGSPACING; in default_find_bmc()
3377 info->io.regshift = 0; in default_find_bmc()
3379 if (add_smi(info) == 0) { in default_find_bmc()
3380 if ((try_smi_init(info)) == 0) { in default_find_bmc()
3384 si_to_str[info->si_type], in default_find_bmc()
3385 addr_space_to_str[info->io.addr_type], in default_find_bmc()
3386 info->io.addr_data); in default_find_bmc()
3388 cleanup_one_si(info); in default_find_bmc()
3390 kfree(info); in default_find_bmc()
3395 static int is_new_interface(struct smi_info *info) in is_new_interface() argument
3400 if (e->io.addr_type != info->io.addr_type) in is_new_interface()
3402 if (e->io.addr_data == info->io.addr_data) in is_new_interface()