49#include <sys/stdint.h>
50#include <sys/stddef.h>
55#include <sys/kernel.h>
57#include <sys/module.h>
60#include <sys/condvar.h>
61#include <sys/sysctl.h>
63#include <sys/unistd.h>
64#include <sys/callout.h>
65#include <sys/malloc.h>
73#define USB_DEBUG_VAR usb_debug
81#define UMCT_GET_MSR_SIZE 1
83#define UMCT_GET_LCR_SIZE 1
84#define UMCT_SET_BAUD 5
85#define UMCT_SET_BAUD_SIZE 4
87#define UMCT_SET_LCR_SIZE 1
88#define UMCT_SET_MCR 10
89#define UMCT_SET_MCR_SIZE 1
91#define UMCT_MSR_CTS_CHG 0x01
92#define UMCT_MSR_DSR_CHG 0x02
93#define UMCT_MSR_RI_CHG 0x04
94#define UMCT_MSR_CD_CHG 0x08
95#define UMCT_MSR_CTS 0x10
96#define UMCT_MSR_RTS 0x20
97#define UMCT_MSR_RI 0x40
98#define UMCT_MSR_CD 0x80
100#define UMCT_INTR_INTERVAL 100
101#define UMCT_IFACE_INDEX 0
102#define UMCT_CONFIG_INDEX 0
145 uint16_t
len, uint32_t value);
167 .flags = {.pipe_bof = 1,.force_short_xfer = 1,},
175 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
185 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
208 {
USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232, 0)},
209 {
USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232, 0)},
210 {
USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232, 0)},
211 {
USB_VPI(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U109, 0)},
212 {
USB_VPI(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U409, 0)},
266 mtx_init(&sc->
sc_mtx,
"umct", NULL, MTX_DEF);
276 device_printf(
dev,
"allocating USB "
277 "transfers failed\n");
326 device_claim_softc(
dev);
340 device_free_softc(sc);
352 uint16_t
len, uint32_t value)
361 req.bRequest = request;
369 &
req, temp, 0, 1000);
371 DPRINTFN(0,
"device request failed, err=%s "
390 DPRINTF(
"too short message\n");
525 switch (t->c_cflag & CSIZE) {
541 value |= (t->c_cflag & CSTOPB) ? 0x4 : 0;
542 if (t->c_cflag & PARENB) {
544 value |= (t->c_cflag & PARODD) ? 0x0 : 0x10;
void(* ucom_cfg_get_status)(struct ucom_softc *, uint8_t *plsr, uint8_t *pmsr)
struct ucom_softc sc_ucom
struct usb_xfer * sc_xfer[UMCT_N_TRANSFER]
struct ucom_super_softc sc_super_ucom
struct usb_device * sc_udev
enum usb_hc_mode usb_mode
struct usbd_lookup_info info
struct usb_device * device
static int umct_pre_param(struct ucom_softc *, struct termios *)
static void umct_poll(struct ucom_softc *ucom)
static void umct_stop_read(struct ucom_softc *)
static usb_callback_t umct_write_callback
MODULE_DEPEND(umct, ucom, 1, 1, 1)
static void umct_free(struct ucom_softc *)
static const struct usb_config umct_config[UMCT_N_TRANSFER]
static void umct_cfg_set_break(struct ucom_softc *, uint8_t)
static void umct_cfg_set_dtr(struct ucom_softc *, uint8_t)
static driver_t umct_driver
#define UMCT_SET_BAUD_SIZE
static void umct_cfg_param(struct ucom_softc *, struct termios *)
static void umct_cfg_set_rts(struct ucom_softc *, uint8_t)
static void umct_cfg_do_request(struct umct_softc *sc, uint8_t request, uint16_t len, uint32_t value)
#define UMCT_SET_MCR_SIZE
static usb_callback_t umct_read_callback_sub
static void umct_start_write(struct ucom_softc *)
static device_detach_t umct_detach
static void umct_cfg_get_status(struct ucom_softc *, uint8_t *, uint8_t *)
#define UMCT_SET_LCR_SIZE
static device_attach_t umct_attach
static device_method_t umct_methods[]
#define UMCT_CONFIG_INDEX
static devclass_t umct_devclass
static void umct_start_read(struct ucom_softc *)
static usb_callback_t umct_intr_callback
static usb_callback_t umct_intr_callback_sub
USB_PNP_HOST_INFO(umct_devs)
static void umct_free_softc(struct umct_softc *)
static const STRUCT_USB_HOST_ID umct_devs[]
static device_probe_t umct_probe
DRIVER_MODULE(umct, uhub, umct_driver, umct_devclass, NULL, 0)
static uint8_t umct_calc_baud(uint32_t)
static const struct ucom_callback umct_callback
static void umct_stop_write(struct ucom_softc *)
static usb_callback_t umct_read_callback
#define UT_WRITE_VENDOR_DEVICE
void usbd_copy_out(struct usb_page_cache *cache, usb_frlength_t offset, void *ptr, usb_frlength_t len)
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)
void ucom_status_change(struct ucom_softc *sc)
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)
usb_frlength_t usbd_xfer_max_framelen(struct usb_xfer *xfer)
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)