Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb52d897 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

powerpc+sparc/vio: Modernize driver registration



This makes vio_register_driver() get the module owner & name at compile
time like PCI drivers do, and adds a name pointer directly in struct
vio_driver to avoid having to explicitly initialize the embedded
struct device.

Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1d9a4731
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -69,6 +69,7 @@ struct vio_dev {
};
};


struct vio_driver {
struct vio_driver {
	const char *name;
	const struct vio_device_id *id_table;
	const struct vio_device_id *id_table;
	int (*probe)(struct vio_dev *dev, const struct vio_device_id *id);
	int (*probe)(struct vio_dev *dev, const struct vio_device_id *id);
	int (*remove)(struct vio_dev *dev);
	int (*remove)(struct vio_dev *dev);
@@ -76,10 +77,17 @@ struct vio_driver {
	 * be loaded in a CMO environment if it uses DMA.
	 * be loaded in a CMO environment if it uses DMA.
	 */
	 */
	unsigned long (*get_desired_dma)(struct vio_dev *dev);
	unsigned long (*get_desired_dma)(struct vio_dev *dev);
	const struct dev_pm_ops *pm;
	struct device_driver driver;
	struct device_driver driver;
};
};


extern int vio_register_driver(struct vio_driver *drv);
extern int __vio_register_driver(struct vio_driver *drv, struct module *owner,
				 const char *mod_name);
/*
 * vio_register_driver must be a macro so that KBUILD_MODNAME can be expanded
 */
#define vio_register_driver(driver)		\
	__vio_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
extern void vio_unregister_driver(struct vio_driver *drv);
extern void vio_unregister_driver(struct vio_driver *drv);


extern int vio_cmo_entitlement_update(size_t);
extern int vio_cmo_entitlement_update(size_t);
+8 −4
Original line number Original line Diff line number Diff line
@@ -1159,17 +1159,21 @@ static int vio_bus_remove(struct device *dev)
 * vio_register_driver: - Register a new vio driver
 * vio_register_driver: - Register a new vio driver
 * @drv:	The vio_driver structure to be registered.
 * @drv:	The vio_driver structure to be registered.
 */
 */
int vio_register_driver(struct vio_driver *viodrv)
int __vio_register_driver(struct vio_driver *viodrv, struct module *owner,
			  const char *mod_name)
{
{
	printk(KERN_DEBUG "%s: driver %s registering\n", __func__,
	pr_debug("%s: driver %s registering\n", __func__, viodrv->name);
		viodrv->driver.name);


	/* fill in 'struct driver' fields */
	/* fill in 'struct driver' fields */
	viodrv->driver.name = viodrv->name;
	viodrv->driver.pm = viodrv->pm;
	viodrv->driver.bus = &vio_bus_type;
	viodrv->driver.bus = &vio_bus_type;
	viodrv->driver.owner = owner;
	viodrv->driver.mod_name = mod_name;


	return driver_register(&viodrv->driver);
	return driver_register(&viodrv->driver);
}
}
EXPORT_SYMBOL(vio_register_driver);
EXPORT_SYMBOL(__vio_register_driver);


/**
/**
 * vio_unregister_driver - Remove registration of vio driver.
 * vio_unregister_driver - Remove registration of vio driver.
+8 −1
Original line number Original line Diff line number Diff line
@@ -284,6 +284,7 @@ struct vio_dev {
};
};


struct vio_driver {
struct vio_driver {
	const char			*name;
	struct list_head		node;
	struct list_head		node;
	const struct vio_device_id	*id_table;
	const struct vio_device_id	*id_table;
	int (*probe)(struct vio_dev *dev, const struct vio_device_id *id);
	int (*probe)(struct vio_dev *dev, const struct vio_device_id *id);
@@ -371,7 +372,13 @@ do { if (vio->debug & VIO_DEBUG_##TYPE) \
		       vio->vdev->channel_id, ## a); \
		       vio->vdev->channel_id, ## a); \
} while (0)
} while (0)


extern int vio_register_driver(struct vio_driver *drv);
extern int __vio_register_driver(struct vio_driver *drv, struct module *owner,
				 const char *mod_name);
/*
 * vio_register_driver must be a macro so that KBUILD_MODNAME can be expanded
 */
#define vio_register_driver(driver)		\
	__vio_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
extern void vio_unregister_driver(struct vio_driver *drv);
extern void vio_unregister_driver(struct vio_driver *drv);


static inline struct vio_driver *to_vio_driver(struct device_driver *drv)
static inline struct vio_driver *to_vio_driver(struct device_driver *drv)
+1 −4
Original line number Original line Diff line number Diff line
@@ -1244,10 +1244,7 @@ static struct vio_driver ds_driver = {
	.id_table	= ds_match,
	.id_table	= ds_match,
	.probe		= ds_probe,
	.probe		= ds_probe,
	.remove		= ds_remove,
	.remove		= ds_remove,
	.driver		= {
	.name		= "ds",
	.name		= "ds",
		.owner	= THIS_MODULE,
	}
};
};


static int __init ds_init(void)
static int __init ds_init(void)
+6 −2
Original line number Original line Diff line number Diff line
@@ -119,13 +119,17 @@ static struct bus_type vio_bus_type = {
	.remove		= vio_device_remove,
	.remove		= vio_device_remove,
};
};


int vio_register_driver(struct vio_driver *viodrv)
int __vio_register_driver(struct vio_driver *viodrv, struct module *owner,
			const char *mod_name)
{
{
	viodrv->driver.bus = &vio_bus_type;
	viodrv->driver.bus = &vio_bus_type;
	viodrv->driver.name = viodrv->name;
	viodrv->driver.owner = owner;
	viodrv->driver.mod_name = mod_name;


	return driver_register(&viodrv->driver);
	return driver_register(&viodrv->driver);
}
}
EXPORT_SYMBOL(vio_register_driver);
EXPORT_SYMBOL(__vio_register_driver);


void vio_unregister_driver(struct vio_driver *viodrv)
void vio_unregister_driver(struct vio_driver *viodrv)
{
{
Loading