diff options
Diffstat (limited to 'drivers/usb/serial/cyberjack.c')
| -rw-r--r-- | drivers/usb/serial/cyberjack.c | 112 |
1 files changed, 55 insertions, 57 deletions
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c index 8d9b045aa7e8..c164e2cf2752 100644 --- a/drivers/usb/serial/cyberjack.c +++ b/drivers/usb/serial/cyberjack.c | |||
| @@ -90,9 +90,6 @@ static struct usb_serial_driver cyberjack_device = { | |||
| 90 | .description = "Reiner SCT Cyberjack USB card reader", | 90 | .description = "Reiner SCT Cyberjack USB card reader", |
| 91 | .usb_driver = &cyberjack_driver, | 91 | .usb_driver = &cyberjack_driver, |
| 92 | .id_table = id_table, | 92 | .id_table = id_table, |
| 93 | .num_interrupt_in = 1, | ||
| 94 | .num_bulk_in = 1, | ||
| 95 | .num_bulk_out = 1, | ||
| 96 | .num_ports = 1, | 93 | .num_ports = 1, |
| 97 | .attach = cyberjack_startup, | 94 | .attach = cyberjack_startup, |
| 98 | .shutdown = cyberjack_shutdown, | 95 | .shutdown = cyberjack_shutdown, |
| @@ -119,7 +116,7 @@ static int cyberjack_startup (struct usb_serial *serial) | |||
| 119 | struct cyberjack_private *priv; | 116 | struct cyberjack_private *priv; |
| 120 | int i; | 117 | int i; |
| 121 | 118 | ||
| 122 | dbg("%s", __FUNCTION__); | 119 | dbg("%s", __func__); |
| 123 | 120 | ||
| 124 | /* allocate the private data structure */ | 121 | /* allocate the private data structure */ |
| 125 | priv = kmalloc(sizeof(struct cyberjack_private), GFP_KERNEL); | 122 | priv = kmalloc(sizeof(struct cyberjack_private), GFP_KERNEL); |
| @@ -142,7 +139,7 @@ static int cyberjack_startup (struct usb_serial *serial) | |||
| 142 | GFP_KERNEL); | 139 | GFP_KERNEL); |
| 143 | if (result) | 140 | if (result) |
| 144 | err(" usb_submit_urb(read int) failed"); | 141 | err(" usb_submit_urb(read int) failed"); |
| 145 | dbg("%s - usb_submit_urb(int urb)", __FUNCTION__); | 142 | dbg("%s - usb_submit_urb(int urb)", __func__); |
| 146 | } | 143 | } |
| 147 | 144 | ||
| 148 | return( 0 ); | 145 | return( 0 ); |
| @@ -152,9 +149,9 @@ static void cyberjack_shutdown (struct usb_serial *serial) | |||
| 152 | { | 149 | { |
| 153 | int i; | 150 | int i; |
| 154 | 151 | ||
| 155 | dbg("%s", __FUNCTION__); | 152 | dbg("%s", __func__); |
| 156 | 153 | ||
| 157 | for (i=0; i < serial->num_ports; ++i) { | 154 | for (i = 0; i < serial->num_ports; ++i) { |
| 158 | usb_kill_urb(serial->port[i]->interrupt_in_urb); | 155 | usb_kill_urb(serial->port[i]->interrupt_in_urb); |
| 159 | /* My special items, the standard routines free my urbs */ | 156 | /* My special items, the standard routines free my urbs */ |
| 160 | kfree(usb_get_serial_port_data(serial->port[i])); | 157 | kfree(usb_get_serial_port_data(serial->port[i])); |
| @@ -168,9 +165,9 @@ static int cyberjack_open (struct usb_serial_port *port, struct file *filp) | |||
| 168 | unsigned long flags; | 165 | unsigned long flags; |
| 169 | int result = 0; | 166 | int result = 0; |
| 170 | 167 | ||
| 171 | dbg("%s - port %d", __FUNCTION__, port->number); | 168 | dbg("%s - port %d", __func__, port->number); |
| 172 | 169 | ||
| 173 | dbg("%s - usb_clear_halt", __FUNCTION__ ); | 170 | dbg("%s - usb_clear_halt", __func__ ); |
| 174 | usb_clear_halt(port->serial->dev, port->write_urb->pipe); | 171 | usb_clear_halt(port->serial->dev, port->write_urb->pipe); |
| 175 | 172 | ||
| 176 | /* force low_latency on so that our tty_push actually forces | 173 | /* force low_latency on so that our tty_push actually forces |
| @@ -191,7 +188,7 @@ static int cyberjack_open (struct usb_serial_port *port, struct file *filp) | |||
| 191 | 188 | ||
| 192 | static void cyberjack_close (struct usb_serial_port *port, struct file *filp) | 189 | static void cyberjack_close (struct usb_serial_port *port, struct file *filp) |
| 193 | { | 190 | { |
| 194 | dbg("%s - port %d", __FUNCTION__, port->number); | 191 | dbg("%s - port %d", __func__, port->number); |
| 195 | 192 | ||
| 196 | if (port->serial->dev) { | 193 | if (port->serial->dev) { |
| 197 | /* shutdown any bulk reads that might be going on */ | 194 | /* shutdown any bulk reads that might be going on */ |
| @@ -208,17 +205,17 @@ static int cyberjack_write (struct usb_serial_port *port, const unsigned char *b | |||
| 208 | int result; | 205 | int result; |
| 209 | int wrexpected; | 206 | int wrexpected; |
| 210 | 207 | ||
| 211 | dbg("%s - port %d", __FUNCTION__, port->number); | 208 | dbg("%s - port %d", __func__, port->number); |
| 212 | 209 | ||
| 213 | if (count == 0) { | 210 | if (count == 0) { |
| 214 | dbg("%s - write request of 0 bytes", __FUNCTION__); | 211 | dbg("%s - write request of 0 bytes", __func__); |
| 215 | return (0); | 212 | return 0; |
| 216 | } | 213 | } |
| 217 | 214 | ||
| 218 | spin_lock_bh(&port->lock); | 215 | spin_lock_bh(&port->lock); |
| 219 | if (port->write_urb_busy) { | 216 | if (port->write_urb_busy) { |
| 220 | spin_unlock_bh(&port->lock); | 217 | spin_unlock_bh(&port->lock); |
| 221 | dbg("%s - already writing", __FUNCTION__); | 218 | dbg("%s - already writing", __func__); |
| 222 | return 0; | 219 | return 0; |
| 223 | } | 220 | } |
| 224 | port->write_urb_busy = 1; | 221 | port->write_urb_busy = 1; |
| @@ -226,24 +223,24 @@ static int cyberjack_write (struct usb_serial_port *port, const unsigned char *b | |||
| 226 | 223 | ||
| 227 | spin_lock_irqsave(&priv->lock, flags); | 224 | spin_lock_irqsave(&priv->lock, flags); |
| 228 | 225 | ||
| 229 | if( (count+priv->wrfilled)>sizeof(priv->wrbuf) ) { | 226 | if( (count+priv->wrfilled) > sizeof(priv->wrbuf) ) { |
| 230 | /* To much data for buffer. Reset buffer. */ | 227 | /* To much data for buffer. Reset buffer. */ |
| 231 | priv->wrfilled=0; | 228 | priv->wrfilled = 0; |
| 232 | spin_unlock_irqrestore(&priv->lock, flags); | ||
| 233 | port->write_urb_busy = 0; | 229 | port->write_urb_busy = 0; |
| 234 | return (0); | 230 | spin_unlock_irqrestore(&priv->lock, flags); |
| 231 | return 0; | ||
| 235 | } | 232 | } |
| 236 | 233 | ||
| 237 | /* Copy data */ | 234 | /* Copy data */ |
| 238 | memcpy (priv->wrbuf+priv->wrfilled, buf, count); | 235 | memcpy (priv->wrbuf+priv->wrfilled, buf, count); |
| 239 | 236 | ||
| 240 | usb_serial_debug_data(debug, &port->dev, __FUNCTION__, count, | 237 | usb_serial_debug_data(debug, &port->dev, __func__, count, |
| 241 | priv->wrbuf+priv->wrfilled); | 238 | priv->wrbuf+priv->wrfilled); |
| 242 | priv->wrfilled += count; | 239 | priv->wrfilled += count; |
| 243 | 240 | ||
| 244 | if( priv->wrfilled >= 3 ) { | 241 | if( priv->wrfilled >= 3 ) { |
| 245 | wrexpected = ((int)priv->wrbuf[2]<<8)+priv->wrbuf[1]+3; | 242 | wrexpected = ((int)priv->wrbuf[2]<<8)+priv->wrbuf[1]+3; |
| 246 | dbg("%s - expected data: %d", __FUNCTION__, wrexpected); | 243 | dbg("%s - expected data: %d", __func__, wrexpected); |
| 247 | } else { | 244 | } else { |
| 248 | wrexpected = sizeof(priv->wrbuf); | 245 | wrexpected = sizeof(priv->wrbuf); |
| 249 | } | 246 | } |
| @@ -252,7 +249,7 @@ static int cyberjack_write (struct usb_serial_port *port, const unsigned char *b | |||
| 252 | /* We have enough data to begin transmission */ | 249 | /* We have enough data to begin transmission */ |
| 253 | int length; | 250 | int length; |
| 254 | 251 | ||
| 255 | dbg("%s - transmitting data (frame 1)", __FUNCTION__); | 252 | dbg("%s - transmitting data (frame 1)", __func__); |
| 256 | length = (wrexpected > port->bulk_out_size) ? port->bulk_out_size : wrexpected; | 253 | length = (wrexpected > port->bulk_out_size) ? port->bulk_out_size : wrexpected; |
| 257 | 254 | ||
| 258 | memcpy (port->write_urb->transfer_buffer, priv->wrbuf, length ); | 255 | memcpy (port->write_urb->transfer_buffer, priv->wrbuf, length ); |
| @@ -270,23 +267,23 @@ static int cyberjack_write (struct usb_serial_port *port, const unsigned char *b | |||
| 270 | /* send the data out the bulk port */ | 267 | /* send the data out the bulk port */ |
| 271 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); | 268 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); |
| 272 | if (result) { | 269 | if (result) { |
| 273 | err("%s - failed submitting write urb, error %d", __FUNCTION__, result); | 270 | err("%s - failed submitting write urb, error %d", __func__, result); |
| 274 | /* Throw away data. No better idea what to do with it. */ | 271 | /* Throw away data. No better idea what to do with it. */ |
| 275 | priv->wrfilled=0; | 272 | priv->wrfilled = 0; |
| 276 | priv->wrsent=0; | 273 | priv->wrsent = 0; |
| 277 | spin_unlock_irqrestore(&priv->lock, flags); | 274 | spin_unlock_irqrestore(&priv->lock, flags); |
| 278 | port->write_urb_busy = 0; | 275 | port->write_urb_busy = 0; |
| 279 | return 0; | 276 | return 0; |
| 280 | } | 277 | } |
| 281 | 278 | ||
| 282 | dbg("%s - priv->wrsent=%d", __FUNCTION__,priv->wrsent); | 279 | dbg("%s - priv->wrsent=%d", __func__,priv->wrsent); |
| 283 | dbg("%s - priv->wrfilled=%d", __FUNCTION__,priv->wrfilled); | 280 | dbg("%s - priv->wrfilled=%d", __func__,priv->wrfilled); |
| 284 | 281 | ||
| 285 | if( priv->wrsent>=priv->wrfilled ) { | 282 | if( priv->wrsent>=priv->wrfilled ) { |
| 286 | dbg("%s - buffer cleaned", __FUNCTION__); | 283 | dbg("%s - buffer cleaned", __func__); |
| 287 | memset( priv->wrbuf, 0, sizeof(priv->wrbuf) ); | 284 | memset( priv->wrbuf, 0, sizeof(priv->wrbuf) ); |
| 288 | priv->wrfilled=0; | 285 | priv->wrfilled = 0; |
| 289 | priv->wrsent=0; | 286 | priv->wrsent = 0; |
| 290 | } | 287 | } |
| 291 | } | 288 | } |
| 292 | 289 | ||
| @@ -297,27 +294,28 @@ static int cyberjack_write (struct usb_serial_port *port, const unsigned char *b | |||
| 297 | 294 | ||
| 298 | static int cyberjack_write_room( struct usb_serial_port *port ) | 295 | static int cyberjack_write_room( struct usb_serial_port *port ) |
| 299 | { | 296 | { |
| 297 | /* FIXME: .... */ | ||
| 300 | return CYBERJACK_LOCAL_BUF_SIZE; | 298 | return CYBERJACK_LOCAL_BUF_SIZE; |
| 301 | } | 299 | } |
| 302 | 300 | ||
| 303 | static void cyberjack_read_int_callback( struct urb *urb ) | 301 | static void cyberjack_read_int_callback( struct urb *urb ) |
| 304 | { | 302 | { |
| 305 | struct usb_serial_port *port = (struct usb_serial_port *)urb->context; | 303 | struct usb_serial_port *port = urb->context; |
| 306 | struct cyberjack_private *priv = usb_get_serial_port_data(port); | 304 | struct cyberjack_private *priv = usb_get_serial_port_data(port); |
| 307 | unsigned char *data = urb->transfer_buffer; | 305 | unsigned char *data = urb->transfer_buffer; |
| 308 | int status = urb->status; | 306 | int status = urb->status; |
| 309 | int result; | 307 | int result; |
| 310 | 308 | ||
| 311 | dbg("%s - port %d", __FUNCTION__, port->number); | 309 | dbg("%s - port %d", __func__, port->number); |
| 312 | 310 | ||
| 313 | /* the urb might have been killed. */ | 311 | /* the urb might have been killed. */ |
| 314 | if (status) | 312 | if (status) |
| 315 | return; | 313 | return; |
| 316 | 314 | ||
| 317 | usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, data); | 315 | usb_serial_debug_data(debug, &port->dev, __func__, urb->actual_length, data); |
| 318 | 316 | ||
| 319 | /* React only to interrupts signaling a bulk_in transfer */ | 317 | /* React only to interrupts signaling a bulk_in transfer */ |
| 320 | if( (urb->actual_length==4) && (data[0]==0x01) ) { | 318 | if( (urb->actual_length == 4) && (data[0] == 0x01) ) { |
| 321 | short old_rdtodo; | 319 | short old_rdtodo; |
| 322 | 320 | ||
| 323 | /* This is a announcement of coming bulk_ins. */ | 321 | /* This is a announcement of coming bulk_ins. */ |
| @@ -336,7 +334,7 @@ static void cyberjack_read_int_callback( struct urb *urb ) | |||
| 336 | /* "+=" is probably more fault tollerant than "=" */ | 334 | /* "+=" is probably more fault tollerant than "=" */ |
| 337 | priv->rdtodo += size; | 335 | priv->rdtodo += size; |
| 338 | 336 | ||
| 339 | dbg("%s - rdtodo: %d", __FUNCTION__, priv->rdtodo); | 337 | dbg("%s - rdtodo: %d", __func__, priv->rdtodo); |
| 340 | 338 | ||
| 341 | spin_unlock(&priv->lock); | 339 | spin_unlock(&priv->lock); |
| 342 | 340 | ||
| @@ -344,8 +342,8 @@ static void cyberjack_read_int_callback( struct urb *urb ) | |||
| 344 | port->read_urb->dev = port->serial->dev; | 342 | port->read_urb->dev = port->serial->dev; |
| 345 | result = usb_submit_urb(port->read_urb, GFP_ATOMIC); | 343 | result = usb_submit_urb(port->read_urb, GFP_ATOMIC); |
| 346 | if( result ) | 344 | if( result ) |
| 347 | err("%s - failed resubmitting read urb, error %d", __FUNCTION__, result); | 345 | err("%s - failed resubmitting read urb, error %d", __func__, result); |
| 348 | dbg("%s - usb_submit_urb(read urb)", __FUNCTION__); | 346 | dbg("%s - usb_submit_urb(read urb)", __func__); |
| 349 | } | 347 | } |
| 350 | } | 348 | } |
| 351 | 349 | ||
| @@ -354,12 +352,12 @@ resubmit: | |||
| 354 | result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); | 352 | result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); |
| 355 | if (result) | 353 | if (result) |
| 356 | err(" usb_submit_urb(read int) failed"); | 354 | err(" usb_submit_urb(read int) failed"); |
| 357 | dbg("%s - usb_submit_urb(int urb)", __FUNCTION__); | 355 | dbg("%s - usb_submit_urb(int urb)", __func__); |
| 358 | } | 356 | } |
| 359 | 357 | ||
| 360 | static void cyberjack_read_bulk_callback (struct urb *urb) | 358 | static void cyberjack_read_bulk_callback (struct urb *urb) |
| 361 | { | 359 | { |
| 362 | struct usb_serial_port *port = (struct usb_serial_port *)urb->context; | 360 | struct usb_serial_port *port = urb->context; |
| 363 | struct cyberjack_private *priv = usb_get_serial_port_data(port); | 361 | struct cyberjack_private *priv = usb_get_serial_port_data(port); |
| 364 | struct tty_struct *tty; | 362 | struct tty_struct *tty; |
| 365 | unsigned char *data = urb->transfer_buffer; | 363 | unsigned char *data = urb->transfer_buffer; |
| @@ -367,18 +365,18 @@ static void cyberjack_read_bulk_callback (struct urb *urb) | |||
| 367 | int result; | 365 | int result; |
| 368 | int status = urb->status; | 366 | int status = urb->status; |
| 369 | 367 | ||
| 370 | dbg("%s - port %d", __FUNCTION__, port->number); | 368 | dbg("%s - port %d", __func__, port->number); |
| 371 | 369 | ||
| 372 | usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, data); | 370 | usb_serial_debug_data(debug, &port->dev, __func__, urb->actual_length, data); |
| 373 | if (status) { | 371 | if (status) { |
| 374 | dbg("%s - nonzero read bulk status received: %d", | 372 | dbg("%s - nonzero read bulk status received: %d", |
| 375 | __FUNCTION__, status); | 373 | __func__, status); |
| 376 | return; | 374 | return; |
| 377 | } | 375 | } |
| 378 | 376 | ||
| 379 | tty = port->tty; | 377 | tty = port->tty; |
| 380 | if (!tty) { | 378 | if (!tty) { |
| 381 | dbg("%s - ignoring since device not open\n", __FUNCTION__); | 379 | dbg("%s - ignoring since device not open\n", __func__); |
| 382 | return; | 380 | return; |
| 383 | } | 381 | } |
| 384 | if (urb->actual_length) { | 382 | if (urb->actual_length) { |
| @@ -397,30 +395,30 @@ static void cyberjack_read_bulk_callback (struct urb *urb) | |||
| 397 | 395 | ||
| 398 | spin_unlock(&priv->lock); | 396 | spin_unlock(&priv->lock); |
| 399 | 397 | ||
| 400 | dbg("%s - rdtodo: %d", __FUNCTION__, todo); | 398 | dbg("%s - rdtodo: %d", __func__, todo); |
| 401 | 399 | ||
| 402 | /* Continue to read if we have still urbs to do. */ | 400 | /* Continue to read if we have still urbs to do. */ |
| 403 | if( todo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/ ) { | 401 | if( todo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/ ) { |
| 404 | port->read_urb->dev = port->serial->dev; | 402 | port->read_urb->dev = port->serial->dev; |
| 405 | result = usb_submit_urb(port->read_urb, GFP_ATOMIC); | 403 | result = usb_submit_urb(port->read_urb, GFP_ATOMIC); |
| 406 | if (result) | 404 | if (result) |
| 407 | err("%s - failed resubmitting read urb, error %d", __FUNCTION__, result); | 405 | err("%s - failed resubmitting read urb, error %d", __func__, result); |
| 408 | dbg("%s - usb_submit_urb(read urb)", __FUNCTION__); | 406 | dbg("%s - usb_submit_urb(read urb)", __func__); |
| 409 | } | 407 | } |
| 410 | } | 408 | } |
| 411 | 409 | ||
| 412 | static void cyberjack_write_bulk_callback (struct urb *urb) | 410 | static void cyberjack_write_bulk_callback (struct urb *urb) |
| 413 | { | 411 | { |
| 414 | struct usb_serial_port *port = (struct usb_serial_port *)urb->context; | 412 | struct usb_serial_port *port = urb->context; |
| 415 | struct cyberjack_private *priv = usb_get_serial_port_data(port); | 413 | struct cyberjack_private *priv = usb_get_serial_port_data(port); |
| 416 | int status = urb->status; | 414 | int status = urb->status; |
| 417 | 415 | ||
| 418 | dbg("%s - port %d", __FUNCTION__, port->number); | 416 | dbg("%s - port %d", __func__, port->number); |
| 419 | 417 | ||
| 420 | port->write_urb_busy = 0; | 418 | port->write_urb_busy = 0; |
| 421 | if (status) { | 419 | if (status) { |
| 422 | dbg("%s - nonzero write bulk status received: %d", | 420 | dbg("%s - nonzero write bulk status received: %d", |
| 423 | __FUNCTION__, status); | 421 | __func__, status); |
| 424 | return; | 422 | return; |
| 425 | } | 423 | } |
| 426 | 424 | ||
| @@ -430,7 +428,7 @@ static void cyberjack_write_bulk_callback (struct urb *urb) | |||
| 430 | if( priv->wrfilled ) { | 428 | if( priv->wrfilled ) { |
| 431 | int length, blksize, result; | 429 | int length, blksize, result; |
| 432 | 430 | ||
| 433 | dbg("%s - transmitting data (frame n)", __FUNCTION__); | 431 | dbg("%s - transmitting data (frame n)", __func__); |
| 434 | 432 | ||
| 435 | length = ((priv->wrfilled - priv->wrsent) > port->bulk_out_size) ? | 433 | length = ((priv->wrfilled - priv->wrsent) > port->bulk_out_size) ? |
| 436 | port->bulk_out_size : (priv->wrfilled - priv->wrsent); | 434 | port->bulk_out_size : (priv->wrfilled - priv->wrsent); |
| @@ -451,23 +449,23 @@ static void cyberjack_write_bulk_callback (struct urb *urb) | |||
| 451 | /* send the data out the bulk port */ | 449 | /* send the data out the bulk port */ |
| 452 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); | 450 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); |
| 453 | if (result) { | 451 | if (result) { |
| 454 | err("%s - failed submitting write urb, error %d", __FUNCTION__, result); | 452 | err("%s - failed submitting write urb, error %d", __func__, result); |
| 455 | /* Throw away data. No better idea what to do with it. */ | 453 | /* Throw away data. No better idea what to do with it. */ |
| 456 | priv->wrfilled=0; | 454 | priv->wrfilled = 0; |
| 457 | priv->wrsent=0; | 455 | priv->wrsent = 0; |
| 458 | goto exit; | 456 | goto exit; |
| 459 | } | 457 | } |
| 460 | 458 | ||
| 461 | dbg("%s - priv->wrsent=%d", __FUNCTION__,priv->wrsent); | 459 | dbg("%s - priv->wrsent=%d", __func__,priv->wrsent); |
| 462 | dbg("%s - priv->wrfilled=%d", __FUNCTION__,priv->wrfilled); | 460 | dbg("%s - priv->wrfilled=%d", __func__,priv->wrfilled); |
| 463 | 461 | ||
| 464 | blksize = ((int)priv->wrbuf[2]<<8)+priv->wrbuf[1]+3; | 462 | blksize = ((int)priv->wrbuf[2]<<8)+priv->wrbuf[1]+3; |
| 465 | 463 | ||
| 466 | if( (priv->wrsent>=priv->wrfilled) || (priv->wrsent>=blksize) ) { | 464 | if( (priv->wrsent>=priv->wrfilled) || (priv->wrsent>=blksize) ) { |
| 467 | dbg("%s - buffer cleaned", __FUNCTION__); | 465 | dbg("%s - buffer cleaned", __func__); |
| 468 | memset( priv->wrbuf, 0, sizeof(priv->wrbuf) ); | 466 | memset( priv->wrbuf, 0, sizeof(priv->wrbuf) ); |
| 469 | priv->wrfilled=0; | 467 | priv->wrfilled = 0; |
| 470 | priv->wrsent=0; | 468 | priv->wrsent = 0; |
| 471 | } | 469 | } |
| 472 | } | 470 | } |
| 473 | 471 | ||
