int dhd_bta_docmd(dhd_pub_t *pub, void *cmd_buf, uint cmd_len) { amp_hci_cmd_t *cmd = (amp_hci_cmd_t *)cmd_buf; uint8 buf[BTA_HCI_CMD_MAX_LEN + 16]; uint len = sizeof(buf); wl_ioctl_t ioc; if (cmd_len < HCI_CMD_PREAMBLE_SIZE) return BCME_BADLEN; if ((uint)cmd->plen + HCI_CMD_PREAMBLE_SIZE > cmd_len) return BCME_BADLEN; len = bcm_mkiovar("HCI_cmd", (char *)cmd, (uint)cmd->plen + HCI_CMD_PREAMBLE_SIZE, (char *)buf, len); #ifdef BCMDBG if (DHD_BTA_ON()) dhd_bta_hcidump_cmd(pub, cmd); #endif memset(&ioc, 0, sizeof(ioc)); ioc.cmd = WLC_SET_VAR; ioc.buf = buf; ioc.len = len; ioc.set = TRUE; return dhd_prot_ioctl(pub, &ioc, ioc.buf, ioc.len); }
int dhd_wl_ioctl(dhd_pub_t *dhd_pub, int ifindex, wl_ioctl_t *ioc, void *buf, int len) { int ret; dhd_os_proto_block(dhd_pub); ret = dhd_prot_ioctl(dhd_pub, ifindex, ioc, buf, len); dhd_os_proto_unblock(dhd_pub); return ret; }