提交 a916a391 编写于 作者: M Manohar Vanga 提交者: Greg Kroah-Hartman

staging: vme: get rid of struct vme_device_id and slots

Previously, the device-driver matching mechanism depended on the
vme_device_id structure due to the need for a bind table per driver.
This method of matching is no longer used so this patch merges the
fields of struct vme_device_id into struct vme_dev. Since this also
renders the slot field meaningless, it has also been removed in this
patch.
Signed-off-by: NManohar Vanga <manohar.vanga@cern.ch>
Cc: Martyn Welch <martyn.welch@ge.com>
Reviewed-by: NEmilio G. Cota <cota@braap.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 5d6abf37
......@@ -668,7 +668,7 @@ static int __init vme_user_init(void)
static int vme_user_match(struct vme_dev *vdev)
{
if (vdev->id.num >= USER_BUS_MAX)
if (vdev->num >= USER_BUS_MAX)
return 0;
return 1;
}
......
......@@ -1377,16 +1377,14 @@ static int __vme_register_driver_bus(struct vme_driver *drv,
err = -ENOMEM;
goto err_devalloc;
}
vdev->id.num = i;
vdev->id.bus = bridge->num;
vdev->id.slot = i + 1;
vdev->num = i;
vdev->bridge = bridge;
vdev->dev.platform_data = drv;
vdev->dev.release = vme_dev_release;
vdev->dev.parent = bridge->parent;
vdev->dev.bus = &vme_bus_type;
dev_set_name(&vdev->dev, "%s.%u-%u", drv->name, vdev->id.bus,
vdev->id.num);
dev_set_name(&vdev->dev, "%s.%u-%u", drv->name, bridge->num,
vdev->num);
err = device_register(&vdev->dev);
if (err)
......
......@@ -95,18 +95,6 @@ extern struct bus_type vme_bus_type;
#define VME_SLOT_CURRENT -1
#define VME_SLOT_ALL -2
/**
* VME device identifier structure
* @num: The device ID (ranges from 0 to N-1 for N devices)
* @bus: The bus ID of the bus the device is on
* @slot: The slot this device is plugged into
*/
struct vme_device_id {
int num;
int bus;
int slot;
};
/**
* Structure representing a VME device
* @id: The ID of the device (currently the bus and slot number)
......@@ -116,7 +104,7 @@ struct vme_device_id {
* @bridge_list: List of devices (per bridge)
*/
struct vme_dev {
struct vme_device_id id;
int num;
struct vme_bridge *bridge;
struct device dev;
struct list_head drv_list;
......
......@@ -51,23 +51,16 @@ probe routine is passed a 'struct vme_dev' pointer as an argument. The
'struct vme_dev' structure looks like the following:
struct vme_dev {
struct vme_device_id id;
int num;
struct vme_bridge *bridge;
struct device dev;
struct list_head drv_list;
struct list_head bridge_list;
};
The 'bridge' field contains a pointer to the bridge device. The 'id' field
contains information useful for the probe function:
struct vme_device_id {
int bus;
int slot;
int num;
};
Here, 'bus' is the number of the bus the device being probed is on. 'slot'
refers to the specific slot on the VME bus. The 'num' field refers to the
sequential device ID for this specific driver.
Here, the 'num' field refers to the sequential device ID for this specific
driver. The bridge number (or bus number) can be accessed using
dev->bridge->num.
A function is also provided to unregister the driver from the VME core and is
usually called from the device driver's exit routine:
......@@ -78,9 +71,11 @@ usually called from the device driver's exit routine:
Resource management
===================
Once a driver has registered with the VME core the provided probe routine will
be called for each of the bus/slot combination that becomes valid as VME buses
are themselves registered. The probe routine is passed a pointer to the devices
Once a driver has registered with the VME core the provided match routine will
be called the number of times specified during the registration. If a match
succeeds, a non-zero value should be returned. A zero return value indicates
failure. For all successful matches, the probe routine of the corresponding
driver is called. The probe routine is passed a pointer to the devices
device structure. This pointer should be saved, it will be required for
requesting VME resources.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册