1413 mutex_enter(&hc_data->hc_mutex);
1414
1415 return (USB_SUCCESS);
1416 }
1417
1418 /* Acknowledge WUSB Device Disconnect notification, refer to WUSB 1.0/7.6.2 */
1419 int
1420 wusb_hc_ack_disconn(wusb_hc_data_t *hc_data, uint8_t addr)
1421 {
1422 wusb_ie_dev_disconnect_t *disconn_ie;
1423 uint8_t iehdl;
1424 int rval;
1425
1426 ASSERT(mutex_owned(&hc_data->hc_mutex));
1427
1428 /*
1429 * the scheme ensures each time only one device addr
1430 * is set each time
1431 */
1432 disconn_ie = kmem_zalloc(sizeof (wusb_ie_dev_disconnect_t), KM_SLEEP);
1433 if (!disconn_ie) {
1434 return (USB_NO_RESOURCES);
1435 }
1436
1437 disconn_ie->bIEIdentifier = WUSB_IE_DEV_DISCONNECT;
1438 disconn_ie->bDeviceAddress[0] = addr;
1439 /* padding, no active wusb device addr will be 1 */
1440 disconn_ie->bDeviceAddress[1] = 1;
1441 disconn_ie->bLength = 4;
1442
1443 rval = wusb_hc_get_iehdl(hc_data, (wusb_ie_header_t *)disconn_ie,
1444 &iehdl);
1445 if (rval != USB_SUCCESS) {
1446 USB_DPRINTF_L2(DPRINT_MASK_WHCDI, whcdi_log_handle,
1447 "wusb_hc_ack_disconn: get ie handle fails");
1448 kmem_free(disconn_ie, sizeof (wusb_ie_dev_disconnect_t));
1449
1450 return (rval);
1451 }
1452
1453 rval = wusb_hc_add_mmc_ie(hc_data, 0, 0, iehdl,
1454 disconn_ie->bLength, (uint8_t *)disconn_ie);
1455 if (rval != USB_SUCCESS) {
|
1413 mutex_enter(&hc_data->hc_mutex);
1414
1415 return (USB_SUCCESS);
1416 }
1417
1418 /* Acknowledge WUSB Device Disconnect notification, refer to WUSB 1.0/7.6.2 */
1419 int
1420 wusb_hc_ack_disconn(wusb_hc_data_t *hc_data, uint8_t addr)
1421 {
1422 wusb_ie_dev_disconnect_t *disconn_ie;
1423 uint8_t iehdl;
1424 int rval;
1425
1426 ASSERT(mutex_owned(&hc_data->hc_mutex));
1427
1428 /*
1429 * the scheme ensures each time only one device addr
1430 * is set each time
1431 */
1432 disconn_ie = kmem_zalloc(sizeof (wusb_ie_dev_disconnect_t), KM_SLEEP);
1433
1434 disconn_ie->bIEIdentifier = WUSB_IE_DEV_DISCONNECT;
1435 disconn_ie->bDeviceAddress[0] = addr;
1436 /* padding, no active wusb device addr will be 1 */
1437 disconn_ie->bDeviceAddress[1] = 1;
1438 disconn_ie->bLength = 4;
1439
1440 rval = wusb_hc_get_iehdl(hc_data, (wusb_ie_header_t *)disconn_ie,
1441 &iehdl);
1442 if (rval != USB_SUCCESS) {
1443 USB_DPRINTF_L2(DPRINT_MASK_WHCDI, whcdi_log_handle,
1444 "wusb_hc_ack_disconn: get ie handle fails");
1445 kmem_free(disconn_ie, sizeof (wusb_ie_dev_disconnect_t));
1446
1447 return (rval);
1448 }
1449
1450 rval = wusb_hc_add_mmc_ie(hc_data, 0, 0, iehdl,
1451 disconn_ie->bLength, (uint8_t *)disconn_ie);
1452 if (rval != USB_SUCCESS) {
|