1 // SPDX-License-Identifier: GPL-2.0
3 * usb.c - Hardware dependent module for USB
5 * Copyright (C) 2013-2015 Microchip Technology Germany II GmbH & Co. KG
8 #include <linux/module.h>
10 #include <linux/usb.h>
11 #include <linux/slab.h>
12 #include <linux/init.h>
13 #include <linux/cdev.h>
14 #include <linux/device.h>
15 #include <linux/list.h>
16 #include <linux/completion.h>
17 #include <linux/mutex.h>
18 #include <linux/spinlock.h>
19 #include <linux/interrupt.h>
20 #include <linux/workqueue.h>
21 #include <linux/sysfs.h>
22 #include <linux/dma-mapping.h>
23 #include <linux/etherdevice.h>
24 #include <linux/uaccess.h>
25 #include <linux/most.h>
28 #define NO_ISOCHRONOUS_URB 0
29 #define AV_PACKETS_PER_XACT 2
30 #define BUF_CHAIN_SIZE 0xFFFF
31 #define MAX_NUM_ENDPOINTS 30
32 #define MAX_SUFFIX_LEN 10
33 #define MAX_STRING_LEN 80
34 #define MAX_BUF_SIZE 0xFFFF
36 #define USB_VENDOR_ID_SMSC 0x0424 /* VID: SMSC */
37 #define USB_DEV_ID_BRDG 0xC001 /* PID: USB Bridge */
38 #define USB_DEV_ID_OS81118 0xCF18 /* PID: USB OS81118 */
39 #define USB_DEV_ID_OS81119 0xCF19 /* PID: USB OS81119 */
40 #define USB_DEV_ID_OS81210 0xCF30 /* PID: USB OS81210 */
42 #define DRCI_REG_NI_STATE 0x0100
43 #define DRCI_REG_PACKET_BW 0x0101
44 #define DRCI_REG_NODE_ADDR 0x0102
45 #define DRCI_REG_NODE_POS 0x0103
46 #define DRCI_REG_MEP_FILTER 0x0140
47 #define DRCI_REG_HASH_TBL0 0x0141
48 #define DRCI_REG_HASH_TBL1 0x0142
49 #define DRCI_REG_HASH_TBL2 0x0143
50 #define DRCI_REG_HASH_TBL3 0x0144
51 #define DRCI_REG_HW_ADDR_HI 0x0145
52 #define DRCI_REG_HW_ADDR_MI 0x0146
53 #define DRCI_REG_HW_ADDR_LO 0x0147
54 #define DRCI_REG_BASE 0x1100
55 #define DRCI_COMMAND 0x02
56 #define DRCI_READ_REQ 0xA0
57 #define DRCI_WRITE_REQ 0xA1
60 * struct most_dci_obj - Direct Communication Interface
61 * @kobj:position in sysfs
62 * @usb_device: pointer to the usb device
63 * @reg_addr: register address for arbitrary DCI access
67 struct usb_device
*usb_device
;
71 #define to_dci_obj(p) container_of(p, struct most_dci_obj, dev)
75 struct clear_hold_work
{
76 struct work_struct ws
;
77 struct most_dev
*mdev
;
82 #define to_clear_hold_work(w) container_of(w, struct clear_hold_work, ws)
85 * struct most_dev - holds all usb interface specific stuff
86 * @usb_device: pointer to usb device
87 * @iface: hardware interface
88 * @cap: channel capabilities
89 * @conf: channel configuration
90 * @dci: direct communication interface of hardware
91 * @ep_address: endpoint address table
92 * @description: device description
93 * @suffix: suffix for channel name
94 * @channel_lock: synchronize channel access
95 * @padding_active: indicates channel uses padding
96 * @is_channel_healthy: health status table of each channel
97 * @busy_urbs: list of anchored items
98 * @io_mutex: synchronize I/O with disconnect
99 * @link_stat_timer: timer for link status reports
100 * @poll_work_obj: work for polling link status
104 struct usb_device
*usb_device
;
105 struct most_interface iface
;
106 struct most_channel_capability
*cap
;
107 struct most_channel_config
*conf
;
108 struct most_dci_obj
*dci
;
110 char description
[MAX_STRING_LEN
];
111 char suffix
[MAX_NUM_ENDPOINTS
][MAX_SUFFIX_LEN
];
112 spinlock_t channel_lock
[MAX_NUM_ENDPOINTS
]; /* sync channel access */
113 bool padding_active
[MAX_NUM_ENDPOINTS
];
114 bool is_channel_healthy
[MAX_NUM_ENDPOINTS
];
115 struct clear_hold_work clear_work
[MAX_NUM_ENDPOINTS
];
116 struct usb_anchor
*busy_urbs
;
117 struct mutex io_mutex
;
118 struct timer_list link_stat_timer
;
119 struct work_struct poll_work_obj
;
120 void (*on_netinfo
)(struct most_interface
*most_iface
,
121 unsigned char link_state
, unsigned char *addrs
);
124 #define to_mdev(d) container_of(d, struct most_dev, iface)
125 #define to_mdev_from_dev(d) container_of(d, struct most_dev, dev)
126 #define to_mdev_from_work(w) container_of(w, struct most_dev, poll_work_obj)
128 static void wq_clear_halt(struct work_struct
*wq_obj
);
129 static void wq_netinfo(struct work_struct
*wq_obj
);
132 * drci_rd_reg - read a DCI register
134 * @reg: register address
135 * @buf: buffer to store data
137 * This is reads data from INIC's direct register communication interface
139 static inline int drci_rd_reg(struct usb_device
*dev
, u16 reg
, u16
*buf
)
143 u8 req_type
= USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
145 dma_buf
= kzalloc(sizeof(*dma_buf
), GFP_KERNEL
);
149 retval
= usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0),
150 DRCI_READ_REQ
, req_type
,
152 reg
, dma_buf
, sizeof(*dma_buf
),
153 USB_CTRL_GET_TIMEOUT
);
154 *buf
= le16_to_cpu(*dma_buf
);
163 * drci_wr_reg - write a DCI register
165 * @reg: register address
166 * @data: data to write
168 * This is writes data to INIC's direct register communication interface
170 static inline int drci_wr_reg(struct usb_device
*dev
, u16 reg
, u16 data
)
172 return usb_control_msg(dev
,
173 usb_sndctrlpipe(dev
, 0),
175 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
180 USB_CTRL_SET_TIMEOUT
);
183 static inline int start_sync_ep(struct usb_device
*usb_dev
, u16 ep
)
185 return drci_wr_reg(usb_dev
, DRCI_REG_BASE
+ DRCI_COMMAND
+ ep
* 16, 1);
189 * get_stream_frame_size - calculate frame size of current configuration
190 * @dev: device structure
191 * @cfg: channel configuration
193 static unsigned int get_stream_frame_size(struct device
*dev
,
194 struct most_channel_config
*cfg
)
196 unsigned int frame_size
;
197 unsigned int sub_size
= cfg
->subbuffer_size
;
200 dev_warn(dev
, "Misconfig: Subbuffer size zero.\n");
203 switch (cfg
->data_type
) {
205 frame_size
= AV_PACKETS_PER_XACT
* sub_size
;
208 if (cfg
->packets_per_xact
== 0) {
209 dev_warn(dev
, "Misconfig: Packets per XACT zero\n");
211 } else if (cfg
->packets_per_xact
== 0xFF) {
212 frame_size
= (USB_MTU
/ sub_size
) * sub_size
;
214 frame_size
= cfg
->packets_per_xact
* sub_size
;
218 dev_warn(dev
, "Query frame size of non-streaming channel\n");
226 * hdm_poison_channel - mark buffers of this channel as invalid
227 * @iface: pointer to the interface
228 * @channel: channel ID
230 * This unlinks all URBs submitted to the HCD,
231 * calls the associated completion function of the core and removes
232 * them from the list.
234 * Returns 0 on success or error code otherwise.
236 static int hdm_poison_channel(struct most_interface
*iface
, int channel
)
238 struct most_dev
*mdev
= to_mdev(iface
);
240 spinlock_t
*lock
; /* temp. lock */
242 if (channel
< 0 || channel
>= iface
->num_channels
) {
243 dev_warn(&mdev
->usb_device
->dev
, "Channel ID out of range.\n");
247 lock
= mdev
->channel_lock
+ channel
;
248 spin_lock_irqsave(lock
, flags
);
249 mdev
->is_channel_healthy
[channel
] = false;
250 spin_unlock_irqrestore(lock
, flags
);
252 cancel_work_sync(&mdev
->clear_work
[channel
].ws
);
254 mutex_lock(&mdev
->io_mutex
);
255 usb_kill_anchored_urbs(&mdev
->busy_urbs
[channel
]);
256 if (mdev
->padding_active
[channel
])
257 mdev
->padding_active
[channel
] = false;
259 if (mdev
->conf
[channel
].data_type
== MOST_CH_ASYNC
) {
260 del_timer_sync(&mdev
->link_stat_timer
);
261 cancel_work_sync(&mdev
->poll_work_obj
);
263 mutex_unlock(&mdev
->io_mutex
);
268 * hdm_add_padding - add padding bytes
270 * @channel: channel ID
271 * @mbo: buffer object
273 * This inserts the INIC hardware specific padding bytes into a streaming
276 static int hdm_add_padding(struct most_dev
*mdev
, int channel
, struct mbo
*mbo
)
278 struct most_channel_config
*conf
= &mdev
->conf
[channel
];
279 unsigned int frame_size
= get_stream_frame_size(&mdev
->dev
, conf
);
280 unsigned int j
, num_frames
;
284 num_frames
= mbo
->buffer_length
/ frame_size
;
286 if (num_frames
< 1) {
287 dev_err(&mdev
->usb_device
->dev
,
288 "Missed minimal transfer unit.\n");
292 for (j
= num_frames
- 1; j
> 0; j
--)
293 memmove(mbo
->virt_address
+ j
* USB_MTU
,
294 mbo
->virt_address
+ j
* frame_size
,
296 mbo
->buffer_length
= num_frames
* USB_MTU
;
301 * hdm_remove_padding - remove padding bytes
303 * @channel: channel ID
304 * @mbo: buffer object
306 * This takes the INIC hardware specific padding bytes off a streaming
309 static int hdm_remove_padding(struct most_dev
*mdev
, int channel
,
312 struct most_channel_config
*const conf
= &mdev
->conf
[channel
];
313 unsigned int frame_size
= get_stream_frame_size(&mdev
->dev
, conf
);
314 unsigned int j
, num_frames
;
318 num_frames
= mbo
->processed_length
/ USB_MTU
;
320 for (j
= 1; j
< num_frames
; j
++)
321 memmove(mbo
->virt_address
+ frame_size
* j
,
322 mbo
->virt_address
+ USB_MTU
* j
,
325 mbo
->processed_length
= frame_size
* num_frames
;
330 * hdm_write_completion - completion function for submitted Tx URBs
331 * @urb: the URB that has been completed
333 * This checks the status of the completed URB. In case the URB has been
334 * unlinked before, it is immediately freed. On any other error the MBO
335 * transfer flag is set. On success it frees allocated resources and calls
336 * the completion function.
338 * Context: interrupt!
340 static void hdm_write_completion(struct urb
*urb
)
342 struct mbo
*mbo
= urb
->context
;
343 struct most_dev
*mdev
= to_mdev(mbo
->ifp
);
344 unsigned int channel
= mbo
->hdm_channel_id
;
345 spinlock_t
*lock
= mdev
->channel_lock
+ channel
;
348 spin_lock_irqsave(lock
, flags
);
350 mbo
->processed_length
= 0;
351 mbo
->status
= MBO_E_INVAL
;
352 if (likely(mdev
->is_channel_healthy
[channel
])) {
353 switch (urb
->status
) {
356 mbo
->processed_length
= urb
->actual_length
;
357 mbo
->status
= MBO_SUCCESS
;
360 dev_warn(&mdev
->usb_device
->dev
,
361 "Broken pipe on ep%02x\n",
362 mdev
->ep_address
[channel
]);
363 mdev
->is_channel_healthy
[channel
] = false;
364 mdev
->clear_work
[channel
].pipe
= urb
->pipe
;
365 schedule_work(&mdev
->clear_work
[channel
].ws
);
369 mbo
->status
= MBO_E_CLOSE
;
374 spin_unlock_irqrestore(lock
, flags
);
376 if (likely(mbo
->complete
))
382 * hdm_read_completion - completion function for submitted Rx URBs
383 * @urb: the URB that has been completed
385 * This checks the status of the completed URB. In case the URB has been
386 * unlinked before it is immediately freed. On any other error the MBO transfer
387 * flag is set. On success it frees allocated resources, removes
388 * padding bytes -if necessary- and calls the completion function.
390 * Context: interrupt!
392 static void hdm_read_completion(struct urb
*urb
)
394 struct mbo
*mbo
= urb
->context
;
395 struct most_dev
*mdev
= to_mdev(mbo
->ifp
);
396 unsigned int channel
= mbo
->hdm_channel_id
;
397 struct device
*dev
= &mdev
->usb_device
->dev
;
398 spinlock_t
*lock
= mdev
->channel_lock
+ channel
;
401 spin_lock_irqsave(lock
, flags
);
403 mbo
->processed_length
= 0;
404 mbo
->status
= MBO_E_INVAL
;
405 if (likely(mdev
->is_channel_healthy
[channel
])) {
406 switch (urb
->status
) {
409 mbo
->processed_length
= urb
->actual_length
;
410 mbo
->status
= MBO_SUCCESS
;
411 if (mdev
->padding_active
[channel
] &&
412 hdm_remove_padding(mdev
, channel
, mbo
)) {
413 mbo
->processed_length
= 0;
414 mbo
->status
= MBO_E_INVAL
;
418 dev_warn(dev
, "Broken pipe on ep%02x\n",
419 mdev
->ep_address
[channel
]);
420 mdev
->is_channel_healthy
[channel
] = false;
421 mdev
->clear_work
[channel
].pipe
= urb
->pipe
;
422 schedule_work(&mdev
->clear_work
[channel
].ws
);
426 mbo
->status
= MBO_E_CLOSE
;
429 dev_warn(dev
, "Babble on ep%02x\n",
430 mdev
->ep_address
[channel
]);
435 spin_unlock_irqrestore(lock
, flags
);
437 if (likely(mbo
->complete
))
443 * hdm_enqueue - receive a buffer to be used for data transfer
444 * @iface: interface to enqueue to
445 * @channel: ID of the channel
446 * @mbo: pointer to the buffer object
448 * This allocates a new URB and fills it according to the channel
449 * that is being used for transmission of data. Before the URB is
450 * submitted it is stored in the private anchor list.
452 * Returns 0 on success. On any error the URB is freed and a error code
455 * Context: Could in _some_ cases be interrupt!
457 static int hdm_enqueue(struct most_interface
*iface
, int channel
,
460 struct most_dev
*mdev
= to_mdev(iface
);
461 struct most_channel_config
*conf
;
464 unsigned long length
;
469 if (iface
->num_channels
<= channel
|| channel
< 0)
472 urb
= usb_alloc_urb(NO_ISOCHRONOUS_URB
, GFP_KERNEL
);
476 conf
= &mdev
->conf
[channel
];
478 mutex_lock(&mdev
->io_mutex
);
479 if (!mdev
->usb_device
) {
484 if ((conf
->direction
& MOST_CH_TX
) && mdev
->padding_active
[channel
] &&
485 hdm_add_padding(mdev
, channel
, mbo
)) {
490 urb
->transfer_dma
= mbo
->bus_address
;
491 virt_address
= mbo
->virt_address
;
492 length
= mbo
->buffer_length
;
494 if (conf
->direction
& MOST_CH_TX
) {
495 usb_fill_bulk_urb(urb
, mdev
->usb_device
,
496 usb_sndbulkpipe(mdev
->usb_device
,
497 mdev
->ep_address
[channel
]),
500 hdm_write_completion
,
502 if (conf
->data_type
!= MOST_CH_ISOC
&&
503 conf
->data_type
!= MOST_CH_SYNC
)
504 urb
->transfer_flags
|= URB_ZERO_PACKET
;
506 usb_fill_bulk_urb(urb
, mdev
->usb_device
,
507 usb_rcvbulkpipe(mdev
->usb_device
,
508 mdev
->ep_address
[channel
]),
510 length
+ conf
->extra_len
,
514 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
516 usb_anchor_urb(urb
, &mdev
->busy_urbs
[channel
]);
518 retval
= usb_submit_urb(urb
, GFP_KERNEL
);
520 dev_err(&mdev
->usb_device
->dev
,
521 "URB submit failed with error %d.\n", retval
);
522 goto err_unanchor_urb
;
524 mutex_unlock(&mdev
->io_mutex
);
528 usb_unanchor_urb(urb
);
531 mutex_unlock(&mdev
->io_mutex
);
535 static void *hdm_dma_alloc(struct mbo
*mbo
, u32 size
)
537 struct most_dev
*mdev
= to_mdev(mbo
->ifp
);
539 return usb_alloc_coherent(mdev
->usb_device
, size
, GFP_KERNEL
,
543 static void hdm_dma_free(struct mbo
*mbo
, u32 size
)
545 struct most_dev
*mdev
= to_mdev(mbo
->ifp
);
547 usb_free_coherent(mdev
->usb_device
, size
, mbo
->virt_address
,
552 * hdm_configure_channel - receive channel configuration from core
554 * @channel: channel ID
555 * @conf: structure that holds the configuration information
557 * The attached network interface controller (NIC) supports a padding mode
558 * to avoid short packets on USB, hence increasing the performance due to a
559 * lower interrupt load. This mode is default for synchronous data and can
560 * be switched on for isochronous data. In case padding is active the
561 * driver needs to know the frame size of the payload in order to calculate
562 * the number of bytes it needs to pad when transmitting or to cut off when
566 static int hdm_configure_channel(struct most_interface
*iface
, int channel
,
567 struct most_channel_config
*conf
)
569 unsigned int num_frames
;
570 unsigned int frame_size
;
571 struct most_dev
*mdev
= to_mdev(iface
);
572 struct device
*dev
= &mdev
->usb_device
->dev
;
575 dev_err(dev
, "Bad config pointer.\n");
578 if (channel
< 0 || channel
>= iface
->num_channels
) {
579 dev_err(dev
, "Channel ID out of range.\n");
583 mdev
->is_channel_healthy
[channel
] = true;
584 mdev
->clear_work
[channel
].channel
= channel
;
585 mdev
->clear_work
[channel
].mdev
= mdev
;
586 INIT_WORK(&mdev
->clear_work
[channel
].ws
, wq_clear_halt
);
588 if (!conf
->num_buffers
|| !conf
->buffer_size
) {
589 dev_err(dev
, "Misconfig: buffer size or #buffers zero.\n");
593 if (conf
->data_type
!= MOST_CH_SYNC
&&
594 !(conf
->data_type
== MOST_CH_ISOC
&&
595 conf
->packets_per_xact
!= 0xFF)) {
596 mdev
->padding_active
[channel
] = false;
598 * Since the NIC's padding mode is not going to be
599 * used, we can skip the frame size calculations and
600 * move directly on to exit.
605 mdev
->padding_active
[channel
] = true;
607 frame_size
= get_stream_frame_size(&mdev
->dev
, conf
);
608 if (frame_size
== 0 || frame_size
> USB_MTU
) {
609 dev_warn(dev
, "Misconfig: frame size wrong\n");
613 num_frames
= conf
->buffer_size
/ frame_size
;
615 if (conf
->buffer_size
% frame_size
) {
616 u16 old_size
= conf
->buffer_size
;
618 conf
->buffer_size
= num_frames
* frame_size
;
619 dev_warn(dev
, "%s: fixed buffer size (%d -> %d)\n",
620 mdev
->suffix
[channel
], old_size
, conf
->buffer_size
);
623 /* calculate extra length to comply w/ HW padding */
624 conf
->extra_len
= num_frames
* (USB_MTU
- frame_size
);
627 mdev
->conf
[channel
] = *conf
;
628 if (conf
->data_type
== MOST_CH_ASYNC
) {
629 u16 ep
= mdev
->ep_address
[channel
];
631 if (start_sync_ep(mdev
->usb_device
, ep
) < 0)
632 dev_warn(dev
, "sync for ep%02x failed", ep
);
638 * hdm_request_netinfo - request network information
639 * @iface: pointer to interface
640 * @channel: channel ID
642 * This is used as trigger to set up the link status timer that
643 * polls for the NI state of the INIC every 2 seconds.
646 static void hdm_request_netinfo(struct most_interface
*iface
, int channel
,
647 void (*on_netinfo
)(struct most_interface
*,
651 struct most_dev
*mdev
= to_mdev(iface
);
653 mdev
->on_netinfo
= on_netinfo
;
657 mdev
->link_stat_timer
.expires
= jiffies
+ HZ
;
658 mod_timer(&mdev
->link_stat_timer
, mdev
->link_stat_timer
.expires
);
662 * link_stat_timer_handler - schedule work obtaining mac address and link status
663 * @t: pointer to timer_list which holds a pointer to the USB device instance
665 * The handler runs in interrupt context. That's why we need to defer the
666 * tasks to a work queue.
668 static void link_stat_timer_handler(struct timer_list
*t
)
670 struct most_dev
*mdev
= from_timer(mdev
, t
, link_stat_timer
);
672 schedule_work(&mdev
->poll_work_obj
);
673 mdev
->link_stat_timer
.expires
= jiffies
+ (2 * HZ
);
674 add_timer(&mdev
->link_stat_timer
);
678 * wq_netinfo - work queue function to deliver latest networking information
679 * @wq_obj: object that holds data for our deferred work to do
681 * This retrieves the network interface status of the USB INIC
683 static void wq_netinfo(struct work_struct
*wq_obj
)
685 struct most_dev
*mdev
= to_mdev_from_work(wq_obj
);
686 struct usb_device
*usb_device
= mdev
->usb_device
;
687 struct device
*dev
= &usb_device
->dev
;
688 u16 hi
, mi
, lo
, link
;
691 if (drci_rd_reg(usb_device
, DRCI_REG_HW_ADDR_HI
, &hi
)) {
692 dev_err(dev
, "Vendor request 'hw_addr_hi' failed\n");
696 if (drci_rd_reg(usb_device
, DRCI_REG_HW_ADDR_MI
, &mi
)) {
697 dev_err(dev
, "Vendor request 'hw_addr_mid' failed\n");
701 if (drci_rd_reg(usb_device
, DRCI_REG_HW_ADDR_LO
, &lo
)) {
702 dev_err(dev
, "Vendor request 'hw_addr_low' failed\n");
706 if (drci_rd_reg(usb_device
, DRCI_REG_NI_STATE
, &link
)) {
707 dev_err(dev
, "Vendor request 'link status' failed\n");
711 hw_addr
[0] = hi
>> 8;
713 hw_addr
[2] = mi
>> 8;
715 hw_addr
[4] = lo
>> 8;
718 if (mdev
->on_netinfo
)
719 mdev
->on_netinfo(&mdev
->iface
, link
, hw_addr
);
723 * wq_clear_halt - work queue function
724 * @wq_obj: work_struct object to execute
726 * This sends a clear_halt to the given USB pipe.
728 static void wq_clear_halt(struct work_struct
*wq_obj
)
730 struct clear_hold_work
*clear_work
= to_clear_hold_work(wq_obj
);
731 struct most_dev
*mdev
= clear_work
->mdev
;
732 unsigned int channel
= clear_work
->channel
;
733 int pipe
= clear_work
->pipe
;
737 mutex_lock(&mdev
->io_mutex
);
738 most_stop_enqueue(&mdev
->iface
, channel
);
739 usb_kill_anchored_urbs(&mdev
->busy_urbs
[channel
]);
740 if (usb_clear_halt(mdev
->usb_device
, pipe
))
741 dev_warn(&mdev
->usb_device
->dev
, "Failed to reset endpoint.\n");
743 /* If the functional Stall condition has been set on an
744 * asynchronous rx channel, we need to clear the tx channel
745 * too, since the hardware runs its clean-up sequence on both
746 * channels, as they are physically one on the network.
748 * The USB interface that exposes the asynchronous channels
749 * contains always two endpoints, and two only.
751 if (mdev
->conf
[channel
].data_type
== MOST_CH_ASYNC
&&
752 mdev
->conf
[channel
].direction
== MOST_CH_RX
) {
757 snd_pipe
= usb_sndbulkpipe(mdev
->usb_device
,
758 mdev
->ep_address
[peer
]);
759 usb_clear_halt(mdev
->usb_device
, snd_pipe
);
761 mdev
->is_channel_healthy
[channel
] = true;
762 most_resume_enqueue(&mdev
->iface
, channel
);
763 mutex_unlock(&mdev
->io_mutex
);
767 * hdm_usb_fops - file operation table for USB driver
769 static const struct file_operations hdm_usb_fops
= {
770 .owner
= THIS_MODULE
,
774 * usb_device_id - ID table for HCD device probing
776 static const struct usb_device_id usbid
[] = {
777 { USB_DEVICE(USB_VENDOR_ID_SMSC
, USB_DEV_ID_BRDG
), },
778 { USB_DEVICE(USB_VENDOR_ID_SMSC
, USB_DEV_ID_OS81118
), },
779 { USB_DEVICE(USB_VENDOR_ID_SMSC
, USB_DEV_ID_OS81119
), },
780 { USB_DEVICE(USB_VENDOR_ID_SMSC
, USB_DEV_ID_OS81210
), },
781 { } /* Terminating entry */
789 static const struct regs ro_regs
[] = {
790 { "ni_state", DRCI_REG_NI_STATE
},
791 { "packet_bandwidth", DRCI_REG_PACKET_BW
},
792 { "node_address", DRCI_REG_NODE_ADDR
},
793 { "node_position", DRCI_REG_NODE_POS
},
796 static const struct regs rw_regs
[] = {
797 { "mep_filter", DRCI_REG_MEP_FILTER
},
798 { "mep_hash0", DRCI_REG_HASH_TBL0
},
799 { "mep_hash1", DRCI_REG_HASH_TBL1
},
800 { "mep_hash2", DRCI_REG_HASH_TBL2
},
801 { "mep_hash3", DRCI_REG_HASH_TBL3
},
802 { "mep_eui48_hi", DRCI_REG_HW_ADDR_HI
},
803 { "mep_eui48_mi", DRCI_REG_HW_ADDR_MI
},
804 { "mep_eui48_lo", DRCI_REG_HW_ADDR_LO
},
807 static int get_stat_reg_addr(const struct regs
*regs
, int size
,
808 const char *name
, u16
*reg_addr
)
812 for (i
= 0; i
< size
; i
++) {
813 if (sysfs_streq(name
, regs
[i
].name
)) {
814 *reg_addr
= regs
[i
].reg
;
821 #define get_static_reg_addr(regs, name, reg_addr) \
822 get_stat_reg_addr(regs, ARRAY_SIZE(regs), name, reg_addr)
824 static ssize_t
value_show(struct device
*dev
, struct device_attribute
*attr
,
827 const char *name
= attr
->attr
.name
;
828 struct most_dci_obj
*dci_obj
= to_dci_obj(dev
);
833 if (sysfs_streq(name
, "arb_address"))
834 return sysfs_emit(buf
, "%04x\n", dci_obj
->reg_addr
);
836 if (sysfs_streq(name
, "arb_value"))
837 reg_addr
= dci_obj
->reg_addr
;
838 else if (get_static_reg_addr(ro_regs
, name
, ®_addr
) &&
839 get_static_reg_addr(rw_regs
, name
, ®_addr
))
842 err
= drci_rd_reg(dci_obj
->usb_device
, reg_addr
, &val
);
846 return sysfs_emit(buf
, "%04x\n", val
);
849 static ssize_t
value_store(struct device
*dev
, struct device_attribute
*attr
,
850 const char *buf
, size_t count
)
854 const char *name
= attr
->attr
.name
;
855 struct most_dci_obj
*dci_obj
= to_dci_obj(dev
);
856 struct usb_device
*usb_dev
= dci_obj
->usb_device
;
859 err
= kstrtou16(buf
, 16, &val
);
863 if (sysfs_streq(name
, "arb_address")) {
864 dci_obj
->reg_addr
= val
;
868 if (sysfs_streq(name
, "arb_value"))
869 err
= drci_wr_reg(usb_dev
, dci_obj
->reg_addr
, val
);
870 else if (sysfs_streq(name
, "sync_ep"))
871 err
= start_sync_ep(usb_dev
, val
);
872 else if (!get_static_reg_addr(rw_regs
, name
, ®_addr
))
873 err
= drci_wr_reg(usb_dev
, reg_addr
, val
);
883 static DEVICE_ATTR(ni_state
, 0444, value_show
, NULL
);
884 static DEVICE_ATTR(packet_bandwidth
, 0444, value_show
, NULL
);
885 static DEVICE_ATTR(node_address
, 0444, value_show
, NULL
);
886 static DEVICE_ATTR(node_position
, 0444, value_show
, NULL
);
887 static DEVICE_ATTR(sync_ep
, 0200, NULL
, value_store
);
888 static DEVICE_ATTR(mep_filter
, 0644, value_show
, value_store
);
889 static DEVICE_ATTR(mep_hash0
, 0644, value_show
, value_store
);
890 static DEVICE_ATTR(mep_hash1
, 0644, value_show
, value_store
);
891 static DEVICE_ATTR(mep_hash2
, 0644, value_show
, value_store
);
892 static DEVICE_ATTR(mep_hash3
, 0644, value_show
, value_store
);
893 static DEVICE_ATTR(mep_eui48_hi
, 0644, value_show
, value_store
);
894 static DEVICE_ATTR(mep_eui48_mi
, 0644, value_show
, value_store
);
895 static DEVICE_ATTR(mep_eui48_lo
, 0644, value_show
, value_store
);
896 static DEVICE_ATTR(arb_address
, 0644, value_show
, value_store
);
897 static DEVICE_ATTR(arb_value
, 0644, value_show
, value_store
);
899 static struct attribute
*dci_attrs
[] = {
900 &dev_attr_ni_state
.attr
,
901 &dev_attr_packet_bandwidth
.attr
,
902 &dev_attr_node_address
.attr
,
903 &dev_attr_node_position
.attr
,
904 &dev_attr_sync_ep
.attr
,
905 &dev_attr_mep_filter
.attr
,
906 &dev_attr_mep_hash0
.attr
,
907 &dev_attr_mep_hash1
.attr
,
908 &dev_attr_mep_hash2
.attr
,
909 &dev_attr_mep_hash3
.attr
,
910 &dev_attr_mep_eui48_hi
.attr
,
911 &dev_attr_mep_eui48_mi
.attr
,
912 &dev_attr_mep_eui48_lo
.attr
,
913 &dev_attr_arb_address
.attr
,
914 &dev_attr_arb_value
.attr
,
918 ATTRIBUTE_GROUPS(dci
);
920 static void release_dci(struct device
*dev
)
922 struct most_dci_obj
*dci
= to_dci_obj(dev
);
924 put_device(dev
->parent
);
928 static void release_mdev(struct device
*dev
)
930 struct most_dev
*mdev
= to_mdev_from_dev(dev
);
935 * hdm_probe - probe function of USB device driver
936 * @interface: Interface of the attached USB device
937 * @id: Pointer to the USB ID table.
939 * This allocates and initializes the device instance, adds the new
940 * entry to the internal list, scans the USB descriptors and registers
941 * the interface with the core.
942 * Additionally, the DCI objects are created and the hardware is sync'd.
944 * Return 0 on success. In case of an error a negative number is returned.
947 hdm_probe(struct usb_interface
*interface
, const struct usb_device_id
*id
)
949 struct usb_host_interface
*usb_iface_desc
= interface
->cur_altsetting
;
950 struct usb_device
*usb_dev
= interface_to_usbdev(interface
);
951 struct device
*dev
= &usb_dev
->dev
;
952 struct most_dev
*mdev
;
954 unsigned int num_endpoints
;
955 struct most_channel_capability
*tmp_cap
;
956 struct usb_endpoint_descriptor
*ep_desc
;
959 mdev
= kzalloc(sizeof(*mdev
), GFP_KERNEL
);
963 usb_set_intfdata(interface
, mdev
);
964 num_endpoints
= usb_iface_desc
->desc
.bNumEndpoints
;
965 if (num_endpoints
> MAX_NUM_ENDPOINTS
) {
969 mutex_init(&mdev
->io_mutex
);
970 INIT_WORK(&mdev
->poll_work_obj
, wq_netinfo
);
971 timer_setup(&mdev
->link_stat_timer
, link_stat_timer_handler
, 0);
973 mdev
->usb_device
= usb_dev
;
974 mdev
->link_stat_timer
.expires
= jiffies
+ (2 * HZ
);
976 mdev
->iface
.mod
= hdm_usb_fops
.owner
;
977 mdev
->iface
.dev
= &mdev
->dev
;
978 mdev
->iface
.driver_dev
= &interface
->dev
;
979 mdev
->iface
.interface
= ITYPE_USB
;
980 mdev
->iface
.configure
= hdm_configure_channel
;
981 mdev
->iface
.request_netinfo
= hdm_request_netinfo
;
982 mdev
->iface
.enqueue
= hdm_enqueue
;
983 mdev
->iface
.poison_channel
= hdm_poison_channel
;
984 mdev
->iface
.dma_alloc
= hdm_dma_alloc
;
985 mdev
->iface
.dma_free
= hdm_dma_free
;
986 mdev
->iface
.description
= mdev
->description
;
987 mdev
->iface
.num_channels
= num_endpoints
;
989 snprintf(mdev
->description
, sizeof(mdev
->description
),
991 usb_dev
->bus
->busnum
,
993 usb_dev
->config
->desc
.bConfigurationValue
,
994 usb_iface_desc
->desc
.bInterfaceNumber
);
996 mdev
->dev
.init_name
= mdev
->description
;
997 mdev
->dev
.parent
= &interface
->dev
;
998 mdev
->dev
.release
= release_mdev
;
999 mdev
->conf
= kcalloc(num_endpoints
, sizeof(*mdev
->conf
), GFP_KERNEL
);
1003 mdev
->cap
= kcalloc(num_endpoints
, sizeof(*mdev
->cap
), GFP_KERNEL
);
1007 mdev
->iface
.channel_vector
= mdev
->cap
;
1009 kcalloc(num_endpoints
, sizeof(*mdev
->ep_address
), GFP_KERNEL
);
1010 if (!mdev
->ep_address
)
1014 kcalloc(num_endpoints
, sizeof(*mdev
->busy_urbs
), GFP_KERNEL
);
1015 if (!mdev
->busy_urbs
)
1016 goto err_free_ep_address
;
1018 tmp_cap
= mdev
->cap
;
1019 for (i
= 0; i
< num_endpoints
; i
++) {
1020 ep_desc
= &usb_iface_desc
->endpoint
[i
].desc
;
1021 mdev
->ep_address
[i
] = ep_desc
->bEndpointAddress
;
1022 mdev
->padding_active
[i
] = false;
1023 mdev
->is_channel_healthy
[i
] = true;
1025 snprintf(&mdev
->suffix
[i
][0], MAX_SUFFIX_LEN
, "ep%02x",
1026 mdev
->ep_address
[i
]);
1028 tmp_cap
->name_suffix
= &mdev
->suffix
[i
][0];
1029 tmp_cap
->buffer_size_packet
= MAX_BUF_SIZE
;
1030 tmp_cap
->buffer_size_streaming
= MAX_BUF_SIZE
;
1031 tmp_cap
->num_buffers_packet
= BUF_CHAIN_SIZE
;
1032 tmp_cap
->num_buffers_streaming
= BUF_CHAIN_SIZE
;
1033 tmp_cap
->data_type
= MOST_CH_CONTROL
| MOST_CH_ASYNC
|
1034 MOST_CH_ISOC
| MOST_CH_SYNC
;
1035 if (usb_endpoint_dir_in(ep_desc
))
1036 tmp_cap
->direction
= MOST_CH_RX
;
1038 tmp_cap
->direction
= MOST_CH_TX
;
1040 init_usb_anchor(&mdev
->busy_urbs
[i
]);
1041 spin_lock_init(&mdev
->channel_lock
[i
]);
1043 dev_dbg(dev
, "claimed gadget: Vendor=%4.4x ProdID=%4.4x Bus=%02x Device=%02x\n",
1044 le16_to_cpu(usb_dev
->descriptor
.idVendor
),
1045 le16_to_cpu(usb_dev
->descriptor
.idProduct
),
1046 usb_dev
->bus
->busnum
,
1049 dev_dbg(dev
, "device path: /sys/bus/usb/devices/%d-%s:%d.%d\n",
1050 usb_dev
->bus
->busnum
,
1052 usb_dev
->config
->desc
.bConfigurationValue
,
1053 usb_iface_desc
->desc
.bInterfaceNumber
);
1055 ret
= most_register_interface(&mdev
->iface
);
1057 goto err_free_busy_urbs
;
1059 mutex_lock(&mdev
->io_mutex
);
1060 if (le16_to_cpu(usb_dev
->descriptor
.idProduct
) == USB_DEV_ID_OS81118
||
1061 le16_to_cpu(usb_dev
->descriptor
.idProduct
) == USB_DEV_ID_OS81119
||
1062 le16_to_cpu(usb_dev
->descriptor
.idProduct
) == USB_DEV_ID_OS81210
) {
1063 mdev
->dci
= kzalloc(sizeof(*mdev
->dci
), GFP_KERNEL
);
1065 mutex_unlock(&mdev
->io_mutex
);
1066 most_deregister_interface(&mdev
->iface
);
1068 goto err_free_busy_urbs
;
1071 mdev
->dci
->dev
.init_name
= "dci";
1072 mdev
->dci
->dev
.parent
= get_device(mdev
->iface
.dev
);
1073 mdev
->dci
->dev
.groups
= dci_groups
;
1074 mdev
->dci
->dev
.release
= release_dci
;
1075 if (device_register(&mdev
->dci
->dev
)) {
1076 mutex_unlock(&mdev
->io_mutex
);
1077 most_deregister_interface(&mdev
->iface
);
1081 mdev
->dci
->usb_device
= mdev
->usb_device
;
1083 mutex_unlock(&mdev
->io_mutex
);
1086 put_device(&mdev
->dci
->dev
);
1088 kfree(mdev
->busy_urbs
);
1089 err_free_ep_address
:
1090 kfree(mdev
->ep_address
);
1096 put_device(&mdev
->dev
);
1101 * hdm_disconnect - disconnect function of USB device driver
1102 * @interface: Interface of the attached USB device
1104 * This deregisters the interface with the core, removes the kernel timer
1105 * and frees resources.
1107 * Context: hub kernel thread
1109 static void hdm_disconnect(struct usb_interface
*interface
)
1111 struct most_dev
*mdev
= usb_get_intfdata(interface
);
1113 mutex_lock(&mdev
->io_mutex
);
1114 usb_set_intfdata(interface
, NULL
);
1115 mdev
->usb_device
= NULL
;
1116 mutex_unlock(&mdev
->io_mutex
);
1118 del_timer_sync(&mdev
->link_stat_timer
);
1119 cancel_work_sync(&mdev
->poll_work_obj
);
1122 device_unregister(&mdev
->dci
->dev
);
1123 most_deregister_interface(&mdev
->iface
);
1125 kfree(mdev
->busy_urbs
);
1128 kfree(mdev
->ep_address
);
1129 put_device(&mdev
->dci
->dev
);
1130 put_device(&mdev
->dev
);
1133 static int hdm_suspend(struct usb_interface
*interface
, pm_message_t message
)
1135 struct most_dev
*mdev
= usb_get_intfdata(interface
);
1138 mutex_lock(&mdev
->io_mutex
);
1139 for (i
= 0; i
< mdev
->iface
.num_channels
; i
++) {
1140 most_stop_enqueue(&mdev
->iface
, i
);
1141 usb_kill_anchored_urbs(&mdev
->busy_urbs
[i
]);
1143 mutex_unlock(&mdev
->io_mutex
);
1147 static int hdm_resume(struct usb_interface
*interface
)
1149 struct most_dev
*mdev
= usb_get_intfdata(interface
);
1152 mutex_lock(&mdev
->io_mutex
);
1153 for (i
= 0; i
< mdev
->iface
.num_channels
; i
++)
1154 most_resume_enqueue(&mdev
->iface
, i
);
1155 mutex_unlock(&mdev
->io_mutex
);
1159 static struct usb_driver hdm_usb
= {
1163 .disconnect
= hdm_disconnect
,
1164 .resume
= hdm_resume
,
1165 .suspend
= hdm_suspend
,
1168 module_usb_driver(hdm_usb
);
1169 MODULE_LICENSE("GPL");
1170 MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>");
1171 MODULE_DESCRIPTION("HDM_4_USB");