support both rndis and ncm, but not rndis + ncm

Bug: 172793258
Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I6ac656d5eec27fadf76391fc3318b9d29d253a89
This commit is contained in:
Maciej Żenczykowski 2020-12-27 19:58:32 -08:00 committed by Maciej Zenczykowski
parent 00d640335c
commit e0ccd8fe6d
2 changed files with 11 additions and 28 deletions

View file

@ -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/class e0
write /config/usb_gadget/g1/functions/rndis.gs4/subclass 01 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/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 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 # midi function
mkdir /config/usb_gadget/g1/functions/midi.gs5 mkdir /config/usb_gadget/g1/functions/midi.gs5
@ -62,6 +63,7 @@ on early-boot
# ncm function # ncm function
mkdir /config/usb_gadget/g1/functions/ncm.gs9 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/os_desc/interface.ncm/compatible_id WINNCM
write /config/usb_gadget/g1/functions/ncm.gs9/ifname ncm%d
# etr_miu function # etr_miu function
mkdir /config/usb_gadget/g1/functions/etr_miu.gs11 mkdir /config/usb_gadget/g1/functions/etr_miu.gs11

View file

@ -223,14 +223,12 @@ static V1_0::Status validateAndSetVidPid(uint64_t functions) {
case static_cast<uint64_t>(GadgetFunction::NCM): case static_cast<uint64_t>(GadgetFunction::NCM):
if (!(vendorFunctions == "user" || vendorFunctions == "")) if (!(vendorFunctions == "user" || vendorFunctions == ""))
ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str()); 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", "0x4eeb");
ret = setVidPid("0x18d1", "0x4ee3");
break; break;
case GadgetFunction::ADB | GadgetFunction::NCM: case GadgetFunction::ADB | GadgetFunction::NCM:
if (!(vendorFunctions == "user" || vendorFunctions == "")) if (!(vendorFunctions == "user" || vendorFunctions == ""))
ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str()); 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", "0x4eec");
ret = setVidPid("0x18d1", "0x4ee4");
break; break;
default: default:
ALOGE("Combination not supported"); ALOGE("Combination not supported");
@ -263,30 +261,15 @@ V1_0::Status UsbGadget::setupFunctions(uint64_t functions,
bool ffsEnabled = false; bool ffsEnabled = false;
int i = 0; int i = 0;
// Use the NCM support hack because the gadget function has no NCM definition. if (addGenericAndroidFunctions(&monitorFfs, functions, &ffsEnabled, &i) !=
// 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<uint64_t>(GadgetFunction::RNDIS);
}
if (addGenericAndroidFunctions(&monitorFfs, usbFunctions, &ffsEnabled, &i) !=
Status::SUCCESS) Status::SUCCESS)
return Status::ERROR; return Status::ERROR;
if ((functions & GadgetFunction::NCM) != 0) {
if (linkFunction("ncm.gs9", i++))
return Status::ERROR;
}
std::string vendorFunctions = getVendorFunctions(); std::string vendorFunctions = getVendorFunctions();
if (vendorFunctions == "dm") { if (vendorFunctions == "dm") {
ALOGI("enable usbradio debug functions"); ALOGI("enable usbradio debug functions");
if ((usbFunctions & GadgetFunction::RNDIS) != 0) { if ((functions & GadgetFunction::RNDIS) != 0) {
if (linkFunction("acm.gs6", i++)) if (linkFunction("acm.gs6", i++))
return Status::ERROR; return Status::ERROR;
if (linkFunction("dm.gs7", i++)) if (linkFunction("dm.gs7", i++))
@ -303,17 +286,15 @@ V1_0::Status UsbGadget::setupFunctions(uint64_t functions,
return Status::ERROR; return Status::ERROR;
} }
if ((usbFunctions & GadgetFunction::ADB) != 0) { if ((functions & GadgetFunction::ADB) != 0) {
ffsEnabled = true; ffsEnabled = true;
if (addAdb(&monitorFfs, &i) != Status::SUCCESS) if (addAdb(&monitorFfs, &i) != Status::SUCCESS)
return Status::ERROR; return Status::ERROR;
} }
// Reordering NCM function makes Windows generic NCM driver work when vendor funcs are enabled. if ((functions & GadgetFunction::NCM) != 0) {
// TODO: possibly remove the reordering once vendor function Windows driver supports NCM. ALOGI("setCurrentUsbFunctions ncm");
if (ncmEnabled) { if (linkFunction("ncm.gs9", i++))
ALOGI("set ncm function");
if (linkFunction(vendorRndisConfig.c_str(), i++))
return Status::ERROR; return Status::ERROR;
} }