cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

io_ti.c (76375B)


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