/* * Create a wusbhc instance * * NOTEs: * * - assumes *wusbhc has been zeroed and wusbhc->usb_hcd has been * initialized but not added. * * - fill out ports_max, mmcies_max and mmcie_{add,rm} before calling. * * - fill out wusbhc->uwb_rc and refcount it before calling * - fill out the wusbhc->sec_modes array */ int wusbhc_create(struct wusbhc *wusbhc) { int result = 0; wusbhc->trust_timeout = WUSB_TRUST_TIMEOUT_MS; wusbhc->phy_rate = UWB_PHY_RATE_INVALID - 1; mutex_init(&wusbhc->mutex); result = wusbhc_mmcie_create(wusbhc); if (result < 0) goto error_mmcie_create; result = wusbhc_devconnect_create(wusbhc); if (result < 0) goto error_devconnect_create; result = wusbhc_rh_create(wusbhc); if (result < 0) goto error_rh_create; result = wusbhc_sec_create(wusbhc); if (result < 0) goto error_sec_create; return 0; error_sec_create: wusbhc_rh_destroy(wusbhc); error_rh_create: wusbhc_devconnect_destroy(wusbhc); error_devconnect_create: wusbhc_mmcie_destroy(wusbhc); error_mmcie_create: return result; }
/* * Create a wusbhc instance * * NOTEs: * * - assumes *wusbhc has been zeroed and wusbhc->usb_hcd has been * initialized but not added. * * - fill out ports_max, mmcies_max and mmcie_{add,rm} before calling. * * - fill out wusbhc->uwb_rc and refcount it before calling * - fill out the wusbhc->sec_modes array */ int wusbhc_create(struct wusbhc *wusbhc) { int result = 0; /* set defaults. These can be overwritten using sysfs attributes. */ wusbhc->trust_timeout = WUSB_TRUST_TIMEOUT_MS; wusbhc->phy_rate = UWB_PHY_RATE_INVALID - 1; wusbhc->dnts_num_slots = 4; wusbhc->dnts_interval = 2; wusbhc->retry_count = WUSB_RETRY_COUNT_INFINITE; mutex_init(&wusbhc->mutex); result = wusbhc_mmcie_create(wusbhc); if (result < 0) goto error_mmcie_create; result = wusbhc_devconnect_create(wusbhc); if (result < 0) goto error_devconnect_create; result = wusbhc_rh_create(wusbhc); if (result < 0) goto error_rh_create; result = wusbhc_sec_create(wusbhc); if (result < 0) goto error_sec_create; return 0; error_sec_create: wusbhc_rh_destroy(wusbhc); error_rh_create: wusbhc_devconnect_destroy(wusbhc); error_devconnect_create: wusbhc_mmcie_destroy(wusbhc); error_mmcie_create: return result; }