.. | .. |
---|
76 | 76 | int dlc; |
---|
77 | 77 | }; |
---|
78 | 78 | |
---|
| 79 | +struct kvaser_usb_busparams { |
---|
| 80 | + __le32 bitrate; |
---|
| 81 | + u8 tseg1; |
---|
| 82 | + u8 tseg2; |
---|
| 83 | + u8 sjw; |
---|
| 84 | + u8 nsamples; |
---|
| 85 | +} __packed; |
---|
| 86 | + |
---|
79 | 87 | struct kvaser_usb { |
---|
80 | 88 | struct usb_device *udev; |
---|
81 | 89 | struct usb_interface *intf; |
---|
.. | .. |
---|
104 | 112 | struct can_priv can; |
---|
105 | 113 | struct can_berr_counter bec; |
---|
106 | 114 | |
---|
| 115 | + /* subdriver-specific data */ |
---|
| 116 | + void *sub_priv; |
---|
| 117 | + |
---|
107 | 118 | struct kvaser_usb *dev; |
---|
108 | 119 | struct net_device *netdev; |
---|
109 | 120 | int channel; |
---|
110 | 121 | |
---|
111 | | - struct completion start_comp, stop_comp, flush_comp; |
---|
| 122 | + struct completion start_comp, stop_comp, flush_comp, |
---|
| 123 | + get_busparams_comp; |
---|
112 | 124 | struct usb_anchor tx_submitted; |
---|
| 125 | + |
---|
| 126 | + struct kvaser_usb_busparams busparams_nominal, busparams_data; |
---|
113 | 127 | |
---|
114 | 128 | spinlock_t tx_contexts_lock; /* lock for active_tx_contexts */ |
---|
115 | 129 | int active_tx_contexts; |
---|
.. | .. |
---|
120 | 134 | * struct kvaser_usb_dev_ops - Device specific functions |
---|
121 | 135 | * @dev_set_mode: used for can.do_set_mode |
---|
122 | 136 | * @dev_set_bittiming: used for can.do_set_bittiming |
---|
| 137 | + * @dev_get_busparams: readback arbitration busparams |
---|
123 | 138 | * @dev_set_data_bittiming: used for can.do_set_data_bittiming |
---|
| 139 | + * @dev_get_data_busparams: readback data busparams |
---|
124 | 140 | * @dev_get_berr_counter: used for can.do_get_berr_counter |
---|
125 | 141 | * |
---|
126 | 142 | * @dev_setup_endpoints: setup USB in and out endpoints |
---|
127 | 143 | * @dev_init_card: initialize card |
---|
| 144 | + * @dev_init_channel: initialize channel |
---|
| 145 | + * @dev_remove_channel: uninitialize channel |
---|
128 | 146 | * @dev_get_software_info: get software info |
---|
129 | 147 | * @dev_get_software_details: get software details |
---|
130 | 148 | * @dev_get_card_info: get card info |
---|
.. | .. |
---|
140 | 158 | */ |
---|
141 | 159 | struct kvaser_usb_dev_ops { |
---|
142 | 160 | int (*dev_set_mode)(struct net_device *netdev, enum can_mode mode); |
---|
143 | | - int (*dev_set_bittiming)(struct net_device *netdev); |
---|
144 | | - int (*dev_set_data_bittiming)(struct net_device *netdev); |
---|
| 161 | + int (*dev_set_bittiming)(const struct net_device *netdev, |
---|
| 162 | + const struct kvaser_usb_busparams *busparams); |
---|
| 163 | + int (*dev_get_busparams)(struct kvaser_usb_net_priv *priv); |
---|
| 164 | + int (*dev_set_data_bittiming)(const struct net_device *netdev, |
---|
| 165 | + const struct kvaser_usb_busparams *busparams); |
---|
| 166 | + int (*dev_get_data_busparams)(struct kvaser_usb_net_priv *priv); |
---|
145 | 167 | int (*dev_get_berr_counter)(const struct net_device *netdev, |
---|
146 | 168 | struct can_berr_counter *bec); |
---|
147 | 169 | int (*dev_setup_endpoints)(struct kvaser_usb *dev); |
---|
148 | 170 | int (*dev_init_card)(struct kvaser_usb *dev); |
---|
| 171 | + int (*dev_init_channel)(struct kvaser_usb_net_priv *priv); |
---|
| 172 | + void (*dev_remove_channel)(struct kvaser_usb_net_priv *priv); |
---|
149 | 173 | int (*dev_get_software_info)(struct kvaser_usb *dev); |
---|
150 | 174 | int (*dev_get_software_details)(struct kvaser_usb *dev); |
---|
151 | 175 | int (*dev_get_card_info)(struct kvaser_usb *dev); |
---|