Lines Matching refs:dhd_bus

85 typedef struct dhd_bus {  struct
142 info->drvintf->exec_rxlock(dhd_bus->bus_info, ((exec_cb_t)fn), ((struct exec_parms *) a)) argument
145 info->drvintf->exec_txlock(dhd_bus->bus_info, ((exec_cb_t)fn), ((struct exec_parms *) a))
200 static int dbus_tx_timer_init(dhd_bus_t *dhd_bus);
201 static int dbus_tx_timer_start(dhd_bus_t *dhd_bus, uint timeout);
202 static int dbus_tx_timer_stop(dhd_bus_t *dhd_bus);
203 static int dbus_irbq_init(dhd_bus_t *dhd_bus, dbus_irbq_t *q, int nq, int size_irb);
204 static int dbus_irbq_deinit(dhd_bus_t *dhd_bus, dbus_irbq_t *q, int size_irb);
205 static int dbus_rxirbs_fill(dhd_bus_t *dhd_bus);
212 static int dbus_get_nvram(dhd_bus_t *dhd_bus);
213 static int dbus_jumbo_nvram(dhd_bus_t *dhd_bus);
214 static int dbus_otp(dhd_bus_t *dhd_bus, uint16 *boardtype, uint16 *boardrev);
215 static int dbus_select_nvram(dhd_bus_t *dhd_bus, int8 *jumbonvram, int jumbolen,
218 extern int dbus_zlib_decomp(dhd_bus_t *dhd_bus);
227 dhd_bus_t *dhd_bus = dbi; in dbus_flowctrl_tx() local
229 if (dhd_bus == NULL) in dbus_flowctrl_tx()
234 if (dhd_bus->txoff == on) in dbus_flowctrl_tx()
237 dhd_bus->txoff = on; in dbus_flowctrl_tx()
239 if (dhd_bus->cbs && dhd_bus->cbs->txflowcontrol) in dbus_flowctrl_tx()
240 dhd_bus->cbs->txflowcontrol(dhd_bus->cbarg, on); in dbus_flowctrl_tx()
250 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_rxerr_indicate() local
254 if (dhd_bus == NULL) in dbus_if_rxerr_indicate()
257 if (dhd_bus->txoverride == on) in dbus_if_rxerr_indicate()
260 dhd_bus->txoverride = on; /* flow control */ in dbus_if_rxerr_indicate()
263 dbus_rxirbs_fill(dhd_bus); in dbus_if_rxerr_indicate()
320 dbus_tx_timer_init(dhd_bus_t *dhd_bus) in dbus_tx_timer_init() argument
322 if (dhd_bus && dhd_bus->drvintf && dhd_bus->drvintf->tx_timer_init) in dbus_tx_timer_init()
323 return dhd_bus->drvintf->tx_timer_init(dhd_bus->bus_info); in dbus_tx_timer_init()
329 dbus_tx_timer_start(dhd_bus_t *dhd_bus, uint timeout) in dbus_tx_timer_start() argument
331 if (dhd_bus == NULL) in dbus_tx_timer_start()
334 if (dhd_bus->tx_timer_ticking) in dbus_tx_timer_start()
337 if (dhd_bus->drvintf && dhd_bus->drvintf->tx_timer_start) { in dbus_tx_timer_start()
338 if (dhd_bus->drvintf->tx_timer_start(dhd_bus->bus_info, timeout) == DBUS_OK) { in dbus_tx_timer_start()
339 dhd_bus->tx_timer_ticking = TRUE; in dbus_tx_timer_start()
348 dbus_tx_timer_stop(dhd_bus_t *dhd_bus) in dbus_tx_timer_stop() argument
350 if (dhd_bus == NULL) in dbus_tx_timer_stop()
353 if (!dhd_bus->tx_timer_ticking) in dbus_tx_timer_stop()
356 if (dhd_bus->drvintf && dhd_bus->drvintf->tx_timer_stop) { in dbus_tx_timer_stop()
357 if (dhd_bus->drvintf->tx_timer_stop(dhd_bus->bus_info) == DBUS_OK) { in dbus_tx_timer_stop()
358 dhd_bus->tx_timer_ticking = FALSE; in dbus_tx_timer_stop()
368 dbus_irbq_init(dhd_bus_t *dhd_bus, dbus_irbq_t *q, int nq, int size_irb) in dbus_irbq_init() argument
374 ASSERT(dhd_bus); in dbus_irbq_init()
378 irb = (dbus_irb_t *) MALLOC(dhd_bus->pub.osh, size_irb); in dbus_irbq_init()
394 dbus_irbq_deinit(dhd_bus_t *dhd_bus, dbus_irbq_t *q, int size_irb) in dbus_irbq_deinit() argument
399 ASSERT(dhd_bus); in dbus_irbq_deinit()
405 MFREE(dhd_bus->pub.osh, irb, size_irb); in dbus_irbq_deinit()
415 dbus_rxirbs_fill(dhd_bus_t *dhd_bus) in dbus_rxirbs_fill() argument
423 ASSERT(dhd_bus); in dbus_rxirbs_fill()
424 if (dhd_bus->pub.busstate != DBUS_STATE_UP) { in dbus_rxirbs_fill()
427 } else if (!dhd_bus->drvintf || (dhd_bus->drvintf->recv_irb == NULL)) { in dbus_rxirbs_fill()
438 args.qdeq.q = dhd_bus->rx_q; in dbus_rxirbs_fill()
439 while ((!dhd_bus->rxoff) && in dbus_rxirbs_fill()
440 (rxirb = (EXEC_RXLOCK(dhd_bus, q_deq_exec, &args))) != NULL) { in dbus_rxirbs_fill()
441 err = dhd_bus->drvintf->recv_irb(dhd_bus->bus_info, rxirb); in dbus_rxirbs_fill()
447 args.qenq.q = dhd_bus->rx_q; in dbus_rxirbs_fill()
449 EXEC_RXLOCK(dhd_bus, q_enq_exec, &args); in dbus_rxirbs_fill()
465 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_flowctrl_rx() local
467 if (dhd_bus == NULL) in dbus_flowctrl_rx()
472 if (dhd_bus->rxoff == on) in dbus_flowctrl_rx()
475 dhd_bus->rxoff = on; in dbus_flowctrl_rx()
477 if (dhd_bus->pub.busstate == DBUS_STATE_UP) { in dbus_flowctrl_rx()
480 dbus_rxirbs_fill(dhd_bus); in dbus_flowctrl_rx()
481 if (dhd_bus && dhd_bus->drvintf->recv_resume) { in dbus_flowctrl_rx()
482 dhd_bus->drvintf->recv_resume(dhd_bus->bus_info); in dbus_flowctrl_rx()
487 if (dhd_bus && dhd_bus->drvintf->recv_stop) { in dbus_flowctrl_rx()
488 dhd_bus->drvintf->recv_stop(dhd_bus->bus_info); in dbus_flowctrl_rx()
501 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_send_irb() local
507 if (dhd_bus == NULL) in dbus_send_irb()
512 if (dhd_bus->pub.busstate == DBUS_STATE_UP || in dbus_send_irb()
513 dhd_bus->pub.busstate == DBUS_STATE_SLEEP) { in dbus_send_irb()
514 args.qdeq.q = dhd_bus->tx_q; in dbus_send_irb()
515 if (dhd_bus->drvintf) in dbus_send_irb()
516 txirb = EXEC_TXLOCK(dhd_bus, q_deq_exec, &args); in dbus_send_irb()
538 if (dhd_bus->drvintf && dhd_bus->drvintf->send_irb) { in dbus_send_irb()
540 err = dhd_bus->drvintf->send_irb(dhd_bus->bus_info, txirb); in dbus_send_irb()
545 args.qenq.q = dhd_bus->tx_q; in dbus_send_irb()
547 EXEC_TXLOCK(dhd_bus, q_enq_exec, &args); in dbus_send_irb()
549 dbus_tx_timer_start(dhd_bus, DBUS_TX_TIMEOUT_INTERVAL); in dbus_send_irb()
550 txirb_pending = dhd_bus->pub.ntxq - dhd_bus->tx_q->cnt; in dbus_send_irb()
551 if (txirb_pending > (dhd_bus->tx_low_watermark * 3)) { in dbus_send_irb()
552 dbus_flowctrl_tx(dhd_bus, TRUE); in dbus_send_irb()
605 dbus_get_fw_nvram(dhd_bus_t *dhd_bus) in dbus_get_fw_nvram() argument
620 char *pfw_path = dhd_bus->fw_path; in dbus_get_fw_nvram()
621 char *pnv_path = dhd_bus->nv_path; in dbus_get_fw_nvram()
626 nv_image = dhd_os_open_image1(dhd_bus->dhd, pnv_path); in dbus_get_fw_nvram()
632 nv_memblock = MALLOC(dhd_bus->pub.osh, MAX_NVRAMBUF_SIZE); in dbus_get_fw_nvram()
642 dhd_bus->nvram_len = process_nvram_vars(bufp, len); in dbus_get_fw_nvram()
643 if (dhd_bus->nvram_len % 4) in dbus_get_fw_nvram()
644 nvram_words_pad = 4 - dhd_bus->nvram_len % 4; in dbus_get_fw_nvram()
651 dhd_os_close_image1(dhd_bus->dhd, nv_image); in dbus_get_fw_nvram()
658 fw_image = dhd_os_open_image1(dhd_bus->dhd, pfw_path); in dbus_get_fw_nvram()
664 memptr = fw_memblock = MALLOC(dhd_bus->pub.osh, memblock_size); in dbus_get_fw_nvram()
671 if ((actual_fwlen = check_file(dhd_bus->pub.osh, memptr)) <= 0) { in dbus_get_fw_nvram()
676 total_len = actual_fwlen + dhd_bus->nvram_len + nvram_words_pad; in dbus_get_fw_nvram()
678 dhd_bus->image = (uint8*)DHD_OS_PREALLOC(dhd_bus->dhd, in dbus_get_fw_nvram()
681 dhd_bus->image = MALLOC(dhd_bus->pub.osh, total_len); in dbus_get_fw_nvram()
683 dhd_bus->image_len = total_len; in dbus_get_fw_nvram()
684 if (dhd_bus->image == NULL) { in dbus_get_fw_nvram()
697 bcopy(memptr, dhd_bus->image+offset, len); in dbus_get_fw_nvram()
701 hdr = (struct trx_header *)dhd_bus->image; in dbus_get_fw_nvram()
703 bcopy(nv_memblock, (uint8 *)(dhd_bus->image + img_offset), in dbus_get_fw_nvram()
704 dhd_bus->nvram_len); in dbus_get_fw_nvram()
705 img_offset += dhd_bus->nvram_len; in dbus_get_fw_nvram()
707 bzero(&dhd_bus->image[img_offset], nvram_words_pad); in dbus_get_fw_nvram()
719 hdr = (struct trx_header *)dhd_bus->image; in dbus_get_fw_nvram()
723 htol32(dhd_bus->nvram_len + nvram_words_pad); in dbus_get_fw_nvram()
731 hdr->crc32 = hndcrc32((uint8 *)&dhd_bus->image[i], 1, hdr->crc32); in dbus_get_fw_nvram()
738 MFREE(dhd_bus->pub.osh, fw_memblock, MAX_NVRAMBUF_SIZE); in dbus_get_fw_nvram()
740 dhd_os_close_image1(dhd_bus->dhd, fw_image); in dbus_get_fw_nvram()
742 MFREE(dhd_bus->pub.osh, nv_memblock, MAX_NVRAMBUF_SIZE); in dbus_get_fw_nvram()
744 dhd_os_close_image1(dhd_bus->dhd, nv_image); in dbus_get_fw_nvram()
754 dbus_do_download(dhd_bus_t *dhd_bus) in dbus_do_download() argument
758 err = dbus_get_fw_nvram(dhd_bus); in dbus_do_download()
764 if (dhd_bus->drvintf->dlstart && dhd_bus->drvintf->dlrun) { in dbus_do_download()
765 err = dhd_bus->drvintf->dlstart(dhd_bus->bus_info, in dbus_do_download()
766 dhd_bus->image, dhd_bus->image_len); in dbus_do_download()
768 err = dhd_bus->drvintf->dlrun(dhd_bus->bus_info); in dbus_do_download()
773 if (dhd_bus->image) { in dbus_do_download()
775 DHD_OS_PREFREE(dhd_bus->dhd, dhd_bus->image, dhd_bus->image_len); in dbus_do_download()
777 MFREE(dhd_bus->pub.osh, dhd_bus->image, dhd_bus->image_len); in dbus_do_download()
779 dhd_bus->image = NULL; in dbus_do_download()
780 dhd_bus->image_len = 0; in dbus_do_download()
794 dbus_jumbo_nvram(dhd_bus_t *dhd_bus) in dbus_jumbo_nvram() argument
806 dbus_otp(dhd_bus, &boardtype, &boardrev); in dbus_jumbo_nvram()
808 ret = dbus_select_nvram(dhd_bus, dhd_bus->extdl.vars, dhd_bus->extdl.varslen, in dbus_jumbo_nvram()
819 dhd_bus->nvram = nvram; in dbus_jumbo_nvram()
820 dhd_bus->nvram_len = nvram_len; in dbus_jumbo_nvram()
827 dbus_get_nvram(dhd_bus_t *dhd_bus) in dbus_get_nvram() argument
834 dhd_bus->nvram_len = 0; in dbus_get_nvram()
835 if (dhd_bus->extdl.varslen) { in dbus_get_nvram()
836 if (DBUS_OK != dbus_jumbo_nvram(dhd_bus)) in dbus_get_nvram()
838 DBUSERR(("NVRAM %d bytes downloaded\n", dhd_bus->nvram_len)); in dbus_get_nvram()
842 dhd_bus->nvram = nonfwnvram; in dbus_get_nvram()
843 dhd_bus->nvram_len = nonfwnvramlen; in dbus_get_nvram()
844 DBUSERR(("NVRAM %d bytes downloaded\n", dhd_bus->nvram_len)); in dbus_get_nvram()
847 if (dhd_bus->nvram) { in dbus_get_nvram()
850 if ((actual_fwlen = check_file(dhd_bus->pub.osh, dhd_bus->fw)) <= 0) { in dbus_get_nvram()
855 if (!dhd_bus->nvram_nontxt) { in dbus_get_nvram()
859 dhd_bus->nvram_len = process_nvram_vars(dhd_bus->nvram, in dbus_get_nvram()
860 dhd_bus->nvram_len); in dbus_get_nvram()
862 if (dhd_bus->nvram_len % 4) in dbus_get_nvram()
863 nvram_words_pad = 4 - dhd_bus->nvram_len % 4; in dbus_get_nvram()
865 len = actual_fwlen + dhd_bus->nvram_len + nvram_words_pad; in dbus_get_nvram()
867 dhd_bus->image = (uint8*)DHD_OS_PREALLOC(dhd_bus->dhd, in dbus_get_nvram()
870 dhd_bus->image = MALLOC(dhd_bus->pub.osh, len); in dbus_get_nvram()
872 dhd_bus->image_len = len; in dbus_get_nvram()
873 if (dhd_bus->image == NULL) { in dbus_get_nvram()
877 hdr = (struct trx_header *)dhd_bus->fw; in dbus_get_nvram()
880 bcopy(dhd_bus->fw, dhd_bus->image, img_offset); in dbus_get_nvram()
882 bcopy(dhd_bus->nvram, (uint8 *)(dhd_bus->image + img_offset), in dbus_get_nvram()
883 dhd_bus->nvram_len); in dbus_get_nvram()
884 img_offset += dhd_bus->nvram_len; in dbus_get_nvram()
886 bzero(&dhd_bus->image[img_offset], in dbus_get_nvram()
896 bcopy(dhd_bus->fw + SIZEOF_TRX(hdr) + in dbus_get_nvram()
899 dhd_bus->image + img_offset, in dbus_get_nvram()
908 hdr = (struct trx_header *)dhd_bus->image; in dbus_get_nvram()
912 htol32(dhd_bus->nvram_len + nvram_words_pad); in dbus_get_nvram()
920 hdr->crc32 = hndcrc32((uint8 *)&dhd_bus->image[i], 1, hdr->crc32); in dbus_get_nvram()
923 dhd_bus->image = dhd_bus->fw; in dbus_get_nvram()
924 dhd_bus->image_len = (uint32)dhd_bus->fwlen; in dbus_get_nvram()
935 dbus_do_download(dhd_bus_t *dhd_bus) in dbus_do_download() argument
948 dhd_bus->firmware = dbus_get_fw_nvfile(dhd_bus->pub.attrib.devid, in dbus_do_download()
949 dhd_bus->pub.attrib.chiprev, &dhd_bus->fw, &dhd_bus->fwlen, in dbus_do_download()
950 DBUS_FIRMWARE, 0, 0, dhd_bus->fw_path); in dbus_do_download()
951 if (!dhd_bus->firmware) in dbus_do_download()
955 dhd_bus->image = dhd_bus->fw; in dbus_do_download()
956 dhd_bus->image_len = (uint32)dhd_bus->fwlen; in dbus_do_download()
959 if (UNZIP_ENAB(dhd_bus) && !decomp_override) { in dbus_do_download()
960 err = dbus_zlib_decomp(dhd_bus); in dbus_do_download()
970 err = dbus_otp(dhd_bus, &boardtype, &boardrev); in dbus_do_download()
974 dhd_bus->nvfile = dbus_get_fw_nvfile(dhd_bus->pub.attrib.devid, in dbus_do_download()
975 dhd_bus->pub.attrib.chiprev, (void *)&temp_nvram, &temp_len, in dbus_do_download()
976 DBUS_NVFILE, boardtype, boardrev, dhd_bus->nv_path); in dbus_do_download()
977 if (dhd_bus->nvfile) { in dbus_do_download()
978 int8 *tmp = MALLOC(dhd_bus->pub.osh, temp_len); in dbus_do_download()
990 err = dbus_get_nvram(dhd_bus); in dbus_do_download()
997 if (dhd_bus->drvintf->dlstart && dhd_bus->drvintf->dlrun) { in dbus_do_download()
998 err = dhd_bus->drvintf->dlstart(dhd_bus->bus_info, in dbus_do_download()
999 dhd_bus->image, dhd_bus->image_len); in dbus_do_download()
1002 err = dhd_bus->drvintf->dlrun(dhd_bus->bus_info); in dbus_do_download()
1006 if (dhd_bus->nvram) { in dbus_do_download()
1008 DHD_OS_PREFREE(dhd_bus->dhd, dhd_bus->image, dhd_bus->image_len); in dbus_do_download()
1010 MFREE(dhd_bus->pub.osh, dhd_bus->image, dhd_bus->image_len); in dbus_do_download()
1012 dhd_bus->image = dhd_bus->fw; in dbus_do_download()
1013 dhd_bus->image_len = (uint32)dhd_bus->fwlen; in dbus_do_download()
1017 if (UNZIP_ENAB(dhd_bus) && (!decomp_override) && dhd_bus->orig_fw) { in dbus_do_download()
1018 MFREE(dhd_bus->pub.osh, dhd_bus->fw, dhd_bus->decomp_memsize); in dbus_do_download()
1019 dhd_bus->image = dhd_bus->fw = dhd_bus->orig_fw; in dbus_do_download()
1020 dhd_bus->image_len = dhd_bus->fwlen = dhd_bus->origfw_len; in dbus_do_download()
1026 if (dhd_bus->firmware) { in dbus_do_download()
1027 dbus_release_fw_nvfile(dhd_bus->firmware); in dbus_do_download()
1028 dhd_bus->firmware = NULL; in dbus_do_download()
1030 if (dhd_bus->nvfile) { in dbus_do_download()
1031 dbus_release_fw_nvfile(dhd_bus->nvfile); in dbus_do_download()
1032 dhd_bus->nvfile = NULL; in dbus_do_download()
1035 MFREE(dhd_bus->pub.osh, nonfwnvram, nonfwnvramlen); in dbus_do_download()
1052 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_send_irb_timeout() local
1054 if ((dhd_bus == NULL) || (dhd_bus->drvintf == NULL) || (txirb == NULL)) { in dbus_if_send_irb_timeout()
1071 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_send_irb_complete() local
1076 if ((dhd_bus == NULL) || (txirb == NULL)) { in dbus_if_send_irb_complete()
1082 dbus_tx_timer_stop(dhd_bus); in dbus_if_send_irb_complete()
1089 args.qenq.q = dhd_bus->tx_q; in dbus_if_send_irb_complete()
1091 EXEC_TXLOCK(dhd_bus, q_enq_exec, &args); in dbus_if_send_irb_complete()
1093 if (dhd_bus->pub.busstate != DBUS_STATE_DOWN) { in dbus_if_send_irb_complete()
1095 if (dhd_bus->cbs && dhd_bus->cbs->send_complete) in dbus_if_send_irb_complete()
1096 dhd_bus->cbs->send_complete(dhd_bus->cbarg, pktinfo, in dbus_if_send_irb_complete()
1100 txirb_pending = dhd_bus->pub.ntxq - dhd_bus->tx_q->cnt; in dbus_if_send_irb_complete()
1102 dbus_tx_timer_start(dhd_bus, DBUS_TX_TIMEOUT_INTERVAL); in dbus_if_send_irb_complete()
1103 if ((txirb_pending < dhd_bus->tx_low_watermark) && in dbus_if_send_irb_complete()
1104 dhd_bus->txoff && !dhd_bus->txoverride) { in dbus_if_send_irb_complete()
1105 dbus_flowctrl_tx(dhd_bus, OFF); in dbus_if_send_irb_complete()
1113 if (dhd_bus->cbs && dhd_bus->cbs->send_complete) in dbus_if_send_irb_complete()
1114 dhd_bus->cbs->send_complete(dhd_bus->cbarg, pktinfo, in dbus_if_send_irb_complete()
1117 dbus_if_pktfree(dhd_bus, (void*)pktinfo, TRUE); in dbus_if_send_irb_complete()
1125 if (dhd_bus->cbs && dhd_bus->cbs->send_complete) in dbus_if_send_irb_complete()
1126 dhd_bus->cbs->send_complete(dhd_bus->cbarg, pktinfo, in dbus_if_send_irb_complete()
1129 dbus_if_pktfree(dhd_bus, (void*)pktinfo, TRUE); in dbus_if_send_irb_complete()
1142 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_recv_irb_complete() local
1146 if ((dhd_bus == NULL) || (rxirb == NULL)) { in dbus_if_recv_irb_complete()
1150 if (dhd_bus->pub.busstate != DBUS_STATE_DOWN && in dbus_if_recv_irb_complete()
1151 dhd_bus->pub.busstate != DBUS_STATE_SLEEP) { in dbus_if_recv_irb_complete()
1159 if (dhd_bus->cbs && dhd_bus->cbs->recv_buf) { in dbus_if_recv_irb_complete()
1160 dhd_bus->cbs->recv_buf(dhd_bus->cbarg, rxirb->buf, in dbus_if_recv_irb_complete()
1164 if (dhd_bus->cbs && dhd_bus->cbs->recv_pkt) in dbus_if_recv_irb_complete()
1165 dhd_bus->cbs->recv_pkt(dhd_bus->cbarg, rxirb->pkt); in dbus_if_recv_irb_complete()
1170 rxirb_pending = dhd_bus->pub.nrxq - dhd_bus->rx_q->cnt - 1; in dbus_if_recv_irb_complete()
1171 if ((rxirb_pending <= dhd_bus->rx_low_watermark) && in dbus_if_recv_irb_complete()
1172 !dhd_bus->rxoff) { in dbus_if_recv_irb_complete()
1174 dhd_bus->rx_low_watermark, rxirb_pending)); in dbus_if_recv_irb_complete()
1175 dbus_rxirbs_fill(dhd_bus); in dbus_if_recv_irb_complete()
1176 } else if (dhd_bus->rxoff) in dbus_if_recv_irb_complete()
1178 dhd_bus->rx_q->cnt)); in dbus_if_recv_irb_complete()
1184 PKTFRMNATIVE(dhd_bus->pub.osh, rxirb->buf); in dbus_if_recv_irb_complete()
1185 PKTFREE(dhd_bus->pub.osh, rxirb->buf, FALSE); in dbus_if_recv_irb_complete()
1194 PKTFRMNATIVE(dhd_bus->pub.osh, rxirb->buf); in dbus_if_recv_irb_complete()
1195 PKTFREE(dhd_bus->pub.osh, rxirb->buf, FALSE); in dbus_if_recv_irb_complete()
1204 PKTFRMNATIVE(dhd_bus->pub.osh, rxirb->buf); in dbus_if_recv_irb_complete()
1205 PKTFREE(dhd_bus->pub.osh, rxirb->buf, FALSE); in dbus_if_recv_irb_complete()
1209 if (dhd_bus->rx_q != NULL) { in dbus_if_recv_irb_complete()
1211 args.qenq.q = dhd_bus->rx_q; in dbus_if_recv_irb_complete()
1213 EXEC_RXLOCK(dhd_bus, q_enq_exec, &args); in dbus_if_recv_irb_complete()
1215 MFREE(dhd_bus->pub.osh, rxirb, sizeof(dbus_irb_tx_t)); in dbus_if_recv_irb_complete()
1225 dhd_bus_t *dhd_bus = handle; in dbus_if_errhandler() local
1228 if (dhd_bus == NULL) in dbus_if_errhandler()
1233 dhd_bus->pub.stats.tx_errors++; in dbus_if_errhandler()
1237 dhd_bus->pub.stats.tx_dropped++; in dbus_if_errhandler()
1241 dhd_bus->pub.stats.rx_errors++; in dbus_if_errhandler()
1245 dhd_bus->pub.stats.rx_dropped++; in dbus_if_errhandler()
1252 if (dhd_bus->cbs && dhd_bus->cbs->errhandler && (dhd_bus->errmask & mask)) in dbus_if_errhandler()
1253 dhd_bus->cbs->errhandler(dhd_bus->cbarg, err); in dbus_if_errhandler()
1263 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_ctl_complete() local
1267 if (dhd_bus == NULL) { in dbus_if_ctl_complete()
1272 if (dhd_bus->pub.busstate != DBUS_STATE_DOWN) { in dbus_if_ctl_complete()
1273 if (dhd_bus->cbs && dhd_bus->cbs->ctl_complete) in dbus_if_ctl_complete()
1274 dhd_bus->cbs->ctl_complete(dhd_bus->cbarg, type, status); in dbus_if_ctl_complete()
1286 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_state_change() local
1289 if (dhd_bus == NULL) in dbus_if_state_change()
1292 if (dhd_bus->pub.busstate == state) in dbus_if_state_change()
1294 old_state = dhd_bus->pub.busstate; in dbus_if_state_change()
1307 dhd_bus->pub.busstate = state; in dbus_if_state_change()
1313 dbus_rxirbs_fill(dhd_bus); in dbus_if_state_change()
1317 if (dhd_bus->cbs && dhd_bus->cbs->state_change) in dbus_if_state_change()
1318 dhd_bus->cbs->state_change(dhd_bus->cbarg, state); in dbus_if_state_change()
1325 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_pktget() local
1328 if (dhd_bus == NULL) in dbus_if_pktget()
1331 if (dhd_bus->cbs && dhd_bus->cbs->pktget) in dbus_if_pktget()
1332 p = dhd_bus->cbs->pktget(dhd_bus->cbarg, len, send); in dbus_if_pktget()
1343 dhd_bus_t *dhd_bus = (dhd_bus_t *) handle; in dbus_if_pktfree() local
1345 if (dhd_bus == NULL) in dbus_if_pktfree()
1348 if (dhd_bus->cbs && dhd_bus->cbs->pktfree) in dbus_if_pktfree()
1349 dhd_bus->cbs->pktfree(dhd_bus->cbarg, p, send); in dbus_if_pktfree()
1358 dhd_bus_t *dhd_bus = (dhd_bus_t *) cbarg; in dbus_if_getirb() local
1362 if ((dhd_bus == NULL) || (dhd_bus->pub.busstate != DBUS_STATE_UP)) in dbus_if_getirb()
1366 args.qdeq.q = dhd_bus->tx_q; in dbus_if_getirb()
1367 irb = EXEC_TXLOCK(dhd_bus, q_deq_exec, &args); in dbus_if_getirb()
1369 args.qdeq.q = dhd_bus->rx_q; in dbus_if_getirb()
1370 irb = EXEC_RXLOCK(dhd_bus, q_deq_exec, &args); in dbus_if_getirb()
1431 dhd_bus_t *dhd_bus; in dbus_attach() local
1442 dhd_bus = MALLOC(osh, sizeof(dhd_bus_t)); in dbus_attach()
1443 if (dhd_bus == NULL) { in dbus_attach()
1448 bzero(dhd_bus, sizeof(dhd_bus_t)); in dbus_attach()
1451 dhd_bus->drvintf = g_busintf; in dbus_attach()
1452 dhd_bus->cbarg = pub; in dbus_attach()
1453 dhd_bus->cbs = cbs; in dbus_attach()
1455 dhd_bus->pub.sh = sh; in dbus_attach()
1456 dhd_bus->pub.osh = osh; in dbus_attach()
1457 dhd_bus->pub.rxsize = rxsize; in dbus_attach()
1459 dhd_bus->pub.nrxq = nrxq; in dbus_attach()
1460 dhd_bus->rx_low_watermark = nrxq / 2; /* keep enough posted rx urbs */ in dbus_attach()
1461 dhd_bus->pub.ntxq = ntxq; in dbus_attach()
1462 dhd_bus->tx_low_watermark = ntxq / 4; /* flow control when too many tx urbs posted */ in dbus_attach()
1464 dhd_bus->tx_q = MALLOC(osh, sizeof(dbus_irbq_t)); in dbus_attach()
1465 if (dhd_bus->tx_q == NULL) in dbus_attach()
1468 bzero(dhd_bus->tx_q, sizeof(dbus_irbq_t)); in dbus_attach()
1469 err = dbus_irbq_init(dhd_bus, dhd_bus->tx_q, ntxq, sizeof(dbus_irb_tx_t)); in dbus_attach()
1474 dhd_bus->rx_q = MALLOC(osh, sizeof(dbus_irbq_t)); in dbus_attach()
1475 if (dhd_bus->rx_q == NULL) in dbus_attach()
1478 bzero(dhd_bus->rx_q, sizeof(dbus_irbq_t)); in dbus_attach()
1479 err = dbus_irbq_init(dhd_bus, dhd_bus->rx_q, nrxq, sizeof(dbus_irb_rx_t)); in dbus_attach()
1485 dhd_bus->bus_info = (void *)g_busintf->attach(&dhd_bus->pub, in dbus_attach()
1486 dhd_bus, &dbus_intf_cbs); in dbus_attach()
1487 if (dhd_bus->bus_info == NULL) in dbus_attach()
1490 dbus_tx_timer_init(dhd_bus); in dbus_attach()
1495 dhd_bus->extdl.fw = MALLOC(osh, extdl->fwlen); in dbus_attach()
1496 if (dhd_bus->extdl.fw) { in dbus_attach()
1497 bcopy(extdl->fw, dhd_bus->extdl.fw, extdl->fwlen); in dbus_attach()
1498 dhd_bus->extdl.fwlen = extdl->fwlen; in dbus_attach()
1503 dhd_bus->extdl.vars = MALLOC(osh, extdl->varslen); in dbus_attach()
1504 if (dhd_bus->extdl.vars) { in dbus_attach()
1505 bcopy(extdl->vars, dhd_bus->extdl.vars, extdl->varslen); in dbus_attach()
1506 dhd_bus->extdl.varslen = extdl->varslen; in dbus_attach()
1511 return (dhd_bus_t *)dhd_bus; in dbus_attach()
1515 dbus_detach(dhd_bus); in dbus_attach()
1522 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_detach() local
1527 if (dhd_bus == NULL) in dbus_detach()
1530 dbus_tx_timer_stop(dhd_bus); in dbus_detach()
1534 if (dhd_bus->drvintf && dhd_bus->drvintf->detach) in dbus_detach()
1535 dhd_bus->drvintf->detach((dbus_pub_t *)dhd_bus, dhd_bus->bus_info); in dbus_detach()
1537 if (dhd_bus->tx_q) { in dbus_detach()
1538 dbus_irbq_deinit(dhd_bus, dhd_bus->tx_q, sizeof(dbus_irb_tx_t)); in dbus_detach()
1539 MFREE(osh, dhd_bus->tx_q, sizeof(dbus_irbq_t)); in dbus_detach()
1540 dhd_bus->tx_q = NULL; in dbus_detach()
1543 if (dhd_bus->rx_q) { in dbus_detach()
1544 dbus_irbq_deinit(dhd_bus, dhd_bus->rx_q, sizeof(dbus_irb_rx_t)); in dbus_detach()
1545 MFREE(osh, dhd_bus->rx_q, sizeof(dbus_irbq_t)); in dbus_detach()
1546 dhd_bus->rx_q = NULL; in dbus_detach()
1550 if (dhd_bus->extdl.fw && (dhd_bus->extdl.fwlen > 0)) { in dbus_detach()
1551 MFREE(osh, dhd_bus->extdl.fw, dhd_bus->extdl.fwlen); in dbus_detach()
1552 dhd_bus->extdl.fw = NULL; in dbus_detach()
1553 dhd_bus->extdl.fwlen = 0; in dbus_detach()
1556 if (dhd_bus->extdl.vars && (dhd_bus->extdl.varslen > 0)) { in dbus_detach()
1557 MFREE(osh, dhd_bus->extdl.vars, dhd_bus->extdl.varslen); in dbus_detach()
1558 dhd_bus->extdl.vars = NULL; in dbus_detach()
1559 dhd_bus->extdl.varslen = 0; in dbus_detach()
1562 MFREE(osh, dhd_bus, sizeof(dhd_bus_t)); in dbus_detach()
1567 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_dlneeded() local
1570 if (!dhd_bus) { in dbus_dlneeded()
1575 DBUSTRACE(("%s: state %d\n", __FUNCTION__, dhd_bus->pub.busstate)); in dbus_dlneeded()
1577 if (dhd_bus->drvintf->dlneeded) { in dbus_dlneeded()
1578 dlneeded = dhd_bus->drvintf->dlneeded(dhd_bus->bus_info); in dbus_dlneeded()
1591 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_download_firmware() local
1594 if (!dhd_bus) { in dbus_download_firmware()
1599 DBUSTRACE(("%s: state %d\n", __FUNCTION__, dhd_bus->pub.busstate)); in dbus_download_firmware()
1601 dhd_bus->pub.busstate = DBUS_STATE_DL_PENDING; in dbus_download_firmware()
1602 err = dbus_do_download(dhd_bus); in dbus_download_firmware()
1604 dhd_bus->pub.busstate = DBUS_STATE_DL_DONE; in dbus_download_firmware()
1618 dbus_up(struct dhd_bus *pub) in dbus_up()
1620 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_up() local
1625 if (dhd_bus == NULL) { in dbus_up()
1630 if ((dhd_bus->pub.busstate == DBUS_STATE_DL_DONE) || in dbus_up()
1631 (dhd_bus->pub.busstate == DBUS_STATE_DOWN) || in dbus_up()
1632 (dhd_bus->pub.busstate == DBUS_STATE_SLEEP)) { in dbus_up()
1633 if (dhd_bus->drvintf && dhd_bus->drvintf->up) { in dbus_up()
1634 err = dhd_bus->drvintf->up(dhd_bus->bus_info); in dbus_up()
1637 dbus_rxirbs_fill(dhd_bus); in dbus_up()
1650 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_down() local
1654 if (dhd_bus == NULL) in dbus_down()
1657 dbus_tx_timer_stop(dhd_bus); in dbus_down()
1659 if (dhd_bus->pub.busstate == DBUS_STATE_UP || in dbus_down()
1660 dhd_bus->pub.busstate == DBUS_STATE_SLEEP) { in dbus_down()
1661 if (dhd_bus->drvintf && dhd_bus->drvintf->down) in dbus_down()
1662 return dhd_bus->drvintf->down(dhd_bus->bus_info); in dbus_down()
1671 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_shutdown() local
1675 if (dhd_bus == NULL) in dbus_shutdown()
1678 if (dhd_bus->drvintf && dhd_bus->drvintf->shutdown) in dbus_shutdown()
1679 return dhd_bus->drvintf->shutdown(dhd_bus->bus_info); in dbus_shutdown()
1685 dbus_stop(struct dhd_bus *pub) in dbus_stop()
1687 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_stop() local
1691 if (dhd_bus == NULL) in dbus_stop()
1694 if (dhd_bus->pub.busstate == DBUS_STATE_UP || in dbus_stop()
1695 dhd_bus->pub.busstate == DBUS_STATE_SLEEP) { in dbus_stop()
1696 if (dhd_bus->drvintf && dhd_bus->drvintf->stop) in dbus_stop()
1697 return dhd_bus->drvintf->stop(dhd_bus->bus_info); in dbus_stop()
1716 dbus_send_ctl(struct dhd_bus *pub, uint8 *buf, int len) in dbus_send_ctl()
1718 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_send_ctl() local
1720 if (dhd_bus == NULL) { in dbus_send_ctl()
1725 if (dhd_bus->pub.busstate == DBUS_STATE_UP || in dbus_send_ctl()
1726 dhd_bus->pub.busstate == DBUS_STATE_SLEEP) { in dbus_send_ctl()
1727 if (dhd_bus->drvintf && dhd_bus->drvintf->send_ctl) in dbus_send_ctl()
1728 return dhd_bus->drvintf->send_ctl(dhd_bus->bus_info, buf, len); in dbus_send_ctl()
1730 DBUSERR(("%s: bustate=%d\n", __FUNCTION__, dhd_bus->pub.busstate)); in dbus_send_ctl()
1737 dbus_recv_ctl(struct dhd_bus *pub, uint8 *buf, int len) in dbus_recv_ctl()
1739 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_recv_ctl() local
1741 if ((dhd_bus == NULL) || (buf == NULL)) in dbus_recv_ctl()
1744 if (dhd_bus->pub.busstate == DBUS_STATE_UP || in dbus_recv_ctl()
1745 dhd_bus->pub.busstate == DBUS_STATE_SLEEP) { in dbus_recv_ctl()
1746 if (dhd_bus->drvintf && dhd_bus->drvintf->recv_ctl) in dbus_recv_ctl()
1747 return dhd_bus->drvintf->recv_ctl(dhd_bus->bus_info, buf, len); in dbus_recv_ctl()
1749 DBUSERR(("%s: bustate=%d\n", __FUNCTION__, dhd_bus->pub.busstate)); in dbus_recv_ctl()
1759 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_recv_bulk() local
1766 if (dhd_bus == NULL) in dbus_recv_bulk()
1769 args.qdeq.q = dhd_bus->rx_q; in dbus_recv_bulk()
1770 if (dhd_bus->pub.busstate == DBUS_STATE_UP) { in dbus_recv_bulk()
1771 if (dhd_bus->drvintf && dhd_bus->drvintf->recv_irb_from_ep) { in dbus_recv_bulk()
1772 if ((rxirb = (EXEC_RXLOCK(dhd_bus, q_deq_exec, &args))) != NULL) { in dbus_recv_bulk()
1773 status = dhd_bus->drvintf->recv_irb_from_ep(dhd_bus->bus_info, in dbus_recv_bulk()
1777 args.qenq.q = dhd_bus->rx_q; in dbus_recv_bulk()
1779 EXEC_RXLOCK(dhd_bus, q_enq_exec, &args); in dbus_recv_bulk()
1793 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_poll_intr() local
1797 if (dhd_bus == NULL) in dbus_poll_intr()
1800 if (dhd_bus->pub.busstate == DBUS_STATE_UP) { in dbus_poll_intr()
1801 if (dhd_bus->drvintf && dhd_bus->drvintf->recv_irb_from_ep) { in dbus_poll_intr()
1802 status = dhd_bus->drvintf->recv_irb_from_ep(dhd_bus->bus_info, in dbus_poll_intr()
1814 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_pktget() local
1816 if ((dhd_bus == NULL) || (len < 0)) in dbus_pktget()
1819 return PKTGET(dhd_bus->pub.osh, len, TRUE); in dbus_pktget()
1826 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_pktfree() local
1828 if ((dhd_bus == NULL) || (pkt == NULL)) in dbus_pktfree()
1831 PKTFREE(dhd_bus->pub.osh, pkt, TRUE); in dbus_pktfree()
1838 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_get_stats() local
1840 if ((dhd_bus == NULL) || (stats == NULL)) in dbus_get_stats()
1843 bcopy(&dhd_bus->pub.stats, stats, sizeof(dbus_stats_t)); in dbus_get_stats()
1851 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_get_attrib() local
1854 if ((dhd_bus == NULL) || (attrib == NULL)) in dbus_get_attrib()
1857 if (dhd_bus->drvintf && dhd_bus->drvintf->get_attrib) { in dbus_get_attrib()
1858 err = dhd_bus->drvintf->get_attrib(dhd_bus->bus_info, in dbus_get_attrib()
1859 &dhd_bus->pub.attrib); in dbus_get_attrib()
1862 bcopy(&dhd_bus->pub.attrib, attrib, sizeof(dbus_attrib_t)); in dbus_get_attrib()
1869 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_get_device_speed() local
1871 if (dhd_bus == NULL) in dbus_get_device_speed()
1874 return (dhd_bus->pub.device_speed); in dbus_get_device_speed()
1880 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_set_config() local
1883 if ((dhd_bus == NULL) || (config == NULL)) in dbus_set_config()
1886 if (dhd_bus->drvintf && dhd_bus->drvintf->set_config) { in dbus_set_config()
1887 err = dhd_bus->drvintf->set_config(dhd_bus->bus_info, in dbus_set_config()
1892 (dhd_bus->pub.busstate == DBUS_STATE_UP)) { in dbus_set_config()
1893 dbus_rxirbs_fill(dhd_bus); in dbus_set_config()
1903 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_get_config() local
1906 if ((dhd_bus == NULL) || (config == NULL)) in dbus_get_config()
1909 if (dhd_bus->drvintf && dhd_bus->drvintf->get_config) { in dbus_get_config()
1910 err = dhd_bus->drvintf->get_config(dhd_bus->bus_info, in dbus_get_config()
1920 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_set_errmask() local
1923 if (dhd_bus == NULL) in dbus_set_errmask()
1926 dhd_bus->errmask = mask; in dbus_set_errmask()
1933 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_pnp_resume() local
1939 if (dhd_bus == NULL) in dbus_pnp_resume()
1942 if (dhd_bus->pub.busstate == DBUS_STATE_UP) { in dbus_pnp_resume()
1948 if (dhd_bus->drvintf->pnp) { in dbus_pnp_resume()
1949 err = dhd_bus->drvintf->pnp(dhd_bus->bus_info, in dbus_pnp_resume()
1953 if (dhd_bus->drvintf->recv_needed) { in dbus_pnp_resume()
1954 if (dhd_bus->drvintf->recv_needed(dhd_bus->bus_info)) { in dbus_pnp_resume()
1956 dbus_rxirbs_fill(dhd_bus); in dbus_pnp_resume()
1970 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_pnp_sleep() local
1975 if (dhd_bus == NULL) in dbus_pnp_sleep()
1978 dbus_tx_timer_stop(dhd_bus); in dbus_pnp_sleep()
1980 if (dhd_bus->drvintf && dhd_bus->drvintf->pnp) { in dbus_pnp_sleep()
1981 err = dhd_bus->drvintf->pnp(dhd_bus->bus_info, in dbus_pnp_sleep()
1991 dhd_bus_t *dhd_bus = (dhd_bus_t *) pub; in dbus_pnp_disconnect() local
1996 if (dhd_bus == NULL) in dbus_pnp_disconnect()
1999 dbus_tx_timer_stop(dhd_bus); in dbus_pnp_disconnect()
2001 if (dhd_bus->drvintf && dhd_bus->drvintf->pnp) { in dbus_pnp_disconnect()
2002 err = dhd_bus->drvintf->pnp(dhd_bus->bus_info, in dbus_pnp_disconnect()
2013 dhd_bus_t *dhd_bus = (dhd_bus_t *) dhdp->bus; in dhd_bus_iovar_op() local
2018 if (dhd_bus == NULL) in dhd_bus_iovar_op()
2021 if (dhd_bus->drvintf && dhd_bus->drvintf->iovar_op) { in dhd_bus_iovar_op()
2022 err = dhd_bus->drvintf->iovar_op(dhd_bus->bus_info, in dhd_bus_iovar_op()
2050 dbus_otp(dhd_bus_t *dhd_bus, uint16 *boardtype, uint16 *boardrev) in dbus_otp() argument
2066 if (dhd_bus == NULL || dhd_bus->drvintf == NULL || in dbus_otp()
2067 dhd_bus->drvintf->readreg == NULL) in dbus_otp()
2070 devid = dhd_bus->pub.attrib.devid; in dbus_otp()
2083 cis = MALLOC(dhd_bus->pub.osh, otp_size * 2); in dbus_otp()
2091 ret = dhd_bus->drvintf->readreg(dhd_bus->bus_info, in dbus_otp()
2095 MFREE(dhd_bus->pub.osh, cis, otp_size * 2); in dbus_otp()
2161 MFREE(dhd_bus->pub.osh, cis, otp_size * 2); in dbus_otp()
2176 dbus_select_nvram(dhd_bus_t *dhd_bus, int8 *jumbonvram, int jumbolen, in dbus_select_nvram() argument
2209 dhd_bus->nvram_nontxt = DBUS_NVRAM_NONTXT; in dbus_select_nvram()
2557 dhd_bus_chip(struct dhd_bus *bus) in dhd_bus_chip()
2564 dhd_bus_chiprev(struct dhd_bus *bus) in dhd_bus_chiprev()
2572 dhd_bus_to_dev(struct dhd_bus *bus) in dhd_bus_to_dev()
2589 dhd_bus_txdata(struct dhd_bus *bus, void *pktbuf) in dhd_bus_txdata()
2600 dhd_bus_txctl(struct dhd_bus *bus, uchar *msg, uint msglen) in dhd_bus_txctl()
2648 dhd_bus_rxctl(struct dhd_bus *bus, uchar *msg, uint msglen) in dhd_bus_rxctl()
2785 dhd_bus_update_fw_nv_path(struct dhd_bus *bus, char *pfw_path, in dhd_bus_update_fw_nv_path()