usb_notify_sysfs.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2015-2023 Samsung Electronics Co. Ltd.
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. */
  10. /* usb notify layer v4.0 */
  11. #ifndef __LINUX_USB_NOTIFY_SYSFS_H__
  12. #define __LINUX_USB_NOTIFY_SYSFS_H__
  13. #define MAX_DISABLE_STR_LEN 32
  14. #define MAX_WHITELIST_STR_LEN 256
  15. #define MAX_USB_AUDIO_CARDS 15
  16. /* one card needs 9 byte ex) <card11> */
  17. #define MAX_CARD_STR_LEN (MAX_USB_AUDIO_CARDS * 9)
  18. #define MAX_CLASS_TYPE_NUM USB_CLASS_VENDOR_SPEC
  19. #define MAX_USB_SPEED_STR_LEN 15
  20. #define ALLOWLIST_PREFIX_SIZE 5
  21. #define MAX_VID_PID_STRING 10
  22. #define MAX_ALLOWLIST_DEVICE_COUNT 100
  23. #define MAX_ALLOWLIST_DEVICE_BUFFER_INDEX (MAX_ALLOWLIST_DEVICE_COUNT*2)
  24. #define MAX_ALLOWLIST_BUFFER (MAX_VID_PID_STRING * MAX_ALLOWLIST_DEVICE_COUNT + ALLOWLIST_PREFIX_SIZE)
  25. enum u_interface_class_type {
  26. U_CLASS_PER_INTERFACE = 1,
  27. U_CLASS_AUDIO,
  28. U_CLASS_COMM,
  29. U_CLASS_HID,
  30. U_CLASS_PHYSICAL,
  31. U_CLASS_STILL_IMAGE,
  32. U_CLASS_PRINTER,
  33. U_CLASS_MASS_STORAGE,
  34. U_CLASS_HUB,
  35. U_CLASS_CDC_DATA,
  36. U_CLASS_CSCID,
  37. U_CLASS_CONTENT_SEC,
  38. U_CLASS_VIDEO,
  39. U_CLASS_WIRELESS_CONTROLLER,
  40. U_CLASS_MISC,
  41. U_CLASS_APP_SPEC,
  42. U_CLASS_VENDOR_SPEC,
  43. };
  44. struct usb_audio_info {
  45. int cards;
  46. int bundle;
  47. };
  48. struct usb_notify_dev {
  49. const char *name;
  50. struct device *dev;
  51. struct otg_notify *o_notify;
  52. int index;
  53. unsigned int request_action;
  54. unsigned int lpm_charging_type_done;
  55. unsigned long usb_data_enabled;
  56. unsigned long disable_state;
  57. unsigned long secure_lock;
  58. bool first_restrict;
  59. int (*set_disable)(struct usb_notify_dev *udev, int param);
  60. void (*set_mdm)(struct usb_notify_dev *udev, int mdm_disable);
  61. void (*set_mdm_for_id)(struct usb_notify_dev *udev, int mdm_disable);
  62. void (*set_mdm_for_serial)(struct usb_notify_dev *udev, int mdm_disable);
  63. int (*control_usb_max_speed)(struct usb_notify_dev *udev, int speed);
  64. unsigned long (*fp_hw_param_manager)(int param);
  65. int (*set_lock_state)(struct usb_notify_dev *udev);
  66. char disable_state_cmd[MAX_DISABLE_STR_LEN];
  67. char whitelist_str[MAX_WHITELIST_STR_LEN];
  68. int whitelist_array_for_mdm[MAX_CLASS_TYPE_NUM+1];
  69. int whitelist_array_for_mdm_for_id[MAX_WHITELIST_STR_LEN];
  70. char whitelist_str_for_id[MAX_WHITELIST_STR_LEN];
  71. char whitelist_array_for_mdm_for_serial[MAX_WHITELIST_STR_LEN];
  72. struct usb_audio_info usb_audio_cards[MAX_USB_AUDIO_CARDS];
  73. int allowlist_array_lockscreen_enabled_id[MAX_ALLOWLIST_DEVICE_BUFFER_INDEX];
  74. char allowlist_str_lockscreen_enabled_id[MAX_ALLOWLIST_BUFFER];
  75. struct mutex lockscreen_enabled_lock;
  76. };
  77. extern int usb_notify_dev_uevent(struct usb_notify_dev *udev,
  78. char *envp_ext[]);
  79. extern int usb_notify_dev_register(struct usb_notify_dev *ndev);
  80. extern void usb_notify_dev_unregister(struct usb_notify_dev *ndev);
  81. extern int usb_notify_class_init(void);
  82. extern void usb_notify_class_exit(void);
  83. #endif