list_add_tail(&class_dev->node, &parent->children);
                list_for_each_entry(class_intf, &parent->interfaces, node)
                        if (class_intf->add)
-                               class_intf->add(class_dev);
+                               class_intf->add(class_dev, class_intf);
                up(&parent->sem);
        }
 
                list_del_init(&class_dev->node);
                list_for_each_entry(class_intf, &parent->interfaces, node)
                        if (class_intf->remove)
-                               class_intf->remove(class_dev);
+                               class_intf->remove(class_dev, class_intf);
                up(&parent->sem);
        }
 
        list_add_tail(&class_intf->node, &parent->interfaces);
        if (class_intf->add) {
                list_for_each_entry(class_dev, &parent->children, node)
-                       class_intf->add(class_dev);
+                       class_intf->add(class_dev, class_intf);
        }
        up(&parent->sem);
 
        list_del_init(&class_intf->node);
        if (class_intf->remove) {
                list_for_each_entry(class_dev, &parent->children, node)
-                       class_intf->remove(class_dev);
+                       class_intf->remove(class_dev, class_intf);
        }
        up(&parent->sem);
 
 
        .requery = pcmcia_bus_rescan,
 };
 
-static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev)
+static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev,
+                                          struct class_interface *class_intf)
 {
        struct pcmcia_socket *socket = class_get_devdata(class_dev);
        int ret;
        return 0;
 }
 
-static void pcmcia_bus_remove_socket(struct class_device *class_dev)
+static void pcmcia_bus_remove_socket(struct class_device *class_dev,
+                                    struct class_interface *class_intf)
 {
        struct pcmcia_socket *socket = class_get_devdata(class_dev);
 
 
        NULL,
 };
 
-static int __devinit pccard_sysfs_add_rsrc(struct class_device *class_dev)
+static int __devinit pccard_sysfs_add_rsrc(struct class_device *class_dev,
+                                          struct class_interface *class_intf)
 {
        struct pcmcia_socket *s = class_get_devdata(class_dev);
        struct class_device_attribute **attr;
        return ret;
 }
 
-static void __devexit pccard_sysfs_remove_rsrc(struct class_device *class_dev)
+static void __devexit pccard_sysfs_remove_rsrc(struct class_device *class_dev,
+                                              struct class_interface *class_intf)
 {
        struct pcmcia_socket *s = class_get_devdata(class_dev);
        struct class_device_attribute **attr;
 
        .write = pccard_store_cis,
 };
 
-static int __devinit pccard_sysfs_add_socket(struct class_device *class_dev)
+static int __devinit pccard_sysfs_add_socket(struct class_device *class_dev,
+                                            struct class_interface *class_intf)
 {
        struct class_device_attribute **attr;
        int ret = 0;
        return ret;
 }
 
-static void __devexit pccard_sysfs_remove_socket(struct class_device *class_dev)
+static void __devexit pccard_sysfs_remove_socket(struct class_device *class_dev,
+                                                struct class_interface *class_intf)
 {
        struct class_device_attribute **attr;
 
 
 
 #define SG_DEV_ARR_LUMP 32     /* amount to over allocate sg_dev_arr by */
 
-static int sg_add(struct class_device *);
-static void sg_remove(struct class_device *);
+static int sg_add(struct class_device *, struct class_interface *);
+static void sg_remove(struct class_device *, struct class_interface *);
 
 static Scsi_Request *dummy_cmdp;       /* only used for sizeof */
 
 }
 
 static int
-sg_add(struct class_device *cl_dev)
+sg_add(struct class_device *cl_dev, struct class_interface *cl_intf)
 {
        struct scsi_device *scsidp = to_scsi_device(cl_dev->dev);
        struct gendisk *disk;
 }
 
 static void
-sg_remove(struct class_device *cl_dev)
+sg_remove(struct class_device *cl_dev, struct class_interface *cl_intf)
 {
        struct scsi_device *scsidp = to_scsi_device(cl_dev->dev);
        Sg_device *sdp = NULL;
 
        struct list_head        node;
        struct class            *class;
 
-       int (*add)      (struct class_device *);
-       void (*remove)  (struct class_device *);
+       int (*add)      (struct class_device *, struct class_interface *);
+       void (*remove)  (struct class_device *, struct class_interface *);
 };
 
 extern int class_interface_register(struct class_interface *);