1/* 2 * Edgeport USB Serial Converter driver 3 * 4 * Copyright (C) 2000-2002 Inside Out Networks, All rights reserved. 5 * Copyright (C) 2001-2002 Greg Kroah-Hartman <greg@kroah.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * Supports the following devices: 13 * EP/1 EP/2 EP/4 EP/21 EP/22 EP/221 EP/42 EP/421 WATCHPORT 14 * 15 * For questions or problems with this driver, contact Inside Out 16 * Networks technical support, or Peter Berger <pberger@brimson.com>, 17 * or Al Borchers <alborchers@steinerpoint.com>. 18 * 19 * Version history: 20 * 21 * July 11, 2002 Removed 4 port device structure since all TI UMP 22 * chips have only 2 ports 23 * David Iacovelli (davidi@ionetworks.com) 24 * 25 */ 26 27#include <linux/kernel.h> 28#include <linux/jiffies.h> 29#include <linux/errno.h> 30#include <linux/init.h> 31#include <linux/slab.h> 32#include <linux/tty.h> 33#include <linux/tty_driver.h> 34#include <linux/tty_flip.h> 35#include <linux/module.h> 36#include <linux/spinlock.h> 37#include <linux/mutex.h> 38#include <linux/serial.h> 39#include <linux/kfifo.h> 40#include <linux/ioctl.h> 41#include <linux/firmware.h> 42#include <linux/uaccess.h> 43#include <linux/usb.h> 44#include <linux/usb/serial.h> 45 46#include "io_16654.h" 47#include "io_usbvend.h" 48#include "io_ti.h" 49 50/* 51 * Version Information 52 */ 53#define DRIVER_VERSION "v0.7mode043006" 54#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com> and David Iacovelli" 55#define DRIVER_DESC "Edgeport USB Serial Driver" 56 57#define EPROM_PAGE_SIZE 64 58 59 60/* different hardware types */ 61#define HARDWARE_TYPE_930 0 62#define HARDWARE_TYPE_TIUMP 1 63 64/* IOCTL_PRIVATE_TI_GET_MODE Definitions */ 65#define TI_MODE_CONFIGURING 0 /* Device has not entered start device */ 66#define TI_MODE_BOOT 1 /* Staying in boot mode */ 67#define TI_MODE_DOWNLOAD 2 /* Made it to download mode */ 68#define TI_MODE_TRANSITIONING 3 /* Currently in boot mode but 69 transitioning to download mode */ 70 71/* read urb state */ 72#define EDGE_READ_URB_RUNNING 0 73#define EDGE_READ_URB_STOPPING 1 74#define EDGE_READ_URB_STOPPED 2 75 76#define EDGE_CLOSING_WAIT 4000 /* in .01 sec */ 77 78#define EDGE_OUT_BUF_SIZE 1024 79 80 81/* Product information read from the Edgeport */ 82struct product_info { 83 int TiMode; /* Current TI Mode */ 84 __u8 hardware_type; /* Type of hardware */ 85} __attribute__((packed)); 86 87struct edgeport_port { 88 __u16 uart_base; 89 __u16 dma_address; 90 __u8 shadow_msr; 91 __u8 shadow_mcr; 92 __u8 shadow_lsr; 93 __u8 lsr_mask; 94 __u32 ump_read_timeout; /* Number of milliseconds the UMP will 95 wait without data before completing 96 a read short */ 97 int baud_rate; 98 int close_pending; 99 int lsr_event; 100 struct async_icount icount; 101 wait_queue_head_t delta_msr_wait; /* for handling sleeping while 102 waiting for msr change to 103 happen */ 104 struct edgeport_serial *edge_serial; 105 struct usb_serial_port *port; 106 __u8 bUartMode; /* Port type, 0: RS232, etc. */ 107 spinlock_t ep_lock; 108 int ep_read_urb_state; 109 int ep_write_urb_in_use; 110 struct kfifo write_fifo; 111}; 112 113struct edgeport_serial { 114 struct product_info product_info; 115 u8 TI_I2C_Type; /* Type of I2C in UMP */ 116 u8 TiReadI2C; /* Set to TRUE if we have read the 117 I2c in Boot Mode */ 118 struct mutex es_lock; 119 int num_ports_open; 120 struct usb_serial *serial; 121}; 122 123 124/* Devices that this driver supports */ 125static const struct usb_device_id edgeport_1port_id_table[] = { 126 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_1) }, 127 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_TI3410_EDGEPORT_1) }, 128 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_TI3410_EDGEPORT_1I) }, 129 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_PROXIMITY) }, 130 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_MOTION) }, 131 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_MOISTURE) }, 132 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_TEMPERATURE) }, 133 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_HUMIDITY) }, 134 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_POWER) }, 135 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_LIGHT) }, 136 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_RADIATION) }, 137 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_DISTANCE) }, 138 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_ACCELERATION) }, 139 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_PROX_DIST) }, 140 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_PLUS_PWR_HP4CD) }, 141 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_PLUS_PWR_PCI) }, 142 { } 143}; 144 145static const struct usb_device_id edgeport_2port_id_table[] = { 146 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_2) }, 147 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_2C) }, 148 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_2I) }, 149 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_421) }, 150 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_21) }, 151 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_42) }, 152 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4) }, 153 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4I) }, 154 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_22I) }, 155 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_221C) }, 156 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_22C) }, 157 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_21C) }, 158 /* The 4, 8 and 16 port devices show up as multiple 2 port devices */ 159 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4S) }, 160 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8) }, 161 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8S) }, 162 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416) }, 163 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416B) }, 164 { } 165}; 166 167/* Devices that this driver supports */ 168static const struct usb_device_id id_table_combined[] = { 169 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_1) }, 170 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_TI3410_EDGEPORT_1) }, 171 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_TI3410_EDGEPORT_1I) }, 172 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_PROXIMITY) }, 173 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_MOTION) }, 174 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_MOISTURE) }, 175 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_TEMPERATURE) }, 176 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_HUMIDITY) }, 177 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_POWER) }, 178 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_LIGHT) }, 179 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_RADIATION) }, 180 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_DISTANCE) }, 181 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_ACCELERATION) }, 182 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_WP_PROX_DIST) }, 183 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_PLUS_PWR_HP4CD) }, 184 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_PLUS_PWR_PCI) }, 185 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_2) }, 186 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_2C) }, 187 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_2I) }, 188 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_421) }, 189 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_21) }, 190 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_42) }, 191 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4) }, 192 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4I) }, 193 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_22I) }, 194 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_221C) }, 195 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_22C) }, 196 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_21C) }, 197 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4S) }, 198 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8) }, 199 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8S) }, 200 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416) }, 201 { USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416B) }, 202 { } 203}; 204 205MODULE_DEVICE_TABLE(usb, id_table_combined); 206 207static struct usb_driver io_driver = { 208 .name = "io_ti", 209 .probe = usb_serial_probe, 210 .disconnect = usb_serial_disconnect, 211 .id_table = id_table_combined, 212 .no_dynamic_id = 1, 213}; 214 215 216static unsigned char OperationalMajorVersion; 217static unsigned char OperationalMinorVersion; 218static unsigned short OperationalBuildNumber; 219 220static int debug; 221 222static int closing_wait = EDGE_CLOSING_WAIT; 223static int ignore_cpu_rev; 224static int default_uart_mode; /* RS232 */ 225 226static void edge_tty_recv(struct device *dev, struct tty_struct *tty, 227 unsigned char *data, int length); 228 229static void stop_read(struct edgeport_port *edge_port); 230static int restart_read(struct edgeport_port *edge_port); 231 232static void edge_set_termios(struct tty_struct *tty, 233 struct usb_serial_port *port, struct ktermios *old_termios); 234static void edge_send(struct tty_struct *tty); 235 236/* sysfs attributes */ 237static int edge_create_sysfs_attrs(struct usb_serial_port *port); 238static int edge_remove_sysfs_attrs(struct usb_serial_port *port); 239 240 241static int ti_vread_sync(struct usb_device *dev, __u8 request, 242 __u16 value, __u16 index, u8 *data, int size) 243{ 244 int status; 245 246 status = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request, 247 (USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN), 248 value, index, data, size, 1000); 249 if (status < 0) 250 return status; 251 if (status != size) { 252 dbg("%s - wanted to write %d, but only wrote %d", 253 __func__, size, status); 254 return -ECOMM; 255 } 256 return 0; 257} 258 259static int ti_vsend_sync(struct usb_device *dev, __u8 request, 260 __u16 value, __u16 index, u8 *data, int size) 261{ 262 int status; 263 264 status = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), request, 265 (USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT), 266 value, index, data, size, 1000); 267 if (status < 0) 268 return status; 269 if (status != size) { 270 dbg("%s - wanted to write %d, but only wrote %d", 271 __func__, size, status); 272 return -ECOMM; 273 } 274 return 0; 275} 276 277static int send_cmd(struct usb_device *dev, __u8 command, 278 __u8 moduleid, __u16 value, u8 *data, 279 int size) 280{ 281 return ti_vsend_sync(dev, command, value, moduleid, data, size); 282} 283 284/* clear tx/rx buffers and fifo in TI UMP */ 285static int purge_port(struct usb_serial_port *port, __u16 mask) 286{ 287 int port_number = port->number - port->serial->minor; 288 289 dbg("%s - port %d, mask %x", __func__, port_number, mask); 290 291 return send_cmd(port->serial->dev, 292 UMPC_PURGE_PORT, 293 (__u8)(UMPM_UART1_PORT + port_number), 294 mask, 295 NULL, 296 0); 297} 298 299/** 300 * read_download_mem - Read edgeport memory from TI chip 301 * @dev: usb device pointer 302 * @start_address: Device CPU address at which to read 303 * @length: Length of above data 304 * @address_type: Can read both XDATA and I2C 305 * @buffer: pointer to input data buffer 306 */ 307static int read_download_mem(struct usb_device *dev, int start_address, 308 int length, __u8 address_type, __u8 *buffer) 309{ 310 int status = 0; 311 __u8 read_length; 312 __be16 be_start_address; 313 314 dbg("%s - @ %x for %d", __func__, start_address, length); 315 316 /* Read in blocks of 64 bytes 317 * (TI firmware can't handle more than 64 byte reads) 318 */ 319 while (length) { 320 if (length > 64) 321 read_length = 64; 322 else 323 read_length = (__u8)length; 324 325 if (read_length > 1) { 326 dbg("%s - @ %x for %d", __func__, 327 start_address, read_length); 328 } 329 be_start_address = cpu_to_be16(start_address); 330 status = ti_vread_sync(dev, UMPC_MEMORY_READ, 331 (__u16)address_type, 332 (__force __u16)be_start_address, 333 buffer, read_length); 334 335 if (status) { 336 dbg("%s - ERROR %x", __func__, status); 337 return status; 338 } 339 340 if (read_length > 1) 341 usb_serial_debug_data(debug, &dev->dev, __func__, 342 read_length, buffer); 343 344 /* Update pointers/length */ 345 start_address += read_length; 346 buffer += read_length; 347 length -= read_length; 348 } 349 350 return status; 351} 352 353static int read_ram(struct usb_device *dev, int start_address, 354 int length, __u8 *buffer) 355{ 356 return read_download_mem(dev, start_address, length, 357 DTK_ADDR_SPACE_XDATA, buffer); 358} 359 360/* Read edgeport memory to a given block */ 361static int read_boot_mem(struct edgeport_serial *serial, 362 int start_address, int length, __u8 *buffer) 363{ 364 int status = 0; 365 int i; 366 367 for (i = 0; i < length; i++) { 368 status = ti_vread_sync(serial->serial->dev, 369 UMPC_MEMORY_READ, serial->TI_I2C_Type, 370 (__u16)(start_address+i), &buffer[i], 0x01); 371 if (status) { 372 dbg("%s - ERROR %x", __func__, status); 373 return status; 374 } 375 } 376 377 dbg("%s - start_address = %x, length = %d", 378 __func__, start_address, length); 379 usb_serial_debug_data(debug, &serial->serial->dev->dev, 380 __func__, length, buffer); 381 382 serial->TiReadI2C = 1; 383 384 return status; 385} 386 387/* Write given block to TI EPROM memory */ 388static int write_boot_mem(struct edgeport_serial *serial, 389 int start_address, int length, __u8 *buffer) 390{ 391 int status = 0; 392 int i; 393 u8 *temp; 394 395 /* Must do a read before write */ 396 if (!serial->TiReadI2C) { 397 temp = kmalloc(1, GFP_KERNEL); 398 if (!temp) { 399 dev_err(&serial->serial->dev->dev, 400 "%s - out of memory\n", __func__); 401 return -ENOMEM; 402 } 403 status = read_boot_mem(serial, 0, 1, temp); 404 kfree(temp); 405 if (status) 406 return status; 407 } 408 409 for (i = 0; i < length; ++i) { 410 status = ti_vsend_sync(serial->serial->dev, 411 UMPC_MEMORY_WRITE, buffer[i], 412 (__u16)(i + start_address), NULL, 0); 413 if (status) 414 return status; 415 } 416 417 dbg("%s - start_sddr = %x, length = %d", 418 __func__, start_address, length); 419 usb_serial_debug_data(debug, &serial->serial->dev->dev, 420 __func__, length, buffer); 421 422 return status; 423} 424 425 426/* Write edgeport I2C memory to TI chip */ 427static int write_i2c_mem(struct edgeport_serial *serial, 428 int start_address, int length, __u8 address_type, __u8 *buffer) 429{ 430 int status = 0; 431 int write_length; 432 __be16 be_start_address; 433 434 /* We can only send a maximum of 1 aligned byte page at a time */ 435 436 /* calulate the number of bytes left in the first page */ 437 write_length = EPROM_PAGE_SIZE - 438 (start_address & (EPROM_PAGE_SIZE - 1)); 439 440 if (write_length > length) 441 write_length = length; 442 443 dbg("%s - BytesInFirstPage Addr = %x, length = %d", 444 __func__, start_address, write_length); 445 usb_serial_debug_data(debug, &serial->serial->dev->dev, 446 __func__, write_length, buffer); 447 448 /* Write first page */ 449 be_start_address = cpu_to_be16(start_address); 450 status = ti_vsend_sync(serial->serial->dev, 451 UMPC_MEMORY_WRITE, (__u16)address_type, 452 (__force __u16)be_start_address, 453 buffer, write_length); 454 if (status) { 455 dbg("%s - ERROR %d", __func__, status); 456 return status; 457 } 458 459 length -= write_length; 460 start_address += write_length; 461 buffer += write_length; 462 463 /* We should be aligned now -- can write 464 max page size bytes at a time */ 465 while (length) { 466 if (length > EPROM_PAGE_SIZE) 467 write_length = EPROM_PAGE_SIZE; 468 else 469 write_length = length; 470 471 dbg("%s - Page Write Addr = %x, length = %d", 472 __func__, start_address, write_length); 473 usb_serial_debug_data(debug, &serial->serial->dev->dev, 474 __func__, write_length, buffer); 475 476 /* Write next page */ 477 be_start_address = cpu_to_be16(start_address); 478 status = ti_vsend_sync(serial->serial->dev, UMPC_MEMORY_WRITE, 479 (__u16)address_type, 480 (__force __u16)be_start_address, 481 buffer, write_length); 482 if (status) { 483 dev_err(&serial->serial->dev->dev, "%s - ERROR %d\n", 484 __func__, status); 485 return status; 486 } 487 488 length -= write_length; 489 start_address += write_length; 490 buffer += write_length; 491 } 492 return status; 493} 494 495/* Examine the UMP DMA registers and LSR 496 * 497 * Check the MSBit of the X and Y DMA byte count registers. 498 * A zero in this bit indicates that the TX DMA buffers are empty 499 * then check the TX Empty bit in the UART. 500 */ 501static int tx_active(struct edgeport_port *port) 502{ 503 int status; 504 struct out_endpoint_desc_block *oedb; 505 __u8 *lsr; 506 int bytes_left = 0; 507 508 oedb = kmalloc(sizeof(*oedb), GFP_KERNEL); 509 if (!oedb) { 510 dev_err(&port->port->dev, "%s - out of memory\n", __func__); 511 return -ENOMEM; 512 } 513 514 lsr = kmalloc(1, GFP_KERNEL); /* Sigh, that's right, just one byte, 515 as not all platforms can do DMA 516 from stack */ 517 if (!lsr) { 518 kfree(oedb); 519 return -ENOMEM; 520 } 521 /* Read the DMA Count Registers */ 522 status = read_ram(port->port->serial->dev, port->dma_address, 523 sizeof(*oedb), (void *)oedb); 524 if (status) 525 goto exit_is_tx_active; 526 527 dbg("%s - XByteCount 0x%X", __func__, oedb->XByteCount); 528 529 /* and the LSR */ 530 status = read_ram(port->port->serial->dev, 531 port->uart_base + UMPMEM_OFFS_UART_LSR, 1, lsr); 532 533 if (status) 534 goto exit_is_tx_active; 535 dbg("%s - LSR = 0x%X", __func__, *lsr); 536 537 /* If either buffer has data or we are transmitting then return TRUE */ 538 if ((oedb->XByteCount & 0x80) != 0) 539 bytes_left += 64; 540 541 if ((*lsr & UMP_UART_LSR_TX_MASK) == 0) 542 bytes_left += 1; 543 544 /* We return Not Active if we get any kind of error */ 545exit_is_tx_active: 546 dbg("%s - return %d", __func__, bytes_left); 547 548 kfree(lsr); 549 kfree(oedb); 550 return bytes_left; 551} 552 553static void chase_port(struct edgeport_port *port, unsigned long timeout, 554 int flush) 555{ 556 int baud_rate; 557 struct tty_struct *tty = tty_port_tty_get(&port->port->port); 558 wait_queue_t wait; 559 unsigned long flags; 560 561 if (!timeout) 562 timeout = (HZ * EDGE_CLOSING_WAIT)/100; 563 564 /* wait for data to drain from the buffer */ 565 spin_lock_irqsave(&port->ep_lock, flags); 566 init_waitqueue_entry(&wait, current); 567 add_wait_queue(&tty->write_wait, &wait); 568 for (;;) { 569 set_current_state(TASK_INTERRUPTIBLE); 570 if (kfifo_len(&port->write_fifo) == 0 571 || timeout == 0 || signal_pending(current) 572 || !usb_get_intfdata(port->port->serial->interface)) 573 /* disconnect */ 574 break; 575 spin_unlock_irqrestore(&port->ep_lock, flags); 576 timeout = schedule_timeout(timeout); 577 spin_lock_irqsave(&port->ep_lock, flags); 578 } 579 set_current_state(TASK_RUNNING); 580 remove_wait_queue(&tty->write_wait, &wait); 581 if (flush) 582 kfifo_reset_out(&port->write_fifo); 583 spin_unlock_irqrestore(&port->ep_lock, flags); 584 tty_kref_put(tty); 585 586 /* wait for data to drain from the device */ 587 timeout += jiffies; 588 while ((long)(jiffies - timeout) < 0 && !signal_pending(current) 589 && usb_get_intfdata(port->port->serial->interface)) { 590 /* not disconnected */ 591 if (!tx_active(port)) 592 break; 593 msleep(10); 594 } 595 596 /* disconnected */ 597 if (!usb_get_intfdata(port->port->serial->interface)) 598 return; 599 600 /* wait one more character time, based on baud rate */ 601 /* (tx_active doesn't seem to wait for the last byte) */ 602 baud_rate = port->baud_rate; 603 if (baud_rate == 0) 604 baud_rate = 50; 605 msleep(max(1, DIV_ROUND_UP(10000, baud_rate))); 606} 607 608static int choose_config(struct usb_device *dev) 609{ 610 /* 611 * There may be multiple configurations on this device, in which case 612 * we would need to read and parse all of them to find out which one 613 * we want. However, we just support one config at this point, 614 * configuration # 1, which is Config Descriptor 0. 615 */ 616 617 dbg("%s - Number of Interfaces = %d", 618 __func__, dev->config->desc.bNumInterfaces); 619 dbg("%s - MAX Power = %d", 620 __func__, dev->config->desc.bMaxPower * 2); 621 622 if (dev->config->desc.bNumInterfaces != 1) { 623 dev_err(&dev->dev, "%s - bNumInterfaces is not 1, ERROR!\n", 624 __func__); 625 return -ENODEV; 626 } 627 628 return 0; 629} 630 631static int read_rom(struct edgeport_serial *serial, 632 int start_address, int length, __u8 *buffer) 633{ 634 int status; 635 636 if (serial->product_info.TiMode == TI_MODE_DOWNLOAD) { 637 status = read_download_mem(serial->serial->dev, 638 start_address, 639 length, 640 serial->TI_I2C_Type, 641 buffer); 642 } else { 643 status = read_boot_mem(serial, start_address, length, 644 buffer); 645 } 646 return status; 647} 648 649static int write_rom(struct edgeport_serial *serial, int start_address, 650 int length, __u8 *buffer) 651{ 652 if (serial->product_info.TiMode == TI_MODE_BOOT) 653 return write_boot_mem(serial, start_address, length, 654 buffer); 655 656 if (serial->product_info.TiMode == TI_MODE_DOWNLOAD) 657 return write_i2c_mem(serial, start_address, length, 658 serial->TI_I2C_Type, buffer); 659 return -EINVAL; 660} 661 662 663 664/* Read a descriptor header from I2C based on type */ 665static int get_descriptor_addr(struct edgeport_serial *serial, 666 int desc_type, struct ti_i2c_desc *rom_desc) 667{ 668 int start_address; 669 int status; 670 671 /* Search for requested descriptor in I2C */ 672 start_address = 2; 673 do { 674 status = read_rom(serial, 675 start_address, 676 sizeof(struct ti_i2c_desc), 677 (__u8 *)rom_desc); 678 if (status) 679 return 0; 680 681 if (rom_desc->Type == desc_type) 682 return start_address; 683 684 start_address = start_address + sizeof(struct ti_i2c_desc) 685 + rom_desc->Size; 686 687 } while ((start_address < TI_MAX_I2C_SIZE) && rom_desc->Type); 688 689 return 0; 690} 691 692/* Validate descriptor checksum */ 693static int valid_csum(struct ti_i2c_desc *rom_desc, __u8 *buffer) 694{ 695 __u16 i; 696 __u8 cs = 0; 697 698 for (i = 0; i < rom_desc->Size; i++) 699 cs = (__u8)(cs + buffer[i]); 700 701 if (cs != rom_desc->CheckSum) { 702 dbg("%s - Mismatch %x - %x", __func__, rom_desc->CheckSum, cs); 703 return -EINVAL; 704 } 705 return 0; 706} 707 708/* Make sure that the I2C image is good */ 709static int check_i2c_image(struct edgeport_serial *serial) 710{ 711 struct device *dev = &serial->serial->dev->dev; 712 int status = 0; 713 struct ti_i2c_desc *rom_desc; 714 int start_address = 2; 715 __u8 *buffer; 716 __u16 ttype; 717 718 rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL); 719 if (!rom_desc) { 720 dev_err(dev, "%s - out of memory\n", __func__); 721 return -ENOMEM; 722 } 723 buffer = kmalloc(TI_MAX_I2C_SIZE, GFP_KERNEL); 724 if (!buffer) { 725 dev_err(dev, "%s - out of memory when allocating buffer\n", 726 __func__); 727 kfree(rom_desc); 728 return -ENOMEM; 729 } 730 731 /* Read the first byte (Signature0) must be 0x52 or 0x10 */ 732 status = read_rom(serial, 0, 1, buffer); 733 if (status) 734 goto out; 735 736 if (*buffer != UMP5152 && *buffer != UMP3410) { 737 dev_err(dev, "%s - invalid buffer signature\n", __func__); 738 status = -ENODEV; 739 goto out; 740 } 741 742 do { 743 /* Validate the I2C */ 744 status = read_rom(serial, 745 start_address, 746 sizeof(struct ti_i2c_desc), 747 (__u8 *)rom_desc); 748 if (status) 749 break; 750 751 if ((start_address + sizeof(struct ti_i2c_desc) + 752 rom_desc->Size) > TI_MAX_I2C_SIZE) { 753 status = -ENODEV; 754 dbg("%s - structure too big, erroring out.", __func__); 755 break; 756 } 757 758 dbg("%s Type = 0x%x", __func__, rom_desc->Type); 759 760 /* Skip type 2 record */ 761 ttype = rom_desc->Type & 0x0f; 762 if (ttype != I2C_DESC_TYPE_FIRMWARE_BASIC 763 && ttype != I2C_DESC_TYPE_FIRMWARE_AUTO) { 764 /* Read the descriptor data */ 765 status = read_rom(serial, start_address + 766 sizeof(struct ti_i2c_desc), 767 rom_desc->Size, buffer); 768 if (status) 769 break; 770 771 status = valid_csum(rom_desc, buffer); 772 if (status) 773 break; 774 } 775 start_address = start_address + sizeof(struct ti_i2c_desc) + 776 rom_desc->Size; 777 778 } while ((rom_desc->Type != I2C_DESC_TYPE_ION) && 779 (start_address < TI_MAX_I2C_SIZE)); 780 781 if ((rom_desc->Type != I2C_DESC_TYPE_ION) || 782 (start_address > TI_MAX_I2C_SIZE)) 783 status = -ENODEV; 784 785out: 786 kfree(buffer); 787 kfree(rom_desc); 788 return status; 789} 790 791static int get_manuf_info(struct edgeport_serial *serial, __u8 *buffer) 792{ 793 int status; 794 int start_address; 795 struct ti_i2c_desc *rom_desc; 796 struct edge_ti_manuf_descriptor *desc; 797 798 rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL); 799 if (!rom_desc) { 800 dev_err(&serial->serial->dev->dev, "%s - out of memory\n", 801 __func__); 802 return -ENOMEM; 803 } 804 start_address = get_descriptor_addr(serial, I2C_DESC_TYPE_ION, 805 rom_desc); 806 807 if (!start_address) { 808 dbg("%s - Edge Descriptor not found in I2C", __func__); 809 status = -ENODEV; 810 goto exit; 811 } 812 813 /* Read the descriptor data */ 814 status = read_rom(serial, start_address+sizeof(struct ti_i2c_desc), 815 rom_desc->Size, buffer); 816 if (status) 817 goto exit; 818 819 status = valid_csum(rom_desc, buffer); 820 821 desc = (struct edge_ti_manuf_descriptor *)buffer; 822 dbg("%s - IonConfig 0x%x", __func__, desc->IonConfig); 823 dbg("%s - Version %d", __func__, desc->Version); 824 dbg("%s - Cpu/Board 0x%x", __func__, desc->CpuRev_BoardRev); 825 dbg("%s - NumPorts %d", __func__, desc->NumPorts); 826 dbg("%s - NumVirtualPorts %d", __func__, desc->NumVirtualPorts); 827 dbg("%s - TotalPorts %d", __func__, desc->TotalPorts); 828 829exit: 830 kfree(rom_desc); 831 return status; 832} 833 834/* Build firmware header used for firmware update */ 835static int build_i2c_fw_hdr(__u8 *header, struct device *dev) 836{ 837 __u8 *buffer; 838 int buffer_size; 839 int i; 840 int err; 841 __u8 cs = 0; 842 struct ti_i2c_desc *i2c_header; 843 struct ti_i2c_image_header *img_header; 844 struct ti_i2c_firmware_rec *firmware_rec; 845 const struct firmware *fw; 846 const char *fw_name = "edgeport/down3.bin"; 847 848 /* In order to update the I2C firmware we must change the type 2 record 849 * to type 0xF2. This will force the UMP to come up in Boot Mode. 850 * Then while in boot mode, the driver will download the latest 851 * firmware (padded to 15.5k) into the UMP ram. And finally when the 852 * device comes back up in download mode the driver will cause the new 853 * firmware to be copied from the UMP Ram to I2C and the firmware will 854 * update the record type from 0xf2 to 0x02. 855 */ 856 857 /* Allocate a 15.5k buffer + 2 bytes for version number 858 * (Firmware Record) */ 859 buffer_size = (((1024 * 16) - 512 ) + 860 sizeof(struct ti_i2c_firmware_rec)); 861 862 buffer = kmalloc(buffer_size, GFP_KERNEL); 863 if (!buffer) { 864 dev_err(dev, "%s - out of memory\n", __func__); 865 return -ENOMEM; 866 } 867 868 // Set entire image of 0xffs 869 memset(buffer, 0xff, buffer_size); 870 871 err = request_firmware(&fw, fw_name, dev); 872 if (err) { 873 printk(KERN_ERR "Failed to load image \"%s\" err %d\n", 874 fw_name, err); 875 kfree(buffer); 876 return err; 877 } 878 879 /* Save Download Version Number */ 880 OperationalMajorVersion = fw->data[0]; 881 OperationalMinorVersion = fw->data[1]; 882 OperationalBuildNumber = fw->data[2] | (fw->data[3] << 8); 883 884 /* Copy version number into firmware record */ 885 firmware_rec = (struct ti_i2c_firmware_rec *)buffer; 886 887 firmware_rec->Ver_Major = OperationalMajorVersion; 888 firmware_rec->Ver_Minor = OperationalMinorVersion; 889 890 /* Pointer to fw_down memory image */ 891 img_header = (struct ti_i2c_image_header *)&fw->data[4]; 892 893 memcpy(buffer + sizeof(struct ti_i2c_firmware_rec), 894 &fw->data[4 + sizeof(struct ti_i2c_image_header)], 895 le16_to_cpu(img_header->Length)); 896 897 release_firmware(fw); 898 899 for (i=0; i < buffer_size; i++) { 900 cs = (__u8)(cs + buffer[i]); 901 } 902 903 kfree(buffer); 904 905 /* Build new header */ 906 i2c_header = (struct ti_i2c_desc *)header; 907 firmware_rec = (struct ti_i2c_firmware_rec*)i2c_header->Data; 908 909 i2c_header->Type = I2C_DESC_TYPE_FIRMWARE_BLANK; 910 i2c_header->Size = (__u16)buffer_size; 911 i2c_header->CheckSum = cs; 912 firmware_rec->Ver_Major = OperationalMajorVersion; 913 firmware_rec->Ver_Minor = OperationalMinorVersion; 914 915 return 0; 916} 917 918/* Try to figure out what type of I2c we have */ 919static int i2c_type_bootmode(struct edgeport_serial *serial) 920{ 921 int status; 922 u8 *data; 923 924 data = kmalloc(1, GFP_KERNEL); 925 if (!data) { 926 dev_err(&serial->serial->dev->dev, 927 "%s - out of memory\n", __func__); 928 return -ENOMEM; 929 } 930 931 /* Try to read type 2 */ 932 status = ti_vread_sync(serial->serial->dev, UMPC_MEMORY_READ, 933 DTK_ADDR_SPACE_I2C_TYPE_II, 0, data, 0x01); 934 if (status) 935 dbg("%s - read 2 status error = %d", __func__, status); 936 else 937 dbg("%s - read 2 data = 0x%x", __func__, *data); 938 if ((!status) && (*data == UMP5152 || *data == UMP3410)) { 939 dbg("%s - ROM_TYPE_II", __func__); 940 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_II; 941 goto out; 942 } 943 944 /* Try to read type 3 */ 945 status = ti_vread_sync(serial->serial->dev, UMPC_MEMORY_READ, 946 DTK_ADDR_SPACE_I2C_TYPE_III, 0, data, 0x01); 947 if (status) 948 dbg("%s - read 3 status error = %d", __func__, status); 949 else 950 dbg("%s - read 2 data = 0x%x", __func__, *data); 951 if ((!status) && (*data == UMP5152 || *data == UMP3410)) { 952 dbg("%s - ROM_TYPE_III", __func__); 953 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_III; 954 goto out; 955 } 956 957 dbg("%s - Unknown", __func__); 958 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_II; 959 status = -ENODEV; 960out: 961 kfree(data); 962 return status; 963} 964 965static int bulk_xfer(struct usb_serial *serial, void *buffer, 966 int length, int *num_sent) 967{ 968 int status; 969 970 status = usb_bulk_msg(serial->dev, 971 usb_sndbulkpipe(serial->dev, 972 serial->port[0]->bulk_out_endpointAddress), 973 buffer, length, num_sent, 1000); 974 return status; 975} 976 977/* Download given firmware image to the device (IN BOOT MODE) */ 978static int download_code(struct edgeport_serial *serial, __u8 *image, 979 int image_length) 980{ 981 int status = 0; 982 int pos; 983 int transfer; 984 int done; 985 986 /* Transfer firmware image */ 987 for (pos = 0; pos < image_length; ) { 988 /* Read the next buffer from file */ 989 transfer = image_length - pos; 990 if (transfer > EDGE_FW_BULK_MAX_PACKET_SIZE) 991 transfer = EDGE_FW_BULK_MAX_PACKET_SIZE; 992 993 /* Transfer data */ 994 status = bulk_xfer(serial->serial, &image[pos], 995 transfer, &done); 996 if (status) 997 break; 998 /* Advance buffer pointer */ 999 pos += done; 1000 } 1001 1002 return status; 1003} 1004 1005static int config_boot_dev(struct usb_device *dev) 1006{ 1007 return 0; 1008} 1009 1010static int ti_cpu_rev(struct edge_ti_manuf_descriptor *desc) 1011{ 1012 return TI_GET_CPU_REVISION(desc->CpuRev_BoardRev); 1013} 1014 1015/** 1016 * DownloadTIFirmware - Download run-time operating firmware to the TI5052 1017 * 1018 * This routine downloads the main operating code into the TI5052, using the 1019 * boot code already burned into E2PROM or ROM. 1020 */ 1021static int download_fw(struct edgeport_serial *serial) 1022{ 1023 struct device *dev = &serial->serial->dev->dev; 1024 int status = 0; 1025 int start_address; 1026 struct edge_ti_manuf_descriptor *ti_manuf_desc; 1027 struct usb_interface_descriptor *interface; 1028 int download_cur_ver; 1029 int download_new_ver; 1030 1031 /* This routine is entered by both the BOOT mode and the Download mode 1032 * We can determine which code is running by the reading the config 1033 * descriptor and if we have only one bulk pipe it is in boot mode 1034 */ 1035 serial->product_info.hardware_type = HARDWARE_TYPE_TIUMP; 1036 1037 /* Default to type 2 i2c */ 1038 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_II; 1039 1040 status = choose_config(serial->serial->dev); 1041 if (status) 1042 return status; 1043 1044 interface = &serial->serial->interface->cur_altsetting->desc; 1045 if (!interface) { 1046 dev_err(dev, "%s - no interface set, error!\n", __func__); 1047 return -ENODEV; 1048 } 1049 1050 /* 1051 * Setup initial mode -- the default mode 0 is TI_MODE_CONFIGURING 1052 * if we have more than one endpoint we are definitely in download 1053 * mode 1054 */ 1055 if (interface->bNumEndpoints > 1) 1056 serial->product_info.TiMode = TI_MODE_DOWNLOAD; 1057 else 1058 /* Otherwise we will remain in configuring mode */ 1059 serial->product_info.TiMode = TI_MODE_CONFIGURING; 1060 1061 /********************************************************************/ 1062 /* Download Mode */ 1063 /********************************************************************/ 1064 if (serial->product_info.TiMode == TI_MODE_DOWNLOAD) { 1065 struct ti_i2c_desc *rom_desc; 1066 1067 dbg("%s - RUNNING IN DOWNLOAD MODE", __func__); 1068 1069 status = check_i2c_image(serial); 1070 if (status) { 1071 dbg("%s - DOWNLOAD MODE -- BAD I2C", __func__); 1072 return status; 1073 } 1074 1075 /* Validate Hardware version number 1076 * Read Manufacturing Descriptor from TI Based Edgeport 1077 */ 1078 ti_manuf_desc = kmalloc(sizeof(*ti_manuf_desc), GFP_KERNEL); 1079 if (!ti_manuf_desc) { 1080 dev_err(dev, "%s - out of memory.\n", __func__); 1081 return -ENOMEM; 1082 } 1083 status = get_manuf_info(serial, (__u8 *)ti_manuf_desc); 1084 if (status) { 1085 kfree(ti_manuf_desc); 1086 return status; 1087 } 1088 1089 /* Check version number of ION descriptor */ 1090 if (!ignore_cpu_rev && ti_cpu_rev(ti_manuf_desc) < 2) { 1091 dbg("%s - Wrong CPU Rev %d (Must be 2)", 1092 __func__, ti_cpu_rev(ti_manuf_desc)); 1093 kfree(ti_manuf_desc); 1094 return -EINVAL; 1095 } 1096 1097 rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL); 1098 if (!rom_desc) { 1099 dev_err(dev, "%s - out of memory.\n", __func__); 1100 kfree(ti_manuf_desc); 1101 return -ENOMEM; 1102 } 1103 1104 /* Search for type 2 record (firmware record) */ 1105 start_address = get_descriptor_addr(serial, 1106 I2C_DESC_TYPE_FIRMWARE_BASIC, rom_desc); 1107 if (start_address != 0) { 1108 struct ti_i2c_firmware_rec *firmware_version; 1109 u8 *record; 1110 1111 dbg("%s - Found Type FIRMWARE (Type 2) record", 1112 __func__); 1113 1114 firmware_version = kmalloc(sizeof(*firmware_version), 1115 GFP_KERNEL); 1116 if (!firmware_version) { 1117 dev_err(dev, "%s - out of memory.\n", __func__); 1118 kfree(rom_desc); 1119 kfree(ti_manuf_desc); 1120 return -ENOMEM; 1121 } 1122 1123 /* Validate version number 1124 * Read the descriptor data 1125 */ 1126 status = read_rom(serial, start_address + 1127 sizeof(struct ti_i2c_desc), 1128 sizeof(struct ti_i2c_firmware_rec), 1129 (__u8 *)firmware_version); 1130 if (status) { 1131 kfree(firmware_version); 1132 kfree(rom_desc); 1133 kfree(ti_manuf_desc); 1134 return status; 1135 } 1136 1137 /* Check version number of download with current 1138 version in I2c */ 1139 download_cur_ver = (firmware_version->Ver_Major << 8) + 1140 (firmware_version->Ver_Minor); 1141 download_new_ver = (OperationalMajorVersion << 8) + 1142 (OperationalMinorVersion); 1143 1144 dbg("%s - >> FW Versions Device %d.%d Driver %d.%d", 1145 __func__, 1146 firmware_version->Ver_Major, 1147 firmware_version->Ver_Minor, 1148 OperationalMajorVersion, 1149 OperationalMinorVersion); 1150 1151 /* Check if we have an old version in the I2C and 1152 update if necessary */ 1153 if (download_cur_ver < download_new_ver) { 1154 dbg("%s - Update I2C dld from %d.%d to %d.%d", 1155 __func__, 1156 firmware_version->Ver_Major, 1157 firmware_version->Ver_Minor, 1158 OperationalMajorVersion, 1159 OperationalMinorVersion); 1160 1161 record = kmalloc(1, GFP_KERNEL); 1162 if (!record) { 1163 dev_err(dev, "%s - out of memory.\n", 1164 __func__); 1165 kfree(firmware_version); 1166 kfree(rom_desc); 1167 kfree(ti_manuf_desc); 1168 return -ENOMEM; 1169 } 1170 /* In order to update the I2C firmware we must 1171 * change the type 2 record to type 0xF2. This 1172 * will force the UMP to come up in Boot Mode. 1173 * Then while in boot mode, the driver will 1174 * download the latest firmware (padded to 1175 * 15.5k) into the UMP ram. Finally when the 1176 * device comes back up in download mode the 1177 * driver will cause the new firmware to be 1178 * copied from the UMP Ram to I2C and the 1179 * firmware will update the record type from 1180 * 0xf2 to 0x02. 1181 */ 1182 *record = I2C_DESC_TYPE_FIRMWARE_BLANK; 1183 1184 /* Change the I2C Firmware record type to 1185 0xf2 to trigger an update */ 1186 status = write_rom(serial, start_address, 1187 sizeof(*record), record); 1188 if (status) { 1189 kfree(record); 1190 kfree(firmware_version); 1191 kfree(rom_desc); 1192 kfree(ti_manuf_desc); 1193 return status; 1194 } 1195 1196 /* verify the write -- must do this in order 1197 * for write to complete before we do the 1198 * hardware reset 1199 */ 1200 status = read_rom(serial, 1201 start_address, 1202 sizeof(*record), 1203 record); 1204 if (status) { 1205 kfree(record); 1206 kfree(firmware_version); 1207 kfree(rom_desc); 1208 kfree(ti_manuf_desc); 1209 return status; 1210 } 1211 1212 if (*record != I2C_DESC_TYPE_FIRMWARE_BLANK) { 1213 dev_err(dev, 1214 "%s - error resetting device\n", 1215 __func__); 1216 kfree(record); 1217 kfree(firmware_version); 1218 kfree(rom_desc); 1219 kfree(ti_manuf_desc); 1220 return -ENODEV; 1221 } 1222 1223 dbg("%s - HARDWARE RESET", __func__); 1224 1225 /* Reset UMP -- Back to BOOT MODE */ 1226 status = ti_vsend_sync(serial->serial->dev, 1227 UMPC_HARDWARE_RESET, 1228 0, 0, NULL, 0); 1229 1230 dbg("%s - HARDWARE RESET return %d", 1231 __func__, status); 1232 1233 /* return an error on purpose. */ 1234 kfree(record); 1235 kfree(firmware_version); 1236 kfree(rom_desc); 1237 kfree(ti_manuf_desc); 1238 return -ENODEV; 1239 } 1240 kfree(firmware_version); 1241 } 1242 /* Search for type 0xF2 record (firmware blank record) */ 1243 else if ((start_address = get_descriptor_addr(serial, I2C_DESC_TYPE_FIRMWARE_BLANK, rom_desc)) != 0) { 1244#define HEADER_SIZE (sizeof(struct ti_i2c_desc) + \ 1245 sizeof(struct ti_i2c_firmware_rec)) 1246 __u8 *header; 1247 __u8 *vheader; 1248 1249 header = kmalloc(HEADER_SIZE, GFP_KERNEL); 1250 if (!header) { 1251 dev_err(dev, "%s - out of memory.\n", __func__); 1252 kfree(rom_desc); 1253 kfree(ti_manuf_desc); 1254 return -ENOMEM; 1255 } 1256 1257 vheader = kmalloc(HEADER_SIZE, GFP_KERNEL); 1258 if (!vheader) { 1259 dev_err(dev, "%s - out of memory.\n", __func__); 1260 kfree(header); 1261 kfree(rom_desc); 1262 kfree(ti_manuf_desc); 1263 return -ENOMEM; 1264 } 1265 1266 dbg("%s - Found Type BLANK FIRMWARE (Type F2) record", 1267 __func__); 1268 1269 /* 1270 * In order to update the I2C firmware we must change 1271 * the type 2 record to type 0xF2. This will force the 1272 * UMP to come up in Boot Mode. Then while in boot 1273 * mode, the driver will download the latest firmware 1274 * (padded to 15.5k) into the UMP ram. Finally when the 1275 * device comes back up in download mode the driver 1276 * will cause the new firmware to be copied from the 1277 * UMP Ram to I2C and the firmware will update the 1278 * record type from 0xf2 to 0x02. 1279 */ 1280 status = build_i2c_fw_hdr(header, dev); 1281 if (status) { 1282 kfree(vheader); 1283 kfree(header); 1284 kfree(rom_desc); 1285 kfree(ti_manuf_desc); 1286 return -EINVAL; 1287 } 1288 1289 /* Update I2C with type 0xf2 record with correct 1290 size and checksum */ 1291 status = write_rom(serial, 1292 start_address, 1293 HEADER_SIZE, 1294 header); 1295 if (status) { 1296 kfree(vheader); 1297 kfree(header); 1298 kfree(rom_desc); 1299 kfree(ti_manuf_desc); 1300 return -EINVAL; 1301 } 1302 1303 /* verify the write -- must do this in order for 1304 write to complete before we do the hardware reset */ 1305 status = read_rom(serial, start_address, 1306 HEADER_SIZE, vheader); 1307 1308 if (status) { 1309 dbg("%s - can't read header back", __func__); 1310 kfree(vheader); 1311 kfree(header); 1312 kfree(rom_desc); 1313 kfree(ti_manuf_desc); 1314 return status; 1315 } 1316 if (memcmp(vheader, header, HEADER_SIZE)) { 1317 dbg("%s - write download record failed", 1318 __func__); 1319 kfree(vheader); 1320 kfree(header); 1321 kfree(rom_desc); 1322 kfree(ti_manuf_desc); 1323 return -EINVAL; 1324 } 1325 1326 kfree(vheader); 1327 kfree(header); 1328 1329 dbg("%s - Start firmware update", __func__); 1330 1331 /* Tell firmware to copy download image into I2C */ 1332 status = ti_vsend_sync(serial->serial->dev, 1333 UMPC_COPY_DNLD_TO_I2C, 0, 0, NULL, 0); 1334 1335 dbg("%s - Update complete 0x%x", __func__, status); 1336 if (status) { 1337 dev_err(dev, 1338 "%s - UMPC_COPY_DNLD_TO_I2C failed\n", 1339 __func__); 1340 kfree(rom_desc); 1341 kfree(ti_manuf_desc); 1342 return status; 1343 } 1344 } 1345 1346 // The device is running the download code 1347 kfree(rom_desc); 1348 kfree(ti_manuf_desc); 1349 return 0; 1350 } 1351 1352 /********************************************************************/ 1353 /* Boot Mode */ 1354 /********************************************************************/ 1355 dbg("%s - RUNNING IN BOOT MODE", __func__); 1356 1357 /* Configure the TI device so we can use the BULK pipes for download */ 1358 status = config_boot_dev(serial->serial->dev); 1359 if (status) 1360 return status; 1361 1362 if (le16_to_cpu(serial->serial->dev->descriptor.idVendor) 1363 != USB_VENDOR_ID_ION) { 1364 dbg("%s - VID = 0x%x", __func__, 1365 le16_to_cpu(serial->serial->dev->descriptor.idVendor)); 1366 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_II; 1367 goto stayinbootmode; 1368 } 1369 1370 /* We have an ION device (I2c Must be programmed) 1371 Determine I2C image type */ 1372 if (i2c_type_bootmode(serial)) 1373 goto stayinbootmode; 1374 1375 /* Check for ION Vendor ID and that the I2C is valid */ 1376 if (!check_i2c_image(serial)) { 1377 struct ti_i2c_image_header *header; 1378 int i; 1379 __u8 cs = 0; 1380 __u8 *buffer; 1381 int buffer_size; 1382 int err; 1383 const struct firmware *fw; 1384 const char *fw_name = "edgeport/down3.bin"; 1385 1386 /* Validate Hardware version number 1387 * Read Manufacturing Descriptor from TI Based Edgeport 1388 */ 1389 ti_manuf_desc = kmalloc(sizeof(*ti_manuf_desc), GFP_KERNEL); 1390 if (!ti_manuf_desc) { 1391 dev_err(dev, "%s - out of memory.\n", __func__); 1392 return -ENOMEM; 1393 } 1394 status = get_manuf_info(serial, (__u8 *)ti_manuf_desc); 1395 if (status) { 1396 kfree(ti_manuf_desc); 1397 goto stayinbootmode; 1398 } 1399 1400 /* Check for version 2 */ 1401 if (!ignore_cpu_rev && ti_cpu_rev(ti_manuf_desc) < 2) { 1402 dbg("%s - Wrong CPU Rev %d (Must be 2)", 1403 __func__, ti_cpu_rev(ti_manuf_desc)); 1404 kfree(ti_manuf_desc); 1405 goto stayinbootmode; 1406 } 1407 1408 kfree(ti_manuf_desc); 1409 1410 /* 1411 * In order to update the I2C firmware we must change the type 1412 * 2 record to type 0xF2. This will force the UMP to come up 1413 * in Boot Mode. Then while in boot mode, the driver will 1414 * download the latest firmware (padded to 15.5k) into the 1415 * UMP ram. Finally when the device comes back up in download 1416 * mode the driver will cause the new firmware to be copied 1417 * from the UMP Ram to I2C and the firmware will update the 1418 * record type from 0xf2 to 0x02. 1419 * 1420 * Do we really have to copy the whole firmware image, 1421 * or could we do this in place! 1422 */ 1423 1424 /* Allocate a 15.5k buffer + 3 byte header */ 1425 buffer_size = (((1024 * 16) - 512) + 1426 sizeof(struct ti_i2c_image_header)); 1427 buffer = kmalloc(buffer_size, GFP_KERNEL); 1428 if (!buffer) { 1429 dev_err(dev, "%s - out of memory\n", __func__); 1430 return -ENOMEM; 1431 } 1432 1433 /* Initialize the buffer to 0xff (pad the buffer) */ 1434 memset(buffer, 0xff, buffer_size); 1435 1436 err = request_firmware(&fw, fw_name, dev); 1437 if (err) { 1438 printk(KERN_ERR "Failed to load image \"%s\" err %d\n", 1439 fw_name, err); 1440 kfree(buffer); 1441 return err; 1442 } 1443 memcpy(buffer, &fw->data[4], fw->size - 4); 1444 release_firmware(fw); 1445 1446 for (i = sizeof(struct ti_i2c_image_header); 1447 i < buffer_size; i++) { 1448 cs = (__u8)(cs + buffer[i]); 1449 } 1450 1451 header = (struct ti_i2c_image_header *)buffer; 1452 1453 /* update length and checksum after padding */ 1454 header->Length = cpu_to_le16((__u16)(buffer_size - 1455 sizeof(struct ti_i2c_image_header))); 1456 header->CheckSum = cs; 1457 1458 /* Download the operational code */ 1459 dbg("%s - Downloading operational code image (TI UMP)", 1460 __func__); 1461 status = download_code(serial, buffer, buffer_size); 1462 1463 kfree(buffer); 1464 1465 if (status) { 1466 dbg("%s - Error downloading operational code image", 1467 __func__); 1468 return status; 1469 } 1470 1471 /* Device will reboot */ 1472 serial->product_info.TiMode = TI_MODE_TRANSITIONING; 1473 1474 dbg("%s - Download successful -- Device rebooting...", 1475 __func__); 1476 1477 /* return an error on purpose */ 1478 return -ENODEV; 1479 } 1480 1481stayinbootmode: 1482 /* Eprom is invalid or blank stay in boot mode */ 1483 dbg("%s - STAYING IN BOOT MODE", __func__); 1484 serial->product_info.TiMode = TI_MODE_BOOT; 1485 1486 return 0; 1487} 1488 1489 1490static int ti_do_config(struct edgeport_port *port, int feature, int on) 1491{ 1492 int port_number = port->port->number - port->port->serial->minor; 1493 on = !!on; /* 1 or 0 not bitmask */ 1494 return send_cmd(port->port->serial->dev, 1495 feature, (__u8)(UMPM_UART1_PORT + port_number), 1496 on, NULL, 0); 1497} 1498 1499 1500static int restore_mcr(struct edgeport_port *port, __u8 mcr) 1501{ 1502 int status = 0; 1503 1504 dbg("%s - %x", __func__, mcr); 1505 1506 status = ti_do_config(port, UMPC_SET_CLR_DTR, mcr & MCR_DTR); 1507 if (status) 1508 return status; 1509 status = ti_do_config(port, UMPC_SET_CLR_RTS, mcr & MCR_RTS); 1510 if (status) 1511 return status; 1512 return ti_do_config(port, UMPC_SET_CLR_LOOPBACK, mcr & MCR_LOOPBACK); 1513} 1514 1515/* Convert TI LSR to standard UART flags */ 1516static __u8 map_line_status(__u8 ti_lsr) 1517{ 1518 __u8 lsr = 0; 1519 1520#define MAP_FLAG(flagUmp, flagUart) \ 1521 if (ti_lsr & flagUmp) \ 1522 lsr |= flagUart; 1523 1524 MAP_FLAG(UMP_UART_LSR_OV_MASK, LSR_OVER_ERR) /* overrun */ 1525 MAP_FLAG(UMP_UART_LSR_PE_MASK, LSR_PAR_ERR) /* parity error */ 1526 MAP_FLAG(UMP_UART_LSR_FE_MASK, LSR_FRM_ERR) /* framing error */ 1527 MAP_FLAG(UMP_UART_LSR_BR_MASK, LSR_BREAK) /* break detected */ 1528 MAP_FLAG(UMP_UART_LSR_RX_MASK, LSR_RX_AVAIL) /* rx data available */ 1529 MAP_FLAG(UMP_UART_LSR_TX_MASK, LSR_TX_EMPTY) /* tx hold reg empty */ 1530 1531#undef MAP_FLAG 1532 1533 return lsr; 1534} 1535 1536static void handle_new_msr(struct edgeport_port *edge_port, __u8 msr) 1537{ 1538 struct async_icount *icount; 1539 struct tty_struct *tty; 1540 1541 dbg("%s - %02x", __func__, msr); 1542 1543 if (msr & (EDGEPORT_MSR_DELTA_CTS | EDGEPORT_MSR_DELTA_DSR | 1544 EDGEPORT_MSR_DELTA_RI | EDGEPORT_MSR_DELTA_CD)) { 1545 icount = &edge_port->icount; 1546 1547 /* update input line counters */ 1548 if (msr & EDGEPORT_MSR_DELTA_CTS) 1549 icount->cts++; 1550 if (msr & EDGEPORT_MSR_DELTA_DSR) 1551 icount->dsr++; 1552 if (msr & EDGEPORT_MSR_DELTA_CD) 1553 icount->dcd++; 1554 if (msr & EDGEPORT_MSR_DELTA_RI) 1555 icount->rng++; 1556 wake_up_interruptible(&edge_port->delta_msr_wait); 1557 } 1558 1559 /* Save the new modem status */ 1560 edge_port->shadow_msr = msr & 0xf0; 1561 1562 tty = tty_port_tty_get(&edge_port->port->port); 1563 /* handle CTS flow control */ 1564 if (tty && C_CRTSCTS(tty)) { 1565 if (msr & EDGEPORT_MSR_CTS) { 1566 tty->hw_stopped = 0; 1567 tty_wakeup(tty); 1568 } else { 1569 tty->hw_stopped = 1; 1570 } 1571 } 1572 tty_kref_put(tty); 1573 1574 return; 1575} 1576 1577static void handle_new_lsr(struct edgeport_port *edge_port, int lsr_data, 1578 __u8 lsr, __u8 data) 1579{ 1580 struct async_icount *icount; 1581 __u8 new_lsr = (__u8)(lsr & (__u8)(LSR_OVER_ERR | LSR_PAR_ERR | 1582 LSR_FRM_ERR | LSR_BREAK)); 1583 struct tty_struct *tty; 1584 1585 dbg("%s - %02x", __func__, new_lsr); 1586 1587 edge_port->shadow_lsr = lsr; 1588 1589 if (new_lsr & LSR_BREAK) 1590 /* 1591 * Parity and Framing errors only count if they 1592 * occur exclusive of a break being received. 1593 */ 1594 new_lsr &= (__u8)(LSR_OVER_ERR | LSR_BREAK); 1595 1596 /* Place LSR data byte into Rx buffer */ 1597 if (lsr_data) { 1598 tty = tty_port_tty_get(&edge_port->port->port); 1599 if (tty) { 1600 edge_tty_recv(&edge_port->port->dev, tty, &data, 1); 1601 tty_kref_put(tty); 1602 } 1603 } 1604 1605 /* update input line counters */ 1606 icount = &edge_port->icount; 1607 if (new_lsr & LSR_BREAK) 1608 icount->brk++; 1609 if (new_lsr & LSR_OVER_ERR) 1610 icount->overrun++; 1611 if (new_lsr & LSR_PAR_ERR) 1612 icount->parity++; 1613 if (new_lsr & LSR_FRM_ERR) 1614 icount->frame++; 1615} 1616 1617 1618static void edge_interrupt_callback(struct urb *urb) 1619{ 1620 struct edgeport_serial *edge_serial = urb->context; 1621 struct usb_serial_port *port; 1622 struct edgeport_port *edge_port; 1623 unsigned char *data = urb->transfer_buffer; 1624 int length = urb->actual_length; 1625 int port_number; 1626 int function; 1627 int retval; 1628 __u8 lsr; 1629 __u8 msr; 1630 int status = urb->status; 1631 1632 dbg("%s", __func__); 1633 1634 switch (status) { 1635 case 0: 1636 /* success */ 1637 break; 1638 case -ECONNRESET: 1639 case -ENOENT: 1640 case -ESHUTDOWN: 1641 /* this urb is terminated, clean up */ 1642 dbg("%s - urb shutting down with status: %d", 1643 __func__, status); 1644 return; 1645 default: 1646 dev_err(&urb->dev->dev, "%s - nonzero urb status received: " 1647 "%d\n", __func__, status); 1648 goto exit; 1649 } 1650 1651 if (!length) { 1652 dbg("%s - no data in urb", __func__); 1653 goto exit; 1654 } 1655 1656 usb_serial_debug_data(debug, &edge_serial->serial->dev->dev, 1657 __func__, length, data); 1658 1659 if (length != 2) { 1660 dbg("%s - expecting packet of size 2, got %d", 1661 __func__, length); 1662 goto exit; 1663 } 1664 1665 port_number = TIUMP_GET_PORT_FROM_CODE(data[0]); 1666 function = TIUMP_GET_FUNC_FROM_CODE(data[0]); 1667 dbg("%s - port_number %d, function %d, info 0x%x", 1668 __func__, port_number, function, data[1]); 1669 port = edge_serial->serial->port[port_number]; 1670 edge_port = usb_get_serial_port_data(port); 1671 if (!edge_port) { 1672 dbg("%s - edge_port not found", __func__); 1673 return; 1674 } 1675 switch (function) { 1676 case TIUMP_INTERRUPT_CODE_LSR: 1677 lsr = map_line_status(data[1]); 1678 if (lsr & UMP_UART_LSR_DATA_MASK) { 1679 /* Save the LSR event for bulk read 1680 completion routine */ 1681 dbg("%s - LSR Event Port %u LSR Status = %02x", 1682 __func__, port_number, lsr); 1683 edge_port->lsr_event = 1; 1684 edge_port->lsr_mask = lsr; 1685 } else { 1686 dbg("%s - ===== Port %d LSR Status = %02x ======", 1687 __func__, port_number, lsr); 1688 handle_new_lsr(edge_port, 0, lsr, 0); 1689 } 1690 break; 1691 1692 case TIUMP_INTERRUPT_CODE_MSR: /* MSR */ 1693 /* Copy MSR from UMP */ 1694 msr = data[1]; 1695 dbg("%s - ===== Port %u MSR Status = %02x ======", 1696 __func__, port_number, msr); 1697 handle_new_msr(edge_port, msr); 1698 break; 1699 1700 default: 1701 dev_err(&urb->dev->dev, 1702 "%s - Unknown Interrupt code from UMP %x\n", 1703 __func__, data[1]); 1704 break; 1705 1706 } 1707 1708exit: 1709 retval = usb_submit_urb(urb, GFP_ATOMIC); 1710 if (retval) 1711 dev_err(&urb->dev->dev, 1712 "%s - usb_submit_urb failed with result %d\n", 1713 __func__, retval); 1714} 1715 1716static void edge_bulk_in_callback(struct urb *urb) 1717{ 1718 struct edgeport_port *edge_port = urb->context; 1719 unsigned char *data = urb->transfer_buffer; 1720 struct tty_struct *tty; 1721 int retval = 0; 1722 int port_number; 1723 int status = urb->status; 1724 1725 dbg("%s", __func__); 1726 1727 switch (status) { 1728 case 0: 1729 /* success */ 1730 break; 1731 case -ECONNRESET: 1732 case -ENOENT: 1733 case -ESHUTDOWN: 1734 /* this urb is terminated, clean up */ 1735 dbg("%s - urb shutting down with status: %d", 1736 __func__, status); 1737 return; 1738 default: 1739 dev_err(&urb->dev->dev, 1740 "%s - nonzero read bulk status received: %d\n", 1741 __func__, status); 1742 } 1743 1744 if (status == -EPIPE) 1745 goto exit; 1746 1747 if (status) { 1748 dev_err(&urb->dev->dev, "%s - stopping read!\n", __func__); 1749 return; 1750 } 1751 1752 port_number = edge_port->port->number - edge_port->port->serial->minor; 1753 1754 if (edge_port->lsr_event) { 1755 edge_port->lsr_event = 0; 1756 dbg("%s ===== Port %u LSR Status = %02x, Data = %02x ======", 1757 __func__, port_number, edge_port->lsr_mask, *data); 1758 handle_new_lsr(edge_port, 1, edge_port->lsr_mask, *data); 1759 /* Adjust buffer length/pointer */ 1760 --urb->actual_length; 1761 ++data; 1762 } 1763 1764 tty = tty_port_tty_get(&edge_port->port->port); 1765 if (tty && urb->actual_length) { 1766 usb_serial_debug_data(debug, &edge_port->port->dev, 1767 __func__, urb->actual_length, data); 1768 if (edge_port->close_pending) 1769 dbg("%s - close pending, dropping data on the floor", 1770 __func__); 1771 else 1772 edge_tty_recv(&edge_port->port->dev, tty, data, 1773 urb->actual_length); 1774 edge_port->icount.rx += urb->actual_length; 1775 } 1776 tty_kref_put(tty); 1777 1778exit: 1779 /* continue read unless stopped */ 1780 spin_lock(&edge_port->ep_lock); 1781 if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING) { 1782 urb->dev = edge_port->port->serial->dev; 1783 retval = usb_submit_urb(urb, GFP_ATOMIC); 1784 } else if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPING) { 1785 edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPED; 1786 } 1787 spin_unlock(&edge_port->ep_lock); 1788 if (retval) 1789 dev_err(&urb->dev->dev, 1790 "%s - usb_submit_urb failed with result %d\n", 1791 __func__, retval); 1792} 1793 1794static void edge_tty_recv(struct device *dev, struct tty_struct *tty, 1795 unsigned char *data, int length) 1796{ 1797 int queued; 1798 1799 queued = tty_insert_flip_string(tty, data, length); 1800 if (queued < length) 1801 dev_err(dev, "%s - dropping data, %d bytes lost\n", 1802 __func__, length - queued); 1803 tty_flip_buffer_push(tty); 1804} 1805 1806static void edge_bulk_out_callback(struct urb *urb) 1807{ 1808 struct usb_serial_port *port = urb->context; 1809 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 1810 int status = urb->status; 1811 struct tty_struct *tty; 1812 1813 dbg("%s - port %d", __func__, port->number); 1814 1815 edge_port->ep_write_urb_in_use = 0; 1816 1817 switch (status) { 1818 case 0: 1819 /* success */ 1820 break; 1821 case -ECONNRESET: 1822 case -ENOENT: 1823 case -ESHUTDOWN: 1824 /* this urb is terminated, clean up */ 1825 dbg("%s - urb shutting down with status: %d", 1826 __func__, status); 1827 return; 1828 default: 1829 dev_err(&urb->dev->dev, "%s - nonzero write bulk status " 1830 "received: %d\n", __func__, status); 1831 } 1832 1833 /* send any buffered data */ 1834 tty = tty_port_tty_get(&port->port); 1835 edge_send(tty); 1836 tty_kref_put(tty); 1837} 1838 1839static int edge_open(struct tty_struct *tty, struct usb_serial_port *port) 1840{ 1841 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 1842 struct edgeport_serial *edge_serial; 1843 struct usb_device *dev; 1844 struct urb *urb; 1845 int port_number; 1846 int status; 1847 u16 open_settings; 1848 u8 transaction_timeout; 1849 1850 dbg("%s - port %d", __func__, port->number); 1851 1852 if (edge_port == NULL) 1853 return -ENODEV; 1854 1855 port_number = port->number - port->serial->minor; 1856 switch (port_number) { 1857 case 0: 1858 edge_port->uart_base = UMPMEM_BASE_UART1; 1859 edge_port->dma_address = UMPD_OEDB1_ADDRESS; 1860 break; 1861 case 1: 1862 edge_port->uart_base = UMPMEM_BASE_UART2; 1863 edge_port->dma_address = UMPD_OEDB2_ADDRESS; 1864 break; 1865 default: 1866 dev_err(&port->dev, "Unknown port number!!!\n"); 1867 return -ENODEV; 1868 } 1869 1870 dbg("%s - port_number = %d, uart_base = %04x, dma_address = %04x", 1871 __func__, port_number, edge_port->uart_base, 1872 edge_port->dma_address); 1873 1874 dev = port->serial->dev; 1875 1876 memset(&(edge_port->icount), 0x00, sizeof(edge_port->icount)); 1877 init_waitqueue_head(&edge_port->delta_msr_wait); 1878 1879 /* turn off loopback */ 1880 status = ti_do_config(edge_port, UMPC_SET_CLR_LOOPBACK, 0); 1881 if (status) { 1882 dev_err(&port->dev, 1883 "%s - cannot send clear loopback command, %d\n", 1884 __func__, status); 1885 return status; 1886 } 1887 1888 /* set up the port settings */ 1889 if (tty) 1890 edge_set_termios(tty, port, tty->termios); 1891 1892 /* open up the port */ 1893 1894 /* milliseconds to timeout for DMA transfer */ 1895 transaction_timeout = 2; 1896 1897 edge_port->ump_read_timeout = 1898 max(20, ((transaction_timeout * 3) / 2)); 1899 1900 /* milliseconds to timeout for DMA transfer */ 1901 open_settings = (u8)(UMP_DMA_MODE_CONTINOUS | 1902 UMP_PIPE_TRANS_TIMEOUT_ENA | 1903 (transaction_timeout << 2)); 1904 1905 dbg("%s - Sending UMPC_OPEN_PORT", __func__); 1906 1907 /* Tell TI to open and start the port */ 1908 status = send_cmd(dev, UMPC_OPEN_PORT, 1909 (u8)(UMPM_UART1_PORT + port_number), open_settings, NULL, 0); 1910 if (status) { 1911 dev_err(&port->dev, "%s - cannot send open command, %d\n", 1912 __func__, status); 1913 return status; 1914 } 1915 1916 /* Start the DMA? */ 1917 status = send_cmd(dev, UMPC_START_PORT, 1918 (u8)(UMPM_UART1_PORT + port_number), 0, NULL, 0); 1919 if (status) { 1920 dev_err(&port->dev, "%s - cannot send start DMA command, %d\n", 1921 __func__, status); 1922 return status; 1923 } 1924 1925 /* Clear TX and RX buffers in UMP */ 1926 status = purge_port(port, UMP_PORT_DIR_OUT | UMP_PORT_DIR_IN); 1927 if (status) { 1928 dev_err(&port->dev, 1929 "%s - cannot send clear buffers command, %d\n", 1930 __func__, status); 1931 return status; 1932 } 1933 1934 /* Read Initial MSR */ 1935 status = ti_vread_sync(dev, UMPC_READ_MSR, 0, 1936 (__u16)(UMPM_UART1_PORT + port_number), 1937 &edge_port->shadow_msr, 1); 1938 if (status) { 1939 dev_err(&port->dev, "%s - cannot send read MSR command, %d\n", 1940 __func__, status); 1941 return status; 1942 } 1943 1944 dbg("ShadowMSR 0x%X", edge_port->shadow_msr); 1945 1946 /* Set Initial MCR */ 1947 edge_port->shadow_mcr = MCR_RTS | MCR_DTR; 1948 dbg("ShadowMCR 0x%X", edge_port->shadow_mcr); 1949 1950 edge_serial = edge_port->edge_serial; 1951 if (mutex_lock_interruptible(&edge_serial->es_lock)) 1952 return -ERESTARTSYS; 1953 if (edge_serial->num_ports_open == 0) { 1954 /* we are the first port to open, post the interrupt urb */ 1955 urb = edge_serial->serial->port[0]->interrupt_in_urb; 1956 if (!urb) { 1957 dev_err(&port->dev, 1958 "%s - no interrupt urb present, exiting\n", 1959 __func__); 1960 status = -EINVAL; 1961 goto release_es_lock; 1962 } 1963 urb->complete = edge_interrupt_callback; 1964 urb->context = edge_serial; 1965 urb->dev = dev; 1966 status = usb_submit_urb(urb, GFP_KERNEL); 1967 if (status) { 1968 dev_err(&port->dev, 1969 "%s - usb_submit_urb failed with value %d\n", 1970 __func__, status); 1971 goto release_es_lock; 1972 } 1973 } 1974 1975 usb_clear_halt(dev, port->write_urb->pipe); 1976 usb_clear_halt(dev, port->read_urb->pipe); 1977 1978 /* start up our bulk read urb */ 1979 urb = port->read_urb; 1980 if (!urb) { 1981 dev_err(&port->dev, "%s - no read urb present, exiting\n", 1982 __func__); 1983 status = -EINVAL; 1984 goto unlink_int_urb; 1985 } 1986 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING; 1987 urb->complete = edge_bulk_in_callback; 1988 urb->context = edge_port; 1989 urb->dev = dev; 1990 status = usb_submit_urb(urb, GFP_KERNEL); 1991 if (status) { 1992 dev_err(&port->dev, 1993 "%s - read bulk usb_submit_urb failed with value %d\n", 1994 __func__, status); 1995 goto unlink_int_urb; 1996 } 1997 1998 ++edge_serial->num_ports_open; 1999 2000 dbg("%s - exited", __func__); 2001 2002 goto release_es_lock; 2003 2004unlink_int_urb: 2005 if (edge_port->edge_serial->num_ports_open == 0) 2006 usb_kill_urb(port->serial->port[0]->interrupt_in_urb); 2007release_es_lock: 2008 mutex_unlock(&edge_serial->es_lock); 2009 return status; 2010} 2011 2012static void edge_close(struct usb_serial_port *port) 2013{ 2014 struct edgeport_serial *edge_serial; 2015 struct edgeport_port *edge_port; 2016 int port_number; 2017 int status; 2018 2019 dbg("%s - port %d", __func__, port->number); 2020 2021 edge_serial = usb_get_serial_data(port->serial); 2022 edge_port = usb_get_serial_port_data(port); 2023 if (edge_serial == NULL || edge_port == NULL) 2024 return; 2025 2026 /* The bulkreadcompletion routine will check 2027 * this flag and dump add read data */ 2028 edge_port->close_pending = 1; 2029 2030 /* chase the port close and flush */ 2031 chase_port(edge_port, (HZ * closing_wait) / 100, 1); 2032 2033 usb_kill_urb(port->read_urb); 2034 usb_kill_urb(port->write_urb); 2035 edge_port->ep_write_urb_in_use = 0; 2036 2037 /* assuming we can still talk to the device, 2038 * send a close port command to it */ 2039 dbg("%s - send umpc_close_port", __func__); 2040 port_number = port->number - port->serial->minor; 2041 status = send_cmd(port->serial->dev, 2042 UMPC_CLOSE_PORT, 2043 (__u8)(UMPM_UART1_PORT + port_number), 2044 0, 2045 NULL, 2046 0); 2047 mutex_lock(&edge_serial->es_lock); 2048 --edge_port->edge_serial->num_ports_open; 2049 if (edge_port->edge_serial->num_ports_open <= 0) { 2050 /* last port is now closed, let's shut down our interrupt urb */ 2051 usb_kill_urb(port->serial->port[0]->interrupt_in_urb); 2052 edge_port->edge_serial->num_ports_open = 0; 2053 } 2054 mutex_unlock(&edge_serial->es_lock); 2055 edge_port->close_pending = 0; 2056 2057 dbg("%s - exited", __func__); 2058} 2059 2060static int edge_write(struct tty_struct *tty, struct usb_serial_port *port, 2061 const unsigned char *data, int count) 2062{ 2063 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2064 2065 dbg("%s - port %d", __func__, port->number); 2066 2067 if (count == 0) { 2068 dbg("%s - write request of 0 bytes", __func__); 2069 return 0; 2070 } 2071 2072 if (edge_port == NULL) 2073 return -ENODEV; 2074 if (edge_port->close_pending == 1) 2075 return -ENODEV; 2076 2077 count = kfifo_in_locked(&edge_port->write_fifo, data, count, 2078 &edge_port->ep_lock); 2079 edge_send(tty); 2080 2081 return count; 2082} 2083 2084static void edge_send(struct tty_struct *tty) 2085{ 2086 struct usb_serial_port *port = tty->driver_data; 2087 int count, result; 2088 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2089 unsigned long flags; 2090 2091 2092 dbg("%s - port %d", __func__, port->number); 2093 2094 spin_lock_irqsave(&edge_port->ep_lock, flags); 2095 2096 if (edge_port->ep_write_urb_in_use) { 2097 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2098 return; 2099 } 2100 2101 count = kfifo_out(&edge_port->write_fifo, 2102 port->write_urb->transfer_buffer, 2103 port->bulk_out_size); 2104 2105 if (count == 0) { 2106 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2107 return; 2108 } 2109 2110 edge_port->ep_write_urb_in_use = 1; 2111 2112 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2113 2114 usb_serial_debug_data(debug, &port->dev, __func__, count, 2115 port->write_urb->transfer_buffer); 2116 2117 /* set up our urb */ 2118 usb_fill_bulk_urb(port->write_urb, port->serial->dev, 2119 usb_sndbulkpipe(port->serial->dev, 2120 port->bulk_out_endpointAddress), 2121 port->write_urb->transfer_buffer, count, 2122 edge_bulk_out_callback, 2123 port); 2124 2125 /* send the data out the bulk port */ 2126 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 2127 if (result) { 2128 dev_err(&port->dev, 2129 "%s - failed submitting write urb, error %d\n", 2130 __func__, result); 2131 edge_port->ep_write_urb_in_use = 0; 2132 /* TODO: reschedule edge_send */ 2133 } else 2134 edge_port->icount.tx += count; 2135 2136 /* wakeup any process waiting for writes to complete */ 2137 /* there is now more room in the buffer for new writes */ 2138 if (tty) 2139 tty_wakeup(tty); 2140} 2141 2142static int edge_write_room(struct tty_struct *tty) 2143{ 2144 struct usb_serial_port *port = tty->driver_data; 2145 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2146 int room = 0; 2147 unsigned long flags; 2148 2149 dbg("%s - port %d", __func__, port->number); 2150 2151 if (edge_port == NULL) 2152 return 0; 2153 if (edge_port->close_pending == 1) 2154 return 0; 2155 2156 spin_lock_irqsave(&edge_port->ep_lock, flags); 2157 room = kfifo_avail(&edge_port->write_fifo); 2158 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2159 2160 dbg("%s - returns %d", __func__, room); 2161 return room; 2162} 2163 2164static int edge_chars_in_buffer(struct tty_struct *tty) 2165{ 2166 struct usb_serial_port *port = tty->driver_data; 2167 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2168 int chars = 0; 2169 unsigned long flags; 2170 2171 dbg("%s - port %d", __func__, port->number); 2172 2173 if (edge_port == NULL) 2174 return 0; 2175 if (edge_port->close_pending == 1) 2176 return 0; 2177 2178 spin_lock_irqsave(&edge_port->ep_lock, flags); 2179 chars = kfifo_len(&edge_port->write_fifo); 2180 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2181 2182 dbg("%s - returns %d", __func__, chars); 2183 return chars; 2184} 2185 2186static void edge_throttle(struct tty_struct *tty) 2187{ 2188 struct usb_serial_port *port = tty->driver_data; 2189 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2190 int status; 2191 2192 dbg("%s - port %d", __func__, port->number); 2193 2194 if (edge_port == NULL) 2195 return; 2196 2197 /* if we are implementing XON/XOFF, send the stop character */ 2198 if (I_IXOFF(tty)) { 2199 unsigned char stop_char = STOP_CHAR(tty); 2200 status = edge_write(tty, port, &stop_char, 1); 2201 if (status <= 0) { 2202 dev_err(&port->dev, "%s - failed to write stop character, %d\n", __func__, status); 2203 } 2204 } 2205 2206 /* if we are implementing RTS/CTS, stop reads */ 2207 /* and the Edgeport will clear the RTS line */ 2208 if (C_CRTSCTS(tty)) 2209 stop_read(edge_port); 2210 2211} 2212 2213static void edge_unthrottle(struct tty_struct *tty) 2214{ 2215 struct usb_serial_port *port = tty->driver_data; 2216 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2217 int status; 2218 2219 dbg("%s - port %d", __func__, port->number); 2220 2221 if (edge_port == NULL) 2222 return; 2223 2224 /* if we are implementing XON/XOFF, send the start character */ 2225 if (I_IXOFF(tty)) { 2226 unsigned char start_char = START_CHAR(tty); 2227 status = edge_write(tty, port, &start_char, 1); 2228 if (status <= 0) { 2229 dev_err(&port->dev, "%s - failed to write start character, %d\n", __func__, status); 2230 } 2231 } 2232 /* if we are implementing RTS/CTS, restart reads */ 2233 /* are the Edgeport will assert the RTS line */ 2234 if (C_CRTSCTS(tty)) { 2235 status = restart_read(edge_port); 2236 if (status) 2237 dev_err(&port->dev, 2238 "%s - read bulk usb_submit_urb failed: %d\n", 2239 __func__, status); 2240 } 2241 2242} 2243 2244static void stop_read(struct edgeport_port *edge_port) 2245{ 2246 unsigned long flags; 2247 2248 spin_lock_irqsave(&edge_port->ep_lock, flags); 2249 2250 if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING) 2251 edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPING; 2252 edge_port->shadow_mcr &= ~MCR_RTS; 2253 2254 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2255} 2256 2257static int restart_read(struct edgeport_port *edge_port) 2258{ 2259 struct urb *urb; 2260 int status = 0; 2261 unsigned long flags; 2262 2263 spin_lock_irqsave(&edge_port->ep_lock, flags); 2264 2265 if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPED) { 2266 urb = edge_port->port->read_urb; 2267 urb->complete = edge_bulk_in_callback; 2268 urb->context = edge_port; 2269 urb->dev = edge_port->port->serial->dev; 2270 status = usb_submit_urb(urb, GFP_ATOMIC); 2271 } 2272 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING; 2273 edge_port->shadow_mcr |= MCR_RTS; 2274 2275 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2276 2277 return status; 2278} 2279 2280static void change_port_settings(struct tty_struct *tty, 2281 struct edgeport_port *edge_port, struct ktermios *old_termios) 2282{ 2283 struct ump_uart_config *config; 2284 int baud; 2285 unsigned cflag; 2286 int status; 2287 int port_number = edge_port->port->number - 2288 edge_port->port->serial->minor; 2289 2290 dbg("%s - port %d", __func__, edge_port->port->number); 2291 2292 config = kmalloc (sizeof (*config), GFP_KERNEL); 2293 if (!config) { 2294 *tty->termios = *old_termios; 2295 dev_err(&edge_port->port->dev, "%s - out of memory\n", 2296 __func__); 2297 return; 2298 } 2299 2300 cflag = tty->termios->c_cflag; 2301 2302 config->wFlags = 0; 2303 2304 /* These flags must be set */ 2305 config->wFlags |= UMP_MASK_UART_FLAGS_RECEIVE_MS_INT; 2306 config->wFlags |= UMP_MASK_UART_FLAGS_AUTO_START_ON_ERR; 2307 config->bUartMode = (__u8)(edge_port->bUartMode); 2308 2309 switch (cflag & CSIZE) { 2310 case CS5: 2311 config->bDataBits = UMP_UART_CHAR5BITS; 2312 dbg("%s - data bits = 5", __func__); 2313 break; 2314 case CS6: 2315 config->bDataBits = UMP_UART_CHAR6BITS; 2316 dbg("%s - data bits = 6", __func__); 2317 break; 2318 case CS7: 2319 config->bDataBits = UMP_UART_CHAR7BITS; 2320 dbg("%s - data bits = 7", __func__); 2321 break; 2322 default: 2323 case CS8: 2324 config->bDataBits = UMP_UART_CHAR8BITS; 2325 dbg("%s - data bits = 8", __func__); 2326 break; 2327 } 2328 2329 if (cflag & PARENB) { 2330 if (cflag & PARODD) { 2331 config->wFlags |= UMP_MASK_UART_FLAGS_PARITY; 2332 config->bParity = UMP_UART_ODDPARITY; 2333 dbg("%s - parity = odd", __func__); 2334 } else { 2335 config->wFlags |= UMP_MASK_UART_FLAGS_PARITY; 2336 config->bParity = UMP_UART_EVENPARITY; 2337 dbg("%s - parity = even", __func__); 2338 } 2339 } else { 2340 config->bParity = UMP_UART_NOPARITY; 2341 dbg("%s - parity = none", __func__); 2342 } 2343 2344 if (cflag & CSTOPB) { 2345 config->bStopBits = UMP_UART_STOPBIT2; 2346 dbg("%s - stop bits = 2", __func__); 2347 } else { 2348 config->bStopBits = UMP_UART_STOPBIT1; 2349 dbg("%s - stop bits = 1", __func__); 2350 } 2351 2352 /* figure out the flow control settings */ 2353 if (cflag & CRTSCTS) { 2354 config->wFlags |= UMP_MASK_UART_FLAGS_OUT_X_CTS_FLOW; 2355 config->wFlags |= UMP_MASK_UART_FLAGS_RTS_FLOW; 2356 dbg("%s - RTS/CTS is enabled", __func__); 2357 } else { 2358 dbg("%s - RTS/CTS is disabled", __func__); 2359 tty->hw_stopped = 0; 2360 restart_read(edge_port); 2361 } 2362 2363 /* if we are implementing XON/XOFF, set the start and stop 2364 character in the device */ 2365 config->cXon = START_CHAR(tty); 2366 config->cXoff = STOP_CHAR(tty); 2367 2368 /* if we are implementing INBOUND XON/XOFF */ 2369 if (I_IXOFF(tty)) { 2370 config->wFlags |= UMP_MASK_UART_FLAGS_IN_X; 2371 dbg("%s - INBOUND XON/XOFF is enabled, XON = %2x, XOFF = %2x", 2372 __func__, config->cXon, config->cXoff); 2373 } else 2374 dbg("%s - INBOUND XON/XOFF is disabled", __func__); 2375 2376 /* if we are implementing OUTBOUND XON/XOFF */ 2377 if (I_IXON(tty)) { 2378 config->wFlags |= UMP_MASK_UART_FLAGS_OUT_X; 2379 dbg("%s - OUTBOUND XON/XOFF is enabled, XON = %2x, XOFF = %2x", 2380 __func__, config->cXon, config->cXoff); 2381 } else 2382 dbg("%s - OUTBOUND XON/XOFF is disabled", __func__); 2383 2384 tty->termios->c_cflag &= ~CMSPAR; 2385 2386 /* Round the baud rate */ 2387 baud = tty_get_baud_rate(tty); 2388 if (!baud) { 2389 /* pick a default, any default... */ 2390 baud = 9600; 2391 } else 2392 tty_encode_baud_rate(tty, baud, baud); 2393 2394 edge_port->baud_rate = baud; 2395 config->wBaudRate = (__u16)((461550L + baud/2) / baud); 2396 2397 2398 dbg("%s - baud rate = %d, wBaudRate = %d", __func__, baud, 2399 config->wBaudRate); 2400 2401 dbg("wBaudRate: %d", (int)(461550L / config->wBaudRate)); 2402 dbg("wFlags: 0x%x", config->wFlags); 2403 dbg("bDataBits: %d", config->bDataBits); 2404 dbg("bParity: %d", config->bParity); 2405 dbg("bStopBits: %d", config->bStopBits); 2406 dbg("cXon: %d", config->cXon); 2407 dbg("cXoff: %d", config->cXoff); 2408 dbg("bUartMode: %d", config->bUartMode); 2409 2410 /* move the word values into big endian mode */ 2411 cpu_to_be16s(&config->wFlags); 2412 cpu_to_be16s(&config->wBaudRate); 2413 2414 status = send_cmd(edge_port->port->serial->dev, UMPC_SET_CONFIG, 2415 (__u8)(UMPM_UART1_PORT + port_number), 2416 0, (__u8 *)config, sizeof(*config)); 2417 if (status) 2418 dbg("%s - error %d when trying to write config to device", 2419 __func__, status); 2420 kfree(config); 2421 return; 2422} 2423 2424static void edge_set_termios(struct tty_struct *tty, 2425 struct usb_serial_port *port, struct ktermios *old_termios) 2426{ 2427 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2428 unsigned int cflag; 2429 2430 cflag = tty->termios->c_cflag; 2431 2432 dbg("%s - clfag %08x iflag %08x", __func__, 2433 tty->termios->c_cflag, tty->termios->c_iflag); 2434 dbg("%s - old clfag %08x old iflag %08x", __func__, 2435 old_termios->c_cflag, old_termios->c_iflag); 2436 dbg("%s - port %d", __func__, port->number); 2437 2438 if (edge_port == NULL) 2439 return; 2440 /* change the port settings to the new ones specified */ 2441 change_port_settings(tty, edge_port, old_termios); 2442 return; 2443} 2444 2445static int edge_tiocmset(struct tty_struct *tty, struct file *file, 2446 unsigned int set, unsigned int clear) 2447{ 2448 struct usb_serial_port *port = tty->driver_data; 2449 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2450 unsigned int mcr; 2451 unsigned long flags; 2452 2453 dbg("%s - port %d", __func__, port->number); 2454 2455 spin_lock_irqsave(&edge_port->ep_lock, flags); 2456 mcr = edge_port->shadow_mcr; 2457 if (set & TIOCM_RTS) 2458 mcr |= MCR_RTS; 2459 if (set & TIOCM_DTR) 2460 mcr |= MCR_DTR; 2461 if (set & TIOCM_LOOP) 2462 mcr |= MCR_LOOPBACK; 2463 2464 if (clear & TIOCM_RTS) 2465 mcr &= ~MCR_RTS; 2466 if (clear & TIOCM_DTR) 2467 mcr &= ~MCR_DTR; 2468 if (clear & TIOCM_LOOP) 2469 mcr &= ~MCR_LOOPBACK; 2470 2471 edge_port->shadow_mcr = mcr; 2472 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2473 2474 restore_mcr(edge_port, mcr); 2475 return 0; 2476} 2477 2478static int edge_tiocmget(struct tty_struct *tty, struct file *file) 2479{ 2480 struct usb_serial_port *port = tty->driver_data; 2481 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2482 unsigned int result = 0; 2483 unsigned int msr; 2484 unsigned int mcr; 2485 unsigned long flags; 2486 2487 dbg("%s - port %d", __func__, port->number); 2488 2489 spin_lock_irqsave(&edge_port->ep_lock, flags); 2490 2491 msr = edge_port->shadow_msr; 2492 mcr = edge_port->shadow_mcr; 2493 result = ((mcr & MCR_DTR) ? TIOCM_DTR: 0) /* 0x002 */ 2494 | ((mcr & MCR_RTS) ? TIOCM_RTS: 0) /* 0x004 */ 2495 | ((msr & EDGEPORT_MSR_CTS) ? TIOCM_CTS: 0) /* 0x020 */ 2496 | ((msr & EDGEPORT_MSR_CD) ? TIOCM_CAR: 0) /* 0x040 */ 2497 | ((msr & EDGEPORT_MSR_RI) ? TIOCM_RI: 0) /* 0x080 */ 2498 | ((msr & EDGEPORT_MSR_DSR) ? TIOCM_DSR: 0); /* 0x100 */ 2499 2500 2501 dbg("%s -- %x", __func__, result); 2502 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2503 2504 return result; 2505} 2506 2507static int get_serial_info(struct edgeport_port *edge_port, 2508 struct serial_struct __user *retinfo) 2509{ 2510 struct serial_struct tmp; 2511 2512 if (!retinfo) 2513 return -EFAULT; 2514 2515 memset(&tmp, 0, sizeof(tmp)); 2516 2517 tmp.type = PORT_16550A; 2518 tmp.line = edge_port->port->serial->minor; 2519 tmp.port = edge_port->port->number; 2520 tmp.irq = 0; 2521 tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; 2522 tmp.xmit_fifo_size = edge_port->port->bulk_out_size; 2523 tmp.baud_base = 9600; 2524 tmp.close_delay = 5*HZ; 2525 tmp.closing_wait = closing_wait; 2526 2527 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) 2528 return -EFAULT; 2529 return 0; 2530} 2531 2532static int edge_ioctl(struct tty_struct *tty, struct file *file, 2533 unsigned int cmd, unsigned long arg) 2534{ 2535 struct usb_serial_port *port = tty->driver_data; 2536 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2537 struct async_icount cnow; 2538 struct async_icount cprev; 2539 2540 dbg("%s - port %d, cmd = 0x%x", __func__, port->number, cmd); 2541 2542 switch (cmd) { 2543 case TIOCGSERIAL: 2544 dbg("%s - (%d) TIOCGSERIAL", __func__, port->number); 2545 return get_serial_info(edge_port, 2546 (struct serial_struct __user *) arg); 2547 case TIOCMIWAIT: 2548 dbg("%s - (%d) TIOCMIWAIT", __func__, port->number); 2549 cprev = edge_port->icount; 2550 while (1) { 2551 interruptible_sleep_on(&edge_port->delta_msr_wait); 2552 /* see if a signal did it */ 2553 if (signal_pending(current)) 2554 return -ERESTARTSYS; 2555 cnow = edge_port->icount; 2556 if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && 2557 cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) 2558 return -EIO; /* no change => error */ 2559 if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || 2560 ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || 2561 ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || 2562 ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { 2563 return 0; 2564 } 2565 cprev = cnow; 2566 } 2567 /* not reached */ 2568 break; 2569 case TIOCGICOUNT: 2570 dbg("%s - (%d) TIOCGICOUNT RX=%d, TX=%d", __func__, 2571 port->number, edge_port->icount.rx, edge_port->icount.tx); 2572 if (copy_to_user((void __user *)arg, &edge_port->icount, 2573 sizeof(edge_port->icount))) 2574 return -EFAULT; 2575 return 0; 2576 } 2577 return -ENOIOCTLCMD; 2578} 2579 2580static void edge_break(struct tty_struct *tty, int break_state) 2581{ 2582 struct usb_serial_port *port = tty->driver_data; 2583 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2584 int status; 2585 int bv = 0; /* Off */ 2586 2587 dbg("%s - state = %d", __func__, break_state); 2588 2589 /* chase the port close */ 2590 chase_port(edge_port, 0, 0); 2591 2592 if (break_state == -1) 2593 bv = 1; /* On */ 2594 status = ti_do_config(edge_port, UMPC_SET_CLR_BREAK, bv); 2595 if (status) 2596 dbg("%s - error %d sending break set/clear command.", 2597 __func__, status); 2598} 2599 2600static int edge_startup(struct usb_serial *serial) 2601{ 2602 struct edgeport_serial *edge_serial; 2603 struct edgeport_port *edge_port; 2604 struct usb_device *dev; 2605 int status; 2606 int i; 2607 2608 dev = serial->dev; 2609 2610 /* create our private serial structure */ 2611 edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL); 2612 if (edge_serial == NULL) { 2613 dev_err(&serial->dev->dev, "%s - Out of memory\n", __func__); 2614 return -ENOMEM; 2615 } 2616 mutex_init(&edge_serial->es_lock); 2617 edge_serial->serial = serial; 2618 usb_set_serial_data(serial, edge_serial); 2619 2620 status = download_fw(edge_serial); 2621 if (status) { 2622 kfree(edge_serial); 2623 return status; 2624 } 2625 2626 /* set up our port private structures */ 2627 for (i = 0; i < serial->num_ports; ++i) { 2628 edge_port = kzalloc(sizeof(struct edgeport_port), GFP_KERNEL); 2629 if (edge_port == NULL) { 2630 dev_err(&serial->dev->dev, "%s - Out of memory\n", 2631 __func__); 2632 goto cleanup; 2633 } 2634 spin_lock_init(&edge_port->ep_lock); 2635 if (kfifo_alloc(&edge_port->write_fifo, EDGE_OUT_BUF_SIZE, 2636 GFP_KERNEL)) { 2637 dev_err(&serial->dev->dev, "%s - Out of memory\n", 2638 __func__); 2639 kfree(edge_port); 2640 goto cleanup; 2641 } 2642 edge_port->port = serial->port[i]; 2643 edge_port->edge_serial = edge_serial; 2644 usb_set_serial_port_data(serial->port[i], edge_port); 2645 edge_port->bUartMode = default_uart_mode; 2646 } 2647 2648 return 0; 2649 2650cleanup: 2651 for (--i; i >= 0; --i) { 2652 edge_port = usb_get_serial_port_data(serial->port[i]); 2653 kfifo_free(&edge_port->write_fifo); 2654 kfree(edge_port); 2655 usb_set_serial_port_data(serial->port[i], NULL); 2656 } 2657 kfree(edge_serial); 2658 usb_set_serial_data(serial, NULL); 2659 return -ENOMEM; 2660} 2661 2662static void edge_disconnect(struct usb_serial *serial) 2663{ 2664 int i; 2665 struct edgeport_port *edge_port; 2666 2667 dbg("%s", __func__); 2668 2669 for (i = 0; i < serial->num_ports; ++i) { 2670 edge_port = usb_get_serial_port_data(serial->port[i]); 2671 edge_remove_sysfs_attrs(edge_port->port); 2672 } 2673} 2674 2675static void edge_release(struct usb_serial *serial) 2676{ 2677 int i; 2678 struct edgeport_port *edge_port; 2679 2680 dbg("%s", __func__); 2681 2682 for (i = 0; i < serial->num_ports; ++i) { 2683 edge_port = usb_get_serial_port_data(serial->port[i]); 2684 kfifo_free(&edge_port->write_fifo); 2685 kfree(edge_port); 2686 } 2687 kfree(usb_get_serial_data(serial)); 2688} 2689 2690 2691/* Sysfs Attributes */ 2692 2693static ssize_t show_uart_mode(struct device *dev, 2694 struct device_attribute *attr, char *buf) 2695{ 2696 struct usb_serial_port *port = to_usb_serial_port(dev); 2697 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2698 2699 return sprintf(buf, "%d\n", edge_port->bUartMode); 2700} 2701 2702static ssize_t store_uart_mode(struct device *dev, 2703 struct device_attribute *attr, const char *valbuf, size_t count) 2704{ 2705 struct usb_serial_port *port = to_usb_serial_port(dev); 2706 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2707 unsigned int v = simple_strtoul(valbuf, NULL, 0); 2708 2709 dbg("%s: setting uart_mode = %d", __func__, v); 2710 2711 if (v < 256) 2712 edge_port->bUartMode = v; 2713 else 2714 dev_err(dev, "%s - uart_mode %d is invalid\n", __func__, v); 2715 2716 return count; 2717} 2718 2719static DEVICE_ATTR(uart_mode, S_IWUSR | S_IRUGO, show_uart_mode, 2720 store_uart_mode); 2721 2722static int edge_create_sysfs_attrs(struct usb_serial_port *port) 2723{ 2724 return device_create_file(&port->dev, &dev_attr_uart_mode); 2725} 2726 2727static int edge_remove_sysfs_attrs(struct usb_serial_port *port) 2728{ 2729 device_remove_file(&port->dev, &dev_attr_uart_mode); 2730 return 0; 2731} 2732 2733 2734static struct usb_serial_driver edgeport_1port_device = { 2735 .driver = { 2736 .owner = THIS_MODULE, 2737 .name = "edgeport_ti_1", 2738 }, 2739 .description = "Edgeport TI 1 port adapter", 2740 .usb_driver = &io_driver, 2741 .id_table = edgeport_1port_id_table, 2742 .num_ports = 1, 2743 .open = edge_open, 2744 .close = edge_close, 2745 .throttle = edge_throttle, 2746 .unthrottle = edge_unthrottle, 2747 .attach = edge_startup, 2748 .disconnect = edge_disconnect, 2749 .release = edge_release, 2750 .port_probe = edge_create_sysfs_attrs, 2751 .ioctl = edge_ioctl, 2752 .set_termios = edge_set_termios, 2753 .tiocmget = edge_tiocmget, 2754 .tiocmset = edge_tiocmset, 2755 .write = edge_write, 2756 .write_room = edge_write_room, 2757 .chars_in_buffer = edge_chars_in_buffer, 2758 .break_ctl = edge_break, 2759 .read_int_callback = edge_interrupt_callback, 2760 .read_bulk_callback = edge_bulk_in_callback, 2761 .write_bulk_callback = edge_bulk_out_callback, 2762}; 2763 2764static struct usb_serial_driver edgeport_2port_device = { 2765 .driver = { 2766 .owner = THIS_MODULE, 2767 .name = "edgeport_ti_2", 2768 }, 2769 .description = "Edgeport TI 2 port adapter", 2770 .usb_driver = &io_driver, 2771 .id_table = edgeport_2port_id_table, 2772 .num_ports = 2, 2773 .open = edge_open, 2774 .close = edge_close, 2775 .throttle = edge_throttle, 2776 .unthrottle = edge_unthrottle, 2777 .attach = edge_startup, 2778 .disconnect = edge_disconnect, 2779 .release = edge_release, 2780 .port_probe = edge_create_sysfs_attrs, 2781 .ioctl = edge_ioctl, 2782 .set_termios = edge_set_termios, 2783 .tiocmget = edge_tiocmget, 2784 .tiocmset = edge_tiocmset, 2785 .write = edge_write, 2786 .write_room = edge_write_room, 2787 .chars_in_buffer = edge_chars_in_buffer, 2788 .break_ctl = edge_break, 2789 .read_int_callback = edge_interrupt_callback, 2790 .read_bulk_callback = edge_bulk_in_callback, 2791 .write_bulk_callback = edge_bulk_out_callback, 2792}; 2793 2794 2795static int __init edgeport_init(void) 2796{ 2797 int retval; 2798 retval = usb_serial_register(&edgeport_1port_device); 2799 if (retval) 2800 goto failed_1port_device_register; 2801 retval = usb_serial_register(&edgeport_2port_device); 2802 if (retval) 2803 goto failed_2port_device_register; 2804 retval = usb_register(&io_driver); 2805 if (retval) 2806 goto failed_usb_register; 2807 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" 2808 DRIVER_DESC "\n"); 2809 return 0; 2810failed_usb_register: 2811 usb_serial_deregister(&edgeport_2port_device); 2812failed_2port_device_register: 2813 usb_serial_deregister(&edgeport_1port_device); 2814failed_1port_device_register: 2815 return retval; 2816} 2817 2818static void __exit edgeport_exit(void) 2819{ 2820 usb_deregister(&io_driver); 2821 usb_serial_deregister(&edgeport_1port_device); 2822 usb_serial_deregister(&edgeport_2port_device); 2823} 2824 2825module_init(edgeport_init); 2826module_exit(edgeport_exit); 2827 2828/* Module information */ 2829MODULE_AUTHOR(DRIVER_AUTHOR); 2830MODULE_DESCRIPTION(DRIVER_DESC); 2831MODULE_LICENSE("GPL"); 2832MODULE_FIRMWARE("edgeport/down3.bin"); 2833 2834module_param(debug, bool, S_IRUGO | S_IWUSR); 2835MODULE_PARM_DESC(debug, "Debug enabled or not"); 2836 2837module_param(closing_wait, int, S_IRUGO | S_IWUSR); 2838MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs"); 2839 2840module_param(ignore_cpu_rev, bool, S_IRUGO | S_IWUSR); 2841MODULE_PARM_DESC(ignore_cpu_rev, 2842 "Ignore the cpu revision when connecting to a device"); 2843 2844module_param(default_uart_mode, int, S_IRUGO | S_IWUSR); 2845MODULE_PARM_DESC(default_uart_mode, "Default uart_mode, 0=RS232, ..."); 2846