Lines Matching +full:wi +full:- +full:fi

29 		 "1[Wi-Fi], 4[BT], 8[BT LE], 5[Wi-Fi STA + BT classic]\n"
30 "9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n"
36 * rsi_usb_card_write() - This function writes to the USB Card.
49 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_usb_card_write()
51 u8 *seg = dev->tx_buffer; in rsi_usb_card_write()
53 int ep = dev->bulkout_endpoint_addr[endpoint - 1]; in rsi_usb_card_write()
59 status = usb_bulk_msg(dev->usbdev, in rsi_usb_card_write()
60 usb_sndbulkpipe(dev->usbdev, ep), in rsi_usb_card_write()
69 dev->write_fail = 1; in rsi_usb_card_write()
75 * rsi_write_multiple() - This function writes multiple bytes of information
92 return -ENODEV; in rsi_write_multiple()
95 return -EINVAL; in rsi_write_multiple()
97 dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_write_multiple()
98 if (dev->write_fail) in rsi_write_multiple()
99 return -ENETDOWN; in rsi_write_multiple()
105 * rsi_find_bulk_in_and_out_endpoints() - This function initializes the bulk
110 * Return: ret_val: 0 on success, -ENOMEM on failure.
115 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_find_bulk_in_and_out_endpoints()
121 iface_desc = interface->cur_altsetting; in rsi_find_bulk_in_and_out_endpoints()
123 for (ii = 0; ii < iface_desc->desc.bNumEndpoints; ++ii) { in rsi_find_bulk_in_and_out_endpoints()
124 endpoint = &(iface_desc->endpoint[ii].desc); in rsi_find_bulk_in_and_out_endpoints()
126 if (!dev->bulkin_endpoint_addr[bin_found] && in rsi_find_bulk_in_and_out_endpoints()
127 (endpoint->bEndpointAddress & USB_DIR_IN) && in rsi_find_bulk_in_and_out_endpoints()
128 ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == in rsi_find_bulk_in_and_out_endpoints()
130 buffer_size = endpoint->wMaxPacketSize; in rsi_find_bulk_in_and_out_endpoints()
131 dev->bulkin_size[bin_found] = buffer_size; in rsi_find_bulk_in_and_out_endpoints()
132 dev->bulkin_endpoint_addr[bin_found] = in rsi_find_bulk_in_and_out_endpoints()
133 endpoint->bEndpointAddress; in rsi_find_bulk_in_and_out_endpoints()
137 if (!dev->bulkout_endpoint_addr[bout_found] && in rsi_find_bulk_in_and_out_endpoints()
138 !(endpoint->bEndpointAddress & USB_DIR_IN) && in rsi_find_bulk_in_and_out_endpoints()
139 ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == in rsi_find_bulk_in_and_out_endpoints()
141 buffer_size = endpoint->wMaxPacketSize; in rsi_find_bulk_in_and_out_endpoints()
142 dev->bulkout_endpoint_addr[bout_found] = in rsi_find_bulk_in_and_out_endpoints()
143 endpoint->bEndpointAddress; in rsi_find_bulk_in_and_out_endpoints()
144 dev->bulkout_size[bout_found] = buffer_size; in rsi_find_bulk_in_and_out_endpoints()
152 if (!(dev->bulkin_endpoint_addr[0] && dev->bulkout_endpoint_addr[0])) { in rsi_find_bulk_in_and_out_endpoints()
153 dev_err(&interface->dev, "missing wlan bulk endpoints\n"); in rsi_find_bulk_in_and_out_endpoints()
154 return -EINVAL; in rsi_find_bulk_in_and_out_endpoints()
157 if (adapter->priv->coex_mode > 1) { in rsi_find_bulk_in_and_out_endpoints()
158 if (!dev->bulkin_endpoint_addr[1]) { in rsi_find_bulk_in_and_out_endpoints()
159 dev_err(&interface->dev, "missing bt bulk-in endpoint\n"); in rsi_find_bulk_in_and_out_endpoints()
160 return -EINVAL; in rsi_find_bulk_in_and_out_endpoints()
170 /* rsi_usb_reg_read() - This function reads data from given register address.
184 int status = -ENOMEM; in rsi_usb_reg_read()
187 return -EINVAL; in rsi_usb_reg_read()
214 * rsi_usb_reg_write() - This function writes the given data into the given
229 int status = -ENOMEM; in rsi_usb_reg_write()
232 return -EINVAL; in rsi_usb_reg_write()
263 * rsi_rx_done_handler() - This function is called when a packet is received
271 struct rx_usb_ctrl_block *rx_cb = urb->context; in rsi_rx_done_handler()
272 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)rx_cb->data; in rsi_rx_done_handler()
273 int status = -EINVAL; in rsi_rx_done_handler()
275 if (urb->status) { in rsi_rx_done_handler()
276 dev_kfree_skb(rx_cb->rx_skb); in rsi_rx_done_handler()
280 if (urb->actual_length <= 0 || in rsi_rx_done_handler()
281 urb->actual_length > rx_cb->rx_skb->len) { in rsi_rx_done_handler()
283 __func__, urb->actual_length); in rsi_rx_done_handler()
286 if (skb_queue_len(&dev->rx_q) >= RSI_MAX_RX_PKTS) { in rsi_rx_done_handler()
290 skb_trim(rx_cb->rx_skb, urb->actual_length); in rsi_rx_done_handler()
291 skb_queue_tail(&dev->rx_q, rx_cb->rx_skb); in rsi_rx_done_handler()
293 rsi_set_event(&dev->rx_thread.event); in rsi_rx_done_handler()
297 if (rsi_rx_urb_submit(dev->priv, rx_cb->ep_num, GFP_ATOMIC)) in rsi_rx_done_handler()
301 dev_kfree_skb(rx_cb->rx_skb); in rsi_rx_done_handler()
306 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_rx_urb_kill()
307 struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num - 1]; in rsi_rx_urb_kill()
308 struct urb *urb = rx_cb->rx_urb; in rsi_rx_urb_kill()
314 * rsi_rx_urb_submit() - This function submits the given URB to the USB stack.
323 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_rx_urb_submit()
324 struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num - 1]; in rsi_rx_urb_submit()
325 struct urb *urb = rx_cb->rx_urb; in rsi_rx_urb_submit()
333 return -ENOMEM; in rsi_rx_urb_submit()
335 skb_put(skb, RSI_MAX_RX_USB_PKT_SIZE - MAX_DWORD_ALIGN_BYTES); in rsi_rx_urb_submit()
336 dword_align_bytes = (unsigned long)skb->data & 0x3f; in rsi_rx_urb_submit()
339 urb->transfer_buffer = skb->data; in rsi_rx_urb_submit()
340 rx_cb->rx_skb = skb; in rsi_rx_urb_submit()
343 dev->usbdev, in rsi_rx_urb_submit()
344 usb_rcvbulkpipe(dev->usbdev, in rsi_rx_urb_submit()
345 dev->bulkin_endpoint_addr[ep_num - 1]), in rsi_rx_urb_submit()
346 urb->transfer_buffer, in rsi_rx_urb_submit()
347 skb->len, in rsi_rx_urb_submit()
363 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_usb_read_register_multiple()
369 return -EINVAL; in rsi_usb_read_register_multiple()
373 return -ENOMEM; in rsi_usb_read_register_multiple()
377 status = usb_control_msg(dev->usbdev, in rsi_usb_read_register_multiple()
378 usb_rcvctrlpipe(dev->usbdev, 0), in rsi_usb_read_register_multiple()
392 count -= transfer; in rsi_usb_read_register_multiple()
401 * rsi_usb_write_register_multiple() - This function writes multiple bytes of
413 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_usb_write_register_multiple()
420 return -ENOMEM; in rsi_usb_write_register_multiple()
425 status = usb_control_msg(dev->usbdev, in rsi_usb_write_register_multiple()
426 usb_sndctrlpipe(dev->usbdev, 0), in rsi_usb_write_register_multiple()
441 count -= transfer; in rsi_usb_write_register_multiple()
451 *rsi_usb_host_intf_write_pkt() - This function writes the packet to the
479 ((struct rsi_91x_usbdev *)adapter->rsi_dev)->usbdev; in rsi_usb_master_reg_read()
496 ((struct rsi_91x_usbdev *)adapter->rsi_dev)->usbdev; in rsi_usb_master_reg_write()
553 * rsi_deinit_usb_interface() - This function deinitializes the usb interface.
560 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_deinit_usb_interface()
562 rsi_kill_thread(&dev->rx_thread); in rsi_deinit_usb_interface()
564 usb_free_urb(dev->rx_cb[0].rx_urb); in rsi_deinit_usb_interface()
565 if (adapter->priv->coex_mode > 1) in rsi_deinit_usb_interface()
566 usb_free_urb(dev->rx_cb[1].rx_urb); in rsi_deinit_usb_interface()
568 kfree(dev->tx_buffer); in rsi_deinit_usb_interface()
573 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_usb_init_rx()
577 num_rx_cb = (adapter->priv->coex_mode > 1 ? 2 : 1); in rsi_usb_init_rx()
580 rx_cb = &dev->rx_cb[idx]; in rsi_usb_init_rx()
582 rx_cb->rx_urb = usb_alloc_urb(0, GFP_KERNEL); in rsi_usb_init_rx()
583 if (!rx_cb->rx_urb) { in rsi_usb_init_rx()
587 rx_cb->ep_num = idx + 1; in rsi_usb_init_rx()
588 rx_cb->data = (void *)dev; in rsi_usb_init_rx()
590 skb_queue_head_init(&dev->rx_q); in rsi_usb_init_rx()
591 rsi_init_event(&dev->rx_thread.event); in rsi_usb_init_rx()
592 if (rsi_create_kthread(adapter->priv, &dev->rx_thread, in rsi_usb_init_rx()
593 rsi_usb_rx_thread, "RX-Thread")) { in rsi_usb_init_rx()
601 usb_free_urb(dev->rx_cb[0].rx_urb); in rsi_usb_init_rx()
602 if (adapter->priv->coex_mode > 1) in rsi_usb_init_rx()
603 usb_free_urb(dev->rx_cb[1].rx_urb); in rsi_usb_init_rx()
605 return -1; in rsi_usb_init_rx()
609 * rsi_init_usb_interface() - This function initializes the usb interface.
623 return -ENOMEM; in rsi_init_usb_interface()
625 adapter->rsi_dev = rsi_dev; in rsi_init_usb_interface()
626 rsi_dev->usbdev = interface_to_usbdev(pfunction); in rsi_init_usb_interface()
627 rsi_dev->priv = (void *)adapter; in rsi_init_usb_interface()
630 status = -EINVAL; in rsi_init_usb_interface()
634 adapter->device = &pfunction->dev; in rsi_init_usb_interface()
637 rsi_dev->tx_buffer = kmalloc(2048, GFP_KERNEL); in rsi_init_usb_interface()
638 if (!rsi_dev->tx_buffer) { in rsi_init_usb_interface()
639 status = -ENOMEM; in rsi_init_usb_interface()
645 status = -ENOMEM; in rsi_init_usb_interface()
649 rsi_dev->tx_blk_size = 252; in rsi_init_usb_interface()
650 adapter->block_size = rsi_dev->tx_blk_size; in rsi_init_usb_interface()
653 adapter->check_hw_queue_status = rsi_usb_check_queue_status; in rsi_init_usb_interface()
654 adapter->determine_event_timeout = rsi_usb_event_timeout; in rsi_init_usb_interface()
655 adapter->rsi_host_intf = RSI_HOST_INTF_USB; in rsi_init_usb_interface()
656 adapter->host_intf_ops = &usb_host_intf_ops; in rsi_init_usb_interface()
660 adapter->num_debugfs_entries = (MAX_DEBUGFS_ENTRIES - 1); in rsi_init_usb_interface()
667 kfree(rsi_dev->tx_buffer); in rsi_init_usb_interface()
695 ((len_in_bits - 1) | RSI_GSPI_TRIG), 2); in usb_ulp_read_write()
711 /* This msleep will ensure Thread-Arch processor to go to hold in rsi_reset_card()
724 if (adapter->device_model != RSI_DEV_9116) { in rsi_reset_card()
775 * rsi_probe() - This function is called by kernel when the driver provided
797 return -ENOMEM; in rsi_probe()
799 adapter->rsi_host_intf = RSI_HOST_INTF_USB; in rsi_probe()
810 if (id->idProduct == RSI_USB_PID_9113) { in rsi_probe()
812 adapter->device_model = RSI_DEV_9113; in rsi_probe()
813 } else if (id->idProduct == RSI_USB_PID_9116) { in rsi_probe()
815 adapter->device_model = RSI_DEV_9116; in rsi_probe()
818 __func__, id->idProduct); in rsi_probe()
819 status = -ENODEV; in rsi_probe()
823 dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; in rsi_probe()
825 status = rsi_usb_reg_read(dev->usbdev, FW_STATUS_REG, &fw_status, 2); in rsi_probe()
846 if (adapter->priv->coex_mode > 1) { in rsi_probe()
865 * rsi_disconnect() - This function performs the reverse of the probe function,
880 if (IS_ENABLED(CONFIG_RSI_COEX) && adapter->priv->coex_mode > 1 && in rsi_disconnect()
881 adapter->priv->bt_adapter) { in rsi_disconnect()
882 rsi_bt_ops.detach(adapter->priv->bt_adapter); in rsi_disconnect()
883 adapter->priv->bt_adapter = NULL; in rsi_disconnect()
886 if (adapter->priv->coex_mode > 1) in rsi_disconnect()
901 return -ENOSYS; in rsi_suspend()
907 return -ENOSYS; in rsi_resume()
918 .name = "RSI-USB WLAN",