ipmi_si_parisc.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // SPDX-License-Identifier: GPL-2.0+
  2. #include <linux/module.h>
  3. #include <asm/hardware.h> /* for register_parisc_driver() stuff */
  4. #include <asm/parisc-device.h>
  5. #include "ipmi_si.h"
  6. static bool parisc_registered;
  7. static int __init ipmi_parisc_probe(struct parisc_device *dev)
  8. {
  9. struct si_sm_io io;
  10. memset(&io, 0, sizeof(io));
  11. io.si_type = SI_KCS;
  12. io.addr_source = SI_DEVICETREE;
  13. io.addr_space = IPMI_MEM_ADDR_SPACE;
  14. io.addr_data = dev->hpa.start;
  15. io.regsize = 1;
  16. io.regspacing = 1;
  17. io.regshift = 0;
  18. io.irq = 0; /* no interrupt */
  19. io.irq_setup = NULL;
  20. io.dev = &dev->dev;
  21. dev_dbg(&dev->dev, "addr 0x%lx\n", io.addr_data);
  22. return ipmi_si_add_smi(&io);
  23. }
  24. static void __exit ipmi_parisc_remove(struct parisc_device *dev)
  25. {
  26. ipmi_si_remove_by_dev(&dev->dev);
  27. }
  28. static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = {
  29. { HPHW_MC, HVERSION_REV_ANY_ID, 0x004, 0xC0 },
  30. { 0, }
  31. };
  32. MODULE_DEVICE_TABLE(parisc, ipmi_parisc_tbl);
  33. static struct parisc_driver ipmi_parisc_driver __refdata = {
  34. .name = "ipmi",
  35. .id_table = ipmi_parisc_tbl,
  36. .probe = ipmi_parisc_probe,
  37. .remove = __exit_p(ipmi_parisc_remove),
  38. };
  39. void ipmi_si_parisc_init(void)
  40. {
  41. register_parisc_driver(&ipmi_parisc_driver);
  42. parisc_registered = true;
  43. }
  44. void ipmi_si_parisc_shutdown(void)
  45. {
  46. if (parisc_registered)
  47. unregister_parisc_driver(&ipmi_parisc_driver);
  48. }