26#include <sys/stdint.h>
27#include <sys/stddef.h>
32#include <sys/kernel.h>
34#include <sys/module.h>
37#include <sys/condvar.h>
38#include <sys/sysctl.h>
40#include <sys/unistd.h>
41#include <sys/callout.h>
42#include <sys/malloc.h>
51#define USB_DEBUG_VAR usb_debug
57#define UARK_BUF_SIZE 1024
59#define UARK_SET_DATA_BITS(x) ((x) - 5)
61#define UARK_PARITY_NONE 0x00
62#define UARK_PARITY_ODD 0x08
63#define UARK_PARITY_EVEN 0x18
65#define UARK_STOP_BITS_1 0x00
66#define UARK_STOP_BITS_2 0x04
68#define UARK_BAUD_REF 3000000
70#define UARK_WRITE 0x40
73#define UARK_REQUEST 0xfe
75#define UARK_CONFIG_INDEX 0
76#define UARK_IFACE_INDEX 0
126 .flags = {.pipe_bof = 1,.force_short_xfer = 1,},
135 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
170 {
USB_VPI(USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116, 0)},
205 mtx_init(&sc->
sc_mtx,
"uark", NULL, MTX_DEF);
216 device_printf(
dev,
"allocating control USB "
217 "transfers failed\n");
229 DPRINTF(
"ucom_attach failed\n");
249 device_claim_softc(
dev);
263 device_free_softc(sc);
367 if ((t->c_ospeed < 300) || (t->c_ospeed > 115200))
376 uint32_t speed = t->c_ospeed;
390 if (t->c_cflag & CSTOPB)
395 if (t->c_cflag & PARENB) {
396 if (t->c_cflag & PARODD)
403 switch (t->c_cflag & CSIZE) {
455 &
req, NULL, 0, 1000);
457 DPRINTFN(0,
"device request failed, err=%s "
struct usb_device * sc_udev
struct ucom_softc sc_ucom
struct usb_xfer * sc_xfer[UARK_N_TRANSFER]
struct ucom_super_softc sc_super_ucom
void(* ucom_cfg_get_status)(struct ucom_softc *, uint8_t *plsr, uint8_t *pmsr)
enum usb_hc_mode usb_mode
struct usbd_lookup_info info
struct usb_device * device
static void uark_cfg_param(struct ucom_softc *, struct termios *)
static const struct usb_config uark_xfer_config[UARK_N_TRANSFER]
static const struct ucom_callback uark_callback
static void uark_stop_write(struct ucom_softc *)
static device_detach_t uark_detach
static void uark_start_read(struct ucom_softc *)
static usb_callback_t uark_bulk_write_callback
static device_method_t uark_methods[]
static devclass_t uark_devclass
static usb_callback_t uark_bulk_read_callback
static void uark_cfg_write(struct uark_softc *, uint16_t, uint16_t)
static driver_t uark_driver
USB_PNP_HOST_INFO(uark_devs)
static const STRUCT_USB_HOST_ID uark_devs[]
#define UARK_SET_DATA_BITS(x)
static void uark_start_write(struct ucom_softc *)
MODULE_DEPEND(uark, ucom, 1, 1, 1)
static device_probe_t uark_probe
static device_attach_t uark_attach
static void uark_free(struct ucom_softc *)
static void uark_poll(struct ucom_softc *ucom)
DRIVER_MODULE(uark, uhub, uark_driver, uark_devclass, NULL, 0)
static void uark_free_softc(struct uark_softc *)
static void uark_cfg_get_status(struct ucom_softc *, uint8_t *, uint8_t *)
static void uark_cfg_set_break(struct ucom_softc *, uint8_t)
static int uark_pre_param(struct ucom_softc *, struct termios *)
static void uark_stop_read(struct ucom_softc *)
const char * usbd_errstr(usb_error_t err)
int usbd_lookup_id_by_uaa(const struct usb_device_id *id, usb_size_t sizeof_id, struct usb_attach_arg *uaa)
uint8_t ucom_get_data(struct ucom_softc *sc, struct usb_page_cache *pc, uint32_t offset, uint32_t len, uint32_t *actlen)
int ucom_attach(struct ucom_super_softc *ssc, struct ucom_softc *sc, int subunits, void *parent, const struct ucom_callback *callback, struct mtx *mtx)
int ucom_unref(struct ucom_super_softc *ssc)
void ucom_ref(struct ucom_super_softc *ssc)
void ucom_set_pnpinfo_usb(struct ucom_super_softc *ssc, device_t dev)
void ucom_detach(struct ucom_super_softc *ssc, struct ucom_softc *sc)
void ucom_put_data(struct ucom_softc *sc, struct usb_page_cache *pc, uint32_t offset, uint32_t len)
#define ucom_cfg_do_request(udev, com, req, ptr, flags, timo)
void usbd_transfer_submit(struct usb_xfer *xfer)
void usbd_transfer_unsetup(struct usb_xfer **pxfer, uint16_t n_setup)
void usbd_xfer_set_frame_len(struct usb_xfer *xfer, usb_frcount_t frindex, usb_frlength_t len)
struct usb_page_cache * usbd_xfer_get_frame(struct usb_xfer *xfer, usb_frcount_t frindex)
usb_error_t usbd_transfer_setup(struct usb_device *udev, const uint8_t *ifaces, struct usb_xfer **ppxfer, const struct usb_config *setup_start, uint16_t n_setup, void *priv_sc, struct mtx *xfer_mtx)
void usbd_transfer_start(struct usb_xfer *xfer)
void usbd_transfer_poll(struct usb_xfer **ppxfer, uint16_t max)
void * usbd_xfer_softc(struct usb_xfer *xfer)
void usbd_xfer_set_stall(struct usb_xfer *xfer)
void usbd_transfer_stop(struct usb_xfer *xfer)
void usbd_xfer_status(struct usb_xfer *xfer, int *actlen, int *sumlen, int *aframes, int *nframes)
usb_frlength_t usbd_xfer_max_len(struct usb_xfer *xfer)
void device_set_usb_desc(device_t dev)
#define USB_ST_TRANSFERRED
void() usb_callback_t(struct usb_xfer *, usb_error_t)
#define USB_VPI(vend, prod, info)
#define STRUCT_USB_HOST_ID
#define USB_GET_STATE(xfer)