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