Lines Matching refs:info
178 int (*io_setup)(struct smi_info *info);
179 void (*io_cleanup)(struct smi_info *info);
180 int (*irq_setup)(struct smi_info *info);
181 void (*irq_cleanup)(struct smi_info *info);
184 void (*addr_source_cleanup)(struct smi_info *info);
1433 static void std_irq_cleanup(struct smi_info *info) in std_irq_cleanup() argument
1435 if (info->si_type == SI_BT) in std_irq_cleanup()
1437 info->io.outputb(&info->io, IPMI_BT_INTMASK_REG, 0); in std_irq_cleanup()
1438 free_irq(info->irq, info); in std_irq_cleanup()
1441 static int std_irq_setup(struct smi_info *info) in std_irq_setup() argument
1445 if (!info->irq) in std_irq_setup()
1448 if (info->si_type == SI_BT) { in std_irq_setup()
1449 rv = request_irq(info->irq, in std_irq_setup()
1453 info); in std_irq_setup()
1456 info->io.outputb(&info->io, IPMI_BT_INTMASK_REG, in std_irq_setup()
1459 rv = request_irq(info->irq, in std_irq_setup()
1463 info); in std_irq_setup()
1465 dev_warn(info->dev, "%s unable to claim interrupt %d," in std_irq_setup()
1467 DEVICE_NAME, info->irq); in std_irq_setup()
1468 info->irq = 0; in std_irq_setup()
1470 info->irq_cleanup = std_irq_cleanup; in std_irq_setup()
1471 dev_info(info->dev, "Using irq %d\n", info->irq); in std_irq_setup()
1522 static void port_cleanup(struct smi_info *info) in port_cleanup() argument
1524 unsigned int addr = info->io.addr_data; in port_cleanup()
1528 for (idx = 0; idx < info->io_size; idx++) in port_cleanup()
1529 release_region(addr + idx * info->io.regspacing, in port_cleanup()
1530 info->io.regsize); in port_cleanup()
1534 static int port_setup(struct smi_info *info) in port_setup() argument
1536 unsigned int addr = info->io.addr_data; in port_setup()
1542 info->io_cleanup = port_cleanup; in port_setup()
1548 switch (info->io.regsize) { in port_setup()
1550 info->io.inputb = port_inb; in port_setup()
1551 info->io.outputb = port_outb; in port_setup()
1554 info->io.inputb = port_inw; in port_setup()
1555 info->io.outputb = port_outw; in port_setup()
1558 info->io.inputb = port_inl; in port_setup()
1559 info->io.outputb = port_outl; in port_setup()
1562 dev_warn(info->dev, "Invalid register size: %d\n", in port_setup()
1563 info->io.regsize); in port_setup()
1573 for (idx = 0; idx < info->io_size; idx++) { in port_setup()
1574 if (request_region(addr + idx * info->io.regspacing, in port_setup()
1575 info->io.regsize, DEVICE_NAME) == NULL) { in port_setup()
1578 release_region(addr + idx * info->io.regspacing, in port_setup()
1579 info->io.regsize); in port_setup()
1639 static void mem_cleanup(struct smi_info *info) in mem_cleanup() argument
1641 unsigned long addr = info->io.addr_data; in mem_cleanup()
1644 if (info->io.addr) { in mem_cleanup()
1645 iounmap(info->io.addr); in mem_cleanup()
1647 mapsize = ((info->io_size * info->io.regspacing) in mem_cleanup()
1648 - (info->io.regspacing - info->io.regsize)); in mem_cleanup()
1654 static int mem_setup(struct smi_info *info) in mem_setup() argument
1656 unsigned long addr = info->io.addr_data; in mem_setup()
1662 info->io_cleanup = mem_cleanup; in mem_setup()
1668 switch (info->io.regsize) { in mem_setup()
1670 info->io.inputb = intf_mem_inb; in mem_setup()
1671 info->io.outputb = intf_mem_outb; in mem_setup()
1674 info->io.inputb = intf_mem_inw; in mem_setup()
1675 info->io.outputb = intf_mem_outw; in mem_setup()
1678 info->io.inputb = intf_mem_inl; in mem_setup()
1679 info->io.outputb = intf_mem_outl; in mem_setup()
1683 info->io.inputb = mem_inq; in mem_setup()
1684 info->io.outputb = mem_outq; in mem_setup()
1688 dev_warn(info->dev, "Invalid register size: %d\n", in mem_setup()
1689 info->io.regsize); in mem_setup()
1700 mapsize = ((info->io_size * info->io.regspacing) in mem_setup()
1701 - (info->io.regspacing - info->io.regsize)); in mem_setup()
1706 info->io.addr = ioremap(addr, mapsize); in mem_setup()
1707 if (info->io.addr == NULL) { in mem_setup()
1796 struct smi_info *info = kzalloc(sizeof(*info), GFP_KERNEL); in smi_info_alloc() local
1798 if (info) in smi_info_alloc()
1799 spin_lock_init(&info->si_lock); in smi_info_alloc()
1800 return info; in smi_info_alloc()
1819 struct smi_info *info; in hotmod_handler() local
1917 info = smi_info_alloc(); in hotmod_handler()
1918 if (!info) { in hotmod_handler()
1923 info->addr_source = SI_HOTMOD; in hotmod_handler()
1924 info->si_type = si_type; in hotmod_handler()
1925 info->io.addr_data = addr; in hotmod_handler()
1926 info->io.addr_type = addr_space; in hotmod_handler()
1928 info->io_setup = mem_setup; in hotmod_handler()
1930 info->io_setup = port_setup; in hotmod_handler()
1932 info->io.addr = NULL; in hotmod_handler()
1933 info->io.regspacing = regspacing; in hotmod_handler()
1934 if (!info->io.regspacing) in hotmod_handler()
1935 info->io.regspacing = DEFAULT_REGSPACING; in hotmod_handler()
1936 info->io.regsize = regsize; in hotmod_handler()
1937 if (!info->io.regsize) in hotmod_handler()
1938 info->io.regsize = DEFAULT_REGSPACING; in hotmod_handler()
1939 info->io.regshift = regshift; in hotmod_handler()
1940 info->irq = irq; in hotmod_handler()
1941 if (info->irq) in hotmod_handler()
1942 info->irq_setup = std_irq_setup; in hotmod_handler()
1943 info->slave_addr = ipmb; in hotmod_handler()
1945 rv = add_smi(info); in hotmod_handler()
1947 kfree(info); in hotmod_handler()
1950 rv = try_smi_init(info); in hotmod_handler()
1952 cleanup_one_si(info); in hotmod_handler()
1981 struct smi_info *info; in hardcode_find_bmc() local
1987 info = smi_info_alloc(); in hardcode_find_bmc()
1988 if (!info) in hardcode_find_bmc()
1991 info->addr_source = SI_HARDCODED; in hardcode_find_bmc()
1995 info->si_type = SI_KCS; in hardcode_find_bmc()
1997 info->si_type = SI_SMIC; in hardcode_find_bmc()
1999 info->si_type = SI_BT; in hardcode_find_bmc()
2004 kfree(info); in hardcode_find_bmc()
2010 info->io_setup = port_setup; in hardcode_find_bmc()
2011 info->io.addr_data = ports[i]; in hardcode_find_bmc()
2012 info->io.addr_type = IPMI_IO_ADDR_SPACE; in hardcode_find_bmc()
2015 info->io_setup = mem_setup; in hardcode_find_bmc()
2016 info->io.addr_data = addrs[i]; in hardcode_find_bmc()
2017 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in hardcode_find_bmc()
2022 kfree(info); in hardcode_find_bmc()
2026 info->io.addr = NULL; in hardcode_find_bmc()
2027 info->io.regspacing = regspacings[i]; in hardcode_find_bmc()
2028 if (!info->io.regspacing) in hardcode_find_bmc()
2029 info->io.regspacing = DEFAULT_REGSPACING; in hardcode_find_bmc()
2030 info->io.regsize = regsizes[i]; in hardcode_find_bmc()
2031 if (!info->io.regsize) in hardcode_find_bmc()
2032 info->io.regsize = DEFAULT_REGSPACING; in hardcode_find_bmc()
2033 info->io.regshift = regshifts[i]; in hardcode_find_bmc()
2034 info->irq = irqs[i]; in hardcode_find_bmc()
2035 if (info->irq) in hardcode_find_bmc()
2036 info->irq_setup = std_irq_setup; in hardcode_find_bmc()
2037 info->slave_addr = slave_addrs[i]; in hardcode_find_bmc()
2039 if (!add_smi(info)) { in hardcode_find_bmc()
2040 if (try_smi_init(info)) in hardcode_find_bmc()
2041 cleanup_one_si(info); in hardcode_find_bmc()
2044 kfree(info); in hardcode_find_bmc()
2080 static void acpi_gpe_irq_cleanup(struct smi_info *info) in acpi_gpe_irq_cleanup() argument
2082 if (!info->irq) in acpi_gpe_irq_cleanup()
2085 acpi_remove_gpe_handler(NULL, info->irq, &ipmi_acpi_gpe); in acpi_gpe_irq_cleanup()
2088 static int acpi_gpe_irq_setup(struct smi_info *info) in acpi_gpe_irq_setup() argument
2092 if (!info->irq) in acpi_gpe_irq_setup()
2096 info->irq, in acpi_gpe_irq_setup()
2099 info); in acpi_gpe_irq_setup()
2101 dev_warn(info->dev, "%s unable to claim ACPI GPE %d," in acpi_gpe_irq_setup()
2102 " running polled\n", DEVICE_NAME, info->irq); in acpi_gpe_irq_setup()
2103 info->irq = 0; in acpi_gpe_irq_setup()
2106 info->irq_cleanup = acpi_gpe_irq_cleanup; in acpi_gpe_irq_setup()
2107 dev_info(info->dev, "Using ACPI GPE %d\n", info->irq); in acpi_gpe_irq_setup()
2160 struct smi_info *info; in try_init_spmi() local
2168 info = smi_info_alloc(); in try_init_spmi()
2169 if (!info) { in try_init_spmi()
2174 info->addr_source = SI_SPMI; in try_init_spmi()
2180 info->si_type = SI_KCS; in try_init_spmi()
2183 info->si_type = SI_SMIC; in try_init_spmi()
2186 info->si_type = SI_BT; in try_init_spmi()
2189 kfree(info); in try_init_spmi()
2194 kfree(info); in try_init_spmi()
2200 info->irq = spmi->GPE; in try_init_spmi()
2201 info->irq_setup = acpi_gpe_irq_setup; in try_init_spmi()
2204 info->irq = spmi->GlobalSystemInterrupt; in try_init_spmi()
2205 info->irq_setup = std_irq_setup; in try_init_spmi()
2208 info->irq = 0; in try_init_spmi()
2209 info->irq_setup = NULL; in try_init_spmi()
2214 info->io.regspacing = spmi->addr.bit_width / 8; in try_init_spmi()
2216 info->io.regspacing = DEFAULT_REGSPACING; in try_init_spmi()
2218 info->io.regsize = info->io.regspacing; in try_init_spmi()
2219 info->io.regshift = spmi->addr.bit_offset; in try_init_spmi()
2222 info->io_setup = mem_setup; in try_init_spmi()
2223 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in try_init_spmi()
2225 info->io_setup = port_setup; in try_init_spmi()
2226 info->io.addr_type = IPMI_IO_ADDR_SPACE; in try_init_spmi()
2228 kfree(info); in try_init_spmi()
2232 info->io.addr_data = spmi->addr.address; in try_init_spmi()
2235 (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem", in try_init_spmi()
2236 info->io.addr_data, info->io.regsize, info->io.regspacing, in try_init_spmi()
2237 info->irq); in try_init_spmi()
2239 rv = add_smi(info); in try_init_spmi()
2241 kfree(info); in try_init_spmi()
2343 struct smi_info *info; in try_init_dmi() local
2345 info = smi_info_alloc(); in try_init_dmi()
2346 if (!info) { in try_init_dmi()
2351 info->addr_source = SI_SMBIOS; in try_init_dmi()
2356 info->si_type = SI_KCS; in try_init_dmi()
2359 info->si_type = SI_SMIC; in try_init_dmi()
2362 info->si_type = SI_BT; in try_init_dmi()
2365 kfree(info); in try_init_dmi()
2371 info->io_setup = mem_setup; in try_init_dmi()
2372 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in try_init_dmi()
2376 info->io_setup = port_setup; in try_init_dmi()
2377 info->io.addr_type = IPMI_IO_ADDR_SPACE; in try_init_dmi()
2381 kfree(info); in try_init_dmi()
2386 info->io.addr_data = ipmi_data->base_addr; in try_init_dmi()
2388 info->io.regspacing = ipmi_data->offset; in try_init_dmi()
2389 if (!info->io.regspacing) in try_init_dmi()
2390 info->io.regspacing = DEFAULT_REGSPACING; in try_init_dmi()
2391 info->io.regsize = DEFAULT_REGSPACING; in try_init_dmi()
2392 info->io.regshift = 0; in try_init_dmi()
2394 info->slave_addr = ipmi_data->slave_addr; in try_init_dmi()
2396 info->irq = ipmi_data->irq; in try_init_dmi()
2397 if (info->irq) in try_init_dmi()
2398 info->irq_setup = std_irq_setup; in try_init_dmi()
2401 (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem", in try_init_dmi()
2402 info->io.addr_data, info->io.regsize, info->io.regspacing, in try_init_dmi()
2403 info->irq); in try_init_dmi()
2405 if (add_smi(info)) in try_init_dmi()
2406 kfree(info); in try_init_dmi()
2438 static void ipmi_pci_cleanup(struct smi_info *info) in ipmi_pci_cleanup() argument
2440 struct pci_dev *pdev = info->addr_source_data; in ipmi_pci_cleanup()
2445 static int ipmi_pci_probe_regspacing(struct smi_info *info) in ipmi_pci_probe_regspacing() argument
2447 if (info->si_type == SI_KCS) { in ipmi_pci_probe_regspacing()
2451 info->io.regsize = DEFAULT_REGSIZE; in ipmi_pci_probe_regspacing()
2452 info->io.regshift = 0; in ipmi_pci_probe_regspacing()
2453 info->io_size = 2; in ipmi_pci_probe_regspacing()
2454 info->handlers = &kcs_smi_handlers; in ipmi_pci_probe_regspacing()
2458 info->io.regspacing = regspacing; in ipmi_pci_probe_regspacing()
2459 if (info->io_setup(info)) { in ipmi_pci_probe_regspacing()
2460 dev_err(info->dev, in ipmi_pci_probe_regspacing()
2465 info->io.outputb(&info->io, 1, 0x10); in ipmi_pci_probe_regspacing()
2467 status = info->io.inputb(&info->io, 1); in ipmi_pci_probe_regspacing()
2468 info->io_cleanup(info); in ipmi_pci_probe_regspacing()
2482 struct smi_info *info; in ipmi_pci_probe() local
2484 info = smi_info_alloc(); in ipmi_pci_probe()
2485 if (!info) in ipmi_pci_probe()
2488 info->addr_source = SI_PCI; in ipmi_pci_probe()
2493 info->si_type = SI_SMIC; in ipmi_pci_probe()
2497 info->si_type = SI_KCS; in ipmi_pci_probe()
2501 info->si_type = SI_BT; in ipmi_pci_probe()
2505 kfree(info); in ipmi_pci_probe()
2513 kfree(info); in ipmi_pci_probe()
2517 info->addr_source_cleanup = ipmi_pci_cleanup; in ipmi_pci_probe()
2518 info->addr_source_data = pdev; in ipmi_pci_probe()
2521 info->io_setup = port_setup; in ipmi_pci_probe()
2522 info->io.addr_type = IPMI_IO_ADDR_SPACE; in ipmi_pci_probe()
2524 info->io_setup = mem_setup; in ipmi_pci_probe()
2525 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in ipmi_pci_probe()
2527 info->io.addr_data = pci_resource_start(pdev, 0); in ipmi_pci_probe()
2529 info->io.regspacing = ipmi_pci_probe_regspacing(info); in ipmi_pci_probe()
2530 info->io.regsize = DEFAULT_REGSIZE; in ipmi_pci_probe()
2531 info->io.regshift = 0; in ipmi_pci_probe()
2533 info->irq = pdev->irq; in ipmi_pci_probe()
2534 if (info->irq) in ipmi_pci_probe()
2535 info->irq_setup = std_irq_setup; in ipmi_pci_probe()
2537 info->dev = &pdev->dev; in ipmi_pci_probe()
2538 pci_set_drvdata(pdev, info); in ipmi_pci_probe()
2541 &pdev->resource[0], info->io.regsize, info->io.regspacing, in ipmi_pci_probe()
2542 info->irq); in ipmi_pci_probe()
2544 rv = add_smi(info); in ipmi_pci_probe()
2546 kfree(info); in ipmi_pci_probe()
2555 struct smi_info *info = pci_get_drvdata(pdev); in ipmi_pci_remove() local
2556 cleanup_one_si(info); in ipmi_pci_remove()
2590 struct smi_info *info; in of_ipmi_probe() local
2630 info = smi_info_alloc(); in of_ipmi_probe()
2632 if (!info) { in of_ipmi_probe()
2638 info->si_type = (enum si_type) match->data; in of_ipmi_probe()
2639 info->addr_source = SI_DEVICETREE; in of_ipmi_probe()
2640 info->irq_setup = std_irq_setup; in of_ipmi_probe()
2643 info->io_setup = port_setup; in of_ipmi_probe()
2644 info->io.addr_type = IPMI_IO_ADDR_SPACE; in of_ipmi_probe()
2646 info->io_setup = mem_setup; in of_ipmi_probe()
2647 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in of_ipmi_probe()
2650 info->io.addr_data = resource.start; in of_ipmi_probe()
2652 info->io.regsize = regsize ? be32_to_cpup(regsize) : DEFAULT_REGSIZE; in of_ipmi_probe()
2653 info->io.regspacing = regspacing ? be32_to_cpup(regspacing) : DEFAULT_REGSPACING; in of_ipmi_probe()
2654 info->io.regshift = regshift ? be32_to_cpup(regshift) : 0; in of_ipmi_probe()
2656 info->irq = irq_of_parse_and_map(dev->dev.of_node, 0); in of_ipmi_probe()
2657 info->dev = &dev->dev; in of_ipmi_probe()
2660 info->io.addr_data, info->io.regsize, info->io.regspacing, in of_ipmi_probe()
2661 info->irq); in of_ipmi_probe()
2663 dev_set_drvdata(&dev->dev, info); in of_ipmi_probe()
2665 ret = add_smi(info); in of_ipmi_probe()
2667 kfree(info); in of_ipmi_probe()
2683 struct smi_info *info; in acpi_ipmi_probe() local
2694 info = smi_info_alloc(); in acpi_ipmi_probe()
2695 if (!info) in acpi_ipmi_probe()
2698 info->addr_source = SI_ACPI; in acpi_ipmi_probe()
2701 info->addr_info.acpi_info.acpi_handle = handle; in acpi_ipmi_probe()
2712 info->si_type = SI_KCS; in acpi_ipmi_probe()
2715 info->si_type = SI_SMIC; in acpi_ipmi_probe()
2718 info->si_type = SI_BT; in acpi_ipmi_probe()
2730 info->io_setup = port_setup; in acpi_ipmi_probe()
2731 info->io.addr_type = IPMI_IO_ADDR_SPACE; in acpi_ipmi_probe()
2735 info->io_setup = mem_setup; in acpi_ipmi_probe()
2736 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in acpi_ipmi_probe()
2743 info->io.addr_data = res->start; in acpi_ipmi_probe()
2745 info->io.regspacing = DEFAULT_REGSPACING; in acpi_ipmi_probe()
2747 (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? in acpi_ipmi_probe()
2751 if (res_second->start > info->io.addr_data) in acpi_ipmi_probe()
2752 info->io.regspacing = in acpi_ipmi_probe()
2753 res_second->start - info->io.addr_data; in acpi_ipmi_probe()
2755 info->io.regsize = DEFAULT_REGSPACING; in acpi_ipmi_probe()
2756 info->io.regshift = 0; in acpi_ipmi_probe()
2761 info->irq = tmp; in acpi_ipmi_probe()
2762 info->irq_setup = acpi_gpe_irq_setup; in acpi_ipmi_probe()
2767 info->irq = irq; in acpi_ipmi_probe()
2768 info->irq_setup = std_irq_setup; in acpi_ipmi_probe()
2772 info->dev = &dev->dev; in acpi_ipmi_probe()
2773 platform_set_drvdata(dev, info); in acpi_ipmi_probe()
2775 dev_info(info->dev, "%pR regsize %d spacing %d irq %d\n", in acpi_ipmi_probe()
2776 res, info->io.regsize, info->io.regspacing, in acpi_ipmi_probe()
2777 info->irq); in acpi_ipmi_probe()
2779 rv = add_smi(info); in acpi_ipmi_probe()
2781 kfree(info); in acpi_ipmi_probe()
2786 kfree(info); in acpi_ipmi_probe()
2812 struct smi_info *info = dev_get_drvdata(&dev->dev); in ipmi_remove() local
2814 cleanup_one_si(info); in ipmi_remove()
2831 struct smi_info *info; in ipmi_parisc_probe() local
2834 info = smi_info_alloc(); in ipmi_parisc_probe()
2836 if (!info) { in ipmi_parisc_probe()
2842 info->si_type = SI_KCS; in ipmi_parisc_probe()
2843 info->addr_source = SI_DEVICETREE; in ipmi_parisc_probe()
2844 info->io_setup = mem_setup; in ipmi_parisc_probe()
2845 info->io.addr_type = IPMI_MEM_ADDR_SPACE; in ipmi_parisc_probe()
2846 info->io.addr_data = dev->hpa.start; in ipmi_parisc_probe()
2847 info->io.regsize = 1; in ipmi_parisc_probe()
2848 info->io.regspacing = 1; in ipmi_parisc_probe()
2849 info->io.regshift = 0; in ipmi_parisc_probe()
2850 info->irq = 0; /* no interrupt */ in ipmi_parisc_probe()
2851 info->irq_setup = NULL; in ipmi_parisc_probe()
2852 info->dev = &dev->dev; in ipmi_parisc_probe()
2854 dev_dbg(&dev->dev, "addr 0x%lx\n", info->io.addr_data); in ipmi_parisc_probe()
2856 dev_set_drvdata(&dev->dev, info); in ipmi_parisc_probe()
2858 rv = add_smi(info); in ipmi_parisc_probe()
2860 kfree(info); in ipmi_parisc_probe()
3459 struct smi_info *info; in default_find_bmc() local
3469 info = smi_info_alloc(); in default_find_bmc()
3470 if (!info) in default_find_bmc()
3473 info->addr_source = SI_DEFAULT; in default_find_bmc()
3475 info->si_type = ipmi_defaults[i].type; in default_find_bmc()
3476 info->io_setup = port_setup; in default_find_bmc()
3477 info->io.addr_data = ipmi_defaults[i].port; in default_find_bmc()
3478 info->io.addr_type = IPMI_IO_ADDR_SPACE; in default_find_bmc()
3480 info->io.addr = NULL; in default_find_bmc()
3481 info->io.regspacing = DEFAULT_REGSPACING; in default_find_bmc()
3482 info->io.regsize = DEFAULT_REGSPACING; in default_find_bmc()
3483 info->io.regshift = 0; in default_find_bmc()
3485 if (add_smi(info) == 0) { in default_find_bmc()
3486 if ((try_smi_init(info)) == 0) { in default_find_bmc()
3490 si_to_str[info->si_type], in default_find_bmc()
3491 addr_space_to_str[info->io.addr_type], in default_find_bmc()
3492 info->io.addr_data); in default_find_bmc()
3494 cleanup_one_si(info); in default_find_bmc()
3496 kfree(info); in default_find_bmc()
3501 static int is_new_interface(struct smi_info *info) in is_new_interface() argument
3506 if (e->io.addr_type != info->io.addr_type) in is_new_interface()
3508 if (e->io.addr_data == info->io.addr_data) in is_new_interface()