gsc.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef ASM_PARISC_GSC_H
  2. #define ASM_PARISC_GSC_H
  3. #ifdef __KERNEL__
  4. #include <linux/types.h>
  5. #include <asm/hardware.h> /* for struct hp_device */
  6. /*
  7.  * The convention used for inb/outb etc. is that names starting with
  8.  * two underscores are the inline versions, names starting with a
  9.  * single underscore are proper functions, and names starting with a
  10.  * letter are macros that map in some way to inline or proper function
  11.  * versions.  Not all that pretty, but before you change it, be sure
  12.  * to convince yourself that it won't break anything (in particular
  13.  * module support).
  14.  */
  15. extern   u8 _gsc_readb(void *);
  16. extern  u16 _gsc_readw(void *);
  17. extern  u32 _gsc_readl(void *);
  18. extern  u64 _gsc_readq(void *);
  19. extern void _gsc_writeb(u8, void *);
  20. extern void _gsc_writew(u16,void *);
  21. extern void _gsc_writel(u32,void *);
  22. extern void _gsc_writeq(u64,void *);
  23. #define gsc_readb(a) _gsc_readb((void *)(a))
  24. #define gsc_readw(a) _gsc_readw((void *)(a))
  25. #define gsc_readl(a) _gsc_readl((void *)(a))
  26. #define gsc_readq(a) _gsc_readq((void *)(a))
  27. #define gsc_writeb(v,a) _gsc_writeb((v),(void *)(a))
  28. #define gsc_writew(v,a) _gsc_writew((v),(void *)(a))
  29. #define gsc_writel(v,a) _gsc_writel((v),(void *)(a))
  30. #define gsc_writeq(v,a) _gsc_writeq((v),(void *)(a))
  31. struct gsc_dev {
  32. struct gsc_bus *bus; /* bus this device is on */
  33. struct gsc_dev *next; /* chain of all devices */
  34. struct gsc_dev *next_bus; /* chain of all devices on a bus */
  35. struct gsc_dev *next_submod; /* chain of all devices on a module */
  36. unsigned irq; /* irq generated by this device */
  37. void *hpa; /* hard physical address */
  38. u16 hversion;
  39. u8 spa; /* SPA requirements */
  40. u8 type;
  41. u32 sversion;
  42. };
  43. struct gsc_irq {
  44. unsigned long txn_addr; /* IRQ "target" */
  45. int txn_data; /* HW "IRQ" */
  46. int irq; /* virtual IRQ */
  47. };
  48. /* PA I/O Architected devices support at least 5 bits in the EIM register. */
  49. #define GSC_EIM_WIDTH 5
  50. extern int gsc_alloc_irq(struct gsc_irq *dev); /* dev needs an irq */
  51. extern int gsc_claim_irq(struct gsc_irq *dev, int irq); /* dev needs this irq */
  52. struct gsc_bus {
  53. void *hpa; /* HPA of device 0, function 0 of this bus */
  54. };
  55. /*
  56.  * There is one gsc_dev structure for each slot-number/function-number
  57.  * combination:
  58.  */
  59. struct gsc_dev *gsc_find_device(u16 hversion, struct gsc_dev *from);
  60. extern void probe_serial_gsc(void);
  61. /* returns a virtual irq for device at dev->hpa (works for all LASI/ASP/WAX) */
  62. extern int busdevice_alloc_irq( struct hp_device *dev );
  63. #endif /* __KERNEL__ */
  64. #endif /* LINUX_GSC_H */