1/*
2 *
3 * Copyright (c) 2016, Oracle and/or its affiliates.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#ifndef	LIBUSB_SUNOS_H
21#define	LIBUSB_SUNOS_H
22
23#include <libdevinfo.h>
24#include <pthread.h>
25#include "libusbi.h"
26
27#define	READ	0
28#define	WRITE	1
29
30typedef struct sunos_device_priv {
31	uint8_t	cfgvalue;		/* active config value */
32	uint8_t	*raw_cfgdescr;		/* active config descriptor */
33	struct libusb_device_descriptor	dev_descr;	/* usb device descriptor */
34	char	*ugenpath;		/* name of the ugen(4) node */
35	char	*phypath;		/* physical path */
36} sunos_dev_priv_t;
37
38typedef	struct endpoint {
39	int datafd;	/* data file */
40	int statfd;	/* state file */
41} sunos_ep_priv_t;
42
43typedef struct sunos_device_handle_priv {
44	uint8_t			altsetting[USB_MAXINTERFACES];	/* a interface's alt */
45	uint8_t			config_index;
46	sunos_ep_priv_t		eps[USB_MAXENDPOINTS];
47	sunos_dev_priv_t	*dpriv; /* device private */
48} sunos_dev_handle_priv_t;
49
50typedef	struct sunos_transfer_priv {
51	struct aiocb		aiocb;
52	struct libusb_transfer	*transfer;
53} sunos_xfer_priv_t;
54
55struct node_args {
56	struct libusb_context	*ctx;
57	struct discovered_devs	**discdevs;
58	const char		*last_ugenpath;
59	di_devlink_handle_t	dlink_hdl;
60};
61
62struct devlink_cbarg {
63	struct node_args	*nargs;	/* di node walk arguments */
64	di_node_t		myself;	/* the di node */
65	di_minor_t		minor;
66};
67
68/* AIO callback args */
69struct aio_callback_args{
70	struct libusb_transfer *transfer;
71	struct aiocb aiocb;
72};
73
74#endif /* LIBUSB_SUNOS_H */
75