Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb8adcc1 authored by Myles Watson's avatar Myles Watson
Browse files

Use GD for controller packet support

Bug: 301661850
Bug: 321273521
Test: mma -j32
Flag: EXEMPT, no logical change
Change-Id: I97c51cade82a4e4711aabb7e1d6cf52cca07b2a6
parent 0509fa18
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -38,21 +38,6 @@ typedef struct controller_t {

  bool (*supports_enhanced_setup_synchronous_connection)(void);
  bool (*supports_enhanced_accept_synchronous_connection)(void);
  bool (*Supports3SlotPackets)(void);
  bool (*Supports5SlotPackets)(void);
  bool (*SupportsClassic2mPhy)(void);
  bool (*SupportsClassic3mPhy)(void);
  bool (*Supports3SlotEdrPackets)(void);
  bool (*Supports5SlotEdrPackets)(void);
  bool (*SupportsSco)(void);
  bool (*SupportsHv2Packets)(void);
  bool (*SupportsHv3Packets)(void);
  bool (*SupportsEv3Packets)(void);
  bool (*SupportsEv4Packets)(void);
  bool (*SupportsEv5Packets)(void);
  bool (*SupportsEsco2mPhy)(void);
  bool (*SupportsEsco3mPhy)(void);
  bool (*Supports3SlotEscoEdrPackets)(void);
  bool (*SupportsRoleSwitch)(void);
  bool (*SupportsHoldMode)(void);
  bool (*SupportsSniffMode)(void);
+0 −30
Original line number Diff line number Diff line
@@ -117,21 +117,6 @@ static const uint8_t* get_ble_supported_states(void) {
#define MAP_TO_GD(legacy, gd) \
  static bool legacy(void) { return GetController()->gd(); }

MAP_TO_GD(supports_three_slot_packets, Supports3SlotPackets)
MAP_TO_GD(supports_five_slot_packets, Supports5SlotPackets)
MAP_TO_GD(supports_classic_2m_phy, SupportsClassic2mPhy)
MAP_TO_GD(supports_classic_3m_phy, SupportsClassic3mPhy)
MAP_TO_GD(supports_three_slot_edr_packets, Supports3SlotEdrPackets)
MAP_TO_GD(supports_five_slot_edr_packets, Supports5SlotEdrPackets)
MAP_TO_GD(supports_sco, SupportsSco)
MAP_TO_GD(supports_hv2_packets, SupportsHv2Packets)
MAP_TO_GD(supports_hv3_packets, SupportsHv3Packets)
MAP_TO_GD(supports_ev3_packets, SupportsEv3Packets)
MAP_TO_GD(supports_ev4_packets, SupportsEv4Packets)
MAP_TO_GD(supports_ev5_packets, SupportsEv5Packets)
MAP_TO_GD(supports_esco_2m_phy, SupportsEsco2mPhy)
MAP_TO_GD(supports_esco_3m_phy, SupportsEsco3mPhy)
MAP_TO_GD(supports_three_slot_esco_edr_packets, Supports3SlotEscoEdrPackets)
MAP_TO_GD(supports_role_switch, SupportsRoleSwitch)
MAP_TO_GD(supports_hold_mode, SupportsHoldMode)
MAP_TO_GD(supports_sniff_mode, SupportsSniffMode)
@@ -321,21 +306,6 @@ static const controller_t interface = {
        supports_enhanced_setup_synchronous_connection,
    .supports_enhanced_accept_synchronous_connection =
        supports_enhanced_accept_synchronous_connection,
    .Supports3SlotPackets = supports_three_slot_packets,
    .Supports5SlotPackets = supports_five_slot_packets,
    .SupportsClassic2mPhy = supports_classic_2m_phy,
    .SupportsClassic3mPhy = supports_classic_3m_phy,
    .Supports3SlotEdrPackets = supports_three_slot_edr_packets,
    .Supports5SlotEdrPackets = supports_five_slot_edr_packets,
    .SupportsSco = supports_sco,
    .SupportsHv2Packets = supports_hv2_packets,
    .SupportsHv3Packets = supports_hv3_packets,
    .SupportsEv3Packets = supports_ev3_packets,
    .SupportsEv4Packets = supports_ev4_packets,
    .SupportsEv5Packets = supports_ev5_packets,
    .SupportsEsco2mPhy = supports_esco_2m_phy,
    .SupportsEsco3mPhy = supports_esco_3m_phy,
    .Supports3SlotEscoEdrPackets = supports_three_slot_esco_edr_packets,
    .SupportsRoleSwitch = supports_role_switch,
    .SupportsHoldMode = supports_hold_mode,
    .SupportsSniffMode = supports_sniff_mode,
+8 −8
Original line number Diff line number Diff line
@@ -253,35 +253,35 @@ void BTM_acl_after_controller_started(const controller_t* controller) {
  uint16_t btm_acl_pkt_types_supported =
      (HCI_PKT_TYPES_MASK_DH1 + HCI_PKT_TYPES_MASK_DM1);

  if (controller->Supports3SlotPackets())
  if (bluetooth::shim::GetController()->Supports3SlotPackets())
    btm_acl_pkt_types_supported |=
        (HCI_PKT_TYPES_MASK_DH3 + HCI_PKT_TYPES_MASK_DM3);

  if (controller->Supports5SlotPackets())
  if (bluetooth::shim::GetController()->Supports5SlotPackets())
    btm_acl_pkt_types_supported |=
        (HCI_PKT_TYPES_MASK_DH5 + HCI_PKT_TYPES_MASK_DM5);

  /* Add in EDR related ACL types */
  if (!controller->SupportsClassic2mPhy()) {
  if (!bluetooth::shim::GetController()->SupportsClassic2mPhy()) {
    btm_acl_pkt_types_supported |=
        (HCI_PKT_TYPES_MASK_NO_2_DH1 + HCI_PKT_TYPES_MASK_NO_2_DH3 +
         HCI_PKT_TYPES_MASK_NO_2_DH5);
  }

  if (!controller->SupportsClassic3mPhy()) {
  if (!bluetooth::shim::GetController()->SupportsClassic3mPhy()) {
    btm_acl_pkt_types_supported |=
        (HCI_PKT_TYPES_MASK_NO_3_DH1 + HCI_PKT_TYPES_MASK_NO_3_DH3 +
         HCI_PKT_TYPES_MASK_NO_3_DH5);
  }

  /* Check to see if 3 and 5 slot packets are available */
  if (controller->SupportsClassic2mPhy() ||
      controller->SupportsClassic3mPhy()) {
    if (!controller->Supports3SlotEdrPackets())
  if (bluetooth::shim::GetController()->SupportsClassic2mPhy() ||
      bluetooth::shim::GetController()->SupportsClassic3mPhy()) {
    if (!bluetooth::shim::GetController()->Supports3SlotEdrPackets())
      btm_acl_pkt_types_supported |=
          (HCI_PKT_TYPES_MASK_NO_2_DH3 + HCI_PKT_TYPES_MASK_NO_3_DH3);

    if (!controller->Supports5SlotEdrPackets())
    if (!bluetooth::shim::GetController()->Supports5SlotEdrPackets())
      btm_acl_pkt_types_supported |=
          (HCI_PKT_TYPES_MASK_NO_2_DH5 + HCI_PKT_TYPES_MASK_NO_3_DH5);
  }
+12 −13
Original line number Diff line number Diff line
@@ -247,44 +247,42 @@ static void btm_read_local_name_timeout(UNUSED_ATTR void* data) {
}

static void decode_controller_support() {
  const controller_t* controller = controller_get_interface();

  /* Create (e)SCO supported packet types mask */
  btm_cb.btm_sco_pkt_types_supported = 0;
  btm_cb.sco_cb.esco_supported = false;
  if (controller->SupportsSco()) {
  if (bluetooth::shim::GetController()->SupportsSco()) {
    btm_cb.btm_sco_pkt_types_supported = ESCO_PKT_TYPES_MASK_HV1;

    if (controller->SupportsHv2Packets())
    if (bluetooth::shim::GetController()->SupportsHv2Packets())
      btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_HV2;

    if (controller->SupportsHv3Packets())
    if (bluetooth::shim::GetController()->SupportsHv3Packets())
      btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_HV3;
  }

  if (controller->SupportsEv3Packets())
  if (bluetooth::shim::GetController()->SupportsEv3Packets())
    btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_EV3;

  if (controller->SupportsEv4Packets())
  if (bluetooth::shim::GetController()->SupportsEv4Packets())
    btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_EV4;

  if (controller->SupportsEv5Packets())
  if (bluetooth::shim::GetController()->SupportsEv5Packets())
    btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_EV5;

  if (btm_cb.btm_sco_pkt_types_supported & BTM_ESCO_LINK_ONLY_MASK) {
    btm_cb.sco_cb.esco_supported = true;

    /* Add in EDR related eSCO types */
    if (controller->SupportsEsco2mPhy()) {
      if (!controller->Supports3SlotEdrPackets())
    if (bluetooth::shim::GetController()->SupportsEsco2mPhy()) {
      if (!bluetooth::shim::GetController()->Supports3SlotEdrPackets())
        btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_NO_2_EV5;
    } else {
      btm_cb.btm_sco_pkt_types_supported |=
          (ESCO_PKT_TYPES_MASK_NO_2_EV3 + ESCO_PKT_TYPES_MASK_NO_2_EV5);
    }

    if (controller->SupportsEsco3mPhy()) {
      if (!controller->Supports3SlotEdrPackets())
    if (bluetooth::shim::GetController()->SupportsEsco3mPhy()) {
      if (!bluetooth::shim::GetController()->Supports3SlotEdrPackets())
        btm_cb.btm_sco_pkt_types_supported |= ESCO_PKT_TYPES_MASK_NO_3_EV5;
    } else {
      btm_cb.btm_sco_pkt_types_supported |=
@@ -305,7 +303,8 @@ static void decode_controller_support() {
      BTM_SetInquiryMode(BTM_INQ_RESULT_WITH_RSSI);
  }

  l2cu_set_non_flushable_pbf(controller->SupportsNonFlushablePb());
  l2cu_set_non_flushable_pbf(
      bluetooth::shim::GetController()->SupportsNonFlushablePb());
  BTM_EnableInterlacedPageScan();
  BTM_EnableInterlacedInquiryScan();
}
+0 −95
Original line number Diff line number Diff line
@@ -101,26 +101,6 @@ uint8_t* get_local_supported_codecs(uint8_t* number_of_codecs) {

const uint8_t* get_ble_supported_states(void) { return ble_supported_states; }

bool supports_simultaneous_le_bredr(void) {
  return HCI_SIMUL_LE_BREDR_SUPPORTED(features_classic[0].as_array);
}

bool supports_reading_remote_extended_features(void) {
  return HCI_READ_REMOTE_EXT_FEATURES_SUPPORTED(supported_commands);
}

bool supports_interlaced_inquiry_scan(void) {
  return HCI_LMP_INTERLACED_INQ_SCAN_SUPPORTED(features_classic[0].as_array);
}

bool supports_rssi_with_inquiry_results(void) {
  return HCI_LMP_INQ_RSSI_SUPPORTED(features_classic[0].as_array);
}

bool supports_extended_inquiry_response(void) {
  return HCI_EXT_INQ_RSP_SUPPORTED(features_classic[0].as_array);
}

bool supports_enhanced_setup_synchronous_connection(void) {
  return HCI_ENH_SETUP_SYNCH_CONN_SUPPORTED(supported_commands);
}
@@ -129,66 +109,6 @@ bool supports_enhanced_accept_synchronous_connection(void) {
  return HCI_ENH_ACCEPT_SYNCH_CONN_SUPPORTED(supported_commands);
}

bool supports_3_slot_packets(void) {
  return HCI_3_SLOT_PACKETS_SUPPORTED(features_classic[0].as_array);
}

bool supports_5_slot_packets(void) {
  return HCI_5_SLOT_PACKETS_SUPPORTED(features_classic[0].as_array);
}

bool supports_classic_2m_phy(void) {
  return HCI_EDR_ACL_2MPS_SUPPORTED(features_classic[0].as_array);
}

bool supports_classic_3m_phy(void) {
  return HCI_EDR_ACL_3MPS_SUPPORTED(features_classic[0].as_array);
}

bool supports_3_slot_edr_packets(void) {
  return HCI_3_SLOT_EDR_ACL_SUPPORTED(features_classic[0].as_array);
}

bool supports_5_slot_edr_packets(void) {
  return HCI_5_SLOT_EDR_ACL_SUPPORTED(features_classic[0].as_array);
}

bool supports_sco(void) {
  return HCI_SCO_LINK_SUPPORTED(features_classic[0].as_array);
}

bool supports_hv2_packets(void) {
  return HCI_HV2_PACKETS_SUPPORTED(features_classic[0].as_array);
}

bool supports_hv3_packets(void) {
  return HCI_HV3_PACKETS_SUPPORTED(features_classic[0].as_array);
}

bool supports_ev3_packets(void) {
  return HCI_ESCO_EV3_SUPPORTED(features_classic[0].as_array);
}

bool supports_ev4_packets(void) {
  return HCI_ESCO_EV4_SUPPORTED(features_classic[0].as_array);
}

bool supports_ev5_packets(void) {
  return HCI_ESCO_EV5_SUPPORTED(features_classic[0].as_array);
}

bool supports_esco_2m_phy(void) {
  return HCI_EDR_ESCO_2MPS_SUPPORTED(features_classic[0].as_array);
}

bool supports_esco_3m_phy(void) {
  return HCI_EDR_ESCO_3MPS_SUPPORTED(features_classic[0].as_array);
}

bool supports_3_slot_esco_edr_packets(void) {
  return HCI_3_SLOT_EDR_ESCO_SUPPORTED(features_classic[0].as_array);
}

bool supports_role_switch(void) {
  return HCI_SWITCH_SUPPORTED(features_classic[0].as_array);
}
@@ -382,21 +302,6 @@ const controller_t interface = {

    supports_enhanced_setup_synchronous_connection,
    supports_enhanced_accept_synchronous_connection,
    supports_3_slot_packets,
    supports_5_slot_packets,
    supports_classic_2m_phy,
    supports_classic_3m_phy,
    supports_3_slot_edr_packets,
    supports_5_slot_edr_packets,
    supports_sco,
    supports_hv2_packets,
    supports_hv3_packets,
    supports_ev3_packets,
    supports_ev4_packets,
    supports_ev5_packets,
    supports_esco_2m_phy,
    supports_esco_3m_phy,
    supports_3_slot_esco_edr_packets,
    supports_role_switch,
    []() { return supports_hold_mode; },
    []() { return supports_sniff_mode; },