memset(buf, 0, sizeof(buf));
if (!obd && cmd != OBD_IOC_DEVICE && cmd != TCGETS
- && cmd != OBD_IOC_NAME2DEV) {
+ && cmd != OBD_IOC_NAME2DEV && cmd != OBD_IOC_NEWDEV) {
CERROR("OBD ioctl: No device\n");
RETURN(-EINVAL);
}
RETURN(err);
}
+ case OBD_IOC_NEWDEV: {
+ int dev = -1;
+ int i;
+
+ filp->private_data = NULL;
+ for (i = 0 ; i < MAX_OBD_DEVICES ; i++) {
+ struct obd_device *obd = &obd_dev[i];
+ if (!obd->obd_type) {
+ filp->private_data = obd;
+ dev = i;
+ break;
+ }
+ }
+
+
+ data->ioc_dev = dev;
+ if (dev == -1)
+ RETURN(-EINVAL);
+
+ err = copy_to_user((int *)arg, data, sizeof(*data));
+ RETURN(err);
+ }
+
case OBD_IOC_ATTACH: {
struct obd_type *type;