xref: /aosp_15_r20/external/gsc-utils/util/usb_if.h (revision 4f2df630800bdcf1d4f0decf95d8a1cb87344f5f)
1*4f2df630SAndroid Build Coastguard Worker /*
2*4f2df630SAndroid Build Coastguard Worker  * Copyright 2018 The ChromiumOS Authors
3*4f2df630SAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
4*4f2df630SAndroid Build Coastguard Worker  * found in the LICENSE file.
5*4f2df630SAndroid Build Coastguard Worker  */
6*4f2df630SAndroid Build Coastguard Worker 
7*4f2df630SAndroid Build Coastguard Worker #ifndef __EC_EXTRA_USB_UPDATER_USB_IF_H
8*4f2df630SAndroid Build Coastguard Worker #define __EC_EXTRA_USB_UPDATER_USB_IF_H
9*4f2df630SAndroid Build Coastguard Worker 
10*4f2df630SAndroid Build Coastguard Worker #include <libusb.h>
11*4f2df630SAndroid Build Coastguard Worker 
12*4f2df630SAndroid Build Coastguard Worker /* This describes USB endpoint used to communicate with Cr50. */
13*4f2df630SAndroid Build Coastguard Worker struct usb_endpoint {
14*4f2df630SAndroid Build Coastguard Worker 	struct libusb_device_handle *devh;
15*4f2df630SAndroid Build Coastguard Worker 	uint8_t ep_num;
16*4f2df630SAndroid Build Coastguard Worker 	int chunk_len;
17*4f2df630SAndroid Build Coastguard Worker };
18*4f2df630SAndroid Build Coastguard Worker 
19*4f2df630SAndroid Build Coastguard Worker /*
20*4f2df630SAndroid Build Coastguard Worker  * Find the requested USB endpoint. This finds the device using the device
21*4f2df630SAndroid Build Coastguard Worker  * serial number, vendor id, and product id. The subclass and protocol are used
22*4f2df630SAndroid Build Coastguard Worker  * to find the correct endpoint. If a matching endpoint is found, fill up the
23*4f2df630SAndroid Build Coastguard Worker  * uep structure. If succeeded, usb_shut_down() must be invoked before program
24*4f2df630SAndroid Build Coastguard Worker  * exits.
25*4f2df630SAndroid Build Coastguard Worker  *
26*4f2df630SAndroid Build Coastguard Worker  * Return 0 on success, -1 on failure.
27*4f2df630SAndroid Build Coastguard Worker  */
28*4f2df630SAndroid Build Coastguard Worker int usb_findit(const char *serialno, uint16_t vid, uint16_t *pid, int pid_count,
29*4f2df630SAndroid Build Coastguard Worker 	       uint16_t subclass, uint16_t protocol, struct usb_endpoint *uep);
30*4f2df630SAndroid Build Coastguard Worker 
31*4f2df630SAndroid Build Coastguard Worker /*
32*4f2df630SAndroid Build Coastguard Worker  * Actual USB transfer function, the 'allow_less' flag indicates that the
33*4f2df630SAndroid Build Coastguard Worker  * valid response could be shorter than allotted memory, the 'rxed_count'
34*4f2df630SAndroid Build Coastguard Worker  * pointer, if provided along with 'allow_less', lets the caller know how many
35*4f2df630SAndroid Build Coastguard Worker  * bytes were received.
36*4f2df630SAndroid Build Coastguard Worker  */
37*4f2df630SAndroid Build Coastguard Worker int usb_trx(struct usb_endpoint *uep, void *outbuf, int outlen, void *inbuf,
38*4f2df630SAndroid Build Coastguard Worker 	    int inlen, int allow_less, size_t *rxed_count);
39*4f2df630SAndroid Build Coastguard Worker 
40*4f2df630SAndroid Build Coastguard Worker /*
41*4f2df630SAndroid Build Coastguard Worker  * This function should be called for graceful tear down of the USB interface
42*4f2df630SAndroid Build Coastguard Worker  * when the program exits, either normally or due to error. This is required
43*4f2df630SAndroid Build Coastguard Worker  * only after USB connection was established, i.e. after successful invocation
44*4f2df630SAndroid Build Coastguard Worker  * of usb_findit().
45*4f2df630SAndroid Build Coastguard Worker  */
46*4f2df630SAndroid Build Coastguard Worker void usb_shut_down(struct usb_endpoint *uep);
47*4f2df630SAndroid Build Coastguard Worker 
48*4f2df630SAndroid Build Coastguard Worker #define USB_ERROR(m, r)                                                        \
49*4f2df630SAndroid Build Coastguard Worker 	fprintf(stderr, "%s:%d, %s returned %d (%s)\n", __FILE__, __LINE__, m, \
50*4f2df630SAndroid Build Coastguard Worker 		r, libusb_strerror(r))
51*4f2df630SAndroid Build Coastguard Worker 
52*4f2df630SAndroid Build Coastguard Worker #endif /* ! __EC_EXTRA_USB_UPDATER_USB_IF_H */
53