4 #define VME_CRCSR_BUF_SIZE (508*1024)
8 struct vme_master_resource
{
10 struct vme_bridge
*parent
;
12 * We are likely to need to access the VME bus in interrupt context, so
13 * protect master routines with a spinlock rather than a mutex.
21 struct resource bus_resource
;
22 void __iomem
*kern_base
;
25 struct vme_slave_resource
{
26 struct list_head list
;
27 struct vme_bridge
*parent
;
35 struct vme_dma_pattern
{
45 unsigned long long address
;
52 struct list_head list
;
53 struct vme_dma_resource
*parent
;
54 struct list_head entries
;
58 struct vme_dma_resource
{
59 struct list_head list
;
60 struct vme_bridge
*parent
;
64 struct list_head pending
;
65 struct list_head running
;
69 struct vme_lm_resource
{
70 struct list_head list
;
71 struct vme_bridge
*parent
;
78 struct vme_bus_error
{
79 struct list_head list
;
80 unsigned long long address
;
85 void (*func
)(int, int, void*);
91 struct vme_callback callback
[255];
94 /* Allow 16 characters for name (including null character) */
97 /* This structure stores all the information about one bridge
98 * The structure should be dynamically allocated by the driver and one instance
99 * of the structure should be present for each VME chip present in the system.
102 char name
[VMENAMSIZ
];
104 struct list_head master_resources
;
105 struct list_head slave_resources
;
106 struct list_head dma_resources
;
107 struct list_head lm_resources
;
109 struct list_head vme_errors
; /* List for errors generated on VME */
110 struct list_head devices
; /* List of devices on this bridge */
112 /* Bridge Info - XXX Move to private structure? */
113 struct device
*parent
; /* Parent device (eg. pdev->dev for PCI) */
114 void *driver_priv
; /* Private pointer for the bridge driver */
115 struct list_head bus_list
; /* list of VME buses */
117 /* Interrupt callbacks */
118 struct vme_irq irq
[7];
119 /* Locking for VME irq callback configuration */
120 struct mutex irq_mtx
;
122 /* Slave Functions */
123 int (*slave_get
) (struct vme_slave_resource
*, int *,
124 unsigned long long *, unsigned long long *, dma_addr_t
*,
126 int (*slave_set
) (struct vme_slave_resource
*, int, unsigned long long,
127 unsigned long long, dma_addr_t
, u32
, u32
);
129 /* Master Functions */
130 int (*master_get
) (struct vme_master_resource
*, int *,
131 unsigned long long *, unsigned long long *, u32
*, u32
*,
133 int (*master_set
) (struct vme_master_resource
*, int,
134 unsigned long long, unsigned long long, u32
, u32
, u32
);
135 ssize_t (*master_read
) (struct vme_master_resource
*, void *, size_t,
137 ssize_t (*master_write
) (struct vme_master_resource
*, void *, size_t,
139 unsigned int (*master_rmw
) (struct vme_master_resource
*, unsigned int,
140 unsigned int, unsigned int, loff_t
);
143 int (*dma_list_add
) (struct vme_dma_list
*, struct vme_dma_attr
*,
144 struct vme_dma_attr
*, size_t);
145 int (*dma_list_exec
) (struct vme_dma_list
*);
146 int (*dma_list_empty
) (struct vme_dma_list
*);
148 /* Interrupt Functions */
149 void (*irq_set
) (struct vme_bridge
*, int, int, int);
150 int (*irq_generate
) (struct vme_bridge
*, int, int);
152 /* Location monitor functions */
153 int (*lm_set
) (struct vme_lm_resource
*, unsigned long long, u32
, u32
);
154 int (*lm_get
) (struct vme_lm_resource
*, unsigned long long *, u32
*,
156 int (*lm_attach
) (struct vme_lm_resource
*, int, void (*callback
)(int));
157 int (*lm_detach
) (struct vme_lm_resource
*, int);
159 /* CR/CSR space functions */
160 int (*slot_get
) (struct vme_bridge
*);
162 /* Bridge parent interface */
163 void *(*alloc_consistent
)(struct device
*dev
, size_t size
,
165 void (*free_consistent
)(struct device
*dev
, size_t size
,
166 void *vaddr
, dma_addr_t dma
);
169 void vme_irq_handler(struct vme_bridge
*, int, int);
171 int vme_register_bridge(struct vme_bridge
*);
172 void vme_unregister_bridge(struct vme_bridge
*);
174 #endif /* _VME_BRIDGE_H_ */