static void uftdi_close_pipes(uftdi_state_t *uf) { if (uf->uf_bulkin_ph) usb_pipe_close(uf->uf_dip, uf->uf_bulkin_ph, USB_FLAGS_SLEEP, 0, 0); if (uf->uf_bulkout_ph) usb_pipe_close(uf->uf_dip, uf->uf_bulkout_ph, USB_FLAGS_SLEEP, 0, 0); mutex_enter(&uf->uf_lock); uf->uf_bulkin_state = UFTDI_PIPE_CLOSED; uf->uf_bulkout_state = UFTDI_PIPE_CLOSED; mutex_exit(&uf->uf_lock); }
void usba10_usb_pipe_close( dev_info_t *dip, usb_pipe_handle_t pipe_handle, usb_flags_t flags, void (*cb)( usb_pipe_handle_t ph, usb_opaque_t arg, /* cb arg */ int rval, usb_cb_flags_t flags), usb_opaque_t cb_arg) { usb_pipe_close(dip, pipe_handle, flags, cb, cb_arg); }
/* * pipe operations */ static int uftdi_open_pipes(uftdi_state_t *uf) { int ifc, alt; usb_pipe_policy_t policy; usb_ep_data_t *in_data, *out_data; /* get ep data */ ifc = uf->uf_dev_data->dev_curr_if; alt = 0; in_data = usb_lookup_ep_data(uf->uf_dip, uf->uf_dev_data, ifc, alt, 0, USB_EP_ATTR_BULK, USB_EP_DIR_IN); out_data = usb_lookup_ep_data(uf->uf_dip, uf->uf_dev_data, ifc, alt, 0, USB_EP_ATTR_BULK, USB_EP_DIR_OUT); if (in_data == NULL || out_data == NULL) { USB_DPRINTF_L2(DPRINT_ATTACH, uf->uf_lh, "uftdi_open_pipes: can't get ep data"); return (USB_FAILURE); } /* open pipes */ policy.pp_max_async_reqs = 2; if (usb_pipe_open(uf->uf_dip, &in_data->ep_descr, &policy, USB_FLAGS_SLEEP, &uf->uf_bulkin_ph) != USB_SUCCESS) return (USB_FAILURE); if (usb_pipe_open(uf->uf_dip, &out_data->ep_descr, &policy, USB_FLAGS_SLEEP, &uf->uf_bulkout_ph) != USB_SUCCESS) { usb_pipe_close(uf->uf_dip, uf->uf_bulkin_ph, USB_FLAGS_SLEEP, NULL, NULL); return (USB_FAILURE); } mutex_enter(&uf->uf_lock); uf->uf_bulkin_state = UFTDI_PIPE_IDLE; uf->uf_bulkout_state = UFTDI_PIPE_IDLE; mutex_exit(&uf->uf_lock); return (USB_SUCCESS); }