diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2005-08-17 02:41:44 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-08-29 23:23:47 -0400 |
commit | 71d276d751ff5ddba28312aecefb174b20a5b970 (patch) | |
tree | 1d2262f427fb0e117d0ad464eaf3375373e166f8 /include | |
parent | b877b90f227fb9698d99fb70492d432362584082 (diff) |
[PATCH] Create vio_bus_ops
Create vio_bus_ops so that we just pass a structure to vio_bus_init
instead of three separate function pointers.
Rearrange vio.h to avoid forward references. vio.h only needs
struct device_node from prom.h so remove the include and just
declare it.
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-ppc64/vio.h | 97 |
1 files changed, 48 insertions, 49 deletions
diff --git a/include/asm-ppc64/vio.h b/include/asm-ppc64/vio.h index 578e30193b7b..85420bb37d58 100644 --- a/include/asm-ppc64/vio.h +++ b/include/asm-ppc64/vio.h | |||
@@ -19,13 +19,14 @@ | |||
19 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
20 | #include <linux/device.h> | 20 | #include <linux/device.h> |
21 | #include <linux/dma-mapping.h> | 21 | #include <linux/dma-mapping.h> |
22 | |||
22 | #include <asm/hvcall.h> | 23 | #include <asm/hvcall.h> |
23 | #include <asm/prom.h> | ||
24 | #include <asm/scatterlist.h> | 24 | #include <asm/scatterlist.h> |
25 | /* | 25 | |
26 | /* | ||
26 | * Architecture-specific constants for drivers to | 27 | * Architecture-specific constants for drivers to |
27 | * extract attributes of the device using vio_get_attribute() | 28 | * extract attributes of the device using vio_get_attribute() |
28 | */ | 29 | */ |
29 | #define VETH_MAC_ADDR "local-mac-address" | 30 | #define VETH_MAC_ADDR "local-mac-address" |
30 | #define VETH_MCAST_FILTER_SIZE "ibm,mac-address-filters" | 31 | #define VETH_MCAST_FILTER_SIZE "ibm,mac-address-filters" |
31 | 32 | ||
@@ -37,30 +38,19 @@ | |||
37 | #define VIO_IRQ_DISABLE 0UL | 38 | #define VIO_IRQ_DISABLE 0UL |
38 | #define VIO_IRQ_ENABLE 1UL | 39 | #define VIO_IRQ_ENABLE 1UL |
39 | 40 | ||
40 | struct vio_dev; | ||
41 | struct vio_driver; | ||
42 | struct vio_device_id; | ||
43 | struct iommu_table; | 41 | struct iommu_table; |
44 | 42 | ||
45 | int vio_register_driver(struct vio_driver *drv); | 43 | /* |
46 | void vio_unregister_driver(struct vio_driver *drv); | 44 | * The vio_dev structure is used to describe virtual I/O devices. |
47 | 45 | */ | |
48 | #ifdef CONFIG_PPC_PSERIES | 46 | struct vio_dev { |
49 | struct vio_dev * __devinit vio_register_device_node( | 47 | struct iommu_table *iommu_table; /* vio_map_* uses this */ |
50 | struct device_node *node_vdev); | 48 | char *name; |
51 | #endif | 49 | char *type; |
52 | void __devinit vio_unregister_device(struct vio_dev *dev); | 50 | uint32_t unit_address; |
53 | struct vio_dev *vio_find_node(struct device_node *vnode); | 51 | unsigned int irq; |
54 | 52 | struct device dev; | |
55 | const void * vio_get_attribute(struct vio_dev *vdev, void* which, int* length); | 53 | }; |
56 | int vio_get_irq(struct vio_dev *dev); | ||
57 | int vio_enable_interrupts(struct vio_dev *dev); | ||
58 | int vio_disable_interrupts(struct vio_dev *dev); | ||
59 | extern struct vio_dev * __devinit vio_register_device(struct vio_dev *viodev); | ||
60 | |||
61 | extern struct dma_mapping_ops vio_dma_ops; | ||
62 | |||
63 | extern struct bus_type vio_bus_type; | ||
64 | 54 | ||
65 | struct vio_device_id { | 55 | struct vio_device_id { |
66 | char *type; | 56 | char *type; |
@@ -70,42 +60,51 @@ struct vio_device_id { | |||
70 | struct vio_driver { | 60 | struct vio_driver { |
71 | struct list_head node; | 61 | struct list_head node; |
72 | char *name; | 62 | char *name; |
73 | const struct vio_device_id *id_table; /* NULL if wants all devices */ | 63 | const struct vio_device_id *id_table; |
74 | int (*probe) (struct vio_dev *dev, const struct vio_device_id *id); /* New device inserted */ | 64 | int (*probe)(struct vio_dev *dev, const struct vio_device_id *id); |
75 | int (*remove) (struct vio_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */ | 65 | int (*remove)(struct vio_dev *dev); |
76 | unsigned long driver_data; | 66 | unsigned long driver_data; |
77 | |||
78 | struct device_driver driver; | 67 | struct device_driver driver; |
79 | }; | 68 | }; |
80 | 69 | ||
70 | struct vio_bus_ops { | ||
71 | int (*match)(const struct vio_device_id *id, const struct vio_dev *dev); | ||
72 | void (*unregister_device)(struct vio_dev *); | ||
73 | void (*release_device)(struct device *); | ||
74 | }; | ||
75 | |||
76 | extern struct dma_mapping_ops vio_dma_ops; | ||
77 | extern struct bus_type vio_bus_type; | ||
78 | extern struct vio_dev vio_bus_device; | ||
79 | |||
80 | extern int vio_register_driver(struct vio_driver *drv); | ||
81 | extern void vio_unregister_driver(struct vio_driver *drv); | ||
82 | |||
83 | extern struct vio_dev * __devinit vio_register_device(struct vio_dev *viodev); | ||
84 | extern void __devinit vio_unregister_device(struct vio_dev *dev); | ||
85 | |||
86 | extern int vio_bus_init(struct vio_bus_ops *); | ||
87 | |||
88 | #ifdef CONFIG_PPC_PSERIES | ||
89 | struct device_node; | ||
90 | |||
91 | extern struct vio_dev * __devinit vio_register_device_node( | ||
92 | struct device_node *node_vdev); | ||
93 | extern struct vio_dev *vio_find_node(struct device_node *vnode); | ||
94 | extern const void *vio_get_attribute(struct vio_dev *vdev, void *which, | ||
95 | int *length); | ||
96 | extern int vio_enable_interrupts(struct vio_dev *dev); | ||
97 | extern int vio_disable_interrupts(struct vio_dev *dev); | ||
98 | #endif | ||
99 | |||
81 | static inline struct vio_driver *to_vio_driver(struct device_driver *drv) | 100 | static inline struct vio_driver *to_vio_driver(struct device_driver *drv) |
82 | { | 101 | { |
83 | return container_of(drv, struct vio_driver, driver); | 102 | return container_of(drv, struct vio_driver, driver); |
84 | } | 103 | } |
85 | 104 | ||
86 | /* | ||
87 | * The vio_dev structure is used to describe virtual I/O devices. | ||
88 | */ | ||
89 | struct vio_dev { | ||
90 | struct iommu_table *iommu_table; /* vio_map_* uses this */ | ||
91 | char *name; | ||
92 | char *type; | ||
93 | uint32_t unit_address; | ||
94 | unsigned int irq; | ||
95 | |||
96 | struct device dev; | ||
97 | }; | ||
98 | |||
99 | extern struct vio_dev vio_bus_device; | ||
100 | |||
101 | static inline struct vio_dev *to_vio_dev(struct device *dev) | 105 | static inline struct vio_dev *to_vio_dev(struct device *dev) |
102 | { | 106 | { |
103 | return container_of(dev, struct vio_dev, dev); | 107 | return container_of(dev, struct vio_dev, dev); |
104 | } | 108 | } |
105 | 109 | ||
106 | extern int vio_bus_init(int (*is_match)(const struct vio_device_id *id, | ||
107 | const struct vio_dev *dev), | ||
108 | void (*)(struct vio_dev *), | ||
109 | void (*)(struct device *)); | ||
110 | |||
111 | #endif /* _ASM_VIO_H */ | 110 | #endif /* _ASM_VIO_H */ |