From e0ccd8fe6d97a55556c92831aa36adc7f34b6d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Sun, 27 Dec 2020 19:58:32 -0800 Subject: [PATCH] support both rndis and ncm, but not rndis + ncm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 172793258 Test: N/A Signed-off-by: Maciej Żenczykowski Change-Id: I6ac656d5eec27fadf76391fc3318b9d29d253a89 --- conf/init.gs101.usb.rc | 4 +++- usb/UsbGadget.cpp | 35 ++++++++--------------------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/conf/init.gs101.usb.rc b/conf/init.gs101.usb.rc index aa7d68f3..f0d671cc 100644 --- a/conf/init.gs101.usb.rc +++ b/conf/init.gs101.usb.rc @@ -44,8 +44,9 @@ on early-boot write /config/usb_gadget/g1/functions/rndis.gs4/class e0 write /config/usb_gadget/g1/functions/rndis.gs4/subclass 01 write /config/usb_gadget/g1/functions/rndis.gs4/protocol 03 + write /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.ncm/compatible_id RNDIS write /config/usb_gadget/g1/functions/rndis.gs4/ifname rndis%d - setprop vendor.usb.rndis.config ncm.gs9 + setprop vendor.usb.rndis.config rndis.gs4 # midi function mkdir /config/usb_gadget/g1/functions/midi.gs5 @@ -62,6 +63,7 @@ on early-boot # ncm function mkdir /config/usb_gadget/g1/functions/ncm.gs9 write /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id WINNCM + write /config/usb_gadget/g1/functions/ncm.gs9/ifname ncm%d # etr_miu function mkdir /config/usb_gadget/g1/functions/etr_miu.gs11 diff --git a/usb/UsbGadget.cpp b/usb/UsbGadget.cpp index efbf778f..b153e203 100644 --- a/usb/UsbGadget.cpp +++ b/usb/UsbGadget.cpp @@ -223,14 +223,12 @@ static V1_0::Status validateAndSetVidPid(uint64_t functions) { case static_cast(GadgetFunction::NCM): if (!(vendorFunctions == "user" || vendorFunctions == "")) ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str()); - // TODO(b/170953147): need to request a new PID. Sharing PID of rndis now. - ret = setVidPid("0x18d1", "0x4ee3"); + ret = setVidPid("0x18d1", "0x4eeb"); break; case GadgetFunction::ADB | GadgetFunction::NCM: if (!(vendorFunctions == "user" || vendorFunctions == "")) ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str()); - // TODO(b/170953147): need to request a new PID. Sharing PID of rndis+adb now. - ret = setVidPid("0x18d1", "0x4ee4"); + ret = setVidPid("0x18d1", "0x4eec"); break; default: ALOGE("Combination not supported"); @@ -263,30 +261,15 @@ V1_0::Status UsbGadget::setupFunctions(uint64_t functions, bool ffsEnabled = false; int i = 0; - // Use the NCM support hack because the gadget function has no NCM definition. - // TODO: add formal NCM function setup once gadget function supports NCM. - uint64_t usbFunctions = functions; - bool ncmEnabled = false; - const std::string vendorRndisConfig = GetProperty(google::pixel::usb::kVendorRndisConfig, ""); - if ((functions & GadgetFunction::RNDIS) && (vendorRndisConfig.find("ncm.gs", 0) == 0)) { - ncmEnabled = true; - usbFunctions &= ~static_cast(GadgetFunction::RNDIS); - } - - if (addGenericAndroidFunctions(&monitorFfs, usbFunctions, &ffsEnabled, &i) != + if (addGenericAndroidFunctions(&monitorFfs, functions, &ffsEnabled, &i) != Status::SUCCESS) return Status::ERROR; - if ((functions & GadgetFunction::NCM) != 0) { - if (linkFunction("ncm.gs9", i++)) - return Status::ERROR; - } - std::string vendorFunctions = getVendorFunctions(); if (vendorFunctions == "dm") { ALOGI("enable usbradio debug functions"); - if ((usbFunctions & GadgetFunction::RNDIS) != 0) { + if ((functions & GadgetFunction::RNDIS) != 0) { if (linkFunction("acm.gs6", i++)) return Status::ERROR; if (linkFunction("dm.gs7", i++)) @@ -303,17 +286,15 @@ V1_0::Status UsbGadget::setupFunctions(uint64_t functions, return Status::ERROR; } - if ((usbFunctions & GadgetFunction::ADB) != 0) { + if ((functions & GadgetFunction::ADB) != 0) { ffsEnabled = true; if (addAdb(&monitorFfs, &i) != Status::SUCCESS) return Status::ERROR; } - // Reordering NCM function makes Windows generic NCM driver work when vendor funcs are enabled. - // TODO: possibly remove the reordering once vendor function Windows driver supports NCM. - if (ncmEnabled) { - ALOGI("set ncm function"); - if (linkFunction(vendorRndisConfig.c_str(), i++)) + if ((functions & GadgetFunction::NCM) != 0) { + ALOGI("setCurrentUsbFunctions ncm"); + if (linkFunction("ncm.gs9", i++)) return Status::ERROR; }