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 */ 82 struct product_info { 83 int TiMode; /* Current TI Mode */ 84 __u8 hardware_type; /* Type of hardware */ 85 } __attribute__((packed)); 86 87 struct 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 113 struct 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 */ 125 static 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 145 static 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 */ 168 static 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 205 MODULE_DEVICE_TABLE(usb, id_table_combined); 206 207 static 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 216 static unsigned char OperationalMajorVersion; 217 static unsigned char OperationalMinorVersion; 218 static unsigned short OperationalBuildNumber; 219 220 static int debug; 221 222 static int closing_wait = EDGE_CLOSING_WAIT; 223 static int ignore_cpu_rev; 224 static int default_uart_mode; /* RS232 */ 225 226 static void edge_tty_recv(struct device *dev, struct tty_struct *tty, 227 unsigned char *data, int length); 228 229 static void stop_read(struct edgeport_port *edge_port); 230 static int restart_read(struct edgeport_port *edge_port); 231 232 static void edge_set_termios(struct tty_struct *tty, 233 struct usb_serial_port *port, struct ktermios *old_termios); 234 static void edge_send(struct tty_struct *tty); 235 236 /* sysfs attributes */ 237 static int edge_create_sysfs_attrs(struct usb_serial_port *port); 238 static int edge_remove_sysfs_attrs(struct usb_serial_port *port); 239 240 241 static 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 259 static 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 277 static 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 */ 285 static 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 */ 307 static 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 353 static 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 */ 361 static 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 */ 388 static 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 */ 427 static 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 */ 501 static 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 */ 545 exit_is_tx_active: 546 dbg("%s - return %d", __func__, bytes_left); 547 548 kfree(lsr); 549 kfree(oedb); 550 return bytes_left; 551 } 552 553 static 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 608 static 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 631 static 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 649 static 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 */ 665 static 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 */ 693 static 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 */ 709 static 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 785 out: 786 kfree(buffer); 787 kfree(rom_desc); 788 return status; 789 } 790 791 static 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 829 exit: 830 kfree(rom_desc); 831 return status; 832 } 833 834 /* Build firmware header used for firmware update */ 835 static 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 */ 919 static 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; 960 out: 961 kfree(data); 962 return status; 963 } 964 965 static 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) */ 978 static 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 1005 /* FIXME!!! */ 1006 static int config_boot_dev(struct usb_device *dev) 1007 { 1008 return 0; 1009 } 1010 1011 static int ti_cpu_rev(struct edge_ti_manuf_descriptor *desc) 1012 { 1013 return TI_GET_CPU_REVISION(desc->CpuRev_BoardRev); 1014 } 1015 1016 /** 1017 * DownloadTIFirmware - Download run-time operating firmware to the TI5052 1018 * 1019 * This routine downloads the main operating code into the TI5052, using the 1020 * boot code already burned into E2PROM or ROM. 1021 */ 1022 static int download_fw(struct edgeport_serial *serial) 1023 { 1024 struct device *dev = &serial->serial->dev->dev; 1025 int status = 0; 1026 int start_address; 1027 struct edge_ti_manuf_descriptor *ti_manuf_desc; 1028 struct usb_interface_descriptor *interface; 1029 int download_cur_ver; 1030 int download_new_ver; 1031 1032 /* This routine is entered by both the BOOT mode and the Download mode 1033 * We can determine which code is running by the reading the config 1034 * descriptor and if we have only one bulk pipe it is in boot mode 1035 */ 1036 serial->product_info.hardware_type = HARDWARE_TYPE_TIUMP; 1037 1038 /* Default to type 2 i2c */ 1039 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_II; 1040 1041 status = choose_config(serial->serial->dev); 1042 if (status) 1043 return status; 1044 1045 interface = &serial->serial->interface->cur_altsetting->desc; 1046 if (!interface) { 1047 dev_err(dev, "%s - no interface set, error!\n", __func__); 1048 return -ENODEV; 1049 } 1050 1051 /* 1052 * Setup initial mode -- the default mode 0 is TI_MODE_CONFIGURING 1053 * if we have more than one endpoint we are definitely in download 1054 * mode 1055 */ 1056 if (interface->bNumEndpoints > 1) 1057 serial->product_info.TiMode = TI_MODE_DOWNLOAD; 1058 else 1059 /* Otherwise we will remain in configuring mode */ 1060 serial->product_info.TiMode = TI_MODE_CONFIGURING; 1061 1062 /********************************************************************/ 1063 /* Download Mode */ 1064 /********************************************************************/ 1065 if (serial->product_info.TiMode == TI_MODE_DOWNLOAD) { 1066 struct ti_i2c_desc *rom_desc; 1067 1068 dbg("%s - RUNNING IN DOWNLOAD MODE", __func__); 1069 1070 status = check_i2c_image(serial); 1071 if (status) { 1072 dbg("%s - DOWNLOAD MODE -- BAD I2C", __func__); 1073 return status; 1074 } 1075 1076 /* Validate Hardware version number 1077 * Read Manufacturing Descriptor from TI Based Edgeport 1078 */ 1079 ti_manuf_desc = kmalloc(sizeof(*ti_manuf_desc), GFP_KERNEL); 1080 if (!ti_manuf_desc) { 1081 dev_err(dev, "%s - out of memory.\n", __func__); 1082 return -ENOMEM; 1083 } 1084 status = get_manuf_info(serial, (__u8 *)ti_manuf_desc); 1085 if (status) { 1086 kfree(ti_manuf_desc); 1087 return status; 1088 } 1089 1090 /* Check version number of ION descriptor */ 1091 if (!ignore_cpu_rev && ti_cpu_rev(ti_manuf_desc) < 2) { 1092 dbg("%s - Wrong CPU Rev %d (Must be 2)", 1093 __func__, ti_cpu_rev(ti_manuf_desc)); 1094 kfree(ti_manuf_desc); 1095 return -EINVAL; 1096 } 1097 1098 rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL); 1099 if (!rom_desc) { 1100 dev_err(dev, "%s - out of memory.\n", __func__); 1101 kfree(ti_manuf_desc); 1102 return -ENOMEM; 1103 } 1104 1105 /* Search for type 2 record (firmware record) */ 1106 start_address = get_descriptor_addr(serial, 1107 I2C_DESC_TYPE_FIRMWARE_BASIC, rom_desc); 1108 if (start_address != 0) { 1109 struct ti_i2c_firmware_rec *firmware_version; 1110 u8 *record; 1111 1112 dbg("%s - Found Type FIRMWARE (Type 2) record", 1113 __func__); 1114 1115 firmware_version = kmalloc(sizeof(*firmware_version), 1116 GFP_KERNEL); 1117 if (!firmware_version) { 1118 dev_err(dev, "%s - out of memory.\n", __func__); 1119 kfree(rom_desc); 1120 kfree(ti_manuf_desc); 1121 return -ENOMEM; 1122 } 1123 1124 /* Validate version number 1125 * Read the descriptor data 1126 */ 1127 status = read_rom(serial, start_address + 1128 sizeof(struct ti_i2c_desc), 1129 sizeof(struct ti_i2c_firmware_rec), 1130 (__u8 *)firmware_version); 1131 if (status) { 1132 kfree(firmware_version); 1133 kfree(rom_desc); 1134 kfree(ti_manuf_desc); 1135 return status; 1136 } 1137 1138 /* Check version number of download with current 1139 version in I2c */ 1140 download_cur_ver = (firmware_version->Ver_Major << 8) + 1141 (firmware_version->Ver_Minor); 1142 download_new_ver = (OperationalMajorVersion << 8) + 1143 (OperationalMinorVersion); 1144 1145 dbg("%s - >> FW Versions Device %d.%d Driver %d.%d", 1146 __func__, 1147 firmware_version->Ver_Major, 1148 firmware_version->Ver_Minor, 1149 OperationalMajorVersion, 1150 OperationalMinorVersion); 1151 1152 /* Check if we have an old version in the I2C and 1153 update if necessary */ 1154 if (download_cur_ver < download_new_ver) { 1155 dbg("%s - Update I2C dld from %d.%d to %d.%d", 1156 __func__, 1157 firmware_version->Ver_Major, 1158 firmware_version->Ver_Minor, 1159 OperationalMajorVersion, 1160 OperationalMinorVersion); 1161 1162 record = kmalloc(1, GFP_KERNEL); 1163 if (!record) { 1164 dev_err(dev, "%s - out of memory.\n", 1165 __func__); 1166 kfree(firmware_version); 1167 kfree(rom_desc); 1168 kfree(ti_manuf_desc); 1169 return -ENOMEM; 1170 } 1171 /* In order to update the I2C firmware we must 1172 * change the type 2 record to type 0xF2. This 1173 * will force the UMP to come up in Boot Mode. 1174 * Then while in boot mode, the driver will 1175 * download the latest firmware (padded to 1176 * 15.5k) into the UMP ram. Finally when the 1177 * device comes back up in download mode the 1178 * driver will cause the new firmware to be 1179 * copied from the UMP Ram to I2C and the 1180 * firmware will update the record type from 1181 * 0xf2 to 0x02. 1182 */ 1183 *record = I2C_DESC_TYPE_FIRMWARE_BLANK; 1184 1185 /* Change the I2C Firmware record type to 1186 0xf2 to trigger an update */ 1187 status = write_rom(serial, start_address, 1188 sizeof(*record), record); 1189 if (status) { 1190 kfree(record); 1191 kfree(firmware_version); 1192 kfree(rom_desc); 1193 kfree(ti_manuf_desc); 1194 return status; 1195 } 1196 1197 /* verify the write -- must do this in order 1198 * for write to complete before we do the 1199 * hardware reset 1200 */ 1201 status = read_rom(serial, 1202 start_address, 1203 sizeof(*record), 1204 record); 1205 if (status) { 1206 kfree(record); 1207 kfree(firmware_version); 1208 kfree(rom_desc); 1209 kfree(ti_manuf_desc); 1210 return status; 1211 } 1212 1213 if (*record != I2C_DESC_TYPE_FIRMWARE_BLANK) { 1214 dev_err(dev, 1215 "%s - error resetting device\n", 1216 __func__); 1217 kfree(record); 1218 kfree(firmware_version); 1219 kfree(rom_desc); 1220 kfree(ti_manuf_desc); 1221 return -ENODEV; 1222 } 1223 1224 dbg("%s - HARDWARE RESET", __func__); 1225 1226 /* Reset UMP -- Back to BOOT MODE */ 1227 status = ti_vsend_sync(serial->serial->dev, 1228 UMPC_HARDWARE_RESET, 1229 0, 0, NULL, 0); 1230 1231 dbg("%s - HARDWARE RESET return %d", 1232 __func__, status); 1233 1234 /* return an error on purpose. */ 1235 kfree(record); 1236 kfree(firmware_version); 1237 kfree(rom_desc); 1238 kfree(ti_manuf_desc); 1239 return -ENODEV; 1240 } 1241 kfree(firmware_version); 1242 } 1243 /* Search for type 0xF2 record (firmware blank record) */ 1244 else if ((start_address = get_descriptor_addr(serial, I2C_DESC_TYPE_FIRMWARE_BLANK, rom_desc)) != 0) { 1245 #define HEADER_SIZE (sizeof(struct ti_i2c_desc) + \ 1246 sizeof(struct ti_i2c_firmware_rec)) 1247 __u8 *header; 1248 __u8 *vheader; 1249 1250 header = kmalloc(HEADER_SIZE, GFP_KERNEL); 1251 if (!header) { 1252 dev_err(dev, "%s - out of memory.\n", __func__); 1253 kfree(rom_desc); 1254 kfree(ti_manuf_desc); 1255 return -ENOMEM; 1256 } 1257 1258 vheader = kmalloc(HEADER_SIZE, GFP_KERNEL); 1259 if (!vheader) { 1260 dev_err(dev, "%s - out of memory.\n", __func__); 1261 kfree(header); 1262 kfree(rom_desc); 1263 kfree(ti_manuf_desc); 1264 return -ENOMEM; 1265 } 1266 1267 dbg("%s - Found Type BLANK FIRMWARE (Type F2) record", 1268 __func__); 1269 1270 /* 1271 * In order to update the I2C firmware we must change 1272 * the type 2 record to type 0xF2. This will force the 1273 * UMP to come up in Boot Mode. Then while in boot 1274 * mode, the driver will download the latest firmware 1275 * (padded to 15.5k) into the UMP ram. Finally when the 1276 * device comes back up in download mode the driver 1277 * will cause the new firmware to be copied from the 1278 * UMP Ram to I2C and the firmware will update the 1279 * record type from 0xf2 to 0x02. 1280 */ 1281 status = build_i2c_fw_hdr(header, dev); 1282 if (status) { 1283 kfree(vheader); 1284 kfree(header); 1285 kfree(rom_desc); 1286 kfree(ti_manuf_desc); 1287 return -EINVAL; 1288 } 1289 1290 /* Update I2C with type 0xf2 record with correct 1291 size and checksum */ 1292 status = write_rom(serial, 1293 start_address, 1294 HEADER_SIZE, 1295 header); 1296 if (status) { 1297 kfree(vheader); 1298 kfree(header); 1299 kfree(rom_desc); 1300 kfree(ti_manuf_desc); 1301 return -EINVAL; 1302 } 1303 1304 /* verify the write -- must do this in order for 1305 write to complete before we do the hardware reset */ 1306 status = read_rom(serial, start_address, 1307 HEADER_SIZE, vheader); 1308 1309 if (status) { 1310 dbg("%s - can't read header back", __func__); 1311 kfree(vheader); 1312 kfree(header); 1313 kfree(rom_desc); 1314 kfree(ti_manuf_desc); 1315 return status; 1316 } 1317 if (memcmp(vheader, header, HEADER_SIZE)) { 1318 dbg("%s - write download record failed", 1319 __func__); 1320 kfree(vheader); 1321 kfree(header); 1322 kfree(rom_desc); 1323 kfree(ti_manuf_desc); 1324 return -EINVAL; 1325 } 1326 1327 kfree(vheader); 1328 kfree(header); 1329 1330 dbg("%s - Start firmware update", __func__); 1331 1332 /* Tell firmware to copy download image into I2C */ 1333 status = ti_vsend_sync(serial->serial->dev, 1334 UMPC_COPY_DNLD_TO_I2C, 0, 0, NULL, 0); 1335 1336 dbg("%s - Update complete 0x%x", __func__, status); 1337 if (status) { 1338 dev_err(dev, 1339 "%s - UMPC_COPY_DNLD_TO_I2C failed\n", 1340 __func__); 1341 kfree(rom_desc); 1342 kfree(ti_manuf_desc); 1343 return status; 1344 } 1345 } 1346 1347 // The device is running the download code 1348 kfree(rom_desc); 1349 kfree(ti_manuf_desc); 1350 return 0; 1351 } 1352 1353 /********************************************************************/ 1354 /* Boot Mode */ 1355 /********************************************************************/ 1356 dbg("%s - RUNNING IN BOOT MODE", __func__); 1357 1358 /* Configure the TI device so we can use the BULK pipes for download */ 1359 status = config_boot_dev(serial->serial->dev); 1360 if (status) 1361 return status; 1362 1363 if (le16_to_cpu(serial->serial->dev->descriptor.idVendor) 1364 != USB_VENDOR_ID_ION) { 1365 dbg("%s - VID = 0x%x", __func__, 1366 le16_to_cpu(serial->serial->dev->descriptor.idVendor)); 1367 serial->TI_I2C_Type = DTK_ADDR_SPACE_I2C_TYPE_II; 1368 goto stayinbootmode; 1369 } 1370 1371 /* We have an ION device (I2c Must be programmed) 1372 Determine I2C image type */ 1373 if (i2c_type_bootmode(serial)) 1374 goto stayinbootmode; 1375 1376 /* Check for ION Vendor ID and that the I2C is valid */ 1377 if (!check_i2c_image(serial)) { 1378 struct ti_i2c_image_header *header; 1379 int i; 1380 __u8 cs = 0; 1381 __u8 *buffer; 1382 int buffer_size; 1383 int err; 1384 const struct firmware *fw; 1385 const char *fw_name = "edgeport/down3.bin"; 1386 1387 /* Validate Hardware version number 1388 * Read Manufacturing Descriptor from TI Based Edgeport 1389 */ 1390 ti_manuf_desc = kmalloc(sizeof(*ti_manuf_desc), GFP_KERNEL); 1391 if (!ti_manuf_desc) { 1392 dev_err(dev, "%s - out of memory.\n", __func__); 1393 return -ENOMEM; 1394 } 1395 status = get_manuf_info(serial, (__u8 *)ti_manuf_desc); 1396 if (status) { 1397 kfree(ti_manuf_desc); 1398 goto stayinbootmode; 1399 } 1400 1401 /* Check for version 2 */ 1402 if (!ignore_cpu_rev && ti_cpu_rev(ti_manuf_desc) < 2) { 1403 dbg("%s - Wrong CPU Rev %d (Must be 2)", 1404 __func__, ti_cpu_rev(ti_manuf_desc)); 1405 kfree(ti_manuf_desc); 1406 goto stayinbootmode; 1407 } 1408 1409 kfree(ti_manuf_desc); 1410 1411 /* 1412 * In order to update the I2C firmware we must change the type 1413 * 2 record to type 0xF2. This will force the UMP to come up 1414 * in Boot Mode. Then while in boot mode, the driver will 1415 * download the latest firmware (padded to 15.5k) into the 1416 * UMP ram. Finally when the device comes back up in download 1417 * mode the driver will cause the new firmware to be copied 1418 * from the UMP Ram to I2C and the firmware will update the 1419 * record type from 0xf2 to 0x02. 1420 * 1421 * Do we really have to copy the whole firmware image, 1422 * or could we do this in place! 1423 */ 1424 1425 /* Allocate a 15.5k buffer + 3 byte header */ 1426 buffer_size = (((1024 * 16) - 512) + 1427 sizeof(struct ti_i2c_image_header)); 1428 buffer = kmalloc(buffer_size, GFP_KERNEL); 1429 if (!buffer) { 1430 dev_err(dev, "%s - out of memory\n", __func__); 1431 return -ENOMEM; 1432 } 1433 1434 /* Initialize the buffer to 0xff (pad the buffer) */ 1435 memset(buffer, 0xff, buffer_size); 1436 1437 err = request_firmware(&fw, fw_name, dev); 1438 if (err) { 1439 printk(KERN_ERR "Failed to load image \"%s\" err %d\n", 1440 fw_name, err); 1441 kfree(buffer); 1442 return err; 1443 } 1444 memcpy(buffer, &fw->data[4], fw->size - 4); 1445 release_firmware(fw); 1446 1447 for (i = sizeof(struct ti_i2c_image_header); 1448 i < buffer_size; i++) { 1449 cs = (__u8)(cs + buffer[i]); 1450 } 1451 1452 header = (struct ti_i2c_image_header *)buffer; 1453 1454 /* update length and checksum after padding */ 1455 header->Length = cpu_to_le16((__u16)(buffer_size - 1456 sizeof(struct ti_i2c_image_header))); 1457 header->CheckSum = cs; 1458 1459 /* Download the operational code */ 1460 dbg("%s - Downloading operational code image (TI UMP)", 1461 __func__); 1462 status = download_code(serial, buffer, buffer_size); 1463 1464 kfree(buffer); 1465 1466 if (status) { 1467 dbg("%s - Error downloading operational code image", 1468 __func__); 1469 return status; 1470 } 1471 1472 /* Device will reboot */ 1473 serial->product_info.TiMode = TI_MODE_TRANSITIONING; 1474 1475 dbg("%s - Download successful -- Device rebooting...", 1476 __func__); 1477 1478 /* return an error on purpose */ 1479 return -ENODEV; 1480 } 1481 1482 stayinbootmode: 1483 /* Eprom is invalid or blank stay in boot mode */ 1484 dbg("%s - STAYING IN BOOT MODE", __func__); 1485 serial->product_info.TiMode = TI_MODE_BOOT; 1486 1487 return 0; 1488 } 1489 1490 1491 static int ti_do_config(struct edgeport_port *port, int feature, int on) 1492 { 1493 int port_number = port->port->number - port->port->serial->minor; 1494 on = !!on; /* 1 or 0 not bitmask */ 1495 return send_cmd(port->port->serial->dev, 1496 feature, (__u8)(UMPM_UART1_PORT + port_number), 1497 on, NULL, 0); 1498 } 1499 1500 1501 static int restore_mcr(struct edgeport_port *port, __u8 mcr) 1502 { 1503 int status = 0; 1504 1505 dbg("%s - %x", __func__, mcr); 1506 1507 status = ti_do_config(port, UMPC_SET_CLR_DTR, mcr & MCR_DTR); 1508 if (status) 1509 return status; 1510 status = ti_do_config(port, UMPC_SET_CLR_RTS, mcr & MCR_RTS); 1511 if (status) 1512 return status; 1513 return ti_do_config(port, UMPC_SET_CLR_LOOPBACK, mcr & MCR_LOOPBACK); 1514 } 1515 1516 /* Convert TI LSR to standard UART flags */ 1517 static __u8 map_line_status(__u8 ti_lsr) 1518 { 1519 __u8 lsr = 0; 1520 1521 #define MAP_FLAG(flagUmp, flagUart) \ 1522 if (ti_lsr & flagUmp) \ 1523 lsr |= flagUart; 1524 1525 MAP_FLAG(UMP_UART_LSR_OV_MASK, LSR_OVER_ERR) /* overrun */ 1526 MAP_FLAG(UMP_UART_LSR_PE_MASK, LSR_PAR_ERR) /* parity error */ 1527 MAP_FLAG(UMP_UART_LSR_FE_MASK, LSR_FRM_ERR) /* framing error */ 1528 MAP_FLAG(UMP_UART_LSR_BR_MASK, LSR_BREAK) /* break detected */ 1529 MAP_FLAG(UMP_UART_LSR_RX_MASK, LSR_RX_AVAIL) /* rx data available */ 1530 MAP_FLAG(UMP_UART_LSR_TX_MASK, LSR_TX_EMPTY) /* tx hold reg empty */ 1531 1532 #undef MAP_FLAG 1533 1534 return lsr; 1535 } 1536 1537 static void handle_new_msr(struct edgeport_port *edge_port, __u8 msr) 1538 { 1539 struct async_icount *icount; 1540 struct tty_struct *tty; 1541 1542 dbg("%s - %02x", __func__, msr); 1543 1544 if (msr & (EDGEPORT_MSR_DELTA_CTS | EDGEPORT_MSR_DELTA_DSR | 1545 EDGEPORT_MSR_DELTA_RI | EDGEPORT_MSR_DELTA_CD)) { 1546 icount = &edge_port->icount; 1547 1548 /* update input line counters */ 1549 if (msr & EDGEPORT_MSR_DELTA_CTS) 1550 icount->cts++; 1551 if (msr & EDGEPORT_MSR_DELTA_DSR) 1552 icount->dsr++; 1553 if (msr & EDGEPORT_MSR_DELTA_CD) 1554 icount->dcd++; 1555 if (msr & EDGEPORT_MSR_DELTA_RI) 1556 icount->rng++; 1557 wake_up_interruptible(&edge_port->delta_msr_wait); 1558 } 1559 1560 /* Save the new modem status */ 1561 edge_port->shadow_msr = msr & 0xf0; 1562 1563 tty = tty_port_tty_get(&edge_port->port->port); 1564 /* handle CTS flow control */ 1565 if (tty && C_CRTSCTS(tty)) { 1566 if (msr & EDGEPORT_MSR_CTS) { 1567 tty->hw_stopped = 0; 1568 tty_wakeup(tty); 1569 } else { 1570 tty->hw_stopped = 1; 1571 } 1572 } 1573 tty_kref_put(tty); 1574 } 1575 1576 static void handle_new_lsr(struct edgeport_port *edge_port, int lsr_data, 1577 __u8 lsr, __u8 data) 1578 { 1579 struct async_icount *icount; 1580 __u8 new_lsr = (__u8)(lsr & (__u8)(LSR_OVER_ERR | LSR_PAR_ERR | 1581 LSR_FRM_ERR | LSR_BREAK)); 1582 struct tty_struct *tty; 1583 1584 dbg("%s - %02x", __func__, new_lsr); 1585 1586 edge_port->shadow_lsr = lsr; 1587 1588 if (new_lsr & LSR_BREAK) 1589 /* 1590 * Parity and Framing errors only count if they 1591 * occur exclusive of a break being received. 1592 */ 1593 new_lsr &= (__u8)(LSR_OVER_ERR | LSR_BREAK); 1594 1595 /* Place LSR data byte into Rx buffer */ 1596 if (lsr_data) { 1597 tty = tty_port_tty_get(&edge_port->port->port); 1598 if (tty) { 1599 edge_tty_recv(&edge_port->port->dev, tty, &data, 1); 1600 tty_kref_put(tty); 1601 } 1602 } 1603 1604 /* update input line counters */ 1605 icount = &edge_port->icount; 1606 if (new_lsr & LSR_BREAK) 1607 icount->brk++; 1608 if (new_lsr & LSR_OVER_ERR) 1609 icount->overrun++; 1610 if (new_lsr & LSR_PAR_ERR) 1611 icount->parity++; 1612 if (new_lsr & LSR_FRM_ERR) 1613 icount->frame++; 1614 } 1615 1616 1617 static void edge_interrupt_callback(struct urb *urb) 1618 { 1619 struct edgeport_serial *edge_serial = urb->context; 1620 struct usb_serial_port *port; 1621 struct edgeport_port *edge_port; 1622 unsigned char *data = urb->transfer_buffer; 1623 int length = urb->actual_length; 1624 int port_number; 1625 int function; 1626 int retval; 1627 __u8 lsr; 1628 __u8 msr; 1629 int status = urb->status; 1630 1631 dbg("%s", __func__); 1632 1633 switch (status) { 1634 case 0: 1635 /* success */ 1636 break; 1637 case -ECONNRESET: 1638 case -ENOENT: 1639 case -ESHUTDOWN: 1640 /* this urb is terminated, clean up */ 1641 dbg("%s - urb shutting down with status: %d", 1642 __func__, status); 1643 return; 1644 default: 1645 dev_err(&urb->dev->dev, "%s - nonzero urb status received: " 1646 "%d\n", __func__, status); 1647 goto exit; 1648 } 1649 1650 if (!length) { 1651 dbg("%s - no data in urb", __func__); 1652 goto exit; 1653 } 1654 1655 usb_serial_debug_data(debug, &edge_serial->serial->dev->dev, 1656 __func__, length, data); 1657 1658 if (length != 2) { 1659 dbg("%s - expecting packet of size 2, got %d", 1660 __func__, length); 1661 goto exit; 1662 } 1663 1664 port_number = TIUMP_GET_PORT_FROM_CODE(data[0]); 1665 function = TIUMP_GET_FUNC_FROM_CODE(data[0]); 1666 dbg("%s - port_number %d, function %d, info 0x%x", 1667 __func__, port_number, function, data[1]); 1668 port = edge_serial->serial->port[port_number]; 1669 edge_port = usb_get_serial_port_data(port); 1670 if (!edge_port) { 1671 dbg("%s - edge_port not found", __func__); 1672 return; 1673 } 1674 switch (function) { 1675 case TIUMP_INTERRUPT_CODE_LSR: 1676 lsr = map_line_status(data[1]); 1677 if (lsr & UMP_UART_LSR_DATA_MASK) { 1678 /* Save the LSR event for bulk read 1679 completion routine */ 1680 dbg("%s - LSR Event Port %u LSR Status = %02x", 1681 __func__, port_number, lsr); 1682 edge_port->lsr_event = 1; 1683 edge_port->lsr_mask = lsr; 1684 } else { 1685 dbg("%s - ===== Port %d LSR Status = %02x ======", 1686 __func__, port_number, lsr); 1687 handle_new_lsr(edge_port, 0, lsr, 0); 1688 } 1689 break; 1690 1691 case TIUMP_INTERRUPT_CODE_MSR: /* MSR */ 1692 /* Copy MSR from UMP */ 1693 msr = data[1]; 1694 dbg("%s - ===== Port %u MSR Status = %02x ======", 1695 __func__, port_number, msr); 1696 handle_new_msr(edge_port, msr); 1697 break; 1698 1699 default: 1700 dev_err(&urb->dev->dev, 1701 "%s - Unknown Interrupt code from UMP %x\n", 1702 __func__, data[1]); 1703 break; 1704 1705 } 1706 1707 exit: 1708 retval = usb_submit_urb(urb, GFP_ATOMIC); 1709 if (retval) 1710 dev_err(&urb->dev->dev, 1711 "%s - usb_submit_urb failed with result %d\n", 1712 __func__, retval); 1713 } 1714 1715 static void edge_bulk_in_callback(struct urb *urb) 1716 { 1717 struct edgeport_port *edge_port = urb->context; 1718 unsigned char *data = urb->transfer_buffer; 1719 struct tty_struct *tty; 1720 int retval = 0; 1721 int port_number; 1722 int status = urb->status; 1723 1724 dbg("%s", __func__); 1725 1726 switch (status) { 1727 case 0: 1728 /* success */ 1729 break; 1730 case -ECONNRESET: 1731 case -ENOENT: 1732 case -ESHUTDOWN: 1733 /* this urb is terminated, clean up */ 1734 dbg("%s - urb shutting down with status: %d", 1735 __func__, status); 1736 return; 1737 default: 1738 dev_err(&urb->dev->dev, 1739 "%s - nonzero read bulk status received: %d\n", 1740 __func__, status); 1741 } 1742 1743 if (status == -EPIPE) 1744 goto exit; 1745 1746 if (status) { 1747 dev_err(&urb->dev->dev, "%s - stopping read!\n", __func__); 1748 return; 1749 } 1750 1751 port_number = edge_port->port->number - edge_port->port->serial->minor; 1752 1753 if (edge_port->lsr_event) { 1754 edge_port->lsr_event = 0; 1755 dbg("%s ===== Port %u LSR Status = %02x, Data = %02x ======", 1756 __func__, port_number, edge_port->lsr_mask, *data); 1757 handle_new_lsr(edge_port, 1, edge_port->lsr_mask, *data); 1758 /* Adjust buffer length/pointer */ 1759 --urb->actual_length; 1760 ++data; 1761 } 1762 1763 tty = tty_port_tty_get(&edge_port->port->port); 1764 if (tty && urb->actual_length) { 1765 usb_serial_debug_data(debug, &edge_port->port->dev, 1766 __func__, urb->actual_length, data); 1767 if (edge_port->close_pending) 1768 dbg("%s - close pending, dropping data on the floor", 1769 __func__); 1770 else 1771 edge_tty_recv(&edge_port->port->dev, tty, data, 1772 urb->actual_length); 1773 edge_port->icount.rx += urb->actual_length; 1774 } 1775 tty_kref_put(tty); 1776 1777 exit: 1778 /* continue read unless stopped */ 1779 spin_lock(&edge_port->ep_lock); 1780 if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING) { 1781 urb->dev = edge_port->port->serial->dev; 1782 retval = usb_submit_urb(urb, GFP_ATOMIC); 1783 } else if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPING) { 1784 edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPED; 1785 } 1786 spin_unlock(&edge_port->ep_lock); 1787 if (retval) 1788 dev_err(&urb->dev->dev, 1789 "%s - usb_submit_urb failed with result %d\n", 1790 __func__, retval); 1791 } 1792 1793 static void edge_tty_recv(struct device *dev, struct tty_struct *tty, 1794 unsigned char *data, int length) 1795 { 1796 int queued; 1797 1798 queued = tty_insert_flip_string(tty, data, length); 1799 if (queued < length) 1800 dev_err(dev, "%s - dropping data, %d bytes lost\n", 1801 __func__, length - queued); 1802 tty_flip_buffer_push(tty); 1803 } 1804 1805 static void edge_bulk_out_callback(struct urb *urb) 1806 { 1807 struct usb_serial_port *port = urb->context; 1808 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 1809 int status = urb->status; 1810 struct tty_struct *tty; 1811 1812 dbg("%s - port %d", __func__, port->number); 1813 1814 edge_port->ep_write_urb_in_use = 0; 1815 1816 switch (status) { 1817 case 0: 1818 /* success */ 1819 break; 1820 case -ECONNRESET: 1821 case -ENOENT: 1822 case -ESHUTDOWN: 1823 /* this urb is terminated, clean up */ 1824 dbg("%s - urb shutting down with status: %d", 1825 __func__, status); 1826 return; 1827 default: 1828 dev_err(&urb->dev->dev, "%s - nonzero write bulk status " 1829 "received: %d\n", __func__, status); 1830 } 1831 1832 /* send any buffered data */ 1833 tty = tty_port_tty_get(&port->port); 1834 edge_send(tty); 1835 tty_kref_put(tty); 1836 } 1837 1838 static int edge_open(struct tty_struct *tty, struct usb_serial_port *port) 1839 { 1840 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 1841 struct edgeport_serial *edge_serial; 1842 struct usb_device *dev; 1843 struct urb *urb; 1844 int port_number; 1845 int status; 1846 u16 open_settings; 1847 u8 transaction_timeout; 1848 1849 dbg("%s - port %d", __func__, port->number); 1850 1851 if (edge_port == NULL) 1852 return -ENODEV; 1853 1854 port_number = port->number - port->serial->minor; 1855 switch (port_number) { 1856 case 0: 1857 edge_port->uart_base = UMPMEM_BASE_UART1; 1858 edge_port->dma_address = UMPD_OEDB1_ADDRESS; 1859 break; 1860 case 1: 1861 edge_port->uart_base = UMPMEM_BASE_UART2; 1862 edge_port->dma_address = UMPD_OEDB2_ADDRESS; 1863 break; 1864 default: 1865 dev_err(&port->dev, "Unknown port number!!!\n"); 1866 return -ENODEV; 1867 } 1868 1869 dbg("%s - port_number = %d, uart_base = %04x, dma_address = %04x", 1870 __func__, port_number, edge_port->uart_base, 1871 edge_port->dma_address); 1872 1873 dev = port->serial->dev; 1874 1875 memset(&(edge_port->icount), 0x00, sizeof(edge_port->icount)); 1876 init_waitqueue_head(&edge_port->delta_msr_wait); 1877 1878 /* turn off loopback */ 1879 status = ti_do_config(edge_port, UMPC_SET_CLR_LOOPBACK, 0); 1880 if (status) { 1881 dev_err(&port->dev, 1882 "%s - cannot send clear loopback command, %d\n", 1883 __func__, status); 1884 return status; 1885 } 1886 1887 /* set up the port settings */ 1888 if (tty) 1889 edge_set_termios(tty, port, tty->termios); 1890 1891 /* open up the port */ 1892 1893 /* milliseconds to timeout for DMA transfer */ 1894 transaction_timeout = 2; 1895 1896 edge_port->ump_read_timeout = 1897 max(20, ((transaction_timeout * 3) / 2)); 1898 1899 /* milliseconds to timeout for DMA transfer */ 1900 open_settings = (u8)(UMP_DMA_MODE_CONTINOUS | 1901 UMP_PIPE_TRANS_TIMEOUT_ENA | 1902 (transaction_timeout << 2)); 1903 1904 dbg("%s - Sending UMPC_OPEN_PORT", __func__); 1905 1906 /* Tell TI to open and start the port */ 1907 status = send_cmd(dev, UMPC_OPEN_PORT, 1908 (u8)(UMPM_UART1_PORT + port_number), open_settings, NULL, 0); 1909 if (status) { 1910 dev_err(&port->dev, "%s - cannot send open command, %d\n", 1911 __func__, status); 1912 return status; 1913 } 1914 1915 /* Start the DMA? */ 1916 status = send_cmd(dev, UMPC_START_PORT, 1917 (u8)(UMPM_UART1_PORT + port_number), 0, NULL, 0); 1918 if (status) { 1919 dev_err(&port->dev, "%s - cannot send start DMA command, %d\n", 1920 __func__, status); 1921 return status; 1922 } 1923 1924 /* Clear TX and RX buffers in UMP */ 1925 status = purge_port(port, UMP_PORT_DIR_OUT | UMP_PORT_DIR_IN); 1926 if (status) { 1927 dev_err(&port->dev, 1928 "%s - cannot send clear buffers command, %d\n", 1929 __func__, status); 1930 return status; 1931 } 1932 1933 /* Read Initial MSR */ 1934 status = ti_vread_sync(dev, UMPC_READ_MSR, 0, 1935 (__u16)(UMPM_UART1_PORT + port_number), 1936 &edge_port->shadow_msr, 1); 1937 if (status) { 1938 dev_err(&port->dev, "%s - cannot send read MSR command, %d\n", 1939 __func__, status); 1940 return status; 1941 } 1942 1943 dbg("ShadowMSR 0x%X", edge_port->shadow_msr); 1944 1945 /* Set Initial MCR */ 1946 edge_port->shadow_mcr = MCR_RTS | MCR_DTR; 1947 dbg("ShadowMCR 0x%X", edge_port->shadow_mcr); 1948 1949 edge_serial = edge_port->edge_serial; 1950 if (mutex_lock_interruptible(&edge_serial->es_lock)) 1951 return -ERESTARTSYS; 1952 if (edge_serial->num_ports_open == 0) { 1953 /* we are the first port to open, post the interrupt urb */ 1954 urb = edge_serial->serial->port[0]->interrupt_in_urb; 1955 if (!urb) { 1956 dev_err(&port->dev, 1957 "%s - no interrupt urb present, exiting\n", 1958 __func__); 1959 status = -EINVAL; 1960 goto release_es_lock; 1961 } 1962 urb->complete = edge_interrupt_callback; 1963 urb->context = edge_serial; 1964 urb->dev = dev; 1965 status = usb_submit_urb(urb, GFP_KERNEL); 1966 if (status) { 1967 dev_err(&port->dev, 1968 "%s - usb_submit_urb failed with value %d\n", 1969 __func__, status); 1970 goto release_es_lock; 1971 } 1972 } 1973 1974 /* 1975 * reset the data toggle on the bulk endpoints to work around bug in 1976 * host controllers where things get out of sync some times 1977 */ 1978 usb_clear_halt(dev, port->write_urb->pipe); 1979 usb_clear_halt(dev, port->read_urb->pipe); 1980 1981 /* start up our bulk read urb */ 1982 urb = port->read_urb; 1983 if (!urb) { 1984 dev_err(&port->dev, "%s - no read urb present, exiting\n", 1985 __func__); 1986 status = -EINVAL; 1987 goto unlink_int_urb; 1988 } 1989 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING; 1990 urb->complete = edge_bulk_in_callback; 1991 urb->context = edge_port; 1992 urb->dev = dev; 1993 status = usb_submit_urb(urb, GFP_KERNEL); 1994 if (status) { 1995 dev_err(&port->dev, 1996 "%s - read bulk usb_submit_urb failed with value %d\n", 1997 __func__, status); 1998 goto unlink_int_urb; 1999 } 2000 2001 ++edge_serial->num_ports_open; 2002 2003 dbg("%s - exited", __func__); 2004 2005 goto release_es_lock; 2006 2007 unlink_int_urb: 2008 if (edge_port->edge_serial->num_ports_open == 0) 2009 usb_kill_urb(port->serial->port[0]->interrupt_in_urb); 2010 release_es_lock: 2011 mutex_unlock(&edge_serial->es_lock); 2012 return status; 2013 } 2014 2015 static void edge_close(struct usb_serial_port *port) 2016 { 2017 struct edgeport_serial *edge_serial; 2018 struct edgeport_port *edge_port; 2019 int port_number; 2020 int status; 2021 2022 dbg("%s - port %d", __func__, port->number); 2023 2024 edge_serial = usb_get_serial_data(port->serial); 2025 edge_port = usb_get_serial_port_data(port); 2026 if (edge_serial == NULL || edge_port == NULL) 2027 return; 2028 2029 /* The bulkreadcompletion routine will check 2030 * this flag and dump add read data */ 2031 edge_port->close_pending = 1; 2032 2033 /* chase the port close and flush */ 2034 chase_port(edge_port, (HZ * closing_wait) / 100, 1); 2035 2036 usb_kill_urb(port->read_urb); 2037 usb_kill_urb(port->write_urb); 2038 edge_port->ep_write_urb_in_use = 0; 2039 2040 /* assuming we can still talk to the device, 2041 * send a close port command to it */ 2042 dbg("%s - send umpc_close_port", __func__); 2043 port_number = port->number - port->serial->minor; 2044 status = send_cmd(port->serial->dev, 2045 UMPC_CLOSE_PORT, 2046 (__u8)(UMPM_UART1_PORT + port_number), 2047 0, 2048 NULL, 2049 0); 2050 mutex_lock(&edge_serial->es_lock); 2051 --edge_port->edge_serial->num_ports_open; 2052 if (edge_port->edge_serial->num_ports_open <= 0) { 2053 /* last port is now closed, let's shut down our interrupt urb */ 2054 usb_kill_urb(port->serial->port[0]->interrupt_in_urb); 2055 edge_port->edge_serial->num_ports_open = 0; 2056 } 2057 mutex_unlock(&edge_serial->es_lock); 2058 edge_port->close_pending = 0; 2059 2060 dbg("%s - exited", __func__); 2061 } 2062 2063 static int edge_write(struct tty_struct *tty, struct usb_serial_port *port, 2064 const unsigned char *data, int count) 2065 { 2066 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2067 2068 dbg("%s - port %d", __func__, port->number); 2069 2070 if (count == 0) { 2071 dbg("%s - write request of 0 bytes", __func__); 2072 return 0; 2073 } 2074 2075 if (edge_port == NULL) 2076 return -ENODEV; 2077 if (edge_port->close_pending == 1) 2078 return -ENODEV; 2079 2080 count = kfifo_in_locked(&edge_port->write_fifo, data, count, 2081 &edge_port->ep_lock); 2082 edge_send(tty); 2083 2084 return count; 2085 } 2086 2087 static void edge_send(struct tty_struct *tty) 2088 { 2089 struct usb_serial_port *port = tty->driver_data; 2090 int count, result; 2091 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2092 unsigned long flags; 2093 2094 2095 dbg("%s - port %d", __func__, port->number); 2096 2097 spin_lock_irqsave(&edge_port->ep_lock, flags); 2098 2099 if (edge_port->ep_write_urb_in_use) { 2100 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2101 return; 2102 } 2103 2104 count = kfifo_out(&edge_port->write_fifo, 2105 port->write_urb->transfer_buffer, 2106 port->bulk_out_size); 2107 2108 if (count == 0) { 2109 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2110 return; 2111 } 2112 2113 edge_port->ep_write_urb_in_use = 1; 2114 2115 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2116 2117 usb_serial_debug_data(debug, &port->dev, __func__, count, 2118 port->write_urb->transfer_buffer); 2119 2120 /* set up our urb */ 2121 usb_fill_bulk_urb(port->write_urb, port->serial->dev, 2122 usb_sndbulkpipe(port->serial->dev, 2123 port->bulk_out_endpointAddress), 2124 port->write_urb->transfer_buffer, count, 2125 edge_bulk_out_callback, 2126 port); 2127 2128 /* send the data out the bulk port */ 2129 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 2130 if (result) { 2131 dev_err(&port->dev, 2132 "%s - failed submitting write urb, error %d\n", 2133 __func__, result); 2134 edge_port->ep_write_urb_in_use = 0; 2135 /* TODO: reschedule edge_send */ 2136 } else 2137 edge_port->icount.tx += count; 2138 2139 /* wakeup any process waiting for writes to complete */ 2140 /* there is now more room in the buffer for new writes */ 2141 if (tty) 2142 tty_wakeup(tty); 2143 } 2144 2145 static int edge_write_room(struct tty_struct *tty) 2146 { 2147 struct usb_serial_port *port = tty->driver_data; 2148 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2149 int room = 0; 2150 unsigned long flags; 2151 2152 dbg("%s - port %d", __func__, port->number); 2153 2154 if (edge_port == NULL) 2155 return 0; 2156 if (edge_port->close_pending == 1) 2157 return 0; 2158 2159 spin_lock_irqsave(&edge_port->ep_lock, flags); 2160 room = kfifo_avail(&edge_port->write_fifo); 2161 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2162 2163 dbg("%s - returns %d", __func__, room); 2164 return room; 2165 } 2166 2167 static int edge_chars_in_buffer(struct tty_struct *tty) 2168 { 2169 struct usb_serial_port *port = tty->driver_data; 2170 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2171 int chars = 0; 2172 unsigned long flags; 2173 2174 dbg("%s - port %d", __func__, port->number); 2175 2176 if (edge_port == NULL) 2177 return 0; 2178 if (edge_port->close_pending == 1) 2179 return 0; 2180 2181 spin_lock_irqsave(&edge_port->ep_lock, flags); 2182 chars = kfifo_len(&edge_port->write_fifo); 2183 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2184 2185 dbg("%s - returns %d", __func__, chars); 2186 return chars; 2187 } 2188 2189 static void edge_throttle(struct tty_struct *tty) 2190 { 2191 struct usb_serial_port *port = tty->driver_data; 2192 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2193 int status; 2194 2195 dbg("%s - port %d", __func__, port->number); 2196 2197 if (edge_port == NULL) 2198 return; 2199 2200 /* if we are implementing XON/XOFF, send the stop character */ 2201 if (I_IXOFF(tty)) { 2202 unsigned char stop_char = STOP_CHAR(tty); 2203 status = edge_write(tty, port, &stop_char, 1); 2204 if (status <= 0) { 2205 dev_err(&port->dev, "%s - failed to write stop character, %d\n", __func__, status); 2206 } 2207 } 2208 2209 /* if we are implementing RTS/CTS, stop reads */ 2210 /* and the Edgeport will clear the RTS line */ 2211 if (C_CRTSCTS(tty)) 2212 stop_read(edge_port); 2213 2214 } 2215 2216 static void edge_unthrottle(struct tty_struct *tty) 2217 { 2218 struct usb_serial_port *port = tty->driver_data; 2219 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2220 int status; 2221 2222 dbg("%s - port %d", __func__, port->number); 2223 2224 if (edge_port == NULL) 2225 return; 2226 2227 /* if we are implementing XON/XOFF, send the start character */ 2228 if (I_IXOFF(tty)) { 2229 unsigned char start_char = START_CHAR(tty); 2230 status = edge_write(tty, port, &start_char, 1); 2231 if (status <= 0) { 2232 dev_err(&port->dev, "%s - failed to write start character, %d\n", __func__, status); 2233 } 2234 } 2235 /* if we are implementing RTS/CTS, restart reads */ 2236 /* are the Edgeport will assert the RTS line */ 2237 if (C_CRTSCTS(tty)) { 2238 status = restart_read(edge_port); 2239 if (status) 2240 dev_err(&port->dev, 2241 "%s - read bulk usb_submit_urb failed: %d\n", 2242 __func__, status); 2243 } 2244 2245 } 2246 2247 static void stop_read(struct edgeport_port *edge_port) 2248 { 2249 unsigned long flags; 2250 2251 spin_lock_irqsave(&edge_port->ep_lock, flags); 2252 2253 if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING) 2254 edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPING; 2255 edge_port->shadow_mcr &= ~MCR_RTS; 2256 2257 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2258 } 2259 2260 static int restart_read(struct edgeport_port *edge_port) 2261 { 2262 struct urb *urb; 2263 int status = 0; 2264 unsigned long flags; 2265 2266 spin_lock_irqsave(&edge_port->ep_lock, flags); 2267 2268 if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPED) { 2269 urb = edge_port->port->read_urb; 2270 urb->complete = edge_bulk_in_callback; 2271 urb->context = edge_port; 2272 urb->dev = edge_port->port->serial->dev; 2273 status = usb_submit_urb(urb, GFP_ATOMIC); 2274 } 2275 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING; 2276 edge_port->shadow_mcr |= MCR_RTS; 2277 2278 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2279 2280 return status; 2281 } 2282 2283 static void change_port_settings(struct tty_struct *tty, 2284 struct edgeport_port *edge_port, struct ktermios *old_termios) 2285 { 2286 struct ump_uart_config *config; 2287 int baud; 2288 unsigned cflag; 2289 int status; 2290 int port_number = edge_port->port->number - 2291 edge_port->port->serial->minor; 2292 2293 dbg("%s - port %d", __func__, edge_port->port->number); 2294 2295 config = kmalloc (sizeof (*config), GFP_KERNEL); 2296 if (!config) { 2297 *tty->termios = *old_termios; 2298 dev_err(&edge_port->port->dev, "%s - out of memory\n", 2299 __func__); 2300 return; 2301 } 2302 2303 cflag = tty->termios->c_cflag; 2304 2305 config->wFlags = 0; 2306 2307 /* These flags must be set */ 2308 config->wFlags |= UMP_MASK_UART_FLAGS_RECEIVE_MS_INT; 2309 config->wFlags |= UMP_MASK_UART_FLAGS_AUTO_START_ON_ERR; 2310 config->bUartMode = (__u8)(edge_port->bUartMode); 2311 2312 switch (cflag & CSIZE) { 2313 case CS5: 2314 config->bDataBits = UMP_UART_CHAR5BITS; 2315 dbg("%s - data bits = 5", __func__); 2316 break; 2317 case CS6: 2318 config->bDataBits = UMP_UART_CHAR6BITS; 2319 dbg("%s - data bits = 6", __func__); 2320 break; 2321 case CS7: 2322 config->bDataBits = UMP_UART_CHAR7BITS; 2323 dbg("%s - data bits = 7", __func__); 2324 break; 2325 default: 2326 case CS8: 2327 config->bDataBits = UMP_UART_CHAR8BITS; 2328 dbg("%s - data bits = 8", __func__); 2329 break; 2330 } 2331 2332 if (cflag & PARENB) { 2333 if (cflag & PARODD) { 2334 config->wFlags |= UMP_MASK_UART_FLAGS_PARITY; 2335 config->bParity = UMP_UART_ODDPARITY; 2336 dbg("%s - parity = odd", __func__); 2337 } else { 2338 config->wFlags |= UMP_MASK_UART_FLAGS_PARITY; 2339 config->bParity = UMP_UART_EVENPARITY; 2340 dbg("%s - parity = even", __func__); 2341 } 2342 } else { 2343 config->bParity = UMP_UART_NOPARITY; 2344 dbg("%s - parity = none", __func__); 2345 } 2346 2347 if (cflag & CSTOPB) { 2348 config->bStopBits = UMP_UART_STOPBIT2; 2349 dbg("%s - stop bits = 2", __func__); 2350 } else { 2351 config->bStopBits = UMP_UART_STOPBIT1; 2352 dbg("%s - stop bits = 1", __func__); 2353 } 2354 2355 /* figure out the flow control settings */ 2356 if (cflag & CRTSCTS) { 2357 config->wFlags |= UMP_MASK_UART_FLAGS_OUT_X_CTS_FLOW; 2358 config->wFlags |= UMP_MASK_UART_FLAGS_RTS_FLOW; 2359 dbg("%s - RTS/CTS is enabled", __func__); 2360 } else { 2361 dbg("%s - RTS/CTS is disabled", __func__); 2362 tty->hw_stopped = 0; 2363 restart_read(edge_port); 2364 } 2365 2366 /* if we are implementing XON/XOFF, set the start and stop 2367 character in the device */ 2368 config->cXon = START_CHAR(tty); 2369 config->cXoff = STOP_CHAR(tty); 2370 2371 /* if we are implementing INBOUND XON/XOFF */ 2372 if (I_IXOFF(tty)) { 2373 config->wFlags |= UMP_MASK_UART_FLAGS_IN_X; 2374 dbg("%s - INBOUND XON/XOFF is enabled, XON = %2x, XOFF = %2x", 2375 __func__, config->cXon, config->cXoff); 2376 } else 2377 dbg("%s - INBOUND XON/XOFF is disabled", __func__); 2378 2379 /* if we are implementing OUTBOUND XON/XOFF */ 2380 if (I_IXON(tty)) { 2381 config->wFlags |= UMP_MASK_UART_FLAGS_OUT_X; 2382 dbg("%s - OUTBOUND XON/XOFF is enabled, XON = %2x, XOFF = %2x", 2383 __func__, config->cXon, config->cXoff); 2384 } else 2385 dbg("%s - OUTBOUND XON/XOFF is disabled", __func__); 2386 2387 tty->termios->c_cflag &= ~CMSPAR; 2388 2389 /* Round the baud rate */ 2390 baud = tty_get_baud_rate(tty); 2391 if (!baud) { 2392 /* pick a default, any default... */ 2393 baud = 9600; 2394 } else 2395 tty_encode_baud_rate(tty, baud, baud); 2396 2397 edge_port->baud_rate = baud; 2398 config->wBaudRate = (__u16)((461550L + baud/2) / baud); 2399 2400 /* FIXME: Recompute actual baud from divisor here */ 2401 2402 dbg("%s - baud rate = %d, wBaudRate = %d", __func__, baud, 2403 config->wBaudRate); 2404 2405 dbg("wBaudRate: %d", (int)(461550L / config->wBaudRate)); 2406 dbg("wFlags: 0x%x", config->wFlags); 2407 dbg("bDataBits: %d", config->bDataBits); 2408 dbg("bParity: %d", config->bParity); 2409 dbg("bStopBits: %d", config->bStopBits); 2410 dbg("cXon: %d", config->cXon); 2411 dbg("cXoff: %d", config->cXoff); 2412 dbg("bUartMode: %d", config->bUartMode); 2413 2414 /* move the word values into big endian mode */ 2415 cpu_to_be16s(&config->wFlags); 2416 cpu_to_be16s(&config->wBaudRate); 2417 2418 status = send_cmd(edge_port->port->serial->dev, UMPC_SET_CONFIG, 2419 (__u8)(UMPM_UART1_PORT + port_number), 2420 0, (__u8 *)config, sizeof(*config)); 2421 if (status) 2422 dbg("%s - error %d when trying to write config to device", 2423 __func__, status); 2424 kfree(config); 2425 } 2426 2427 static void edge_set_termios(struct tty_struct *tty, 2428 struct usb_serial_port *port, struct ktermios *old_termios) 2429 { 2430 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2431 unsigned int cflag; 2432 2433 cflag = tty->termios->c_cflag; 2434 2435 dbg("%s - clfag %08x iflag %08x", __func__, 2436 tty->termios->c_cflag, tty->termios->c_iflag); 2437 dbg("%s - old clfag %08x old iflag %08x", __func__, 2438 old_termios->c_cflag, old_termios->c_iflag); 2439 dbg("%s - port %d", __func__, port->number); 2440 2441 if (edge_port == NULL) 2442 return; 2443 /* change the port settings to the new ones specified */ 2444 change_port_settings(tty, edge_port, old_termios); 2445 } 2446 2447 static int edge_tiocmset(struct tty_struct *tty, struct file *file, 2448 unsigned int set, unsigned int clear) 2449 { 2450 struct usb_serial_port *port = tty->driver_data; 2451 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2452 unsigned int mcr; 2453 unsigned long flags; 2454 2455 dbg("%s - port %d", __func__, port->number); 2456 2457 spin_lock_irqsave(&edge_port->ep_lock, flags); 2458 mcr = edge_port->shadow_mcr; 2459 if (set & TIOCM_RTS) 2460 mcr |= MCR_RTS; 2461 if (set & TIOCM_DTR) 2462 mcr |= MCR_DTR; 2463 if (set & TIOCM_LOOP) 2464 mcr |= MCR_LOOPBACK; 2465 2466 if (clear & TIOCM_RTS) 2467 mcr &= ~MCR_RTS; 2468 if (clear & TIOCM_DTR) 2469 mcr &= ~MCR_DTR; 2470 if (clear & TIOCM_LOOP) 2471 mcr &= ~MCR_LOOPBACK; 2472 2473 edge_port->shadow_mcr = mcr; 2474 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2475 2476 restore_mcr(edge_port, mcr); 2477 return 0; 2478 } 2479 2480 static int edge_tiocmget(struct tty_struct *tty, struct file *file) 2481 { 2482 struct usb_serial_port *port = tty->driver_data; 2483 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2484 unsigned int result = 0; 2485 unsigned int msr; 2486 unsigned int mcr; 2487 unsigned long flags; 2488 2489 dbg("%s - port %d", __func__, port->number); 2490 2491 spin_lock_irqsave(&edge_port->ep_lock, flags); 2492 2493 msr = edge_port->shadow_msr; 2494 mcr = edge_port->shadow_mcr; 2495 result = ((mcr & MCR_DTR) ? TIOCM_DTR: 0) /* 0x002 */ 2496 | ((mcr & MCR_RTS) ? TIOCM_RTS: 0) /* 0x004 */ 2497 | ((msr & EDGEPORT_MSR_CTS) ? TIOCM_CTS: 0) /* 0x020 */ 2498 | ((msr & EDGEPORT_MSR_CD) ? TIOCM_CAR: 0) /* 0x040 */ 2499 | ((msr & EDGEPORT_MSR_RI) ? TIOCM_RI: 0) /* 0x080 */ 2500 | ((msr & EDGEPORT_MSR_DSR) ? TIOCM_DSR: 0); /* 0x100 */ 2501 2502 2503 dbg("%s -- %x", __func__, result); 2504 spin_unlock_irqrestore(&edge_port->ep_lock, flags); 2505 2506 return result; 2507 } 2508 2509 static int edge_get_icount(struct tty_struct *tty, 2510 struct serial_icounter_struct *icount) 2511 { 2512 struct usb_serial_port *port = tty->driver_data; 2513 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2514 struct async_icount *ic = &edge_port->icount; 2515 2516 icount->cts = ic->cts; 2517 icount->dsr = ic->dsr; 2518 icount->rng = ic->rng; 2519 icount->dcd = ic->dcd; 2520 icount->tx = ic->tx; 2521 icount->rx = ic->rx; 2522 icount->frame = ic->frame; 2523 icount->parity = ic->parity; 2524 icount->overrun = ic->overrun; 2525 icount->brk = ic->brk; 2526 icount->buf_overrun = ic->buf_overrun; 2527 return 0; 2528 } 2529 2530 static int get_serial_info(struct edgeport_port *edge_port, 2531 struct serial_struct __user *retinfo) 2532 { 2533 struct serial_struct tmp; 2534 2535 if (!retinfo) 2536 return -EFAULT; 2537 2538 memset(&tmp, 0, sizeof(tmp)); 2539 2540 tmp.type = PORT_16550A; 2541 tmp.line = edge_port->port->serial->minor; 2542 tmp.port = edge_port->port->number; 2543 tmp.irq = 0; 2544 tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; 2545 tmp.xmit_fifo_size = edge_port->port->bulk_out_size; 2546 tmp.baud_base = 9600; 2547 tmp.close_delay = 5*HZ; 2548 tmp.closing_wait = closing_wait; 2549 2550 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) 2551 return -EFAULT; 2552 return 0; 2553 } 2554 2555 static int edge_ioctl(struct tty_struct *tty, struct file *file, 2556 unsigned int cmd, unsigned long arg) 2557 { 2558 struct usb_serial_port *port = tty->driver_data; 2559 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2560 struct async_icount cnow; 2561 struct async_icount cprev; 2562 2563 dbg("%s - port %d, cmd = 0x%x", __func__, port->number, cmd); 2564 2565 switch (cmd) { 2566 case TIOCGSERIAL: 2567 dbg("%s - (%d) TIOCGSERIAL", __func__, port->number); 2568 return get_serial_info(edge_port, 2569 (struct serial_struct __user *) arg); 2570 case TIOCMIWAIT: 2571 dbg("%s - (%d) TIOCMIWAIT", __func__, port->number); 2572 cprev = edge_port->icount; 2573 while (1) { 2574 interruptible_sleep_on(&edge_port->delta_msr_wait); 2575 /* see if a signal did it */ 2576 if (signal_pending(current)) 2577 return -ERESTARTSYS; 2578 cnow = edge_port->icount; 2579 if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && 2580 cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) 2581 return -EIO; /* no change => error */ 2582 if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || 2583 ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || 2584 ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || 2585 ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { 2586 return 0; 2587 } 2588 cprev = cnow; 2589 } 2590 /* not reached */ 2591 break; 2592 } 2593 return -ENOIOCTLCMD; 2594 } 2595 2596 static void edge_break(struct tty_struct *tty, int break_state) 2597 { 2598 struct usb_serial_port *port = tty->driver_data; 2599 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2600 int status; 2601 int bv = 0; /* Off */ 2602 2603 dbg("%s - state = %d", __func__, break_state); 2604 2605 /* chase the port close */ 2606 chase_port(edge_port, 0, 0); 2607 2608 if (break_state == -1) 2609 bv = 1; /* On */ 2610 status = ti_do_config(edge_port, UMPC_SET_CLR_BREAK, bv); 2611 if (status) 2612 dbg("%s - error %d sending break set/clear command.", 2613 __func__, status); 2614 } 2615 2616 static int edge_startup(struct usb_serial *serial) 2617 { 2618 struct edgeport_serial *edge_serial; 2619 struct edgeport_port *edge_port; 2620 struct usb_device *dev; 2621 int status; 2622 int i; 2623 2624 dev = serial->dev; 2625 2626 /* create our private serial structure */ 2627 edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL); 2628 if (edge_serial == NULL) { 2629 dev_err(&serial->dev->dev, "%s - Out of memory\n", __func__); 2630 return -ENOMEM; 2631 } 2632 mutex_init(&edge_serial->es_lock); 2633 edge_serial->serial = serial; 2634 usb_set_serial_data(serial, edge_serial); 2635 2636 status = download_fw(edge_serial); 2637 if (status) { 2638 kfree(edge_serial); 2639 return status; 2640 } 2641 2642 /* set up our port private structures */ 2643 for (i = 0; i < serial->num_ports; ++i) { 2644 edge_port = kzalloc(sizeof(struct edgeport_port), GFP_KERNEL); 2645 if (edge_port == NULL) { 2646 dev_err(&serial->dev->dev, "%s - Out of memory\n", 2647 __func__); 2648 goto cleanup; 2649 } 2650 spin_lock_init(&edge_port->ep_lock); 2651 if (kfifo_alloc(&edge_port->write_fifo, EDGE_OUT_BUF_SIZE, 2652 GFP_KERNEL)) { 2653 dev_err(&serial->dev->dev, "%s - Out of memory\n", 2654 __func__); 2655 kfree(edge_port); 2656 goto cleanup; 2657 } 2658 edge_port->port = serial->port[i]; 2659 edge_port->edge_serial = edge_serial; 2660 usb_set_serial_port_data(serial->port[i], edge_port); 2661 edge_port->bUartMode = default_uart_mode; 2662 } 2663 2664 return 0; 2665 2666 cleanup: 2667 for (--i; i >= 0; --i) { 2668 edge_port = usb_get_serial_port_data(serial->port[i]); 2669 kfifo_free(&edge_port->write_fifo); 2670 kfree(edge_port); 2671 usb_set_serial_port_data(serial->port[i], NULL); 2672 } 2673 kfree(edge_serial); 2674 usb_set_serial_data(serial, NULL); 2675 return -ENOMEM; 2676 } 2677 2678 static void edge_disconnect(struct usb_serial *serial) 2679 { 2680 int i; 2681 struct edgeport_port *edge_port; 2682 2683 dbg("%s", __func__); 2684 2685 for (i = 0; i < serial->num_ports; ++i) { 2686 edge_port = usb_get_serial_port_data(serial->port[i]); 2687 edge_remove_sysfs_attrs(edge_port->port); 2688 } 2689 } 2690 2691 static void edge_release(struct usb_serial *serial) 2692 { 2693 int i; 2694 struct edgeport_port *edge_port; 2695 2696 dbg("%s", __func__); 2697 2698 for (i = 0; i < serial->num_ports; ++i) { 2699 edge_port = usb_get_serial_port_data(serial->port[i]); 2700 kfifo_free(&edge_port->write_fifo); 2701 kfree(edge_port); 2702 } 2703 kfree(usb_get_serial_data(serial)); 2704 } 2705 2706 2707 /* Sysfs Attributes */ 2708 2709 static ssize_t show_uart_mode(struct device *dev, 2710 struct device_attribute *attr, char *buf) 2711 { 2712 struct usb_serial_port *port = to_usb_serial_port(dev); 2713 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2714 2715 return sprintf(buf, "%d\n", edge_port->bUartMode); 2716 } 2717 2718 static ssize_t store_uart_mode(struct device *dev, 2719 struct device_attribute *attr, const char *valbuf, size_t count) 2720 { 2721 struct usb_serial_port *port = to_usb_serial_port(dev); 2722 struct edgeport_port *edge_port = usb_get_serial_port_data(port); 2723 unsigned int v = simple_strtoul(valbuf, NULL, 0); 2724 2725 dbg("%s: setting uart_mode = %d", __func__, v); 2726 2727 if (v < 256) 2728 edge_port->bUartMode = v; 2729 else 2730 dev_err(dev, "%s - uart_mode %d is invalid\n", __func__, v); 2731 2732 return count; 2733 } 2734 2735 static DEVICE_ATTR(uart_mode, S_IWUSR | S_IRUGO, show_uart_mode, 2736 store_uart_mode); 2737 2738 static int edge_create_sysfs_attrs(struct usb_serial_port *port) 2739 { 2740 return device_create_file(&port->dev, &dev_attr_uart_mode); 2741 } 2742 2743 static int edge_remove_sysfs_attrs(struct usb_serial_port *port) 2744 { 2745 device_remove_file(&port->dev, &dev_attr_uart_mode); 2746 return 0; 2747 } 2748 2749 2750 static struct usb_serial_driver edgeport_1port_device = { 2751 .driver = { 2752 .owner = THIS_MODULE, 2753 .name = "edgeport_ti_1", 2754 }, 2755 .description = "Edgeport TI 1 port adapter", 2756 .usb_driver = &io_driver, 2757 .id_table = edgeport_1port_id_table, 2758 .num_ports = 1, 2759 .open = edge_open, 2760 .close = edge_close, 2761 .throttle = edge_throttle, 2762 .unthrottle = edge_unthrottle, 2763 .attach = edge_startup, 2764 .disconnect = edge_disconnect, 2765 .release = edge_release, 2766 .port_probe = edge_create_sysfs_attrs, 2767 .ioctl = edge_ioctl, 2768 .set_termios = edge_set_termios, 2769 .tiocmget = edge_tiocmget, 2770 .tiocmset = edge_tiocmset, 2771 .get_icount = edge_get_icount, 2772 .write = edge_write, 2773 .write_room = edge_write_room, 2774 .chars_in_buffer = edge_chars_in_buffer, 2775 .break_ctl = edge_break, 2776 .read_int_callback = edge_interrupt_callback, 2777 .read_bulk_callback = edge_bulk_in_callback, 2778 .write_bulk_callback = edge_bulk_out_callback, 2779 }; 2780 2781 static struct usb_serial_driver edgeport_2port_device = { 2782 .driver = { 2783 .owner = THIS_MODULE, 2784 .name = "edgeport_ti_2", 2785 }, 2786 .description = "Edgeport TI 2 port adapter", 2787 .usb_driver = &io_driver, 2788 .id_table = edgeport_2port_id_table, 2789 .num_ports = 2, 2790 .open = edge_open, 2791 .close = edge_close, 2792 .throttle = edge_throttle, 2793 .unthrottle = edge_unthrottle, 2794 .attach = edge_startup, 2795 .disconnect = edge_disconnect, 2796 .release = edge_release, 2797 .port_probe = edge_create_sysfs_attrs, 2798 .ioctl = edge_ioctl, 2799 .set_termios = edge_set_termios, 2800 .tiocmget = edge_tiocmget, 2801 .tiocmset = edge_tiocmset, 2802 .write = edge_write, 2803 .write_room = edge_write_room, 2804 .chars_in_buffer = edge_chars_in_buffer, 2805 .break_ctl = edge_break, 2806 .read_int_callback = edge_interrupt_callback, 2807 .read_bulk_callback = edge_bulk_in_callback, 2808 .write_bulk_callback = edge_bulk_out_callback, 2809 }; 2810 2811 2812 static int __init edgeport_init(void) 2813 { 2814 int retval; 2815 retval = usb_serial_register(&edgeport_1port_device); 2816 if (retval) 2817 goto failed_1port_device_register; 2818 retval = usb_serial_register(&edgeport_2port_device); 2819 if (retval) 2820 goto failed_2port_device_register; 2821 retval = usb_register(&io_driver); 2822 if (retval) 2823 goto failed_usb_register; 2824 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" 2825 DRIVER_DESC "\n"); 2826 return 0; 2827 failed_usb_register: 2828 usb_serial_deregister(&edgeport_2port_device); 2829 failed_2port_device_register: 2830 usb_serial_deregister(&edgeport_1port_device); 2831 failed_1port_device_register: 2832 return retval; 2833 } 2834 2835 static void __exit edgeport_exit(void) 2836 { 2837 usb_deregister(&io_driver); 2838 usb_serial_deregister(&edgeport_1port_device); 2839 usb_serial_deregister(&edgeport_2port_device); 2840 } 2841 2842 module_init(edgeport_init); 2843 module_exit(edgeport_exit); 2844 2845 /* Module information */ 2846 MODULE_AUTHOR(DRIVER_AUTHOR); 2847 MODULE_DESCRIPTION(DRIVER_DESC); 2848 MODULE_LICENSE("GPL"); 2849 MODULE_FIRMWARE("edgeport/down3.bin"); 2850 2851 module_param(debug, bool, S_IRUGO | S_IWUSR); 2852 MODULE_PARM_DESC(debug, "Debug enabled or not"); 2853 2854 module_param(closing_wait, int, S_IRUGO | S_IWUSR); 2855 MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs"); 2856 2857 module_param(ignore_cpu_rev, bool, S_IRUGO | S_IWUSR); 2858 MODULE_PARM_DESC(ignore_cpu_rev, 2859 "Ignore the cpu revision when connecting to a device"); 2860 2861 module_param(default_uart_mode, int, S_IRUGO | S_IWUSR); 2862 MODULE_PARM_DESC(default_uart_mode, "Default uart_mode, 0=RS232, ..."); 2863