2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef _MTP_USB_DRIVER_H_
18 #define _MTP_USB_DRIVER_H_
20 #include "mtp_config.h"
21 #include "mtp_datatype.h"
24 /* Start of driver related defines */
25 #define MTP_DRIVER_PATH "/dev/usb_mtp_gadget"
27 /* FunctionFS endpoint paths */
29 #define MTP_FFS_PATH "/dev/usb-funcs/mtp"
31 #define MTP_EP0_PATH MTP_FFS_PATH "/ep0"
32 #define MTP_EP_IN_PATH MTP_FFS_PATH "/ep1"
33 #define MTP_EP_OUT_PATH MTP_FFS_PATH "/ep2"
34 #define MTP_EP_STATUS_PATH MTP_FFS_PATH "/ep3"
36 /* These values come from f_mtp_slp.h of kernel source */
37 #define MTP_IOCTL_LETTER 'Z'
38 #define MTP_GET_HIGH_FULL_SPEED _IOR(MTP_IOCTL_LETTER, 1, int)
39 #define MTP_DISABLE _IO(MTP_IOCTL_LETTER, 2)
40 #define MTP_CLEAR_HALT _IO(MTP_IOCTL_LETTER, 3)
41 #define MTP_WRITE_INT_DATA _IOW(MTP_IOCTL_LETTER, 4, char *)
42 #define MTP_SET_USER_PID _IOW(MTP_IOCTL_LETTER, 5, int)
43 #define MTP_GET_SETUP_DATA _IOR(MTP_IOCTL_LETTER, 6, char *)
44 #define MTP_SET_SETUP_DATA _IOW(MTP_IOCTL_LETTER, 7, char *)
45 #define MTP_SEND_RESET_ACK _IO(MTP_IOCTL_LETTER, 8)
46 #define MTP_SET_ZLP_DATA _IO(MTP_IOCTL_LETTER, 9)
47 #define MTP_GET_MAX_PKT_SIZE _IOR(MTP_IOCTL_LETTER, 22, void *)
50 /* End of driver related defines */
52 typedef struct mtp_max_pkt_size {
57 /* Transport driver interface */
58 typedef struct mtp_usb_driver {
59 mtp_bool (*transport_init_usb_device)(void);
60 void *(*transport_thread_fake_usb_read)(void *arg);
61 void *(*transport_thread_fake_usb_write)(void *arg);
62 void (*transport_deinit_usb_device)(void);
63 void *(*transport_thread_usb_write)(void *arg);
64 void *(*transport_thread_usb_read)(void *arg);
65 void *(*transport_thread_usb_control)(void *arg);
66 mtp_int32 (*transport_mq_init)(msgq_id_t *rx_ipc, msgq_id_t *tx_ipc);
67 mtp_bool (*transport_mq_deinit)(msgq_id_t *rx_ipc, msgq_id_t *tx_ipc);
68 mtp_uint32 (*transport_get_usb_packet_len)(void);
69 mtp_uint32 (*get_tx_pkt_size)(void);
70 mtp_uint32 (*get_rx_pkt_size)(void);
73 extern const mtp_usb_driver_t mtp_usb_driver_slp;
74 extern const mtp_usb_driver_t mtp_usb_driver_ffs;
77 MTP_TRANSPORT_SLP = 0,
79 MTP_TRANSPORT_NUMBER, /* number of supported transports */
80 MTP_TRANSPORT_UNKNOWN,
81 } mtp_transport_type_t;
83 /* Maximum repeat count for USB error recovery */
84 #define MTP_USB_ERROR_MAX_RETRY 5
86 mtp_bool _transport_init_usb_device(void);
87 void _transport_deinit_usb_device(void);
88 void *_transport_thread_usb_write(void *arg);
89 void *_transport_thread_usb_read(void *arg);
90 void *_transport_thread_usb_control(void *arg);
91 mtp_int32 _transport_mq_init(msgq_id_t *rx_mqid, msgq_id_t *tx_mqid);
92 mtp_bool _transport_mq_deinit(msgq_id_t *rx_mqid, msgq_id_t *tx_mqid);
93 mtp_uint32 _transport_get_usb_packet_len(void);
94 mtp_uint32 _get_tx_pkt_size(void);
95 mtp_uint32 _get_rx_pkt_size(void);
96 mtp_transport_type_t _transport_get_type(void);
98 #endif /* _MTP_USB_DRIVER_H_ */