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_edgeport.c (98314B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Edgeport USB Serial Converter driver
      4 *
      5 * Copyright (C) 2000 Inside Out Networks, All rights reserved.
      6 * Copyright (C) 2001-2002 Greg Kroah-Hartman <greg@kroah.com>
      7 *
      8 * Supports the following devices:
      9 *	Edgeport/4
     10 *	Edgeport/4t
     11 *	Edgeport/2
     12 *	Edgeport/4i
     13 *	Edgeport/2i
     14 *	Edgeport/421
     15 *	Edgeport/21
     16 *	Rapidport/4
     17 *	Edgeport/8
     18 *	Edgeport/2D8
     19 *	Edgeport/4D8
     20 *	Edgeport/8i
     21 *
     22 * For questions or problems with this driver, contact Inside Out
     23 * Networks technical support, or Peter Berger <pberger@brimson.com>,
     24 * or Al Borchers <alborchers@steinerpoint.com>.
     25 *
     26 */
     27
     28#include <linux/kernel.h>
     29#include <linux/jiffies.h>
     30#include <linux/errno.h>
     31#include <linux/slab.h>
     32#include <linux/tty.h>
     33#include <linux/tty_driver.h>
     34#include <linux/tty_flip.h>
     35#include <linux/module.h>
     36#include <linux/spinlock.h>
     37#include <linux/serial.h>
     38#include <linux/ioctl.h>
     39#include <linux/wait.h>
     40#include <linux/firmware.h>
     41#include <linux/ihex.h>
     42#include <linux/uaccess.h>
     43#include <linux/usb.h>
     44#include <linux/usb/serial.h>
     45#include "io_edgeport.h"
     46#include "io_ionsp.h"		/* info for the iosp messages */
     47#include "io_16654.h"		/* 16654 UART defines */
     48
     49#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com> and David Iacovelli"
     50#define DRIVER_DESC "Edgeport USB Serial Driver"
     51
     52#define MAX_NAME_LEN		64
     53
     54#define OPEN_TIMEOUT		(5*HZ)		/* 5 seconds */
     55
     56static const struct usb_device_id edgeport_2port_id_table[] = {
     57	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_2) },
     58	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_2I) },
     59	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_421) },
     60	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_21) },
     61	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_2_DIN) },
     62	{ }
     63};
     64
     65static const struct usb_device_id edgeport_4port_id_table[] = {
     66	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_4) },
     67	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_RAPIDPORT_4) },
     68	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_4T) },
     69	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_MT4X56USB) },
     70	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_4I) },
     71	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8_DUAL_CPU) },
     72	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_4_DIN) },
     73	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_22I) },
     74	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_412_4) },
     75	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_COMPATIBLE) },
     76	{ }
     77};
     78
     79static const struct usb_device_id edgeport_8port_id_table[] = {
     80	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8) },
     81	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_16_DUAL_CPU) },
     82	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8I) },
     83	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8R) },
     84	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8RR) },
     85	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_412_8) },
     86	{ }
     87};
     88
     89static const struct usb_device_id Epic_port_id_table[] = {
     90	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0202) },
     91	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0203) },
     92	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0310) },
     93	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0311) },
     94	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0312) },
     95	{ USB_DEVICE(USB_VENDOR_ID_AXIOHM, AXIOHM_DEVICE_ID_EPIC_A758) },
     96	{ USB_DEVICE(USB_VENDOR_ID_AXIOHM, AXIOHM_DEVICE_ID_EPIC_A794) },
     97	{ USB_DEVICE(USB_VENDOR_ID_AXIOHM, AXIOHM_DEVICE_ID_EPIC_A225) },
     98	{ }
     99};
    100
    101/* Devices that this driver supports */
    102static const struct usb_device_id id_table_combined[] = {
    103	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_4) },
    104	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_RAPIDPORT_4) },
    105	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_4T) },
    106	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_MT4X56USB) },
    107	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_2) },
    108	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_4I) },
    109	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_2I) },
    110	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_421) },
    111	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_21) },
    112	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_8_DUAL_CPU) },
    113	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_8) },
    114	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_2_DIN) },
    115	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_4_DIN) },
    116	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_16_DUAL_CPU) },
    117	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_22I) },
    118	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_412_4) },
    119	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_COMPATIBLE) },
    120	{ USB_DEVICE(USB_VENDOR_ID_ION,	ION_DEVICE_ID_EDGEPORT_8I) },
    121	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8R) },
    122	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_8RR) },
    123	{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_EDGEPORT_412_8) },
    124	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0202) },
    125	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0203) },
    126	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0310) },
    127	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0311) },
    128	{ USB_DEVICE(USB_VENDOR_ID_NCR, NCR_DEVICE_ID_EPIC_0312) },
    129	{ USB_DEVICE(USB_VENDOR_ID_AXIOHM, AXIOHM_DEVICE_ID_EPIC_A758) },
    130	{ USB_DEVICE(USB_VENDOR_ID_AXIOHM, AXIOHM_DEVICE_ID_EPIC_A794) },
    131	{ USB_DEVICE(USB_VENDOR_ID_AXIOHM, AXIOHM_DEVICE_ID_EPIC_A225) },
    132	{ } /* Terminating entry */
    133};
    134
    135MODULE_DEVICE_TABLE(usb, id_table_combined);
    136
    137
    138/* receive port state */
    139enum RXSTATE {
    140	EXPECT_HDR1 = 0,    /* Expect header byte 1 */
    141	EXPECT_HDR2 = 1,    /* Expect header byte 2 */
    142	EXPECT_DATA = 2,    /* Expect 'RxBytesRemaining' data */
    143	EXPECT_HDR3 = 3,    /* Expect header byte 3 (for status hdrs only) */
    144};
    145
    146
    147/* Transmit Fifo
    148 * This Transmit queue is an extension of the edgeport Rx buffer.
    149 * The maximum amount of data buffered in both the edgeport
    150 * Rx buffer (maxTxCredits) and this buffer will never exceed maxTxCredits.
    151 */
    152struct TxFifo {
    153	unsigned int	head;	/* index to head pointer (write) */
    154	unsigned int	tail;	/* index to tail pointer (read)  */
    155	unsigned int	count;	/* Bytes in queue */
    156	unsigned int	size;	/* Max size of queue (equal to Max number of TxCredits) */
    157	unsigned char	*fifo;	/* allocated Buffer */
    158};
    159
    160/* This structure holds all of the local port information */
    161struct edgeport_port {
    162	__u16			txCredits;		/* our current credits for this port */
    163	__u16			maxTxCredits;		/* the max size of the port */
    164
    165	struct TxFifo		txfifo;			/* transmit fifo -- size will be maxTxCredits */
    166	struct urb		*write_urb;		/* write URB for this port */
    167	bool			write_in_progress;	/* 'true' while a write URB is outstanding */
    168	spinlock_t		ep_lock;
    169
    170	__u8			shadowLCR;		/* last LCR value received */
    171	__u8			shadowMCR;		/* last MCR value received */
    172	__u8			shadowMSR;		/* last MSR value received */
    173	__u8			shadowLSR;		/* last LSR value received */
    174	__u8			shadowXonChar;		/* last value set as XON char in Edgeport */
    175	__u8			shadowXoffChar;		/* last value set as XOFF char in Edgeport */
    176	__u8			validDataMask;
    177	__u32			baudRate;
    178
    179	bool			open;
    180	bool			openPending;
    181	bool			commandPending;
    182	bool			closePending;
    183	bool			chaseResponsePending;
    184
    185	wait_queue_head_t	wait_chase;		/* for handling sleeping while waiting for chase to finish */
    186	wait_queue_head_t	wait_open;		/* for handling sleeping while waiting for open to finish */
    187	wait_queue_head_t	wait_command;		/* for handling sleeping while waiting for command to finish */
    188
    189	struct usb_serial_port	*port;			/* loop back to the owner of this object */
    190};
    191
    192
    193/* This structure holds all of the individual device information */
    194struct edgeport_serial {
    195	char			name[MAX_NAME_LEN+2];		/* string name of this device */
    196
    197	struct edge_manuf_descriptor	manuf_descriptor;	/* the manufacturer descriptor */
    198	struct edge_boot_descriptor	boot_descriptor;	/* the boot firmware descriptor */
    199	struct edgeport_product_info	product_info;		/* Product Info */
    200	struct edge_compatibility_descriptor epic_descriptor;	/* Edgeport compatible descriptor */
    201	int			is_epic;			/* flag if EPiC device or not */
    202
    203	__u8			interrupt_in_endpoint;		/* the interrupt endpoint handle */
    204	unsigned char		*interrupt_in_buffer;		/* the buffer we use for the interrupt endpoint */
    205	struct urb		*interrupt_read_urb;		/* our interrupt urb */
    206
    207	__u8			bulk_in_endpoint;		/* the bulk in endpoint handle */
    208	unsigned char		*bulk_in_buffer;		/* the buffer we use for the bulk in endpoint */
    209	struct urb		*read_urb;			/* our bulk read urb */
    210	bool			read_in_progress;
    211	spinlock_t		es_lock;
    212
    213	__u8			bulk_out_endpoint;		/* the bulk out endpoint handle */
    214
    215	__s16			rxBytesAvail;			/* the number of bytes that we need to read from this device */
    216
    217	enum RXSTATE		rxState;			/* the current state of the bulk receive processor */
    218	__u8			rxHeader1;			/* receive header byte 1 */
    219	__u8			rxHeader2;			/* receive header byte 2 */
    220	__u8			rxHeader3;			/* receive header byte 3 */
    221	__u8			rxPort;				/* the port that we are currently receiving data for */
    222	__u8			rxStatusCode;			/* the receive status code */
    223	__u8			rxStatusParam;			/* the receive status paramater */
    224	__s16			rxBytesRemaining;		/* the number of port bytes left to read */
    225	struct usb_serial	*serial;			/* loop back to the owner of this object */
    226};
    227
    228/* baud rate information */
    229struct divisor_table_entry {
    230	__u32   BaudRate;
    231	__u16  Divisor;
    232};
    233
    234/*
    235 * Define table of divisors for Rev A EdgePort/4 hardware
    236 * These assume a 3.6864MHz crystal, the standard /16, and
    237 * MCR.7 = 0.
    238 */
    239
    240static const struct divisor_table_entry divisor_table[] = {
    241	{   50,		4608},
    242	{   75,		3072},
    243	{   110,	2095},	/* 2094.545455 => 230450   => .0217 % over */
    244	{   134,	1713},	/* 1713.011152 => 230398.5 => .00065% under */
    245	{   150,	1536},
    246	{   300,	768},
    247	{   600,	384},
    248	{   1200,	192},
    249	{   1800,	128},
    250	{   2400,	96},
    251	{   4800,	48},
    252	{   7200,	32},
    253	{   9600,	24},
    254	{   14400,	16},
    255	{   19200,	12},
    256	{   38400,	6},
    257	{   57600,	4},
    258	{   115200,	2},
    259	{   230400,	1},
    260};
    261
    262/* Number of outstanding Command Write Urbs */
    263static atomic_t CmdUrbs = ATOMIC_INIT(0);
    264
    265
    266/* function prototypes */
    267
    268static void edge_close(struct usb_serial_port *port);
    269
    270static void  process_rcvd_data(struct edgeport_serial *edge_serial,
    271				unsigned char *buffer, __u16 bufferLength);
    272static void process_rcvd_status(struct edgeport_serial *edge_serial,
    273				__u8 byte2, __u8 byte3);
    274static void edge_tty_recv(struct usb_serial_port *port, unsigned char *data,
    275		int length);
    276static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr);
    277static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData,
    278				__u8 lsr, __u8 data);
    279static int  send_iosp_ext_cmd(struct edgeport_port *edge_port, __u8 command,
    280				__u8 param);
    281static int  calc_baud_rate_divisor(struct device *dev, int baud_rate, int *divisor);
    282static void change_port_settings(struct tty_struct *tty,
    283				struct edgeport_port *edge_port,
    284				struct ktermios *old_termios);
    285static int  send_cmd_write_uart_register(struct edgeport_port *edge_port,
    286				__u8 regNum, __u8 regValue);
    287static int  write_cmd_usb(struct edgeport_port *edge_port,
    288				unsigned char *buffer, int writeLength);
    289static void send_more_port_data(struct edgeport_serial *edge_serial,
    290				struct edgeport_port *edge_port);
    291
    292static int rom_write(struct usb_serial *serial, __u16 extAddr, __u16 addr,
    293					__u16 length, const __u8 *data);
    294
    295/* ************************************************************************ */
    296/* ************************************************************************ */
    297/* ************************************************************************ */
    298/* ************************************************************************ */
    299
    300/************************************************************************
    301 *									*
    302 * update_edgeport_E2PROM()	Compare current versions of		*
    303 *				Boot ROM and Manufacture 		*
    304 *				Descriptors with versions		*
    305 *				embedded in this driver			*
    306 *									*
    307 ************************************************************************/
    308static void update_edgeport_E2PROM(struct edgeport_serial *edge_serial)
    309{
    310	struct device *dev = &edge_serial->serial->dev->dev;
    311	__u32 BootCurVer;
    312	__u32 BootNewVer;
    313	__u8 BootMajorVersion;
    314	__u8 BootMinorVersion;
    315	__u16 BootBuildNumber;
    316	__u32 Bootaddr;
    317	const struct ihex_binrec *rec;
    318	const struct firmware *fw;
    319	const char *fw_name;
    320	int response;
    321
    322	switch (edge_serial->product_info.iDownloadFile) {
    323	case EDGE_DOWNLOAD_FILE_I930:
    324		fw_name	= "edgeport/boot.fw";
    325		break;
    326	case EDGE_DOWNLOAD_FILE_80251:
    327		fw_name	= "edgeport/boot2.fw";
    328		break;
    329	default:
    330		return;
    331	}
    332
    333	response = request_ihex_firmware(&fw, fw_name,
    334					 &edge_serial->serial->dev->dev);
    335	if (response) {
    336		dev_err(dev, "Failed to load image \"%s\" err %d\n",
    337		       fw_name, response);
    338		return;
    339	}
    340
    341	rec = (const struct ihex_binrec *)fw->data;
    342	BootMajorVersion = rec->data[0];
    343	BootMinorVersion = rec->data[1];
    344	BootBuildNumber = (rec->data[2] << 8) | rec->data[3];
    345
    346	/* Check Boot Image Version */
    347	BootCurVer = (edge_serial->boot_descriptor.MajorVersion << 24) +
    348		     (edge_serial->boot_descriptor.MinorVersion << 16) +
    349		      le16_to_cpu(edge_serial->boot_descriptor.BuildNumber);
    350
    351	BootNewVer = (BootMajorVersion << 24) +
    352		     (BootMinorVersion << 16) +
    353		      BootBuildNumber;
    354
    355	dev_dbg(dev, "Current Boot Image version %d.%d.%d\n",
    356	    edge_serial->boot_descriptor.MajorVersion,
    357	    edge_serial->boot_descriptor.MinorVersion,
    358	    le16_to_cpu(edge_serial->boot_descriptor.BuildNumber));
    359
    360
    361	if (BootNewVer > BootCurVer) {
    362		dev_dbg(dev, "**Update Boot Image from %d.%d.%d to %d.%d.%d\n",
    363		    edge_serial->boot_descriptor.MajorVersion,
    364		    edge_serial->boot_descriptor.MinorVersion,
    365		    le16_to_cpu(edge_serial->boot_descriptor.BuildNumber),
    366		    BootMajorVersion, BootMinorVersion, BootBuildNumber);
    367
    368		dev_dbg(dev, "Downloading new Boot Image\n");
    369
    370		for (rec = ihex_next_binrec(rec); rec;
    371		     rec = ihex_next_binrec(rec)) {
    372			Bootaddr = be32_to_cpu(rec->addr);
    373			response = rom_write(edge_serial->serial,
    374					     Bootaddr >> 16,
    375					     Bootaddr & 0xFFFF,
    376					     be16_to_cpu(rec->len),
    377					     &rec->data[0]);
    378			if (response < 0) {
    379				dev_err(&edge_serial->serial->dev->dev,
    380					"rom_write failed (%x, %x, %d)\n",
    381					Bootaddr >> 16, Bootaddr & 0xFFFF,
    382					be16_to_cpu(rec->len));
    383				break;
    384			}
    385		}
    386	} else {
    387		dev_dbg(dev, "Boot Image -- already up to date\n");
    388	}
    389	release_firmware(fw);
    390}
    391
    392static void dump_product_info(struct edgeport_serial *edge_serial,
    393			      struct edgeport_product_info *product_info)
    394{
    395	struct device *dev = &edge_serial->serial->dev->dev;
    396
    397	/* Dump Product Info structure */
    398	dev_dbg(dev, "**Product Information:\n");
    399	dev_dbg(dev, "  ProductId             %x\n", product_info->ProductId);
    400	dev_dbg(dev, "  NumPorts              %d\n", product_info->NumPorts);
    401	dev_dbg(dev, "  ProdInfoVer           %d\n", product_info->ProdInfoVer);
    402	dev_dbg(dev, "  IsServer              %d\n", product_info->IsServer);
    403	dev_dbg(dev, "  IsRS232               %d\n", product_info->IsRS232);
    404	dev_dbg(dev, "  IsRS422               %d\n", product_info->IsRS422);
    405	dev_dbg(dev, "  IsRS485               %d\n", product_info->IsRS485);
    406	dev_dbg(dev, "  RomSize               %d\n", product_info->RomSize);
    407	dev_dbg(dev, "  RamSize               %d\n", product_info->RamSize);
    408	dev_dbg(dev, "  CpuRev                %x\n", product_info->CpuRev);
    409	dev_dbg(dev, "  BoardRev              %x\n", product_info->BoardRev);
    410	dev_dbg(dev, "  BootMajorVersion      %d.%d.%d\n",
    411		product_info->BootMajorVersion,
    412		product_info->BootMinorVersion,
    413		le16_to_cpu(product_info->BootBuildNumber));
    414	dev_dbg(dev, "  FirmwareMajorVersion  %d.%d.%d\n",
    415		product_info->FirmwareMajorVersion,
    416		product_info->FirmwareMinorVersion,
    417		le16_to_cpu(product_info->FirmwareBuildNumber));
    418	dev_dbg(dev, "  ManufactureDescDate   %d/%d/%d\n",
    419		product_info->ManufactureDescDate[0],
    420		product_info->ManufactureDescDate[1],
    421		product_info->ManufactureDescDate[2]+1900);
    422	dev_dbg(dev, "  iDownloadFile         0x%x\n",
    423		product_info->iDownloadFile);
    424	dev_dbg(dev, "  EpicVer               %d\n", product_info->EpicVer);
    425}
    426
    427static void get_product_info(struct edgeport_serial *edge_serial)
    428{
    429	struct edgeport_product_info *product_info = &edge_serial->product_info;
    430
    431	memset(product_info, 0, sizeof(struct edgeport_product_info));
    432
    433	product_info->ProductId = (__u16)(le16_to_cpu(edge_serial->serial->dev->descriptor.idProduct) & ~ION_DEVICE_ID_80251_NETCHIP);
    434	product_info->NumPorts = edge_serial->manuf_descriptor.NumPorts;
    435	product_info->ProdInfoVer = 0;
    436
    437	product_info->RomSize = edge_serial->manuf_descriptor.RomSize;
    438	product_info->RamSize = edge_serial->manuf_descriptor.RamSize;
    439	product_info->CpuRev = edge_serial->manuf_descriptor.CpuRev;
    440	product_info->BoardRev = edge_serial->manuf_descriptor.BoardRev;
    441
    442	product_info->BootMajorVersion =
    443				edge_serial->boot_descriptor.MajorVersion;
    444	product_info->BootMinorVersion =
    445				edge_serial->boot_descriptor.MinorVersion;
    446	product_info->BootBuildNumber =
    447				edge_serial->boot_descriptor.BuildNumber;
    448
    449	memcpy(product_info->ManufactureDescDate,
    450			edge_serial->manuf_descriptor.DescDate,
    451			sizeof(edge_serial->manuf_descriptor.DescDate));
    452
    453	/* check if this is 2nd generation hardware */
    454	if (le16_to_cpu(edge_serial->serial->dev->descriptor.idProduct)
    455					    & ION_DEVICE_ID_80251_NETCHIP)
    456		product_info->iDownloadFile = EDGE_DOWNLOAD_FILE_80251;
    457	else
    458		product_info->iDownloadFile = EDGE_DOWNLOAD_FILE_I930;
    459
    460	/* Determine Product type and set appropriate flags */
    461	switch (DEVICE_ID_FROM_USB_PRODUCT_ID(product_info->ProductId)) {
    462	case ION_DEVICE_ID_EDGEPORT_COMPATIBLE:
    463	case ION_DEVICE_ID_EDGEPORT_4T:
    464	case ION_DEVICE_ID_EDGEPORT_4:
    465	case ION_DEVICE_ID_EDGEPORT_2:
    466	case ION_DEVICE_ID_EDGEPORT_8_DUAL_CPU:
    467	case ION_DEVICE_ID_EDGEPORT_8:
    468	case ION_DEVICE_ID_EDGEPORT_421:
    469	case ION_DEVICE_ID_EDGEPORT_21:
    470	case ION_DEVICE_ID_EDGEPORT_2_DIN:
    471	case ION_DEVICE_ID_EDGEPORT_4_DIN:
    472	case ION_DEVICE_ID_EDGEPORT_16_DUAL_CPU:
    473		product_info->IsRS232 = 1;
    474		break;
    475
    476	case ION_DEVICE_ID_EDGEPORT_2I:	/* Edgeport/2 RS422/RS485 */
    477		product_info->IsRS422 = 1;
    478		product_info->IsRS485 = 1;
    479		break;
    480
    481	case ION_DEVICE_ID_EDGEPORT_8I:	/* Edgeport/4 RS422 */
    482	case ION_DEVICE_ID_EDGEPORT_4I:	/* Edgeport/4 RS422 */
    483		product_info->IsRS422 = 1;
    484		break;
    485	}
    486
    487	dump_product_info(edge_serial, product_info);
    488}
    489
    490static int get_epic_descriptor(struct edgeport_serial *ep)
    491{
    492	int result;
    493	struct usb_serial *serial = ep->serial;
    494	struct edgeport_product_info *product_info = &ep->product_info;
    495	struct edge_compatibility_descriptor *epic;
    496	struct edge_compatibility_bits *bits;
    497	struct device *dev = &serial->dev->dev;
    498
    499	ep->is_epic = 0;
    500
    501	epic = kmalloc(sizeof(*epic), GFP_KERNEL);
    502	if (!epic)
    503		return -ENOMEM;
    504
    505	result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
    506				 USB_REQUEST_ION_GET_EPIC_DESC,
    507				 0xC0, 0x00, 0x00,
    508				 epic, sizeof(*epic),
    509				 300);
    510	if (result == sizeof(*epic)) {
    511		ep->is_epic = 1;
    512		memcpy(&ep->epic_descriptor, epic, sizeof(*epic));
    513		memset(product_info, 0, sizeof(struct edgeport_product_info));
    514
    515		product_info->NumPorts = epic->NumPorts;
    516		product_info->ProdInfoVer = 0;
    517		product_info->FirmwareMajorVersion = epic->MajorVersion;
    518		product_info->FirmwareMinorVersion = epic->MinorVersion;
    519		product_info->FirmwareBuildNumber = epic->BuildNumber;
    520		product_info->iDownloadFile = epic->iDownloadFile;
    521		product_info->EpicVer = epic->EpicVer;
    522		product_info->Epic = epic->Supports;
    523		product_info->ProductId = ION_DEVICE_ID_EDGEPORT_COMPATIBLE;
    524		dump_product_info(ep, product_info);
    525
    526		bits = &ep->epic_descriptor.Supports;
    527		dev_dbg(dev, "**EPIC descriptor:\n");
    528		dev_dbg(dev, "  VendEnableSuspend: %s\n", bits->VendEnableSuspend ? "TRUE": "FALSE");
    529		dev_dbg(dev, "  IOSPOpen         : %s\n", bits->IOSPOpen	? "TRUE": "FALSE");
    530		dev_dbg(dev, "  IOSPClose        : %s\n", bits->IOSPClose	? "TRUE": "FALSE");
    531		dev_dbg(dev, "  IOSPChase        : %s\n", bits->IOSPChase	? "TRUE": "FALSE");
    532		dev_dbg(dev, "  IOSPSetRxFlow    : %s\n", bits->IOSPSetRxFlow	? "TRUE": "FALSE");
    533		dev_dbg(dev, "  IOSPSetTxFlow    : %s\n", bits->IOSPSetTxFlow	? "TRUE": "FALSE");
    534		dev_dbg(dev, "  IOSPSetXChar     : %s\n", bits->IOSPSetXChar	? "TRUE": "FALSE");
    535		dev_dbg(dev, "  IOSPRxCheck      : %s\n", bits->IOSPRxCheck	? "TRUE": "FALSE");
    536		dev_dbg(dev, "  IOSPSetClrBreak  : %s\n", bits->IOSPSetClrBreak	? "TRUE": "FALSE");
    537		dev_dbg(dev, "  IOSPWriteMCR     : %s\n", bits->IOSPWriteMCR	? "TRUE": "FALSE");
    538		dev_dbg(dev, "  IOSPWriteLCR     : %s\n", bits->IOSPWriteLCR	? "TRUE": "FALSE");
    539		dev_dbg(dev, "  IOSPSetBaudRate  : %s\n", bits->IOSPSetBaudRate	? "TRUE": "FALSE");
    540		dev_dbg(dev, "  TrueEdgeport     : %s\n", bits->TrueEdgeport	? "TRUE": "FALSE");
    541
    542		result = 0;
    543	} else if (result >= 0) {
    544		dev_warn(&serial->interface->dev, "short epic descriptor received: %d\n",
    545			 result);
    546		result = -EIO;
    547	}
    548
    549	kfree(epic);
    550
    551	return result;
    552}
    553
    554
    555/************************************************************************/
    556/************************************************************************/
    557/*            U S B  C A L L B A C K   F U N C T I O N S                */
    558/*            U S B  C A L L B A C K   F U N C T I O N S                */
    559/************************************************************************/
    560/************************************************************************/
    561
    562/*****************************************************************************
    563 * edge_interrupt_callback
    564 *	this is the callback function for when we have received data on the
    565 *	interrupt endpoint.
    566 *****************************************************************************/
    567static void edge_interrupt_callback(struct urb *urb)
    568{
    569	struct edgeport_serial *edge_serial = urb->context;
    570	struct device *dev;
    571	struct edgeport_port *edge_port;
    572	struct usb_serial_port *port;
    573	unsigned char *data = urb->transfer_buffer;
    574	int length = urb->actual_length;
    575	unsigned long flags;
    576	int bytes_avail;
    577	int position;
    578	int txCredits;
    579	int portNumber;
    580	int result;
    581	int status = urb->status;
    582
    583	switch (status) {
    584	case 0:
    585		/* success */
    586		break;
    587	case -ECONNRESET:
    588	case -ENOENT:
    589	case -ESHUTDOWN:
    590		/* this urb is terminated, clean up */
    591		dev_dbg(&urb->dev->dev, "%s - urb shutting down with status: %d\n", __func__, status);
    592		return;
    593	default:
    594		dev_dbg(&urb->dev->dev, "%s - nonzero urb status received: %d\n", __func__, status);
    595		goto exit;
    596	}
    597
    598	dev = &edge_serial->serial->dev->dev;
    599
    600	/* process this interrupt-read even if there are no ports open */
    601	if (length) {
    602		usb_serial_debug_data(dev, __func__, length, data);
    603
    604		if (length > 1) {
    605			bytes_avail = data[0] | (data[1] << 8);
    606			if (bytes_avail) {
    607				spin_lock_irqsave(&edge_serial->es_lock, flags);
    608				edge_serial->rxBytesAvail += bytes_avail;
    609				dev_dbg(dev,
    610					"%s - bytes_avail=%d, rxBytesAvail=%d, read_in_progress=%d\n",
    611					__func__, bytes_avail,
    612					edge_serial->rxBytesAvail,
    613					edge_serial->read_in_progress);
    614
    615				if (edge_serial->rxBytesAvail > 0 &&
    616				    !edge_serial->read_in_progress) {
    617					dev_dbg(dev, "%s - posting a read\n", __func__);
    618					edge_serial->read_in_progress = true;
    619
    620					/* we have pending bytes on the
    621					   bulk in pipe, send a request */
    622					result = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
    623					if (result) {
    624						dev_err(dev,
    625							"%s - usb_submit_urb(read bulk) failed with result = %d\n",
    626							__func__, result);
    627						edge_serial->read_in_progress = false;
    628					}
    629				}
    630				spin_unlock_irqrestore(&edge_serial->es_lock,
    631						       flags);
    632			}
    633		}
    634		/* grab the txcredits for the ports if available */
    635		position = 2;
    636		portNumber = 0;
    637		while ((position < length - 1) &&
    638				(portNumber < edge_serial->serial->num_ports)) {
    639			txCredits = data[position] | (data[position+1] << 8);
    640			if (txCredits) {
    641				port = edge_serial->serial->port[portNumber];
    642				edge_port = usb_get_serial_port_data(port);
    643				if (edge_port && edge_port->open) {
    644					spin_lock_irqsave(&edge_port->ep_lock,
    645							  flags);
    646					edge_port->txCredits += txCredits;
    647					spin_unlock_irqrestore(&edge_port->ep_lock,
    648							       flags);
    649					dev_dbg(dev, "%s - txcredits for port%d = %d\n",
    650						__func__, portNumber,
    651						edge_port->txCredits);
    652
    653					/* tell the tty driver that something
    654					   has changed */
    655					tty_port_tty_wakeup(&edge_port->port->port);
    656					/* Since we have more credit, check
    657					   if more data can be sent */
    658					send_more_port_data(edge_serial,
    659								edge_port);
    660				}
    661			}
    662			position += 2;
    663			++portNumber;
    664		}
    665	}
    666
    667exit:
    668	result = usb_submit_urb(urb, GFP_ATOMIC);
    669	if (result)
    670		dev_err(&urb->dev->dev,
    671			"%s - Error %d submitting control urb\n",
    672						__func__, result);
    673}
    674
    675
    676/*****************************************************************************
    677 * edge_bulk_in_callback
    678 *	this is the callback function for when we have received data on the
    679 *	bulk in endpoint.
    680 *****************************************************************************/
    681static void edge_bulk_in_callback(struct urb *urb)
    682{
    683	struct edgeport_serial	*edge_serial = urb->context;
    684	struct device *dev;
    685	unsigned char		*data = urb->transfer_buffer;
    686	int			retval;
    687	__u16			raw_data_length;
    688	int status = urb->status;
    689	unsigned long flags;
    690
    691	if (status) {
    692		dev_dbg(&urb->dev->dev, "%s - nonzero read bulk status received: %d\n",
    693			__func__, status);
    694		edge_serial->read_in_progress = false;
    695		return;
    696	}
    697
    698	if (urb->actual_length == 0) {
    699		dev_dbg(&urb->dev->dev, "%s - read bulk callback with no data\n", __func__);
    700		edge_serial->read_in_progress = false;
    701		return;
    702	}
    703
    704	dev = &edge_serial->serial->dev->dev;
    705	raw_data_length = urb->actual_length;
    706
    707	usb_serial_debug_data(dev, __func__, raw_data_length, data);
    708
    709	spin_lock_irqsave(&edge_serial->es_lock, flags);
    710
    711	/* decrement our rxBytes available by the number that we just got */
    712	edge_serial->rxBytesAvail -= raw_data_length;
    713
    714	dev_dbg(dev, "%s - Received = %d, rxBytesAvail %d\n", __func__,
    715		raw_data_length, edge_serial->rxBytesAvail);
    716
    717	process_rcvd_data(edge_serial, data, urb->actual_length);
    718
    719	/* check to see if there's any more data for us to read */
    720	if (edge_serial->rxBytesAvail > 0) {
    721		dev_dbg(dev, "%s - posting a read\n", __func__);
    722		retval = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
    723		if (retval) {
    724			dev_err(dev,
    725				"%s - usb_submit_urb(read bulk) failed, retval = %d\n",
    726				__func__, retval);
    727			edge_serial->read_in_progress = false;
    728		}
    729	} else {
    730		edge_serial->read_in_progress = false;
    731	}
    732
    733	spin_unlock_irqrestore(&edge_serial->es_lock, flags);
    734}
    735
    736
    737/*****************************************************************************
    738 * edge_bulk_out_data_callback
    739 *	this is the callback function for when we have finished sending
    740 *	serial data on the bulk out endpoint.
    741 *****************************************************************************/
    742static void edge_bulk_out_data_callback(struct urb *urb)
    743{
    744	struct edgeport_port *edge_port = urb->context;
    745	int status = urb->status;
    746
    747	if (status) {
    748		dev_dbg(&urb->dev->dev,
    749			"%s - nonzero write bulk status received: %d\n",
    750			__func__, status);
    751	}
    752
    753	if (edge_port->open)
    754		tty_port_tty_wakeup(&edge_port->port->port);
    755
    756	/* Release the Write URB */
    757	edge_port->write_in_progress = false;
    758
    759	/* Check if more data needs to be sent */
    760	send_more_port_data((struct edgeport_serial *)
    761		(usb_get_serial_data(edge_port->port->serial)), edge_port);
    762}
    763
    764
    765/*****************************************************************************
    766 * BulkOutCmdCallback
    767 *	this is the callback function for when we have finished sending a
    768 *	command	on the bulk out endpoint.
    769 *****************************************************************************/
    770static void edge_bulk_out_cmd_callback(struct urb *urb)
    771{
    772	struct edgeport_port *edge_port = urb->context;
    773	int status = urb->status;
    774
    775	atomic_dec(&CmdUrbs);
    776	dev_dbg(&urb->dev->dev, "%s - FREE URB %p (outstanding %d)\n",
    777		__func__, urb, atomic_read(&CmdUrbs));
    778
    779
    780	/* clean up the transfer buffer */
    781	kfree(urb->transfer_buffer);
    782
    783	/* Free the command urb */
    784	usb_free_urb(urb);
    785
    786	if (status) {
    787		dev_dbg(&urb->dev->dev,
    788			"%s - nonzero write bulk status received: %d\n",
    789			__func__, status);
    790		return;
    791	}
    792
    793	/* tell the tty driver that something has changed */
    794	if (edge_port->open)
    795		tty_port_tty_wakeup(&edge_port->port->port);
    796
    797	/* we have completed the command */
    798	edge_port->commandPending = false;
    799	wake_up(&edge_port->wait_command);
    800}
    801
    802
    803/*****************************************************************************
    804 * Driver tty interface functions
    805 *****************************************************************************/
    806
    807/*****************************************************************************
    808 * SerialOpen
    809 *	this function is called by the tty driver when a port is opened
    810 *	If successful, we return 0
    811 *	Otherwise we return a negative error number.
    812 *****************************************************************************/
    813static int edge_open(struct tty_struct *tty, struct usb_serial_port *port)
    814{
    815	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
    816	struct device *dev = &port->dev;
    817	struct usb_serial *serial;
    818	struct edgeport_serial *edge_serial;
    819	int response;
    820
    821	if (edge_port == NULL)
    822		return -ENODEV;
    823
    824	/* see if we've set up our endpoint info yet (can't set it up
    825	   in edge_startup as the structures were not set up at that time.) */
    826	serial = port->serial;
    827	edge_serial = usb_get_serial_data(serial);
    828	if (edge_serial == NULL)
    829		return -ENODEV;
    830	if (edge_serial->interrupt_in_buffer == NULL) {
    831		struct usb_serial_port *port0 = serial->port[0];
    832
    833		/* not set up yet, so do it now */
    834		edge_serial->interrupt_in_buffer =
    835					port0->interrupt_in_buffer;
    836		edge_serial->interrupt_in_endpoint =
    837					port0->interrupt_in_endpointAddress;
    838		edge_serial->interrupt_read_urb = port0->interrupt_in_urb;
    839		edge_serial->bulk_in_buffer = port0->bulk_in_buffer;
    840		edge_serial->bulk_in_endpoint =
    841					port0->bulk_in_endpointAddress;
    842		edge_serial->read_urb = port0->read_urb;
    843		edge_serial->bulk_out_endpoint =
    844					port0->bulk_out_endpointAddress;
    845
    846		/* set up our interrupt urb */
    847		usb_fill_int_urb(edge_serial->interrupt_read_urb,
    848		      serial->dev,
    849		      usb_rcvintpipe(serial->dev,
    850				port0->interrupt_in_endpointAddress),
    851		      port0->interrupt_in_buffer,
    852		      edge_serial->interrupt_read_urb->transfer_buffer_length,
    853		      edge_interrupt_callback, edge_serial,
    854		      edge_serial->interrupt_read_urb->interval);
    855
    856		/* set up our bulk in urb */
    857		usb_fill_bulk_urb(edge_serial->read_urb, serial->dev,
    858			usb_rcvbulkpipe(serial->dev,
    859				port0->bulk_in_endpointAddress),
    860			port0->bulk_in_buffer,
    861			edge_serial->read_urb->transfer_buffer_length,
    862			edge_bulk_in_callback, edge_serial);
    863		edge_serial->read_in_progress = false;
    864
    865		/* start interrupt read for this edgeport
    866		 * this interrupt will continue as long
    867		 * as the edgeport is connected */
    868		response = usb_submit_urb(edge_serial->interrupt_read_urb,
    869								GFP_KERNEL);
    870		if (response) {
    871			dev_err(dev, "%s - Error %d submitting control urb\n",
    872				__func__, response);
    873		}
    874	}
    875
    876	/* initialize our wait queues */
    877	init_waitqueue_head(&edge_port->wait_open);
    878	init_waitqueue_head(&edge_port->wait_chase);
    879	init_waitqueue_head(&edge_port->wait_command);
    880
    881	/* initialize our port settings */
    882	edge_port->txCredits = 0;	/* Can't send any data yet */
    883	/* Must always set this bit to enable ints! */
    884	edge_port->shadowMCR = MCR_MASTER_IE;
    885	edge_port->chaseResponsePending = false;
    886
    887	/* send a open port command */
    888	edge_port->openPending = true;
    889	edge_port->open        = false;
    890	response = send_iosp_ext_cmd(edge_port, IOSP_CMD_OPEN_PORT, 0);
    891
    892	if (response < 0) {
    893		dev_err(dev, "%s - error sending open port command\n", __func__);
    894		edge_port->openPending = false;
    895		return -ENODEV;
    896	}
    897
    898	/* now wait for the port to be completely opened */
    899	wait_event_timeout(edge_port->wait_open, !edge_port->openPending,
    900								OPEN_TIMEOUT);
    901
    902	if (!edge_port->open) {
    903		/* open timed out */
    904		dev_dbg(dev, "%s - open timedout\n", __func__);
    905		edge_port->openPending = false;
    906		return -ENODEV;
    907	}
    908
    909	/* create the txfifo */
    910	edge_port->txfifo.head	= 0;
    911	edge_port->txfifo.tail	= 0;
    912	edge_port->txfifo.count	= 0;
    913	edge_port->txfifo.size	= edge_port->maxTxCredits;
    914	edge_port->txfifo.fifo	= kmalloc(edge_port->maxTxCredits, GFP_KERNEL);
    915
    916	if (!edge_port->txfifo.fifo) {
    917		edge_close(port);
    918		return -ENOMEM;
    919	}
    920
    921	/* Allocate a URB for the write */
    922	edge_port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
    923	edge_port->write_in_progress = false;
    924
    925	if (!edge_port->write_urb) {
    926		edge_close(port);
    927		return -ENOMEM;
    928	}
    929
    930	dev_dbg(dev, "%s - Initialize TX fifo to %d bytes\n",
    931		__func__, edge_port->maxTxCredits);
    932
    933	return 0;
    934}
    935
    936
    937/************************************************************************
    938 *
    939 * block_until_chase_response
    940 *
    941 *	This function will block the close until one of the following:
    942 *		1. Response to our Chase comes from Edgeport
    943 *		2. A timeout of 10 seconds without activity has expired
    944 *		   (1K of Edgeport data @ 2400 baud ==> 4 sec to empty)
    945 *
    946 ************************************************************************/
    947static void block_until_chase_response(struct edgeport_port *edge_port)
    948{
    949	struct device *dev = &edge_port->port->dev;
    950	DEFINE_WAIT(wait);
    951	__u16 lastCredits;
    952	int timeout = 1*HZ;
    953	int loop = 10;
    954
    955	while (1) {
    956		/* Save Last credits */
    957		lastCredits = edge_port->txCredits;
    958
    959		/* Did we get our Chase response */
    960		if (!edge_port->chaseResponsePending) {
    961			dev_dbg(dev, "%s - Got Chase Response\n", __func__);
    962
    963			/* did we get all of our credit back? */
    964			if (edge_port->txCredits == edge_port->maxTxCredits) {
    965				dev_dbg(dev, "%s - Got all credits\n", __func__);
    966				return;
    967			}
    968		}
    969
    970		/* Block the thread for a while */
    971		prepare_to_wait(&edge_port->wait_chase, &wait,
    972						TASK_UNINTERRUPTIBLE);
    973		schedule_timeout(timeout);
    974		finish_wait(&edge_port->wait_chase, &wait);
    975
    976		if (lastCredits == edge_port->txCredits) {
    977			/* No activity.. count down. */
    978			loop--;
    979			if (loop == 0) {
    980				edge_port->chaseResponsePending = false;
    981				dev_dbg(dev, "%s - Chase TIMEOUT\n", __func__);
    982				return;
    983			}
    984		} else {
    985			/* Reset timeout value back to 10 seconds */
    986			dev_dbg(dev, "%s - Last %d, Current %d\n", __func__,
    987					lastCredits, edge_port->txCredits);
    988			loop = 10;
    989		}
    990	}
    991}
    992
    993
    994/************************************************************************
    995 *
    996 * block_until_tx_empty
    997 *
    998 *	This function will block the close until one of the following:
    999 *		1. TX count are 0
   1000 *		2. The edgeport has stopped
   1001 *		3. A timeout of 3 seconds without activity has expired
   1002 *
   1003 ************************************************************************/
   1004static void block_until_tx_empty(struct edgeport_port *edge_port)
   1005{
   1006	struct device *dev = &edge_port->port->dev;
   1007	DEFINE_WAIT(wait);
   1008	struct TxFifo *fifo = &edge_port->txfifo;
   1009	__u32 lastCount;
   1010	int timeout = HZ/10;
   1011	int loop = 30;
   1012
   1013	while (1) {
   1014		/* Save Last count */
   1015		lastCount = fifo->count;
   1016
   1017		/* Is the Edgeport Buffer empty? */
   1018		if (lastCount == 0) {
   1019			dev_dbg(dev, "%s - TX Buffer Empty\n", __func__);
   1020			return;
   1021		}
   1022
   1023		/* Block the thread for a while */
   1024		prepare_to_wait(&edge_port->wait_chase, &wait,
   1025						TASK_UNINTERRUPTIBLE);
   1026		schedule_timeout(timeout);
   1027		finish_wait(&edge_port->wait_chase, &wait);
   1028
   1029		dev_dbg(dev, "%s wait\n", __func__);
   1030
   1031		if (lastCount == fifo->count) {
   1032			/* No activity.. count down. */
   1033			loop--;
   1034			if (loop == 0) {
   1035				dev_dbg(dev, "%s - TIMEOUT\n", __func__);
   1036				return;
   1037			}
   1038		} else {
   1039			/* Reset timeout value back to seconds */
   1040			loop = 30;
   1041		}
   1042	}
   1043}
   1044
   1045
   1046/*****************************************************************************
   1047 * edge_close
   1048 *	this function is called by the tty driver when a port is closed
   1049 *****************************************************************************/
   1050static void edge_close(struct usb_serial_port *port)
   1051{
   1052	struct edgeport_serial *edge_serial;
   1053	struct edgeport_port *edge_port;
   1054	int status;
   1055
   1056	edge_serial = usb_get_serial_data(port->serial);
   1057	edge_port = usb_get_serial_port_data(port);
   1058	if (edge_serial == NULL || edge_port == NULL)
   1059		return;
   1060
   1061	/* block until tx is empty */
   1062	block_until_tx_empty(edge_port);
   1063
   1064	edge_port->closePending = true;
   1065
   1066	if (!edge_serial->is_epic ||
   1067	    edge_serial->epic_descriptor.Supports.IOSPChase) {
   1068		/* flush and chase */
   1069		edge_port->chaseResponsePending = true;
   1070
   1071		dev_dbg(&port->dev, "%s - Sending IOSP_CMD_CHASE_PORT\n", __func__);
   1072		status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0);
   1073		if (status == 0)
   1074			/* block until chase finished */
   1075			block_until_chase_response(edge_port);
   1076		else
   1077			edge_port->chaseResponsePending = false;
   1078	}
   1079
   1080	if (!edge_serial->is_epic ||
   1081	    edge_serial->epic_descriptor.Supports.IOSPClose) {
   1082	       /* close the port */
   1083		dev_dbg(&port->dev, "%s - Sending IOSP_CMD_CLOSE_PORT\n", __func__);
   1084		send_iosp_ext_cmd(edge_port, IOSP_CMD_CLOSE_PORT, 0);
   1085	}
   1086
   1087	/* port->close = true; */
   1088	edge_port->closePending = false;
   1089	edge_port->open = false;
   1090	edge_port->openPending = false;
   1091
   1092	usb_kill_urb(edge_port->write_urb);
   1093
   1094	if (edge_port->write_urb) {
   1095		/* if this urb had a transfer buffer already
   1096				(old transfer) free it */
   1097		kfree(edge_port->write_urb->transfer_buffer);
   1098		usb_free_urb(edge_port->write_urb);
   1099		edge_port->write_urb = NULL;
   1100	}
   1101	kfree(edge_port->txfifo.fifo);
   1102	edge_port->txfifo.fifo = NULL;
   1103}
   1104
   1105/*****************************************************************************
   1106 * SerialWrite
   1107 *	this function is called by the tty driver when data should be written
   1108 *	to the port.
   1109 *	If successful, we return the number of bytes written, otherwise we
   1110 *	return a negative error number.
   1111 *****************************************************************************/
   1112static int edge_write(struct tty_struct *tty, struct usb_serial_port *port,
   1113					const unsigned char *data, int count)
   1114{
   1115	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1116	struct TxFifo *fifo;
   1117	int copySize;
   1118	int bytesleft;
   1119	int firsthalf;
   1120	int secondhalf;
   1121	unsigned long flags;
   1122
   1123	if (edge_port == NULL)
   1124		return -ENODEV;
   1125
   1126	/* get a pointer to the Tx fifo */
   1127	fifo = &edge_port->txfifo;
   1128
   1129	spin_lock_irqsave(&edge_port->ep_lock, flags);
   1130
   1131	/* calculate number of bytes to put in fifo */
   1132	copySize = min((unsigned int)count,
   1133				(edge_port->txCredits - fifo->count));
   1134
   1135	dev_dbg(&port->dev, "%s of %d byte(s) Fifo room  %d -- will copy %d bytes\n",
   1136		__func__, count, edge_port->txCredits - fifo->count, copySize);
   1137
   1138	/* catch writes of 0 bytes which the tty driver likes to give us,
   1139	   and when txCredits is empty */
   1140	if (copySize == 0) {
   1141		dev_dbg(&port->dev, "%s - copySize = Zero\n", __func__);
   1142		goto finish_write;
   1143	}
   1144
   1145	/* queue the data
   1146	 * since we can never overflow the buffer we do not have to check for a
   1147	 * full condition
   1148	 *
   1149	 * the copy is done is two parts -- first fill to the end of the buffer
   1150	 * then copy the reset from the start of the buffer
   1151	 */
   1152	bytesleft = fifo->size - fifo->head;
   1153	firsthalf = min(bytesleft, copySize);
   1154	dev_dbg(&port->dev, "%s - copy %d bytes of %d into fifo \n", __func__,
   1155		firsthalf, bytesleft);
   1156
   1157	/* now copy our data */
   1158	memcpy(&fifo->fifo[fifo->head], data, firsthalf);
   1159	usb_serial_debug_data(&port->dev, __func__, firsthalf, &fifo->fifo[fifo->head]);
   1160
   1161	/* update the index and size */
   1162	fifo->head  += firsthalf;
   1163	fifo->count += firsthalf;
   1164
   1165	/* wrap the index */
   1166	if (fifo->head == fifo->size)
   1167		fifo->head = 0;
   1168
   1169	secondhalf = copySize-firsthalf;
   1170
   1171	if (secondhalf) {
   1172		dev_dbg(&port->dev, "%s - copy rest of data %d\n", __func__, secondhalf);
   1173		memcpy(&fifo->fifo[fifo->head], &data[firsthalf], secondhalf);
   1174		usb_serial_debug_data(&port->dev, __func__, secondhalf, &fifo->fifo[fifo->head]);
   1175		/* update the index and size */
   1176		fifo->count += secondhalf;
   1177		fifo->head  += secondhalf;
   1178		/* No need to check for wrap since we can not get to end of
   1179		 * the fifo in this part
   1180		 */
   1181	}
   1182
   1183finish_write:
   1184	spin_unlock_irqrestore(&edge_port->ep_lock, flags);
   1185
   1186	send_more_port_data((struct edgeport_serial *)
   1187			usb_get_serial_data(port->serial), edge_port);
   1188
   1189	dev_dbg(&port->dev, "%s wrote %d byte(s) TxCredits %d, Fifo %d\n",
   1190		__func__, copySize, edge_port->txCredits, fifo->count);
   1191
   1192	return copySize;
   1193}
   1194
   1195
   1196/************************************************************************
   1197 *
   1198 * send_more_port_data()
   1199 *
   1200 *	This routine attempts to write additional UART transmit data
   1201 *	to a port over the USB bulk pipe. It is called (1) when new
   1202 *	data has been written to a port's TxBuffer from higher layers
   1203 *	(2) when the peripheral sends us additional TxCredits indicating
   1204 *	that it can accept more	Tx data for a given port; and (3) when
   1205 *	a bulk write completes successfully and we want to see if we
   1206 *	can transmit more.
   1207 *
   1208 ************************************************************************/
   1209static void send_more_port_data(struct edgeport_serial *edge_serial,
   1210					struct edgeport_port *edge_port)
   1211{
   1212	struct TxFifo	*fifo = &edge_port->txfifo;
   1213	struct device	*dev = &edge_port->port->dev;
   1214	struct urb	*urb;
   1215	unsigned char	*buffer;
   1216	int		status;
   1217	int		count;
   1218	int		bytesleft;
   1219	int		firsthalf;
   1220	int		secondhalf;
   1221	unsigned long	flags;
   1222
   1223	spin_lock_irqsave(&edge_port->ep_lock, flags);
   1224
   1225	if (edge_port->write_in_progress ||
   1226	    !edge_port->open             ||
   1227	    (fifo->count == 0)) {
   1228		dev_dbg(dev, "%s EXIT - fifo %d, PendingWrite = %d\n",
   1229			__func__, fifo->count, edge_port->write_in_progress);
   1230		goto exit_send;
   1231	}
   1232
   1233	/* since the amount of data in the fifo will always fit into the
   1234	 * edgeport buffer we do not need to check the write length
   1235	 *
   1236	 * Do we have enough credits for this port to make it worthwhile
   1237	 * to bother queueing a write. If it's too small, say a few bytes,
   1238	 * it's better to wait for more credits so we can do a larger write.
   1239	 */
   1240	if (edge_port->txCredits < EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(edge_port->maxTxCredits, EDGE_FW_BULK_MAX_PACKET_SIZE)) {
   1241		dev_dbg(dev, "%s Not enough credit - fifo %d TxCredit %d\n",
   1242			__func__, fifo->count, edge_port->txCredits);
   1243		goto exit_send;
   1244	}
   1245
   1246	/* lock this write */
   1247	edge_port->write_in_progress = true;
   1248
   1249	/* get a pointer to the write_urb */
   1250	urb = edge_port->write_urb;
   1251
   1252	/* make sure transfer buffer is freed */
   1253	kfree(urb->transfer_buffer);
   1254	urb->transfer_buffer = NULL;
   1255
   1256	/* build the data header for the buffer and port that we are about
   1257	   to send out */
   1258	count = fifo->count;
   1259	buffer = kmalloc(count+2, GFP_ATOMIC);
   1260	if (!buffer) {
   1261		edge_port->write_in_progress = false;
   1262		goto exit_send;
   1263	}
   1264	buffer[0] = IOSP_BUILD_DATA_HDR1(edge_port->port->port_number, count);
   1265	buffer[1] = IOSP_BUILD_DATA_HDR2(edge_port->port->port_number, count);
   1266
   1267	/* now copy our data */
   1268	bytesleft =  fifo->size - fifo->tail;
   1269	firsthalf = min(bytesleft, count);
   1270	memcpy(&buffer[2], &fifo->fifo[fifo->tail], firsthalf);
   1271	fifo->tail  += firsthalf;
   1272	fifo->count -= firsthalf;
   1273	if (fifo->tail == fifo->size)
   1274		fifo->tail = 0;
   1275
   1276	secondhalf = count-firsthalf;
   1277	if (secondhalf) {
   1278		memcpy(&buffer[2+firsthalf], &fifo->fifo[fifo->tail],
   1279								secondhalf);
   1280		fifo->tail  += secondhalf;
   1281		fifo->count -= secondhalf;
   1282	}
   1283
   1284	if (count)
   1285		usb_serial_debug_data(&edge_port->port->dev, __func__, count, &buffer[2]);
   1286
   1287	/* fill up the urb with all of our data and submit it */
   1288	usb_fill_bulk_urb(urb, edge_serial->serial->dev,
   1289			usb_sndbulkpipe(edge_serial->serial->dev,
   1290					edge_serial->bulk_out_endpoint),
   1291			buffer, count+2,
   1292			edge_bulk_out_data_callback, edge_port);
   1293
   1294	/* decrement the number of credits we have by the number we just sent */
   1295	edge_port->txCredits -= count;
   1296	edge_port->port->icount.tx += count;
   1297
   1298	status = usb_submit_urb(urb, GFP_ATOMIC);
   1299	if (status) {
   1300		/* something went wrong */
   1301		dev_err_console(edge_port->port,
   1302			"%s - usb_submit_urb(write bulk) failed, status = %d, data lost\n",
   1303				__func__, status);
   1304		edge_port->write_in_progress = false;
   1305
   1306		/* revert the credits as something bad happened. */
   1307		edge_port->txCredits += count;
   1308		edge_port->port->icount.tx -= count;
   1309	}
   1310	dev_dbg(dev, "%s wrote %d byte(s) TxCredit %d, Fifo %d\n",
   1311		__func__, count, edge_port->txCredits, fifo->count);
   1312
   1313exit_send:
   1314	spin_unlock_irqrestore(&edge_port->ep_lock, flags);
   1315}
   1316
   1317
   1318/*****************************************************************************
   1319 * edge_write_room
   1320 *	this function is called by the tty driver when it wants to know how
   1321 *	many bytes of data we can accept for a specific port.
   1322 *****************************************************************************/
   1323static unsigned int edge_write_room(struct tty_struct *tty)
   1324{
   1325	struct usb_serial_port *port = tty->driver_data;
   1326	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1327	unsigned int room;
   1328	unsigned long flags;
   1329
   1330	/* total of both buffers is still txCredit */
   1331	spin_lock_irqsave(&edge_port->ep_lock, flags);
   1332	room = edge_port->txCredits - edge_port->txfifo.count;
   1333	spin_unlock_irqrestore(&edge_port->ep_lock, flags);
   1334
   1335	dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
   1336	return room;
   1337}
   1338
   1339
   1340/*****************************************************************************
   1341 * edge_chars_in_buffer
   1342 *	this function is called by the tty driver when it wants to know how
   1343 *	many bytes of data we currently have outstanding in the port (data that
   1344 *	has been written, but hasn't made it out the port yet)
   1345 *****************************************************************************/
   1346static unsigned int edge_chars_in_buffer(struct tty_struct *tty)
   1347{
   1348	struct usb_serial_port *port = tty->driver_data;
   1349	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1350	unsigned int num_chars;
   1351	unsigned long flags;
   1352
   1353	spin_lock_irqsave(&edge_port->ep_lock, flags);
   1354	num_chars = edge_port->maxTxCredits - edge_port->txCredits +
   1355						edge_port->txfifo.count;
   1356	spin_unlock_irqrestore(&edge_port->ep_lock, flags);
   1357	if (num_chars) {
   1358		dev_dbg(&port->dev, "%s - returns %u\n", __func__, num_chars);
   1359	}
   1360
   1361	return num_chars;
   1362}
   1363
   1364
   1365/*****************************************************************************
   1366 * SerialThrottle
   1367 *	this function is called by the tty driver when it wants to stop the data
   1368 *	being read from the port.
   1369 *****************************************************************************/
   1370static void edge_throttle(struct tty_struct *tty)
   1371{
   1372	struct usb_serial_port *port = tty->driver_data;
   1373	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1374	int status;
   1375
   1376	if (edge_port == NULL)
   1377		return;
   1378
   1379	if (!edge_port->open) {
   1380		dev_dbg(&port->dev, "%s - port not opened\n", __func__);
   1381		return;
   1382	}
   1383
   1384	/* if we are implementing XON/XOFF, send the stop character */
   1385	if (I_IXOFF(tty)) {
   1386		unsigned char stop_char = STOP_CHAR(tty);
   1387		status = edge_write(tty, port, &stop_char, 1);
   1388		if (status <= 0)
   1389			return;
   1390	}
   1391
   1392	/* if we are implementing RTS/CTS, toggle that line */
   1393	if (C_CRTSCTS(tty)) {
   1394		edge_port->shadowMCR &= ~MCR_RTS;
   1395		status = send_cmd_write_uart_register(edge_port, MCR,
   1396							edge_port->shadowMCR);
   1397		if (status != 0)
   1398			return;
   1399	}
   1400}
   1401
   1402
   1403/*****************************************************************************
   1404 * edge_unthrottle
   1405 *	this function is called by the tty driver when it wants to resume the
   1406 *	data being read from the port (called after SerialThrottle is called)
   1407 *****************************************************************************/
   1408static void edge_unthrottle(struct tty_struct *tty)
   1409{
   1410	struct usb_serial_port *port = tty->driver_data;
   1411	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1412	int status;
   1413
   1414	if (edge_port == NULL)
   1415		return;
   1416
   1417	if (!edge_port->open) {
   1418		dev_dbg(&port->dev, "%s - port not opened\n", __func__);
   1419		return;
   1420	}
   1421
   1422	/* if we are implementing XON/XOFF, send the start character */
   1423	if (I_IXOFF(tty)) {
   1424		unsigned char start_char = START_CHAR(tty);
   1425		status = edge_write(tty, port, &start_char, 1);
   1426		if (status <= 0)
   1427			return;
   1428	}
   1429	/* if we are implementing RTS/CTS, toggle that line */
   1430	if (C_CRTSCTS(tty)) {
   1431		edge_port->shadowMCR |= MCR_RTS;
   1432		send_cmd_write_uart_register(edge_port, MCR,
   1433						edge_port->shadowMCR);
   1434	}
   1435}
   1436
   1437
   1438/*****************************************************************************
   1439 * SerialSetTermios
   1440 *	this function is called by the tty driver when it wants to change
   1441 * the termios structure
   1442 *****************************************************************************/
   1443static void edge_set_termios(struct tty_struct *tty,
   1444	struct usb_serial_port *port, struct ktermios *old_termios)
   1445{
   1446	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1447
   1448	if (edge_port == NULL)
   1449		return;
   1450
   1451	if (!edge_port->open) {
   1452		dev_dbg(&port->dev, "%s - port not opened\n", __func__);
   1453		return;
   1454	}
   1455
   1456	/* change the port settings to the new ones specified */
   1457	change_port_settings(tty, edge_port, old_termios);
   1458}
   1459
   1460
   1461/*****************************************************************************
   1462 * get_lsr_info - get line status register info
   1463 *
   1464 * Purpose: Let user call ioctl() to get info when the UART physically
   1465 * 	    is emptied.  On bus types like RS485, the transmitter must
   1466 * 	    release the bus after transmitting. This must be done when
   1467 * 	    the transmit shift register is empty, not be done when the
   1468 * 	    transmit holding register is empty.  This functionality
   1469 * 	    allows an RS485 driver to be written in user space.
   1470 *****************************************************************************/
   1471static int get_lsr_info(struct edgeport_port *edge_port,
   1472						unsigned int __user *value)
   1473{
   1474	unsigned int result = 0;
   1475	unsigned long flags;
   1476
   1477	spin_lock_irqsave(&edge_port->ep_lock, flags);
   1478	if (edge_port->maxTxCredits == edge_port->txCredits &&
   1479	    edge_port->txfifo.count == 0) {
   1480		dev_dbg(&edge_port->port->dev, "%s -- Empty\n", __func__);
   1481		result = TIOCSER_TEMT;
   1482	}
   1483	spin_unlock_irqrestore(&edge_port->ep_lock, flags);
   1484
   1485	if (copy_to_user(value, &result, sizeof(int)))
   1486		return -EFAULT;
   1487	return 0;
   1488}
   1489
   1490static int edge_tiocmset(struct tty_struct *tty,
   1491					unsigned int set, unsigned int clear)
   1492{
   1493	struct usb_serial_port *port = tty->driver_data;
   1494	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1495	unsigned int mcr;
   1496
   1497	mcr = edge_port->shadowMCR;
   1498	if (set & TIOCM_RTS)
   1499		mcr |= MCR_RTS;
   1500	if (set & TIOCM_DTR)
   1501		mcr |= MCR_DTR;
   1502	if (set & TIOCM_LOOP)
   1503		mcr |= MCR_LOOPBACK;
   1504
   1505	if (clear & TIOCM_RTS)
   1506		mcr &= ~MCR_RTS;
   1507	if (clear & TIOCM_DTR)
   1508		mcr &= ~MCR_DTR;
   1509	if (clear & TIOCM_LOOP)
   1510		mcr &= ~MCR_LOOPBACK;
   1511
   1512	edge_port->shadowMCR = mcr;
   1513
   1514	send_cmd_write_uart_register(edge_port, MCR, edge_port->shadowMCR);
   1515
   1516	return 0;
   1517}
   1518
   1519static int edge_tiocmget(struct tty_struct *tty)
   1520{
   1521	struct usb_serial_port *port = tty->driver_data;
   1522	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1523	unsigned int result = 0;
   1524	unsigned int msr;
   1525	unsigned int mcr;
   1526
   1527	msr = edge_port->shadowMSR;
   1528	mcr = edge_port->shadowMCR;
   1529	result = ((mcr & MCR_DTR)	? TIOCM_DTR: 0)	  /* 0x002 */
   1530		  | ((mcr & MCR_RTS)	? TIOCM_RTS: 0)   /* 0x004 */
   1531		  | ((msr & EDGEPORT_MSR_CTS)	? TIOCM_CTS: 0)   /* 0x020 */
   1532		  | ((msr & EDGEPORT_MSR_CD)	? TIOCM_CAR: 0)   /* 0x040 */
   1533		  | ((msr & EDGEPORT_MSR_RI)	? TIOCM_RI:  0)   /* 0x080 */
   1534		  | ((msr & EDGEPORT_MSR_DSR)	? TIOCM_DSR: 0);  /* 0x100 */
   1535
   1536	return result;
   1537}
   1538
   1539/*****************************************************************************
   1540 * SerialIoctl
   1541 *	this function handles any ioctl calls to the driver
   1542 *****************************************************************************/
   1543static int edge_ioctl(struct tty_struct *tty,
   1544					unsigned int cmd, unsigned long arg)
   1545{
   1546	struct usb_serial_port *port = tty->driver_data;
   1547	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1548
   1549	switch (cmd) {
   1550	case TIOCSERGETLSR:
   1551		dev_dbg(&port->dev, "%s TIOCSERGETLSR\n", __func__);
   1552		return get_lsr_info(edge_port, (unsigned int __user *) arg);
   1553	}
   1554	return -ENOIOCTLCMD;
   1555}
   1556
   1557
   1558/*****************************************************************************
   1559 * SerialBreak
   1560 *	this function sends a break to the port
   1561 *****************************************************************************/
   1562static void edge_break(struct tty_struct *tty, int break_state)
   1563{
   1564	struct usb_serial_port *port = tty->driver_data;
   1565	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
   1566	struct edgeport_serial *edge_serial = usb_get_serial_data(port->serial);
   1567	int status;
   1568
   1569	if (!edge_serial->is_epic ||
   1570	    edge_serial->epic_descriptor.Supports.IOSPChase) {
   1571		/* flush and chase */
   1572		edge_port->chaseResponsePending = true;
   1573
   1574		dev_dbg(&port->dev, "%s - Sending IOSP_CMD_CHASE_PORT\n", __func__);
   1575		status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0);
   1576		if (status == 0) {
   1577			/* block until chase finished */
   1578			block_until_chase_response(edge_port);
   1579		} else {
   1580			edge_port->chaseResponsePending = false;
   1581		}
   1582	}
   1583
   1584	if (!edge_serial->is_epic ||
   1585	    edge_serial->epic_descriptor.Supports.IOSPSetClrBreak) {
   1586		if (break_state == -1) {
   1587			dev_dbg(&port->dev, "%s - Sending IOSP_CMD_SET_BREAK\n", __func__);
   1588			status = send_iosp_ext_cmd(edge_port,
   1589						IOSP_CMD_SET_BREAK, 0);
   1590		} else {
   1591			dev_dbg(&port->dev, "%s - Sending IOSP_CMD_CLEAR_BREAK\n", __func__);
   1592			status = send_iosp_ext_cmd(edge_port,
   1593						IOSP_CMD_CLEAR_BREAK, 0);
   1594		}
   1595		if (status)
   1596			dev_dbg(&port->dev, "%s - error sending break set/clear command.\n",
   1597				__func__);
   1598	}
   1599}
   1600
   1601
   1602/*****************************************************************************
   1603 * process_rcvd_data
   1604 *	this function handles the data received on the bulk in pipe.
   1605 *****************************************************************************/
   1606static void process_rcvd_data(struct edgeport_serial *edge_serial,
   1607				unsigned char *buffer, __u16 bufferLength)
   1608{
   1609	struct usb_serial *serial = edge_serial->serial;
   1610	struct device *dev = &serial->dev->dev;
   1611	struct usb_serial_port *port;
   1612	struct edgeport_port *edge_port;
   1613	__u16 lastBufferLength;
   1614	__u16 rxLen;
   1615
   1616	lastBufferLength = bufferLength + 1;
   1617
   1618	while (bufferLength > 0) {
   1619		/* failsafe incase we get a message that we don't understand */
   1620		if (lastBufferLength == bufferLength) {
   1621			dev_dbg(dev, "%s - stuck in loop, exiting it.\n", __func__);
   1622			break;
   1623		}
   1624		lastBufferLength = bufferLength;
   1625
   1626		switch (edge_serial->rxState) {
   1627		case EXPECT_HDR1:
   1628			edge_serial->rxHeader1 = *buffer;
   1629			++buffer;
   1630			--bufferLength;
   1631
   1632			if (bufferLength == 0) {
   1633				edge_serial->rxState = EXPECT_HDR2;
   1634				break;
   1635			}
   1636			fallthrough;
   1637		case EXPECT_HDR2:
   1638			edge_serial->rxHeader2 = *buffer;
   1639			++buffer;
   1640			--bufferLength;
   1641
   1642			dev_dbg(dev, "%s - Hdr1=%02X Hdr2=%02X\n", __func__,
   1643				edge_serial->rxHeader1, edge_serial->rxHeader2);
   1644			/* Process depending on whether this header is
   1645			 * data or status */
   1646
   1647			if (IS_CMD_STAT_HDR(edge_serial->rxHeader1)) {
   1648				/* Decode this status header and go to
   1649				 * EXPECT_HDR1 (if we can process the status
   1650				 * with only 2 bytes), or go to EXPECT_HDR3 to
   1651				 * get the third byte. */
   1652				edge_serial->rxPort =
   1653				    IOSP_GET_HDR_PORT(edge_serial->rxHeader1);
   1654				edge_serial->rxStatusCode =
   1655				    IOSP_GET_STATUS_CODE(
   1656						edge_serial->rxHeader1);
   1657
   1658				if (!IOSP_STATUS_IS_2BYTE(
   1659						edge_serial->rxStatusCode)) {
   1660					/* This status needs additional bytes.
   1661					 * Save what we have and then wait for
   1662					 * more data.
   1663					 */
   1664					edge_serial->rxStatusParam
   1665						= edge_serial->rxHeader2;
   1666					edge_serial->rxState = EXPECT_HDR3;
   1667					break;
   1668				}
   1669				/* We have all the header bytes, process the
   1670				   status now */
   1671				process_rcvd_status(edge_serial,
   1672						edge_serial->rxHeader2, 0);
   1673				edge_serial->rxState = EXPECT_HDR1;
   1674				break;
   1675			}
   1676
   1677			edge_serial->rxPort = IOSP_GET_HDR_PORT(edge_serial->rxHeader1);
   1678			edge_serial->rxBytesRemaining = IOSP_GET_HDR_DATA_LEN(edge_serial->rxHeader1,
   1679									      edge_serial->rxHeader2);
   1680			dev_dbg(dev, "%s - Data for Port %u Len %u\n", __func__,
   1681				edge_serial->rxPort,
   1682				edge_serial->rxBytesRemaining);
   1683
   1684			if (bufferLength == 0) {
   1685				edge_serial->rxState = EXPECT_DATA;
   1686				break;
   1687			}
   1688			fallthrough;
   1689		case EXPECT_DATA: /* Expect data */
   1690			if (bufferLength < edge_serial->rxBytesRemaining) {
   1691				rxLen = bufferLength;
   1692				/* Expect data to start next buffer */
   1693				edge_serial->rxState = EXPECT_DATA;
   1694			} else {
   1695				/* BufLen >= RxBytesRemaining */
   1696				rxLen = edge_serial->rxBytesRemaining;
   1697				/* Start another header next time */
   1698				edge_serial->rxState = EXPECT_HDR1;
   1699			}
   1700
   1701			bufferLength -= rxLen;
   1702			edge_serial->rxBytesRemaining -= rxLen;
   1703
   1704			/* spit this data back into the tty driver if this
   1705			   port is open */
   1706			if (rxLen && edge_serial->rxPort < serial->num_ports) {
   1707				port = serial->port[edge_serial->rxPort];
   1708				edge_port = usb_get_serial_port_data(port);
   1709				if (edge_port && edge_port->open) {
   1710					dev_dbg(dev, "%s - Sending %d bytes to TTY for port %d\n",
   1711						__func__, rxLen,
   1712						edge_serial->rxPort);
   1713					edge_tty_recv(edge_port->port, buffer,
   1714							rxLen);
   1715					edge_port->port->icount.rx += rxLen;
   1716				}
   1717			}
   1718			buffer += rxLen;
   1719			break;
   1720
   1721		case EXPECT_HDR3:	/* Expect 3rd byte of status header */
   1722			edge_serial->rxHeader3 = *buffer;
   1723			++buffer;
   1724			--bufferLength;
   1725
   1726			/* We have all the header bytes, process the
   1727			   status now */
   1728			process_rcvd_status(edge_serial,
   1729				edge_serial->rxStatusParam,
   1730				edge_serial->rxHeader3);
   1731			edge_serial->rxState = EXPECT_HDR1;
   1732			break;
   1733		}
   1734	}
   1735}
   1736
   1737
   1738/*****************************************************************************
   1739 * process_rcvd_status
   1740 *	this function handles the any status messages received on the
   1741 *	bulk in pipe.
   1742 *****************************************************************************/
   1743static void process_rcvd_status(struct edgeport_serial *edge_serial,
   1744						__u8 byte2, __u8 byte3)
   1745{
   1746	struct usb_serial_port *port;
   1747	struct edgeport_port *edge_port;
   1748	struct tty_struct *tty;
   1749	struct device *dev;
   1750	__u8 code = edge_serial->rxStatusCode;
   1751
   1752	/* switch the port pointer to the one being currently talked about */
   1753	if (edge_serial->rxPort >= edge_serial->serial->num_ports)
   1754		return;
   1755	port = edge_serial->serial->port[edge_serial->rxPort];
   1756	edge_port = usb_get_serial_port_data(port);
   1757	if (edge_port == NULL) {
   1758		dev_err(&edge_serial->serial->dev->dev,
   1759			"%s - edge_port == NULL for port %d\n",
   1760					__func__, edge_serial->rxPort);
   1761		return;
   1762	}
   1763	dev = &port->dev;
   1764
   1765	if (code == IOSP_EXT_STATUS) {
   1766		switch (byte2) {
   1767		case IOSP_EXT_STATUS_CHASE_RSP:
   1768			/* we want to do EXT status regardless of port
   1769			 * open/closed */
   1770			dev_dbg(dev, "%s - Port %u EXT CHASE_RSP Data = %02x\n",
   1771				__func__, edge_serial->rxPort, byte3);
   1772			/* Currently, the only EXT_STATUS is Chase, so process
   1773			 * here instead of one more call to one more subroutine
   1774			 * If/when more EXT_STATUS, there'll be more work to do
   1775			 * Also, we currently clear flag and close the port
   1776			 * regardless of content of above's Byte3.
   1777			 * We could choose to do something else when Byte3 says
   1778			 * Timeout on Chase from Edgeport, like wait longer in
   1779			 * block_until_chase_response, but for now we don't.
   1780			 */
   1781			edge_port->chaseResponsePending = false;
   1782			wake_up(&edge_port->wait_chase);
   1783			return;
   1784
   1785		case IOSP_EXT_STATUS_RX_CHECK_RSP:
   1786			dev_dbg(dev, "%s ========== Port %u CHECK_RSP Sequence = %02x =============\n",
   1787				__func__, edge_serial->rxPort, byte3);
   1788			/* Port->RxCheckRsp = true; */
   1789			return;
   1790		}
   1791	}
   1792
   1793	if (code == IOSP_STATUS_OPEN_RSP) {
   1794		edge_port->txCredits = GET_TX_BUFFER_SIZE(byte3);
   1795		edge_port->maxTxCredits = edge_port->txCredits;
   1796		dev_dbg(dev, "%s - Port %u Open Response Initial MSR = %02x TxBufferSize = %d\n",
   1797			__func__, edge_serial->rxPort, byte2, edge_port->txCredits);
   1798		handle_new_msr(edge_port, byte2);
   1799
   1800		/* send the current line settings to the port so we are
   1801		   in sync with any further termios calls */
   1802		tty = tty_port_tty_get(&edge_port->port->port);
   1803		if (tty) {
   1804			change_port_settings(tty,
   1805				edge_port, &tty->termios);
   1806			tty_kref_put(tty);
   1807		}
   1808
   1809		/* we have completed the open */
   1810		edge_port->openPending = false;
   1811		edge_port->open = true;
   1812		wake_up(&edge_port->wait_open);
   1813		return;
   1814	}
   1815
   1816	/* If port is closed, silently discard all rcvd status. We can
   1817	 * have cases where buffered status is received AFTER the close
   1818	 * port command is sent to the Edgeport.
   1819	 */
   1820	if (!edge_port->open || edge_port->closePending)
   1821		return;
   1822
   1823	switch (code) {
   1824	/* Not currently sent by Edgeport */
   1825	case IOSP_STATUS_LSR:
   1826		dev_dbg(dev, "%s - Port %u LSR Status = %02x\n",
   1827			__func__, edge_serial->rxPort, byte2);
   1828		handle_new_lsr(edge_port, false, byte2, 0);
   1829		break;
   1830
   1831	case IOSP_STATUS_LSR_DATA:
   1832		dev_dbg(dev, "%s - Port %u LSR Status = %02x, Data = %02x\n",
   1833			__func__, edge_serial->rxPort, byte2, byte3);
   1834		/* byte2 is LSR Register */
   1835		/* byte3 is broken data byte */
   1836		handle_new_lsr(edge_port, true, byte2, byte3);
   1837		break;
   1838	/*
   1839	 *	case IOSP_EXT_4_STATUS:
   1840	 *		dev_dbg(dev, "%s - Port %u LSR Status = %02x Data = %02x\n",
   1841	 *			__func__, edge_serial->rxPort, byte2, byte3);
   1842	 *		break;
   1843	 */
   1844	case IOSP_STATUS_MSR:
   1845		dev_dbg(dev, "%s - Port %u MSR Status = %02x\n",
   1846			__func__, edge_serial->rxPort, byte2);
   1847		/*
   1848		 * Process this new modem status and generate appropriate
   1849		 * events, etc, based on the new status. This routine
   1850		 * also saves the MSR in Port->ShadowMsr.
   1851		 */
   1852		handle_new_msr(edge_port, byte2);
   1853		break;
   1854
   1855	default:
   1856		dev_dbg(dev, "%s - Unrecognized IOSP status code %u\n", __func__, code);
   1857		break;
   1858	}
   1859}
   1860
   1861
   1862/*****************************************************************************
   1863 * edge_tty_recv
   1864 *	this function passes data on to the tty flip buffer
   1865 *****************************************************************************/
   1866static void edge_tty_recv(struct usb_serial_port *port, unsigned char *data,
   1867		int length)
   1868{
   1869	int cnt;
   1870
   1871	cnt = tty_insert_flip_string(&port->port, data, length);
   1872	if (cnt < length) {
   1873		dev_err(&port->dev, "%s - dropping data, %d bytes lost\n",
   1874				__func__, length - cnt);
   1875	}
   1876	data += cnt;
   1877	length -= cnt;
   1878
   1879	tty_flip_buffer_push(&port->port);
   1880}
   1881
   1882
   1883/*****************************************************************************
   1884 * handle_new_msr
   1885 *	this function handles any change to the msr register for a port.
   1886 *****************************************************************************/
   1887static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr)
   1888{
   1889	struct  async_icount *icount;
   1890
   1891	if (newMsr & (EDGEPORT_MSR_DELTA_CTS | EDGEPORT_MSR_DELTA_DSR |
   1892			EDGEPORT_MSR_DELTA_RI | EDGEPORT_MSR_DELTA_CD)) {
   1893		icount = &edge_port->port->icount;
   1894
   1895		/* update input line counters */
   1896		if (newMsr & EDGEPORT_MSR_DELTA_CTS)
   1897			icount->cts++;
   1898		if (newMsr & EDGEPORT_MSR_DELTA_DSR)
   1899			icount->dsr++;
   1900		if (newMsr & EDGEPORT_MSR_DELTA_CD)
   1901			icount->dcd++;
   1902		if (newMsr & EDGEPORT_MSR_DELTA_RI)
   1903			icount->rng++;
   1904		wake_up_interruptible(&edge_port->port->port.delta_msr_wait);
   1905	}
   1906
   1907	/* Save the new modem status */
   1908	edge_port->shadowMSR = newMsr & 0xf0;
   1909}
   1910
   1911
   1912/*****************************************************************************
   1913 * handle_new_lsr
   1914 *	this function handles any change to the lsr register for a port.
   1915 *****************************************************************************/
   1916static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData,
   1917							__u8 lsr, __u8 data)
   1918{
   1919	__u8 newLsr = (__u8) (lsr & (__u8)
   1920		(LSR_OVER_ERR | LSR_PAR_ERR | LSR_FRM_ERR | LSR_BREAK));
   1921	struct async_icount *icount;
   1922
   1923	edge_port->shadowLSR = lsr;
   1924
   1925	if (newLsr & LSR_BREAK) {
   1926		/*
   1927		 * Parity and Framing errors only count if they
   1928		 * occur exclusive of a break being
   1929		 * received.
   1930		 */
   1931		newLsr &= (__u8)(LSR_OVER_ERR | LSR_BREAK);
   1932	}
   1933
   1934	/* Place LSR data byte into Rx buffer */
   1935	if (lsrData)
   1936		edge_tty_recv(edge_port->port, &data, 1);
   1937
   1938	/* update input line counters */
   1939	icount = &edge_port->port->icount;
   1940	if (newLsr & LSR_BREAK)
   1941		icount->brk++;
   1942	if (newLsr & LSR_OVER_ERR)
   1943		icount->overrun++;
   1944	if (newLsr & LSR_PAR_ERR)
   1945		icount->parity++;
   1946	if (newLsr & LSR_FRM_ERR)
   1947		icount->frame++;
   1948}
   1949
   1950
   1951/****************************************************************************
   1952 * sram_write
   1953 *	writes a number of bytes to the Edgeport device's sram starting at the
   1954 *	given address.
   1955 *	If successful returns the number of bytes written, otherwise it returns
   1956 *	a negative error number of the problem.
   1957 ****************************************************************************/
   1958static int sram_write(struct usb_serial *serial, __u16 extAddr, __u16 addr,
   1959					__u16 length, const __u8 *data)
   1960{
   1961	int result;
   1962	__u16 current_length;
   1963	unsigned char *transfer_buffer;
   1964
   1965	dev_dbg(&serial->dev->dev, "%s - %x, %x, %d\n", __func__, extAddr, addr, length);
   1966
   1967	transfer_buffer =  kmalloc(64, GFP_KERNEL);
   1968	if (!transfer_buffer)
   1969		return -ENOMEM;
   1970
   1971	/* need to split these writes up into 64 byte chunks */
   1972	result = 0;
   1973	while (length > 0) {
   1974		if (length > 64)
   1975			current_length = 64;
   1976		else
   1977			current_length = length;
   1978
   1979/*		dev_dbg(&serial->dev->dev, "%s - writing %x, %x, %d\n", __func__, extAddr, addr, current_length); */
   1980		memcpy(transfer_buffer, data, current_length);
   1981		result = usb_control_msg(serial->dev,
   1982					usb_sndctrlpipe(serial->dev, 0),
   1983					USB_REQUEST_ION_WRITE_RAM,
   1984					0x40, addr, extAddr, transfer_buffer,
   1985					current_length, 300);
   1986		if (result < 0)
   1987			break;
   1988		length -= current_length;
   1989		addr += current_length;
   1990		data += current_length;
   1991	}
   1992
   1993	kfree(transfer_buffer);
   1994	return result;
   1995}
   1996
   1997
   1998/****************************************************************************
   1999 * rom_write
   2000 *	writes a number of bytes to the Edgeport device's ROM starting at the
   2001 *	given address.
   2002 *	If successful returns the number of bytes written, otherwise it returns
   2003 *	a negative error number of the problem.
   2004 ****************************************************************************/
   2005static int rom_write(struct usb_serial *serial, __u16 extAddr, __u16 addr,
   2006					__u16 length, const __u8 *data)
   2007{
   2008	int result;
   2009	__u16 current_length;
   2010	unsigned char *transfer_buffer;
   2011
   2012	transfer_buffer =  kmalloc(64, GFP_KERNEL);
   2013	if (!transfer_buffer)
   2014		return -ENOMEM;
   2015
   2016	/* need to split these writes up into 64 byte chunks */
   2017	result = 0;
   2018	while (length > 0) {
   2019		if (length > 64)
   2020			current_length = 64;
   2021		else
   2022			current_length = length;
   2023		memcpy(transfer_buffer, data, current_length);
   2024		result = usb_control_msg(serial->dev,
   2025					usb_sndctrlpipe(serial->dev, 0),
   2026					USB_REQUEST_ION_WRITE_ROM, 0x40,
   2027					addr, extAddr,
   2028					transfer_buffer, current_length, 300);
   2029		if (result < 0)
   2030			break;
   2031		length -= current_length;
   2032		addr += current_length;
   2033		data += current_length;
   2034	}
   2035
   2036	kfree(transfer_buffer);
   2037	return result;
   2038}
   2039
   2040
   2041/****************************************************************************
   2042 * rom_read
   2043 *	reads a number of bytes from the Edgeport device starting at the given
   2044 *	address.
   2045 *	Returns zero on success or a negative error number.
   2046 ****************************************************************************/
   2047static int rom_read(struct usb_serial *serial, __u16 extAddr,
   2048					__u16 addr, __u16 length, __u8 *data)
   2049{
   2050	int result;
   2051	__u16 current_length;
   2052	unsigned char *transfer_buffer;
   2053
   2054	transfer_buffer =  kmalloc(64, GFP_KERNEL);
   2055	if (!transfer_buffer)
   2056		return -ENOMEM;
   2057
   2058	/* need to split these reads up into 64 byte chunks */
   2059	result = 0;
   2060	while (length > 0) {
   2061		if (length > 64)
   2062			current_length = 64;
   2063		else
   2064			current_length = length;
   2065		result = usb_control_msg(serial->dev,
   2066					usb_rcvctrlpipe(serial->dev, 0),
   2067					USB_REQUEST_ION_READ_ROM,
   2068					0xC0, addr, extAddr, transfer_buffer,
   2069					current_length, 300);
   2070		if (result < current_length) {
   2071			if (result >= 0)
   2072				result = -EIO;
   2073			break;
   2074		}
   2075		memcpy(data, transfer_buffer, current_length);
   2076		length -= current_length;
   2077		addr += current_length;
   2078		data += current_length;
   2079
   2080		result = 0;
   2081	}
   2082
   2083	kfree(transfer_buffer);
   2084	return result;
   2085}
   2086
   2087
   2088/****************************************************************************
   2089 * send_iosp_ext_cmd
   2090 *	Is used to send a IOSP message to the Edgeport device
   2091 ****************************************************************************/
   2092static int send_iosp_ext_cmd(struct edgeport_port *edge_port,
   2093						__u8 command, __u8 param)
   2094{
   2095	unsigned char   *buffer;
   2096	unsigned char   *currentCommand;
   2097	int             length = 0;
   2098	int             status = 0;
   2099
   2100	buffer = kmalloc(10, GFP_ATOMIC);
   2101	if (!buffer)
   2102		return -ENOMEM;
   2103
   2104	currentCommand = buffer;
   2105
   2106	MAKE_CMD_EXT_CMD(&currentCommand, &length, edge_port->port->port_number,
   2107			 command, param);
   2108
   2109	status = write_cmd_usb(edge_port, buffer, length);
   2110	if (status) {
   2111		/* something bad happened, let's free up the memory */
   2112		kfree(buffer);
   2113	}
   2114
   2115	return status;
   2116}
   2117
   2118
   2119/*****************************************************************************
   2120 * write_cmd_usb
   2121 *	this function writes the given buffer out to the bulk write endpoint.
   2122 *****************************************************************************/
   2123static int write_cmd_usb(struct edgeport_port *edge_port,
   2124					unsigned char *buffer, int length)
   2125{
   2126	struct edgeport_serial *edge_serial =
   2127				usb_get_serial_data(edge_port->port->serial);
   2128	struct device *dev = &edge_port->port->dev;
   2129	int status = 0;
   2130	struct urb *urb;
   2131
   2132	usb_serial_debug_data(dev, __func__, length, buffer);
   2133
   2134	/* Allocate our next urb */
   2135	urb = usb_alloc_urb(0, GFP_ATOMIC);
   2136	if (!urb)
   2137		return -ENOMEM;
   2138
   2139	atomic_inc(&CmdUrbs);
   2140	dev_dbg(dev, "%s - ALLOCATE URB %p (outstanding %d)\n",
   2141		__func__, urb, atomic_read(&CmdUrbs));
   2142
   2143	usb_fill_bulk_urb(urb, edge_serial->serial->dev,
   2144			usb_sndbulkpipe(edge_serial->serial->dev,
   2145					edge_serial->bulk_out_endpoint),
   2146			buffer, length, edge_bulk_out_cmd_callback, edge_port);
   2147
   2148	edge_port->commandPending = true;
   2149	status = usb_submit_urb(urb, GFP_ATOMIC);
   2150
   2151	if (status) {
   2152		/* something went wrong */
   2153		dev_err(dev, "%s - usb_submit_urb(write command) failed, status = %d\n",
   2154			__func__, status);
   2155		usb_free_urb(urb);
   2156		atomic_dec(&CmdUrbs);
   2157		return status;
   2158	}
   2159
   2160#if 0
   2161	wait_event(&edge_port->wait_command, !edge_port->commandPending);
   2162
   2163	if (edge_port->commandPending) {
   2164		/* command timed out */
   2165		dev_dbg(dev, "%s - command timed out\n", __func__);
   2166		status = -EINVAL;
   2167	}
   2168#endif
   2169	return status;
   2170}
   2171
   2172
   2173/*****************************************************************************
   2174 * send_cmd_write_baud_rate
   2175 *	this function sends the proper command to change the baud rate of the
   2176 *	specified port.
   2177 *****************************************************************************/
   2178static int send_cmd_write_baud_rate(struct edgeport_port *edge_port,
   2179								int baudRate)
   2180{
   2181	struct edgeport_serial *edge_serial =
   2182				usb_get_serial_data(edge_port->port->serial);
   2183	struct device *dev = &edge_port->port->dev;
   2184	unsigned char *cmdBuffer;
   2185	unsigned char *currCmd;
   2186	int cmdLen = 0;
   2187	int divisor;
   2188	int status;
   2189	u32 number = edge_port->port->port_number;
   2190
   2191	if (edge_serial->is_epic &&
   2192	    !edge_serial->epic_descriptor.Supports.IOSPSetBaudRate) {
   2193		dev_dbg(dev, "SendCmdWriteBaudRate - NOT Setting baud rate for port, baud = %d\n",
   2194			baudRate);
   2195		return 0;
   2196	}
   2197
   2198	dev_dbg(dev, "%s - baud = %d\n", __func__, baudRate);
   2199
   2200	status = calc_baud_rate_divisor(dev, baudRate, &divisor);
   2201	if (status) {
   2202		dev_err(dev, "%s - bad baud rate\n", __func__);
   2203		return status;
   2204	}
   2205
   2206	/* Alloc memory for the string of commands. */
   2207	cmdBuffer =  kmalloc(0x100, GFP_ATOMIC);
   2208	if (!cmdBuffer)
   2209		return -ENOMEM;
   2210
   2211	currCmd = cmdBuffer;
   2212
   2213	/* Enable access to divisor latch */
   2214	MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, number, LCR, LCR_DL_ENABLE);
   2215
   2216	/* Write the divisor itself */
   2217	MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, number, DLL, LOW8(divisor));
   2218	MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, number, DLM, HIGH8(divisor));
   2219
   2220	/* Restore original value to disable access to divisor latch */
   2221	MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, number, LCR,
   2222						edge_port->shadowLCR);
   2223
   2224	status = write_cmd_usb(edge_port, cmdBuffer, cmdLen);
   2225	if (status) {
   2226		/* something bad happened, let's free up the memory */
   2227		kfree(cmdBuffer);
   2228	}
   2229
   2230	return status;
   2231}
   2232
   2233
   2234/*****************************************************************************
   2235 * calc_baud_rate_divisor
   2236 *	this function calculates the proper baud rate divisor for the specified
   2237 *	baud rate.
   2238 *****************************************************************************/
   2239static int calc_baud_rate_divisor(struct device *dev, int baudrate, int *divisor)
   2240{
   2241	int i;
   2242	__u16 custom;
   2243
   2244	for (i = 0; i < ARRAY_SIZE(divisor_table); i++) {
   2245		if (divisor_table[i].BaudRate == baudrate) {
   2246			*divisor = divisor_table[i].Divisor;
   2247			return 0;
   2248		}
   2249	}
   2250
   2251	/* We have tried all of the standard baud rates
   2252	 * lets try to calculate the divisor for this baud rate
   2253	 * Make sure the baud rate is reasonable */
   2254	if (baudrate > 50 && baudrate < 230400) {
   2255		/* get divisor */
   2256		custom = (__u16)((230400L + baudrate/2) / baudrate);
   2257
   2258		*divisor = custom;
   2259
   2260		dev_dbg(dev, "%s - Baud %d = %d\n", __func__, baudrate, custom);
   2261		return 0;
   2262	}
   2263
   2264	return -1;
   2265}
   2266
   2267
   2268/*****************************************************************************
   2269 * send_cmd_write_uart_register
   2270 *  this function builds up a uart register message and sends to the device.
   2271 *****************************************************************************/
   2272static int send_cmd_write_uart_register(struct edgeport_port *edge_port,
   2273						__u8 regNum, __u8 regValue)
   2274{
   2275	struct edgeport_serial *edge_serial =
   2276				usb_get_serial_data(edge_port->port->serial);
   2277	struct device *dev = &edge_port->port->dev;
   2278	unsigned char *cmdBuffer;
   2279	unsigned char *currCmd;
   2280	unsigned long cmdLen = 0;
   2281	int status;
   2282
   2283	dev_dbg(dev, "%s - write to %s register 0x%02x\n",
   2284		(regNum == MCR) ? "MCR" : "LCR", __func__, regValue);
   2285
   2286	if (edge_serial->is_epic &&
   2287	    !edge_serial->epic_descriptor.Supports.IOSPWriteMCR &&
   2288	    regNum == MCR) {
   2289		dev_dbg(dev, "SendCmdWriteUartReg - Not writing to MCR Register\n");
   2290		return 0;
   2291	}
   2292
   2293	if (edge_serial->is_epic &&
   2294	    !edge_serial->epic_descriptor.Supports.IOSPWriteLCR &&
   2295	    regNum == LCR) {
   2296		dev_dbg(dev, "SendCmdWriteUartReg - Not writing to LCR Register\n");
   2297		return 0;
   2298	}
   2299
   2300	/* Alloc memory for the string of commands. */
   2301	cmdBuffer = kmalloc(0x10, GFP_ATOMIC);
   2302	if (cmdBuffer == NULL)
   2303		return -ENOMEM;
   2304
   2305	currCmd = cmdBuffer;
   2306
   2307	/* Build a cmd in the buffer to write the given register */
   2308	MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, edge_port->port->port_number,
   2309			   regNum, regValue);
   2310
   2311	status = write_cmd_usb(edge_port, cmdBuffer, cmdLen);
   2312	if (status) {
   2313		/* something bad happened, let's free up the memory */
   2314		kfree(cmdBuffer);
   2315	}
   2316
   2317	return status;
   2318}
   2319
   2320
   2321/*****************************************************************************
   2322 * change_port_settings
   2323 *	This routine is called to set the UART on the device to match the
   2324 *	specified new settings.
   2325 *****************************************************************************/
   2326
   2327static void change_port_settings(struct tty_struct *tty,
   2328	struct edgeport_port *edge_port, struct ktermios *old_termios)
   2329{
   2330	struct device *dev = &edge_port->port->dev;
   2331	struct edgeport_serial *edge_serial =
   2332			usb_get_serial_data(edge_port->port->serial);
   2333	int baud;
   2334	unsigned cflag;
   2335	__u8 mask = 0xff;
   2336	__u8 lData;
   2337	__u8 lParity;
   2338	__u8 lStop;
   2339	__u8 rxFlow;
   2340	__u8 txFlow;
   2341	int status;
   2342
   2343	if (!edge_port->open &&
   2344	    !edge_port->openPending) {
   2345		dev_dbg(dev, "%s - port not opened\n", __func__);
   2346		return;
   2347	}
   2348
   2349	cflag = tty->termios.c_cflag;
   2350
   2351	switch (cflag & CSIZE) {
   2352	case CS5:
   2353		lData = LCR_BITS_5; mask = 0x1f;
   2354		dev_dbg(dev, "%s - data bits = 5\n", __func__);
   2355		break;
   2356	case CS6:
   2357		lData = LCR_BITS_6; mask = 0x3f;
   2358		dev_dbg(dev, "%s - data bits = 6\n", __func__);
   2359		break;
   2360	case CS7:
   2361		lData = LCR_BITS_7; mask = 0x7f;
   2362		dev_dbg(dev, "%s - data bits = 7\n", __func__);
   2363		break;
   2364	default:
   2365	case CS8:
   2366		lData = LCR_BITS_8;
   2367		dev_dbg(dev, "%s - data bits = 8\n", __func__);
   2368		break;
   2369	}
   2370
   2371	lParity = LCR_PAR_NONE;
   2372	if (cflag & PARENB) {
   2373		if (cflag & CMSPAR) {
   2374			if (cflag & PARODD) {
   2375				lParity = LCR_PAR_MARK;
   2376				dev_dbg(dev, "%s - parity = mark\n", __func__);
   2377			} else {
   2378				lParity = LCR_PAR_SPACE;
   2379				dev_dbg(dev, "%s - parity = space\n", __func__);
   2380			}
   2381		} else if (cflag & PARODD) {
   2382			lParity = LCR_PAR_ODD;
   2383			dev_dbg(dev, "%s - parity = odd\n", __func__);
   2384		} else {
   2385			lParity = LCR_PAR_EVEN;
   2386			dev_dbg(dev, "%s - parity = even\n", __func__);
   2387		}
   2388	} else {
   2389		dev_dbg(dev, "%s - parity = none\n", __func__);
   2390	}
   2391
   2392	if (cflag & CSTOPB) {
   2393		lStop = LCR_STOP_2;
   2394		dev_dbg(dev, "%s - stop bits = 2\n", __func__);
   2395	} else {
   2396		lStop = LCR_STOP_1;
   2397		dev_dbg(dev, "%s - stop bits = 1\n", __func__);
   2398	}
   2399
   2400	/* figure out the flow control settings */
   2401	rxFlow = txFlow = 0x00;
   2402	if (cflag & CRTSCTS) {
   2403		rxFlow |= IOSP_RX_FLOW_RTS;
   2404		txFlow |= IOSP_TX_FLOW_CTS;
   2405		dev_dbg(dev, "%s - RTS/CTS is enabled\n", __func__);
   2406	} else {
   2407		dev_dbg(dev, "%s - RTS/CTS is disabled\n", __func__);
   2408	}
   2409
   2410	/* if we are implementing XON/XOFF, set the start and stop character
   2411	   in the device */
   2412	if (I_IXOFF(tty) || I_IXON(tty)) {
   2413		unsigned char stop_char  = STOP_CHAR(tty);
   2414		unsigned char start_char = START_CHAR(tty);
   2415
   2416		if (!edge_serial->is_epic ||
   2417		    edge_serial->epic_descriptor.Supports.IOSPSetXChar) {
   2418			send_iosp_ext_cmd(edge_port,
   2419					IOSP_CMD_SET_XON_CHAR, start_char);
   2420			send_iosp_ext_cmd(edge_port,
   2421					IOSP_CMD_SET_XOFF_CHAR, stop_char);
   2422		}
   2423
   2424		/* if we are implementing INBOUND XON/XOFF */
   2425		if (I_IXOFF(tty)) {
   2426			rxFlow |= IOSP_RX_FLOW_XON_XOFF;
   2427			dev_dbg(dev, "%s - INBOUND XON/XOFF is enabled, XON = %2x, XOFF = %2x\n",
   2428				__func__, start_char, stop_char);
   2429		} else {
   2430			dev_dbg(dev, "%s - INBOUND XON/XOFF is disabled\n", __func__);
   2431		}
   2432
   2433		/* if we are implementing OUTBOUND XON/XOFF */
   2434		if (I_IXON(tty)) {
   2435			txFlow |= IOSP_TX_FLOW_XON_XOFF;
   2436			dev_dbg(dev, "%s - OUTBOUND XON/XOFF is enabled, XON = %2x, XOFF = %2x\n",
   2437				__func__, start_char, stop_char);
   2438		} else {
   2439			dev_dbg(dev, "%s - OUTBOUND XON/XOFF is disabled\n", __func__);
   2440		}
   2441	}
   2442
   2443	/* Set flow control to the configured value */
   2444	if (!edge_serial->is_epic ||
   2445	    edge_serial->epic_descriptor.Supports.IOSPSetRxFlow)
   2446		send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_RX_FLOW, rxFlow);
   2447	if (!edge_serial->is_epic ||
   2448	    edge_serial->epic_descriptor.Supports.IOSPSetTxFlow)
   2449		send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_TX_FLOW, txFlow);
   2450
   2451
   2452	edge_port->shadowLCR &= ~(LCR_BITS_MASK | LCR_STOP_MASK | LCR_PAR_MASK);
   2453	edge_port->shadowLCR |= (lData | lParity | lStop);
   2454
   2455	edge_port->validDataMask = mask;
   2456
   2457	/* Send the updated LCR value to the EdgePort */
   2458	status = send_cmd_write_uart_register(edge_port, LCR,
   2459							edge_port->shadowLCR);
   2460	if (status != 0)
   2461		return;
   2462
   2463	/* set up the MCR register and send it to the EdgePort */
   2464	edge_port->shadowMCR = MCR_MASTER_IE;
   2465	if (cflag & CBAUD)
   2466		edge_port->shadowMCR |= (MCR_DTR | MCR_RTS);
   2467
   2468	status = send_cmd_write_uart_register(edge_port, MCR,
   2469						edge_port->shadowMCR);
   2470	if (status != 0)
   2471		return;
   2472
   2473	/* Determine divisor based on baud rate */
   2474	baud = tty_get_baud_rate(tty);
   2475	if (!baud) {
   2476		/* pick a default, any default... */
   2477		baud = 9600;
   2478	}
   2479
   2480	dev_dbg(dev, "%s - baud rate = %d\n", __func__, baud);
   2481	status = send_cmd_write_baud_rate(edge_port, baud);
   2482	if (status == -1) {
   2483		/* Speed change was not possible - put back the old speed */
   2484		baud = tty_termios_baud_rate(old_termios);
   2485		tty_encode_baud_rate(tty, baud, baud);
   2486	}
   2487}
   2488
   2489
   2490/****************************************************************************
   2491 * unicode_to_ascii
   2492 *	Turns a string from Unicode into ASCII.
   2493 *	Doesn't do a good job with any characters that are outside the normal
   2494 *	ASCII range, but it's only for debugging...
   2495 *	NOTE: expects the unicode in LE format
   2496 ****************************************************************************/
   2497static void unicode_to_ascii(char *string, int buflen,
   2498					__le16 *unicode, int unicode_size)
   2499{
   2500	int i;
   2501
   2502	if (buflen <= 0)	/* never happens, but... */
   2503		return;
   2504	--buflen;		/* space for nul */
   2505
   2506	for (i = 0; i < unicode_size; i++) {
   2507		if (i >= buflen)
   2508			break;
   2509		string[i] = (char)(le16_to_cpu(unicode[i]));
   2510	}
   2511	string[i] = 0x00;
   2512}
   2513
   2514
   2515/****************************************************************************
   2516 * get_manufacturing_desc
   2517 *	reads in the manufacturing descriptor and stores it into the serial
   2518 *	structure.
   2519 ****************************************************************************/
   2520static void get_manufacturing_desc(struct edgeport_serial *edge_serial)
   2521{
   2522	struct device *dev = &edge_serial->serial->dev->dev;
   2523	int response;
   2524
   2525	dev_dbg(dev, "getting manufacturer descriptor\n");
   2526
   2527	response = rom_read(edge_serial->serial,
   2528				(EDGE_MANUF_DESC_ADDR & 0xffff0000) >> 16,
   2529				(__u16)(EDGE_MANUF_DESC_ADDR & 0x0000ffff),
   2530				EDGE_MANUF_DESC_LEN,
   2531				(__u8 *)(&edge_serial->manuf_descriptor));
   2532
   2533	if (response < 0) {
   2534		dev_err(dev, "error in getting manufacturer descriptor: %d\n",
   2535				response);
   2536	} else {
   2537		char string[30];
   2538		dev_dbg(dev, "**Manufacturer Descriptor\n");
   2539		dev_dbg(dev, "  RomSize:        %dK\n",
   2540			edge_serial->manuf_descriptor.RomSize);
   2541		dev_dbg(dev, "  RamSize:        %dK\n",
   2542			edge_serial->manuf_descriptor.RamSize);
   2543		dev_dbg(dev, "  CpuRev:         %d\n",
   2544			edge_serial->manuf_descriptor.CpuRev);
   2545		dev_dbg(dev, "  BoardRev:       %d\n",
   2546			edge_serial->manuf_descriptor.BoardRev);
   2547		dev_dbg(dev, "  NumPorts:       %d\n",
   2548			edge_serial->manuf_descriptor.NumPorts);
   2549		dev_dbg(dev, "  DescDate:       %d/%d/%d\n",
   2550			edge_serial->manuf_descriptor.DescDate[0],
   2551			edge_serial->manuf_descriptor.DescDate[1],
   2552			edge_serial->manuf_descriptor.DescDate[2]+1900);
   2553		unicode_to_ascii(string, sizeof(string),
   2554			edge_serial->manuf_descriptor.SerialNumber,
   2555			edge_serial->manuf_descriptor.SerNumLength/2);
   2556		dev_dbg(dev, "  SerialNumber: %s\n", string);
   2557		unicode_to_ascii(string, sizeof(string),
   2558			edge_serial->manuf_descriptor.AssemblyNumber,
   2559			edge_serial->manuf_descriptor.AssemblyNumLength/2);
   2560		dev_dbg(dev, "  AssemblyNumber: %s\n", string);
   2561		unicode_to_ascii(string, sizeof(string),
   2562		    edge_serial->manuf_descriptor.OemAssyNumber,
   2563		    edge_serial->manuf_descriptor.OemAssyNumLength/2);
   2564		dev_dbg(dev, "  OemAssyNumber:  %s\n", string);
   2565		dev_dbg(dev, "  UartType:       %d\n",
   2566			edge_serial->manuf_descriptor.UartType);
   2567		dev_dbg(dev, "  IonPid:         %d\n",
   2568			edge_serial->manuf_descriptor.IonPid);
   2569		dev_dbg(dev, "  IonConfig:      %d\n",
   2570			edge_serial->manuf_descriptor.IonConfig);
   2571	}
   2572}
   2573
   2574
   2575/****************************************************************************
   2576 * get_boot_desc
   2577 *	reads in the bootloader descriptor and stores it into the serial
   2578 *	structure.
   2579 ****************************************************************************/
   2580static void get_boot_desc(struct edgeport_serial *edge_serial)
   2581{
   2582	struct device *dev = &edge_serial->serial->dev->dev;
   2583	int response;
   2584
   2585	dev_dbg(dev, "getting boot descriptor\n");
   2586
   2587	response = rom_read(edge_serial->serial,
   2588				(EDGE_BOOT_DESC_ADDR & 0xffff0000) >> 16,
   2589				(__u16)(EDGE_BOOT_DESC_ADDR & 0x0000ffff),
   2590				EDGE_BOOT_DESC_LEN,
   2591				(__u8 *)(&edge_serial->boot_descriptor));
   2592
   2593	if (response < 0) {
   2594		dev_err(dev, "error in getting boot descriptor: %d\n",
   2595				response);
   2596	} else {
   2597		dev_dbg(dev, "**Boot Descriptor:\n");
   2598		dev_dbg(dev, "  BootCodeLength: %d\n",
   2599			le16_to_cpu(edge_serial->boot_descriptor.BootCodeLength));
   2600		dev_dbg(dev, "  MajorVersion:   %d\n",
   2601			edge_serial->boot_descriptor.MajorVersion);
   2602		dev_dbg(dev, "  MinorVersion:   %d\n",
   2603			edge_serial->boot_descriptor.MinorVersion);
   2604		dev_dbg(dev, "  BuildNumber:    %d\n",
   2605			le16_to_cpu(edge_serial->boot_descriptor.BuildNumber));
   2606		dev_dbg(dev, "  Capabilities:   0x%x\n",
   2607		      le16_to_cpu(edge_serial->boot_descriptor.Capabilities));
   2608		dev_dbg(dev, "  UConfig0:       %d\n",
   2609			edge_serial->boot_descriptor.UConfig0);
   2610		dev_dbg(dev, "  UConfig1:       %d\n",
   2611			edge_serial->boot_descriptor.UConfig1);
   2612	}
   2613}
   2614
   2615
   2616/****************************************************************************
   2617 * load_application_firmware
   2618 *	This is called to load the application firmware to the device
   2619 ****************************************************************************/
   2620static void load_application_firmware(struct edgeport_serial *edge_serial)
   2621{
   2622	struct device *dev = &edge_serial->serial->dev->dev;
   2623	const struct ihex_binrec *rec;
   2624	const struct firmware *fw;
   2625	const char *fw_name;
   2626	const char *fw_info;
   2627	int response;
   2628	__u32 Operaddr;
   2629	__u16 build;
   2630
   2631	switch (edge_serial->product_info.iDownloadFile) {
   2632		case EDGE_DOWNLOAD_FILE_I930:
   2633			fw_info = "downloading firmware version (930)";
   2634			fw_name	= "edgeport/down.fw";
   2635			break;
   2636
   2637		case EDGE_DOWNLOAD_FILE_80251:
   2638			fw_info = "downloading firmware version (80251)";
   2639			fw_name	= "edgeport/down2.fw";
   2640			break;
   2641
   2642		case EDGE_DOWNLOAD_FILE_NONE:
   2643			dev_dbg(dev, "No download file specified, skipping download\n");
   2644			return;
   2645
   2646		default:
   2647			return;
   2648	}
   2649
   2650	response = request_ihex_firmware(&fw, fw_name,
   2651				    &edge_serial->serial->dev->dev);
   2652	if (response) {
   2653		dev_err(dev, "Failed to load image \"%s\" err %d\n",
   2654		       fw_name, response);
   2655		return;
   2656	}
   2657
   2658	rec = (const struct ihex_binrec *)fw->data;
   2659	build = (rec->data[2] << 8) | rec->data[3];
   2660
   2661	dev_dbg(dev, "%s %d.%d.%d\n", fw_info, rec->data[0], rec->data[1], build);
   2662
   2663	edge_serial->product_info.FirmwareMajorVersion = rec->data[0];
   2664	edge_serial->product_info.FirmwareMinorVersion = rec->data[1];
   2665	edge_serial->product_info.FirmwareBuildNumber = cpu_to_le16(build);
   2666
   2667	for (rec = ihex_next_binrec(rec); rec;
   2668	     rec = ihex_next_binrec(rec)) {
   2669		Operaddr = be32_to_cpu(rec->addr);
   2670		response = sram_write(edge_serial->serial,
   2671				     Operaddr >> 16,
   2672				     Operaddr & 0xFFFF,
   2673				     be16_to_cpu(rec->len),
   2674				     &rec->data[0]);
   2675		if (response < 0) {
   2676			dev_err(&edge_serial->serial->dev->dev,
   2677				"sram_write failed (%x, %x, %d)\n",
   2678				Operaddr >> 16, Operaddr & 0xFFFF,
   2679				be16_to_cpu(rec->len));
   2680			break;
   2681		}
   2682	}
   2683
   2684	dev_dbg(dev, "sending exec_dl_code\n");
   2685	response = usb_control_msg (edge_serial->serial->dev,
   2686				    usb_sndctrlpipe(edge_serial->serial->dev, 0),
   2687				    USB_REQUEST_ION_EXEC_DL_CODE,
   2688				    0x40, 0x4000, 0x0001, NULL, 0, 3000);
   2689
   2690	release_firmware(fw);
   2691}
   2692
   2693
   2694/****************************************************************************
   2695 * edge_startup
   2696 ****************************************************************************/
   2697static int edge_startup(struct usb_serial *serial)
   2698{
   2699	struct edgeport_serial *edge_serial;
   2700	struct usb_device *dev;
   2701	struct device *ddev = &serial->dev->dev;
   2702	int i;
   2703	int response;
   2704	bool interrupt_in_found;
   2705	bool bulk_in_found;
   2706	bool bulk_out_found;
   2707	static const __u32 descriptor[3] = {	EDGE_COMPATIBILITY_MASK0,
   2708						EDGE_COMPATIBILITY_MASK1,
   2709						EDGE_COMPATIBILITY_MASK2 };
   2710
   2711	dev = serial->dev;
   2712
   2713	/* create our private serial structure */
   2714	edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL);
   2715	if (!edge_serial)
   2716		return -ENOMEM;
   2717
   2718	spin_lock_init(&edge_serial->es_lock);
   2719	edge_serial->serial = serial;
   2720	usb_set_serial_data(serial, edge_serial);
   2721
   2722	/* get the name for the device from the device */
   2723	i = usb_string(dev, dev->descriptor.iManufacturer,
   2724	    &edge_serial->name[0], MAX_NAME_LEN+1);
   2725	if (i < 0)
   2726		i = 0;
   2727	edge_serial->name[i++] = ' ';
   2728	usb_string(dev, dev->descriptor.iProduct,
   2729	    &edge_serial->name[i], MAX_NAME_LEN+2 - i);
   2730
   2731	dev_info(&serial->dev->dev, "%s detected\n", edge_serial->name);
   2732
   2733	/* Read the epic descriptor */
   2734	if (get_epic_descriptor(edge_serial) < 0) {
   2735		/* memcpy descriptor to Supports structures */
   2736		memcpy(&edge_serial->epic_descriptor.Supports, descriptor,
   2737		       sizeof(struct edge_compatibility_bits));
   2738
   2739		/* get the manufacturing descriptor for this device */
   2740		get_manufacturing_desc(edge_serial);
   2741
   2742		/* get the boot descriptor */
   2743		get_boot_desc(edge_serial);
   2744
   2745		get_product_info(edge_serial);
   2746	}
   2747
   2748	/* set the number of ports from the manufacturing description */
   2749	/* serial->num_ports = serial->product_info.NumPorts; */
   2750	if ((!edge_serial->is_epic) &&
   2751	    (edge_serial->product_info.NumPorts != serial->num_ports)) {
   2752		dev_warn(ddev,
   2753			"Device Reported %d serial ports vs. core thinking we have %d ports, email greg@kroah.com this information.\n",
   2754			 edge_serial->product_info.NumPorts,
   2755			 serial->num_ports);
   2756	}
   2757
   2758	dev_dbg(ddev, "%s - time 1 %ld\n", __func__, jiffies);
   2759
   2760	/* If not an EPiC device */
   2761	if (!edge_serial->is_epic) {
   2762		/* now load the application firmware into this device */
   2763		load_application_firmware(edge_serial);
   2764
   2765		dev_dbg(ddev, "%s - time 2 %ld\n", __func__, jiffies);
   2766
   2767		/* Check current Edgeport EEPROM and update if necessary */
   2768		update_edgeport_E2PROM(edge_serial);
   2769
   2770		dev_dbg(ddev, "%s - time 3 %ld\n", __func__, jiffies);
   2771
   2772		/* set the configuration to use #1 */
   2773/*		dev_dbg(ddev, "set_configuration 1\n"); */
   2774/*		usb_set_configuration (dev, 1); */
   2775	}
   2776	dev_dbg(ddev, "  FirmwareMajorVersion  %d.%d.%d\n",
   2777	    edge_serial->product_info.FirmwareMajorVersion,
   2778	    edge_serial->product_info.FirmwareMinorVersion,
   2779	    le16_to_cpu(edge_serial->product_info.FirmwareBuildNumber));
   2780
   2781	/* we set up the pointers to the endpoints in the edge_open function,
   2782	 * as the structures aren't created yet. */
   2783
   2784	response = 0;
   2785
   2786	if (edge_serial->is_epic) {
   2787		struct usb_host_interface *alt;
   2788
   2789		alt = serial->interface->cur_altsetting;
   2790
   2791		/* EPIC thing, set up our interrupt polling now and our read
   2792		 * urb, so that the device knows it really is connected. */
   2793		interrupt_in_found = bulk_in_found = bulk_out_found = false;
   2794		for (i = 0; i < alt->desc.bNumEndpoints; ++i) {
   2795			struct usb_endpoint_descriptor *endpoint;
   2796			int buffer_size;
   2797
   2798			endpoint = &alt->endpoint[i].desc;
   2799			buffer_size = usb_endpoint_maxp(endpoint);
   2800			if (!interrupt_in_found &&
   2801			    (usb_endpoint_is_int_in(endpoint))) {
   2802				/* we found a interrupt in endpoint */
   2803				dev_dbg(ddev, "found interrupt in\n");
   2804
   2805				/* not set up yet, so do it now */
   2806				edge_serial->interrupt_read_urb =
   2807						usb_alloc_urb(0, GFP_KERNEL);
   2808				if (!edge_serial->interrupt_read_urb) {
   2809					response = -ENOMEM;
   2810					break;
   2811				}
   2812
   2813				edge_serial->interrupt_in_buffer =
   2814					kmalloc(buffer_size, GFP_KERNEL);
   2815				if (!edge_serial->interrupt_in_buffer) {
   2816					response = -ENOMEM;
   2817					break;
   2818				}
   2819				edge_serial->interrupt_in_endpoint =
   2820						endpoint->bEndpointAddress;
   2821
   2822				/* set up our interrupt urb */
   2823				usb_fill_int_urb(
   2824					edge_serial->interrupt_read_urb,
   2825					dev,
   2826					usb_rcvintpipe(dev,
   2827						endpoint->bEndpointAddress),
   2828					edge_serial->interrupt_in_buffer,
   2829					buffer_size,
   2830					edge_interrupt_callback,
   2831					edge_serial,
   2832					endpoint->bInterval);
   2833
   2834				interrupt_in_found = true;
   2835			}
   2836
   2837			if (!bulk_in_found &&
   2838				(usb_endpoint_is_bulk_in(endpoint))) {
   2839				/* we found a bulk in endpoint */
   2840				dev_dbg(ddev, "found bulk in\n");
   2841
   2842				/* not set up yet, so do it now */
   2843				edge_serial->read_urb =
   2844						usb_alloc_urb(0, GFP_KERNEL);
   2845				if (!edge_serial->read_urb) {
   2846					response = -ENOMEM;
   2847					break;
   2848				}
   2849
   2850				edge_serial->bulk_in_buffer =
   2851					kmalloc(buffer_size, GFP_KERNEL);
   2852				if (!edge_serial->bulk_in_buffer) {
   2853					response = -ENOMEM;
   2854					break;
   2855				}
   2856				edge_serial->bulk_in_endpoint =
   2857						endpoint->bEndpointAddress;
   2858
   2859				/* set up our bulk in urb */
   2860				usb_fill_bulk_urb(edge_serial->read_urb, dev,
   2861					usb_rcvbulkpipe(dev,
   2862						endpoint->bEndpointAddress),
   2863					edge_serial->bulk_in_buffer,
   2864					usb_endpoint_maxp(endpoint),
   2865					edge_bulk_in_callback,
   2866					edge_serial);
   2867				bulk_in_found = true;
   2868			}
   2869
   2870			if (!bulk_out_found &&
   2871			    (usb_endpoint_is_bulk_out(endpoint))) {
   2872				/* we found a bulk out endpoint */
   2873				dev_dbg(ddev, "found bulk out\n");
   2874				edge_serial->bulk_out_endpoint =
   2875						endpoint->bEndpointAddress;
   2876				bulk_out_found = true;
   2877			}
   2878		}
   2879
   2880		if (response || !interrupt_in_found || !bulk_in_found ||
   2881							!bulk_out_found) {
   2882			if (!response) {
   2883				dev_err(ddev, "expected endpoints not found\n");
   2884				response = -ENODEV;
   2885			}
   2886
   2887			goto error;
   2888		}
   2889
   2890		/* start interrupt read for this edgeport this interrupt will
   2891		 * continue as long as the edgeport is connected */
   2892		response = usb_submit_urb(edge_serial->interrupt_read_urb,
   2893								GFP_KERNEL);
   2894		if (response) {
   2895			dev_err(ddev, "%s - Error %d submitting control urb\n",
   2896				__func__, response);
   2897
   2898			goto error;
   2899		}
   2900	}
   2901	return response;
   2902
   2903error:
   2904	usb_free_urb(edge_serial->interrupt_read_urb);
   2905	kfree(edge_serial->interrupt_in_buffer);
   2906
   2907	usb_free_urb(edge_serial->read_urb);
   2908	kfree(edge_serial->bulk_in_buffer);
   2909
   2910	kfree(edge_serial);
   2911
   2912	return response;
   2913}
   2914
   2915
   2916/****************************************************************************
   2917 * edge_disconnect
   2918 *	This function is called whenever the device is removed from the usb bus.
   2919 ****************************************************************************/
   2920static void edge_disconnect(struct usb_serial *serial)
   2921{
   2922	struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
   2923
   2924	if (edge_serial->is_epic) {
   2925		usb_kill_urb(edge_serial->interrupt_read_urb);
   2926		usb_kill_urb(edge_serial->read_urb);
   2927	}
   2928}
   2929
   2930
   2931/****************************************************************************
   2932 * edge_release
   2933 *	This function is called when the device structure is deallocated.
   2934 ****************************************************************************/
   2935static void edge_release(struct usb_serial *serial)
   2936{
   2937	struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
   2938
   2939	if (edge_serial->is_epic) {
   2940		usb_kill_urb(edge_serial->interrupt_read_urb);
   2941		usb_free_urb(edge_serial->interrupt_read_urb);
   2942		kfree(edge_serial->interrupt_in_buffer);
   2943
   2944		usb_kill_urb(edge_serial->read_urb);
   2945		usb_free_urb(edge_serial->read_urb);
   2946		kfree(edge_serial->bulk_in_buffer);
   2947	}
   2948
   2949	kfree(edge_serial);
   2950}
   2951
   2952static int edge_port_probe(struct usb_serial_port *port)
   2953{
   2954	struct edgeport_port *edge_port;
   2955
   2956	edge_port = kzalloc(sizeof(*edge_port), GFP_KERNEL);
   2957	if (!edge_port)
   2958		return -ENOMEM;
   2959
   2960	spin_lock_init(&edge_port->ep_lock);
   2961	edge_port->port = port;
   2962
   2963	usb_set_serial_port_data(port, edge_port);
   2964
   2965	return 0;
   2966}
   2967
   2968static void edge_port_remove(struct usb_serial_port *port)
   2969{
   2970	struct edgeport_port *edge_port;
   2971
   2972	edge_port = usb_get_serial_port_data(port);
   2973	kfree(edge_port);
   2974}
   2975
   2976static struct usb_serial_driver edgeport_2port_device = {
   2977	.driver = {
   2978		.owner		= THIS_MODULE,
   2979		.name		= "edgeport_2",
   2980	},
   2981	.description		= "Edgeport 2 port adapter",
   2982	.id_table		= edgeport_2port_id_table,
   2983	.num_ports		= 2,
   2984	.num_bulk_in		= 1,
   2985	.num_bulk_out		= 1,
   2986	.num_interrupt_in	= 1,
   2987	.open			= edge_open,
   2988	.close			= edge_close,
   2989	.throttle		= edge_throttle,
   2990	.unthrottle		= edge_unthrottle,
   2991	.attach			= edge_startup,
   2992	.disconnect		= edge_disconnect,
   2993	.release		= edge_release,
   2994	.port_probe		= edge_port_probe,
   2995	.port_remove		= edge_port_remove,
   2996	.ioctl			= edge_ioctl,
   2997	.set_termios		= edge_set_termios,
   2998	.tiocmget		= edge_tiocmget,
   2999	.tiocmset		= edge_tiocmset,
   3000	.tiocmiwait		= usb_serial_generic_tiocmiwait,
   3001	.get_icount		= usb_serial_generic_get_icount,
   3002	.write			= edge_write,
   3003	.write_room		= edge_write_room,
   3004	.chars_in_buffer	= edge_chars_in_buffer,
   3005	.break_ctl		= edge_break,
   3006	.read_int_callback	= edge_interrupt_callback,
   3007	.read_bulk_callback	= edge_bulk_in_callback,
   3008	.write_bulk_callback	= edge_bulk_out_data_callback,
   3009};
   3010
   3011static struct usb_serial_driver edgeport_4port_device = {
   3012	.driver = {
   3013		.owner		= THIS_MODULE,
   3014		.name		= "edgeport_4",
   3015	},
   3016	.description		= "Edgeport 4 port adapter",
   3017	.id_table		= edgeport_4port_id_table,
   3018	.num_ports		= 4,
   3019	.num_bulk_in		= 1,
   3020	.num_bulk_out		= 1,
   3021	.num_interrupt_in	= 1,
   3022	.open			= edge_open,
   3023	.close			= edge_close,
   3024	.throttle		= edge_throttle,
   3025	.unthrottle		= edge_unthrottle,
   3026	.attach			= edge_startup,
   3027	.disconnect		= edge_disconnect,
   3028	.release		= edge_release,
   3029	.port_probe		= edge_port_probe,
   3030	.port_remove		= edge_port_remove,
   3031	.ioctl			= edge_ioctl,
   3032	.set_termios		= edge_set_termios,
   3033	.tiocmget		= edge_tiocmget,
   3034	.tiocmset		= edge_tiocmset,
   3035	.tiocmiwait		= usb_serial_generic_tiocmiwait,
   3036	.get_icount		= usb_serial_generic_get_icount,
   3037	.write			= edge_write,
   3038	.write_room		= edge_write_room,
   3039	.chars_in_buffer	= edge_chars_in_buffer,
   3040	.break_ctl		= edge_break,
   3041	.read_int_callback	= edge_interrupt_callback,
   3042	.read_bulk_callback	= edge_bulk_in_callback,
   3043	.write_bulk_callback	= edge_bulk_out_data_callback,
   3044};
   3045
   3046static struct usb_serial_driver edgeport_8port_device = {
   3047	.driver = {
   3048		.owner		= THIS_MODULE,
   3049		.name		= "edgeport_8",
   3050	},
   3051	.description		= "Edgeport 8 port adapter",
   3052	.id_table		= edgeport_8port_id_table,
   3053	.num_ports		= 8,
   3054	.num_bulk_in		= 1,
   3055	.num_bulk_out		= 1,
   3056	.num_interrupt_in	= 1,
   3057	.open			= edge_open,
   3058	.close			= edge_close,
   3059	.throttle		= edge_throttle,
   3060	.unthrottle		= edge_unthrottle,
   3061	.attach			= edge_startup,
   3062	.disconnect		= edge_disconnect,
   3063	.release		= edge_release,
   3064	.port_probe		= edge_port_probe,
   3065	.port_remove		= edge_port_remove,
   3066	.ioctl			= edge_ioctl,
   3067	.set_termios		= edge_set_termios,
   3068	.tiocmget		= edge_tiocmget,
   3069	.tiocmset		= edge_tiocmset,
   3070	.tiocmiwait		= usb_serial_generic_tiocmiwait,
   3071	.get_icount		= usb_serial_generic_get_icount,
   3072	.write			= edge_write,
   3073	.write_room		= edge_write_room,
   3074	.chars_in_buffer	= edge_chars_in_buffer,
   3075	.break_ctl		= edge_break,
   3076	.read_int_callback	= edge_interrupt_callback,
   3077	.read_bulk_callback	= edge_bulk_in_callback,
   3078	.write_bulk_callback	= edge_bulk_out_data_callback,
   3079};
   3080
   3081static struct usb_serial_driver epic_device = {
   3082	.driver = {
   3083		.owner		= THIS_MODULE,
   3084		.name		= "epic",
   3085	},
   3086	.description		= "EPiC device",
   3087	.id_table		= Epic_port_id_table,
   3088	.num_ports		= 1,
   3089	.num_bulk_in		= 1,
   3090	.num_bulk_out		= 1,
   3091	.num_interrupt_in	= 1,
   3092	.open			= edge_open,
   3093	.close			= edge_close,
   3094	.throttle		= edge_throttle,
   3095	.unthrottle		= edge_unthrottle,
   3096	.attach			= edge_startup,
   3097	.disconnect		= edge_disconnect,
   3098	.release		= edge_release,
   3099	.port_probe		= edge_port_probe,
   3100	.port_remove		= edge_port_remove,
   3101	.ioctl			= edge_ioctl,
   3102	.set_termios		= edge_set_termios,
   3103	.tiocmget		= edge_tiocmget,
   3104	.tiocmset		= edge_tiocmset,
   3105	.tiocmiwait		= usb_serial_generic_tiocmiwait,
   3106	.get_icount		= usb_serial_generic_get_icount,
   3107	.write			= edge_write,
   3108	.write_room		= edge_write_room,
   3109	.chars_in_buffer	= edge_chars_in_buffer,
   3110	.break_ctl		= edge_break,
   3111	.read_int_callback	= edge_interrupt_callback,
   3112	.read_bulk_callback	= edge_bulk_in_callback,
   3113	.write_bulk_callback	= edge_bulk_out_data_callback,
   3114};
   3115
   3116static struct usb_serial_driver * const serial_drivers[] = {
   3117	&edgeport_2port_device, &edgeport_4port_device,
   3118	&edgeport_8port_device, &epic_device, NULL
   3119};
   3120
   3121module_usb_serial_driver(serial_drivers, id_table_combined);
   3122
   3123MODULE_AUTHOR(DRIVER_AUTHOR);
   3124MODULE_DESCRIPTION(DRIVER_DESC);
   3125MODULE_LICENSE("GPL");
   3126MODULE_FIRMWARE("edgeport/boot.fw");
   3127MODULE_FIRMWARE("edgeport/boot2.fw");
   3128MODULE_FIRMWARE("edgeport/down.fw");
   3129MODULE_FIRMWARE("edgeport/down2.fw");