Print this page
5253 kmem_alloc/kmem_zalloc won't fail with KM_SLEEP
5254 getrbuf won't fail with KM_SLEEP


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) {