#ifndef _IEEE1394_HOTPLUG_H #define _IEEE1394_HOTPLUG_H #include "ieee1394_core.h" #include "nodemgr.h" #define IEEE1394_MATCH_VENDOR_ID 0x0001 #define IEEE1394_MATCH_MODEL_ID 0x0002 #define IEEE1394_MATCH_SPECIFIER_ID 0x0004 #define IEEE1394_MATCH_VERSION 0x0008 struct ieee1394_device_id { u32 match_flags; u32 vendor_id; u32 model_id; u32 specifier_id; u32 version; void *driver_data; }; struct hpsb_protocol_driver { /* The name of the driver, e.g. SBP2 or IP1394 */ const char *name; /* * The device id table describing the protocols and/or devices * supported by this driver. This is used by the nodemgr to * decide if a driver could support a given node, but the * probe function below can implement further protocol * dependent or vendor dependent checking. */ struct ieee1394_device_id *id_table; /* * The probe function is called when a device is added to the * bus and the nodemgr finds a matching entry in the drivers * device id table or when registering this driver and a * previously unhandled device can be handled. The driver may * decline to handle the device based on further investigation * of the device (or whatever reason) in which case a negative * error code should be returned, otherwise 0 should be * returned. The driver may use the driver_data field in the * unit directory to store per device driver specific data. */ int (*probe)(struct unit_directory *ud); /* * The disconnect function is called when a device is removed * from the bus or if it wasn't possible to read the guid * after the last bus reset. */ void (*disconnect)(struct unit_directory *ud); /* * The update function is called when the node has just * survived a bus reset, i.e. it is still present on the bus. * However, it may be necessary to reestablish the connection * or login into the node again, depending on the protocol. */ void (*update)(struct unit_directory *ud); /* Driver in list of all registered drivers */ struct list_head list; /* The list of unit directories managed by this driver */ struct list_head unit_directories; }; int hpsb_register_protocol(struct hpsb_protocol_driver *driver); void hpsb_unregister_protocol(struct hpsb_protocol_driver *driver); int hpsb_claim_unit_directory(struct unit_directory *ud, struct hpsb_protocol_driver *driver); void hpsb_release_unit_directory(struct unit_directory *ud); #endif /* _IEEE1394_HOTPLUG_H */