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