1
/*=====================================================
2
* CopyRight (C) 2007 Qualcomm Inc. All Rights Reserved.
5
* This file is part of Express Card USB Driver
8
*====================================================
10
#include <linux/init.h>
11
#include <linux/kernel.h>
12
#include <linux/module.h>
13
#include <linux/usb.h>
14
#include <linux/netdevice.h>
15
#include <linux/etherdevice.h>
16
#include <linux/firmware.h>
17
#include "ft1000_usb.h"
19
#include <linux/kthread.h>
21
MODULE_DESCRIPTION("FT1000 EXPRESS CARD DRIVER");
22
MODULE_LICENSE("Dual MPL/GPL");
23
MODULE_SUPPORTED_DEVICE("QFT FT1000 Express Cards");
28
#define VENDOR_ID 0x1291 /* Qualcomm vendor id */
29
#define PRODUCT_ID 0x11 /* fake product id */
31
/* table of devices that work with this driver */
32
static struct usb_device_id id_table[] = {
33
{USB_DEVICE(VENDOR_ID, PRODUCT_ID)},
37
MODULE_DEVICE_TABLE(usb, id_table);
39
static bool gPollingfailed = FALSE;
40
int ft1000_poll_thread(void *arg)
42
int ret = STATUS_SUCCESS;
44
while (!kthread_should_stop()) {
46
if (!gPollingfailed) {
47
ret = ft1000_poll(arg);
48
if (ret != STATUS_SUCCESS) {
49
DEBUG("ft1000_poll_thread: polling failed\n");
50
gPollingfailed = TRUE;
54
return STATUS_SUCCESS;
57
static int ft1000_probe(struct usb_interface *interface,
58
const struct usb_device_id *id)
60
struct usb_host_interface *iface_desc;
61
struct usb_endpoint_descriptor *endpoint;
62
struct usb_device *dev;
63
unsigned numaltsetting;
66
struct ft1000_device *ft1000dev;
67
struct ft1000_info *pft1000info = NULL;
68
const struct firmware *dsp_fw;
70
ft1000dev = kmalloc(sizeof(struct ft1000_device), GFP_KERNEL);
73
printk(KERN_ERR "out of memory allocating device structure\n");
77
memset(ft1000dev, 0, sizeof(*ft1000dev));
79
dev = interface_to_usbdev(interface);
80
DEBUG("ft1000_probe: usb device descriptor info:\n");
81
DEBUG("ft1000_probe: number of configuration is %d\n",
82
dev->descriptor.bNumConfigurations);
85
ft1000dev->status = 0;
86
ft1000dev->net = NULL;
87
ft1000dev->tx_urb = usb_alloc_urb(0, GFP_ATOMIC);
88
ft1000dev->rx_urb = usb_alloc_urb(0, GFP_ATOMIC);
90
DEBUG("ft1000_probe is called\n");
91
numaltsetting = interface->num_altsetting;
92
DEBUG("ft1000_probe: number of alt settings is :%d\n", numaltsetting);
93
iface_desc = interface->cur_altsetting;
94
DEBUG("ft1000_probe: number of endpoints is %d\n",
95
iface_desc->desc.bNumEndpoints);
96
DEBUG("ft1000_probe: descriptor type is %d\n",
97
iface_desc->desc.bDescriptorType);
98
DEBUG("ft1000_probe: interface number is %d\n",
99
iface_desc->desc.bInterfaceNumber);
100
DEBUG("ft1000_probe: alternatesetting is %d\n",
101
iface_desc->desc.bAlternateSetting);
102
DEBUG("ft1000_probe: interface class is %d\n",
103
iface_desc->desc.bInterfaceClass);
104
DEBUG("ft1000_probe: control endpoint info:\n");
105
DEBUG("ft1000_probe: descriptor0 type -- %d\n",
106
iface_desc->endpoint[0].desc.bmAttributes);
107
DEBUG("ft1000_probe: descriptor1 type -- %d\n",
108
iface_desc->endpoint[1].desc.bmAttributes);
109
DEBUG("ft1000_probe: descriptor2 type -- %d\n",
110
iface_desc->endpoint[2].desc.bmAttributes);
112
for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
114
(struct usb_endpoint_descriptor *)&iface_desc->
116
DEBUG("endpoint %d\n", i);
117
DEBUG("bEndpointAddress=%x, bmAttributes=%x\n",
118
endpoint->bEndpointAddress, endpoint->bmAttributes);
119
if ((endpoint->bEndpointAddress & USB_DIR_IN)
120
&& ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
121
USB_ENDPOINT_XFER_BULK)) {
122
ft1000dev->bulk_in_endpointAddr =
123
endpoint->bEndpointAddress;
124
DEBUG("ft1000_probe: in: %d\n",
125
endpoint->bEndpointAddress);
128
if (!(endpoint->bEndpointAddress & USB_DIR_IN)
129
&& ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
130
USB_ENDPOINT_XFER_BULK)) {
131
ft1000dev->bulk_out_endpointAddr =
132
endpoint->bEndpointAddress;
133
DEBUG("ft1000_probe: out: %d\n",
134
endpoint->bEndpointAddress);
138
DEBUG("bulk_in=%d, bulk_out=%d\n", ft1000dev->bulk_in_endpointAddr,
139
ft1000dev->bulk_out_endpointAddr);
141
ret = request_firmware(&dsp_fw, "ft3000.img", &dev->dev);
143
printk(KERN_ERR "Error request_firmware().\n");
147
size = max_t(uint, dsp_fw->size, 4096);
148
pFileStart = kmalloc(size, GFP_KERNEL);
151
release_firmware(dsp_fw);
156
memcpy(pFileStart, dsp_fw->data, dsp_fw->size);
157
FileLength = dsp_fw->size;
158
release_firmware(dsp_fw);
160
DEBUG("ft1000_probe: start downloading dsp image...\n");
162
ret = init_ft1000_netdev(ft1000dev);
166
pft1000info = netdev_priv(ft1000dev->net);
168
DEBUG("In probe: pft1000info=%p\n", pft1000info);
169
ret = dsp_reload(ft1000dev);
171
printk(KERN_ERR "Problem with DSP image loading\n");
175
gPollingfailed = FALSE;
176
pft1000info->pPollThread =
177
kthread_run(ft1000_poll_thread, ft1000dev, "ft1000_poll");
179
if (IS_ERR(pft1000info->pPollThread)) {
180
ret = PTR_ERR(pft1000info->pPollThread);
186
while (!pft1000info->CardReady) {
187
if (gPollingfailed) {
192
DEBUG("ft1000_probe::Waiting for Card Ready\n");
195
DEBUG("ft1000_probe::Card Ready!!!! Registering network device\n");
197
ret = reg_ft1000_netdev(ft1000dev, interface);
201
ret = ft1000_init_proc(ft1000dev->net);
205
pft1000info->NetDevRegDone = 1;
210
unregister_netdev(ft1000dev->net);
211
free_netdev(ft1000dev->net);
213
kthread_stop(pft1000info->pPollThread);
221
static void ft1000_disconnect(struct usb_interface *interface)
223
struct ft1000_info *pft1000info;
225
DEBUG("ft1000_disconnect is called\n");
227
pft1000info = (struct ft1000_info *) usb_get_intfdata(interface);
228
DEBUG("In disconnect pft1000info=%p\n", pft1000info);
231
ft1000_cleanup_proc(pft1000info);
232
if (pft1000info->pPollThread)
233
kthread_stop(pft1000info->pPollThread);
235
DEBUG("ft1000_disconnect: threads are terminated\n");
237
if (pft1000info->pFt1000Dev->net) {
238
DEBUG("ft1000_disconnect: destroy char driver\n");
239
ft1000_destroy_dev(pft1000info->pFt1000Dev->net);
240
unregister_netdev(pft1000info->pFt1000Dev->net);
242
("ft1000_disconnect: network device unregisterd\n");
243
free_netdev(pft1000info->pFt1000Dev->net);
247
usb_free_urb(pft1000info->pFt1000Dev->rx_urb);
248
usb_free_urb(pft1000info->pFt1000Dev->tx_urb);
250
DEBUG("ft1000_disconnect: urb freed\n");
252
kfree(pft1000info->pFt1000Dev);
259
static struct usb_driver ft1000_usb_driver = {
261
.probe = ft1000_probe,
262
.disconnect = ft1000_disconnect,
263
.id_table = id_table,
266
static int __init usb_ft1000_init(void)
270
DEBUG("Initialize and register the driver\n");
272
ret = usb_register(&ft1000_usb_driver);
274
err("usb_register failed. Error number %d", ret);
279
static void __exit usb_ft1000_exit(void)
281
DEBUG("Deregister the driver\n");
282
usb_deregister(&ft1000_usb_driver);
285
module_init(usb_ft1000_init);
286
module_exit(usb_ft1000_exit);