shirq.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * arch/arm/plat-spear/include/plat/shirq.h
  3. *
  4. * SPEAr platform shared irq layer header file
  5. *
  6. * Copyright (C) 2009 ST Microelectronics
  7. * Viresh Kumar <viresh.linux@gmail.com>
  8. *
  9. * This file is licensed under the terms of the GNU General Public
  10. * License version 2. This program is licensed "as is" without any
  11. * warranty of any kind, whether express or implied.
  12. */
  13. #ifndef __PLAT_SHIRQ_H
  14. #define __PLAT_SHIRQ_H
  15. #include <linux/irq.h>
  16. #include <linux/types.h>
  17. /*
  18. * struct shirq_regs: shared irq register configuration
  19. *
  20. * enb_reg: enable register offset
  21. * reset_to_enb: val 1 indicates, we need to clear bit for enabling interrupt
  22. * status_reg: status register offset
  23. * status_reg_mask: status register valid mask
  24. * clear_reg: clear register offset
  25. * reset_to_clear: val 1 indicates, we need to clear bit for clearing interrupt
  26. */
  27. struct shirq_regs {
  28. u32 enb_reg;
  29. u32 reset_to_enb;
  30. u32 status_reg;
  31. u32 clear_reg;
  32. u32 reset_to_clear;
  33. };
  34. /*
  35. * struct spear_shirq: shared irq structure
  36. *
  37. * irq: hardware irq number
  38. * irq_base: base irq in linux domain
  39. * irq_nr: no. of shared interrupts in a particular block
  40. * irq_bit_off: starting bit offset in the status register
  41. * invalid_irq: irq group is currently disabled
  42. * base: base address of shared irq register
  43. * regs: register configuration for shared irq block
  44. */
  45. struct spear_shirq {
  46. u32 irq;
  47. u32 irq_base;
  48. u32 irq_nr;
  49. u32 irq_bit_off;
  50. int invalid_irq;
  51. void __iomem *base;
  52. struct shirq_regs regs;
  53. };
  54. int __init spear300_shirq_of_init(struct device_node *np,
  55. struct device_node *parent);
  56. int __init spear310_shirq_of_init(struct device_node *np,
  57. struct device_node *parent);
  58. int __init spear320_shirq_of_init(struct device_node *np,
  59. struct device_node *parent);
  60. #endif /* __PLAT_SHIRQ_H */