Blame view

include/linux/eisa.h 2.92 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
  #ifndef _LINUX_EISA_H
  #define _LINUX_EISA_H
  
  #include <linux/ioport.h>
  #include <linux/device.h>
07563c711   Michael Tokarev   [PATCH] EISA bus ...
6
  #include <linux/mod_devicetable.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  #define EISA_MAX_SLOTS 8
  
  #define EISA_MAX_RESOURCES 4
  
  /* A few EISA constants/offsets... */
  
  #define EISA_DMA1_STATUS            8
  #define EISA_INT1_CTRL           0x20
  #define EISA_INT1_MASK           0x21
  #define EISA_INT2_CTRL           0xA0
  #define EISA_INT2_MASK           0xA1
  #define EISA_DMA2_STATUS         0xD0
  #define EISA_DMA2_WRITE_SINGLE   0xD4
  #define EISA_EXT_NMI_RESET_CTRL 0x461
  #define EISA_INT1_EDGE_LEVEL    0x4D0
  #define EISA_INT2_EDGE_LEVEL    0x4D1
  #define EISA_VENDOR_ID_OFFSET   0xC80
  #define EISA_CONFIG_OFFSET      0xC84
  
  #define EISA_CONFIG_ENABLED         1
  #define EISA_CONFIG_FORCED          2
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  /* There is not much we can say about an EISA device, apart from
   * signature, slot number, and base address. dma_mask is set by
   * default to parent device mask..*/
  
  struct eisa_device {
  	struct eisa_device_id id;
  	int                   slot;
  	int                   state;
  	unsigned long         base_addr;
  	struct resource       res[EISA_MAX_RESOURCES];
  	u64                   dma_mask;
  	struct device         dev; /* generic device */
  #ifdef CONFIG_EISA_NAMES
  	char		      pretty_name[DEVICE_NAME_SIZE];
  #endif
  };
  
  #define to_eisa_device(n) container_of(n, struct eisa_device, dev)
  
  static inline int eisa_get_region_index (void *addr)
  {
  	unsigned long x = (unsigned long) addr;
  
  	x &= 0xc00;
  	return (x >> 12);
  }
  
  struct eisa_driver {
  	const struct eisa_device_id *id_table;
  	struct device_driver         driver;
  };
  
  #define to_eisa_driver(drv) container_of(drv,struct eisa_driver, driver)
f85da0841   Maciej W. Rozycki   [EISA] EISA regis...
62
63
  /* These external functions are only available when EISA support is enabled. */
  #ifdef CONFIG_EISA
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
  extern struct bus_type eisa_bus_type;
  int eisa_driver_register (struct eisa_driver *edrv);
  void eisa_driver_unregister (struct eisa_driver *edrv);
f85da0841   Maciej W. Rozycki   [EISA] EISA regis...
67
68
69
70
71
72
  #else /* !CONFIG_EISA */
  
  static inline int eisa_driver_register (struct eisa_driver *edrv) { return 0; }
  static inline void eisa_driver_unregister (struct eisa_driver *edrv) { }
  
  #endif /* !CONFIG_EISA */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  /* Mimics pci.h... */
  static inline void *eisa_get_drvdata (struct eisa_device *edev)
  {
          return edev->dev.driver_data;
  }
  
  static inline void eisa_set_drvdata (struct eisa_device *edev, void *data)
  {
          edev->dev.driver_data = data;
  }
  
  /* The EISA root device. There's rumours about machines with multiple
   * busses (PA-RISC ?), so we try to handle that. */
  
  struct eisa_root_device {
  	struct device   *dev;	 /* Pointer to bridge device */
  	struct resource *res;
  	unsigned long    bus_base_addr;
  	int		 slots;  /* Max slot number */
  	int		 force_probe; /* Probe even when no slot 0 */
  	u64		 dma_mask; /* from bridge device */
  	int              bus_nr; /* Set by eisa_root_register */
  	struct resource  eisa_root_res;	/* ditto */
  };
  
  int eisa_root_register (struct eisa_root_device *root);
  
  #ifdef CONFIG_EISA
  extern int EISA_bus;
  #else
  # define EISA_bus 0
  #endif
  
  #endif