openpicvar.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*-
  2. * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  3. *
  4. * Copyright (C) 2002 Benno Rice.
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. * 1. Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * 2. Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR
  17. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  18. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  19. * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  20. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  21. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  22. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  23. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  24. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  25. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. *
  27. * $FreeBSD$
  28. */
  29. #ifndef _POWERPC_OPENPICVAR_H_
  30. #define _POWERPC_OPENPICVAR_H_
  31. #define OPENPIC_DEVSTR "OpenPIC Interrupt Controller"
  32. #define OPENPIC_IRQMAX 256 /* h/w allows more */
  33. #define OPENPIC_QUIRK_SINGLE_BIND 1 /* Bind interrupts to only 1 CPU */
  34. #define OPENPIC_QUIRK_HIDDEN_IRQS 2 /* May have IRQs beyond FRR[NIRQ] */
  35. /* Names match the macros in openpicreg.h. */
  36. struct openpic_timer {
  37. uint32_t tcnt;
  38. uint32_t tbase;
  39. uint32_t tvec;
  40. uint32_t tdst;
  41. };
  42. struct openpic_softc {
  43. device_t sc_dev;
  44. struct resource *sc_memr;
  45. struct resource *sc_intr;
  46. bus_space_tag_t sc_bt;
  47. bus_space_handle_t sc_bh;
  48. char *sc_version;
  49. int sc_rid;
  50. int sc_irq;
  51. void *sc_icookie;
  52. u_int sc_ncpu;
  53. u_int sc_nirq;
  54. int sc_psim;
  55. u_int sc_quirks;
  56. /* Saved states. */
  57. uint32_t sc_saved_config;
  58. uint32_t sc_saved_ipis[4];
  59. uint32_t sc_saved_prios[4];
  60. struct openpic_timer sc_saved_timers[OPENPIC_TIMERS];
  61. uint32_t sc_saved_vectors[OPENPIC_SRC_VECTOR_COUNT];
  62. };
  63. extern devclass_t openpic_devclass;
  64. /*
  65. * Bus-independent attach i/f
  66. */
  67. int openpic_common_attach(device_t, uint32_t);
  68. /*
  69. * PIC interface.
  70. */
  71. void openpic_bind(device_t dev, u_int irq, cpuset_t cpumask, void **);
  72. void openpic_config(device_t, u_int, enum intr_trigger, enum intr_polarity);
  73. void openpic_dispatch(device_t, struct trapframe *);
  74. void openpic_enable(device_t, u_int, u_int, void **);
  75. void openpic_eoi(device_t, u_int, void *);
  76. void openpic_ipi(device_t, u_int);
  77. void openpic_mask(device_t, u_int, void *);
  78. void openpic_unmask(device_t, u_int, void *);
  79. int openpic_suspend(device_t dev);
  80. int openpic_resume(device_t dev);
  81. #endif /* _POWERPC_OPENPICVAR_H_ */