s390_rdev.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * drivers/s390/s390_rdev.c
  3. * s390 root device
  4. * $Revision: 1.4 $
  5. *
  6. * Copyright (C) 2002, 2005 IBM Deutschland Entwicklung GmbH,
  7. * IBM Corporation
  8. * Author(s): Cornelia Huck (cornelia.huck@de.ibm.com)
  9. * Carsten Otte (cotte@de.ibm.com)
  10. */
  11. #include <linux/slab.h>
  12. #include <linux/err.h>
  13. #include <linux/device.h>
  14. #include <asm/s390_rdev.h>
  15. static void
  16. s390_root_dev_release(struct device *dev)
  17. {
  18. kfree(dev);
  19. }
  20. struct device *
  21. s390_root_dev_register(const char *name)
  22. {
  23. struct device *dev;
  24. int ret;
  25. if (!strlen(name))
  26. return ERR_PTR(-EINVAL);
  27. dev = kmalloc(sizeof(struct device), GFP_KERNEL);
  28. if (!dev)
  29. return ERR_PTR(-ENOMEM);
  30. memset(dev, 0, sizeof(struct device));
  31. strncpy(dev->bus_id, name, min(strlen(name), (size_t)BUS_ID_SIZE));
  32. dev->release = s390_root_dev_release;
  33. ret = device_register(dev);
  34. if (ret) {
  35. kfree(dev);
  36. return ERR_PTR(ret);
  37. }
  38. return dev;
  39. }
  40. void
  41. s390_root_dev_unregister(struct device *dev)
  42. {
  43. if (dev)
  44. device_unregister(dev);
  45. }
  46. EXPORT_SYMBOL(s390_root_dev_register);
  47. EXPORT_SYMBOL(s390_root_dev_unregister);