Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
   1/*
   2 * Driver for PLX NET2272 USB device controller
   3 *
   4 * Copyright (C) 2005-2006 PLX Technology, Inc.
   5 * Copyright (C) 2006-2011 Analog Devices, Inc.
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 */
  21
  22#include <linux/delay.h>
  23#include <linux/device.h>
  24#include <linux/errno.h>
  25#include <linux/gpio.h>
  26#include <linux/init.h>
  27#include <linux/interrupt.h>
  28#include <linux/io.h>
  29#include <linux/ioport.h>
  30#include <linux/kernel.h>
  31#include <linux/list.h>
  32#include <linux/module.h>
  33#include <linux/moduleparam.h>
  34#include <linux/pci.h>
  35#include <linux/platform_device.h>
  36#include <linux/prefetch.h>
  37#include <linux/sched.h>
  38#include <linux/slab.h>
  39#include <linux/timer.h>
  40#include <linux/usb.h>
  41#include <linux/usb/ch9.h>
  42#include <linux/usb/gadget.h>
  43
  44#include <asm/byteorder.h>
  45#include <asm/system.h>
  46#include <asm/unaligned.h>
  47
  48#include "net2272.h"
  49
  50#define DRIVER_DESC "PLX NET2272 USB Peripheral Controller"
  51
  52static const char driver_name[] = "net2272";
  53static const char driver_vers[] = "2006 October 17/mainline";
  54static const char driver_desc[] = DRIVER_DESC;
  55
  56static const char ep0name[] = "ep0";
  57static const char * const ep_name[] = {
  58	ep0name,
  59	"ep-a", "ep-b", "ep-c",
  60};
  61
  62#define DMA_ADDR_INVALID	(~(dma_addr_t)0)
  63#ifdef CONFIG_USB_GADGET_NET2272_DMA
  64/*
  65 * use_dma: the NET2272 can use an external DMA controller.
  66 * Note that since there is no generic DMA api, some functions,
  67 * notably request_dma, start_dma, and cancel_dma will need to be
  68 * modified for your platform's particular dma controller.
  69 *
  70 * If use_dma is disabled, pio will be used instead.
  71 */
  72static int use_dma = 0;
  73module_param(use_dma, bool, 0644);
  74
  75/*
  76 * dma_ep: selects the endpoint for use with dma (1=ep-a, 2=ep-b)
  77 * The NET2272 can only use dma for a single endpoint at a time.
  78 * At some point this could be modified to allow either endpoint
  79 * to take control of dma as it becomes available.
  80 *
  81 * Note that DMA should not be used on OUT endpoints unless it can
  82 * be guaranteed that no short packets will arrive on an IN endpoint
  83 * while the DMA operation is pending.  Otherwise the OUT DMA will
  84 * terminate prematurely (See NET2272 Errata 630-0213-0101)
  85 */
  86static ushort dma_ep = 1;
  87module_param(dma_ep, ushort, 0644);
  88
  89/*
  90 * dma_mode: net2272 dma mode setting (see LOCCTL1 definiton):
  91 *	mode 0 == Slow DREQ mode
  92 *	mode 1 == Fast DREQ mode
  93 *	mode 2 == Burst mode
  94 */
  95static ushort dma_mode = 2;
  96module_param(dma_mode, ushort, 0644);
  97#else
  98#define use_dma 0
  99#define dma_ep 1
 100#define dma_mode 2
 101#endif
 102
 103/*
 104 * fifo_mode: net2272 buffer configuration:
 105 *      mode 0 == ep-{a,b,c} 512db each
 106 *      mode 1 == ep-a 1k, ep-{b,c} 512db
 107 *      mode 2 == ep-a 1k, ep-b 1k, ep-c 512db
 108 *      mode 3 == ep-a 1k, ep-b disabled, ep-c 512db
 109 */
 110static ushort fifo_mode = 0;
 111module_param(fifo_mode, ushort, 0644);
 112
 113/*
 114 * enable_suspend: When enabled, the driver will respond to
 115 * USB suspend requests by powering down the NET2272.  Otherwise,
 116 * USB suspend requests will be ignored.  This is acceptible for
 117 * self-powered devices.  For bus powered devices set this to 1.
 118 */
 119static ushort enable_suspend = 0;
 120module_param(enable_suspend, ushort, 0644);
 121
 122static void assert_out_naking(struct net2272_ep *ep, const char *where)
 123{
 124	u8 tmp;
 125
 126#ifndef DEBUG
 127	return;
 128#endif
 129
 130	tmp = net2272_ep_read(ep, EP_STAT0);
 131	if ((tmp & (1 << NAK_OUT_PACKETS)) == 0) {
 132		dev_dbg(ep->dev->dev, "%s %s %02x !NAK\n",
 133			ep->ep.name, where, tmp);
 134		net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
 135	}
 136}
 137#define ASSERT_OUT_NAKING(ep) assert_out_naking(ep, __func__)
 138
 139static void stop_out_naking(struct net2272_ep *ep)
 140{
 141	u8 tmp = net2272_ep_read(ep, EP_STAT0);
 142
 143	if ((tmp & (1 << NAK_OUT_PACKETS)) != 0)
 144		net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
 145}
 146
 147#define PIPEDIR(bAddress) (usb_pipein(bAddress) ? "in" : "out")
 148
 149static char *type_string(u8 bmAttributes)
 150{
 151	switch ((bmAttributes) & USB_ENDPOINT_XFERTYPE_MASK) {
 152	case USB_ENDPOINT_XFER_BULK: return "bulk";
 153	case USB_ENDPOINT_XFER_ISOC: return "iso";
 154	case USB_ENDPOINT_XFER_INT:  return "intr";
 155	default:                     return "control";
 156	}
 157}
 158
 159static char *buf_state_string(unsigned state)
 160{
 161	switch (state) {
 162	case BUFF_FREE:  return "free";
 163	case BUFF_VALID: return "valid";
 164	case BUFF_LCL:   return "local";
 165	case BUFF_USB:   return "usb";
 166	default:         return "unknown";
 167	}
 168}
 169
 170static char *dma_mode_string(void)
 171{
 172	if (!use_dma)
 173		return "PIO";
 174	switch (dma_mode) {
 175	case 0:  return "SLOW DREQ";
 176	case 1:  return "FAST DREQ";
 177	case 2:  return "BURST";
 178	default: return "invalid";
 179	}
 180}
 181
 182static void net2272_dequeue_all(struct net2272_ep *);
 183static int net2272_kick_dma(struct net2272_ep *, struct net2272_request *);
 184static int net2272_fifo_status(struct usb_ep *);
 185
 186static struct usb_ep_ops net2272_ep_ops;
 187
 188/*---------------------------------------------------------------------------*/
 189
 190static int
 191net2272_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
 192{
 193	struct net2272 *dev;
 194	struct net2272_ep *ep;
 195	u32 max;
 196	u8 tmp;
 197	unsigned long flags;
 198
 199	ep = container_of(_ep, struct net2272_ep, ep);
 200	if (!_ep || !desc || ep->desc || _ep->name == ep0name
 201			|| desc->bDescriptorType != USB_DT_ENDPOINT)
 202		return -EINVAL;
 203	dev = ep->dev;
 204	if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
 205		return -ESHUTDOWN;
 206
 207	max = le16_to_cpu(desc->wMaxPacketSize) & 0x1fff;
 208
 209	spin_lock_irqsave(&dev->lock, flags);
 210	_ep->maxpacket = max & 0x7fff;
 211	ep->desc = desc;
 212
 213	/* net2272_ep_reset() has already been called */
 214	ep->stopped = 0;
 215	ep->wedged = 0;
 216
 217	/* set speed-dependent max packet */
 218	net2272_ep_write(ep, EP_MAXPKT0, max & 0xff);
 219	net2272_ep_write(ep, EP_MAXPKT1, (max & 0xff00) >> 8);
 220
 221	/* set type, direction, address; reset fifo counters */
 222	net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
 223	tmp = usb_endpoint_type(desc);
 224	if (usb_endpoint_xfer_bulk(desc)) {
 225		/* catch some particularly blatant driver bugs */
 226		if ((dev->gadget.speed == USB_SPEED_HIGH && max != 512) ||
 227		    (dev->gadget.speed == USB_SPEED_FULL && max > 64)) {
 228			spin_unlock_irqrestore(&dev->lock, flags);
 229			return -ERANGE;
 230		}
 231	}
 232	ep->is_iso = usb_endpoint_xfer_isoc(desc) ? 1 : 0;
 233	tmp <<= ENDPOINT_TYPE;
 234	tmp |= ((desc->bEndpointAddress & 0x0f) << ENDPOINT_NUMBER);
 235	tmp |= usb_endpoint_dir_in(desc) << ENDPOINT_DIRECTION;
 236	tmp |= (1 << ENDPOINT_ENABLE);
 237
 238	/* for OUT transfers, block the rx fifo until a read is posted */
 239	ep->is_in = usb_endpoint_dir_in(desc);
 240	if (!ep->is_in)
 241		net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
 242
 243	net2272_ep_write(ep, EP_CFG, tmp);
 244
 245	/* enable irqs */
 246	tmp = (1 << ep->num) | net2272_read(dev, IRQENB0);
 247	net2272_write(dev, IRQENB0, tmp);
 248
 249	tmp = (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE)
 250		| (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE)
 251		| net2272_ep_read(ep, EP_IRQENB);
 252	net2272_ep_write(ep, EP_IRQENB, tmp);
 253
 254	tmp = desc->bEndpointAddress;
 255	dev_dbg(dev->dev, "enabled %s (ep%d%s-%s) max %04x cfg %02x\n",
 256		_ep->name, tmp & 0x0f, PIPEDIR(tmp),
 257		type_string(desc->bmAttributes), max,
 258		net2272_ep_read(ep, EP_CFG));
 259
 260	spin_unlock_irqrestore(&dev->lock, flags);
 261	return 0;
 262}
 263
 264static void net2272_ep_reset(struct net2272_ep *ep)
 265{
 266	u8 tmp;
 267
 268	ep->desc = NULL;
 269	INIT_LIST_HEAD(&ep->queue);
 270
 271	ep->ep.maxpacket = ~0;
 272	ep->ep.ops = &net2272_ep_ops;
 273
 274	/* disable irqs, endpoint */
 275	net2272_ep_write(ep, EP_IRQENB, 0);
 276
 277	/* init to our chosen defaults, notably so that we NAK OUT
 278	 * packets until the driver queues a read.
 279	 */
 280	tmp = (1 << NAK_OUT_PACKETS_MODE) | (1 << ALT_NAK_OUT_PACKETS);
 281	net2272_ep_write(ep, EP_RSPSET, tmp);
 282
 283	tmp = (1 << INTERRUPT_MODE) | (1 << HIDE_STATUS_PHASE);
 284	if (ep->num != 0)
 285		tmp |= (1 << ENDPOINT_TOGGLE) | (1 << ENDPOINT_HALT);
 286
 287	net2272_ep_write(ep, EP_RSPCLR, tmp);
 288
 289	/* scrub most status bits, and flush any fifo state */
 290	net2272_ep_write(ep, EP_STAT0,
 291			  (1 << DATA_IN_TOKEN_INTERRUPT)
 292			| (1 << DATA_OUT_TOKEN_INTERRUPT)
 293			| (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)
 294			| (1 << DATA_PACKET_RECEIVED_INTERRUPT)
 295			| (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT));
 296
 297	net2272_ep_write(ep, EP_STAT1,
 298			    (1 << TIMEOUT)
 299			  | (1 << USB_OUT_ACK_SENT)
 300			  | (1 << USB_OUT_NAK_SENT)
 301			  | (1 << USB_IN_ACK_RCVD)
 302			  | (1 << USB_IN_NAK_SENT)
 303			  | (1 << USB_STALL_SENT)
 304			  | (1 << LOCAL_OUT_ZLP)
 305			  | (1 << BUFFER_FLUSH));
 306
 307	/* fifo size is handled seperately */
 308}
 309
 310static int net2272_disable(struct usb_ep *_ep)
 311{
 312	struct net2272_ep *ep;
 313	unsigned long flags;
 314
 315	ep = container_of(_ep, struct net2272_ep, ep);
 316	if (!_ep || !ep->desc || _ep->name == ep0name)
 317		return -EINVAL;
 318
 319	spin_lock_irqsave(&ep->dev->lock, flags);
 320	net2272_dequeue_all(ep);
 321	net2272_ep_reset(ep);
 322
 323	dev_vdbg(ep->dev->dev, "disabled %s\n", _ep->name);
 324
 325	spin_unlock_irqrestore(&ep->dev->lock, flags);
 326	return 0;
 327}
 328
 329/*---------------------------------------------------------------------------*/
 330
 331static struct usb_request *
 332net2272_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 333{
 334	struct net2272_ep *ep;
 335	struct net2272_request *req;
 336
 337	if (!_ep)
 338		return NULL;
 339	ep = container_of(_ep, struct net2272_ep, ep);
 340
 341	req = kzalloc(sizeof(*req), gfp_flags);
 342	if (!req)
 343		return NULL;
 344
 345	req->req.dma = DMA_ADDR_INVALID;
 346	INIT_LIST_HEAD(&req->queue);
 347
 348	return &req->req;
 349}
 350
 351static void
 352net2272_free_request(struct usb_ep *_ep, struct usb_request *_req)
 353{
 354	struct net2272_ep *ep;
 355	struct net2272_request *req;
 356
 357	ep = container_of(_ep, struct net2272_ep, ep);
 358	if (!_ep || !_req)
 359		return;
 360
 361	req = container_of(_req, struct net2272_request, req);
 362	WARN_ON(!list_empty(&req->queue));
 363	kfree(req);
 364}
 365
 366static void
 367net2272_done(struct net2272_ep *ep, struct net2272_request *req, int status)
 368{
 369	struct net2272 *dev;
 370	unsigned stopped = ep->stopped;
 371
 372	if (ep->num == 0) {
 373		if (ep->dev->protocol_stall) {
 374			ep->stopped = 1;
 375			set_halt(ep);
 376		}
 377		allow_status(ep);
 378	}
 379
 380	list_del_init(&req->queue);
 381
 382	if (req->req.status == -EINPROGRESS)
 383		req->req.status = status;
 384	else
 385		status = req->req.status;
 386
 387	dev = ep->dev;
 388	if (use_dma && req->mapped) {
 389		dma_unmap_single(dev->dev, req->req.dma, req->req.length,
 390			ep->is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
 391		req->req.dma = DMA_ADDR_INVALID;
 392		req->mapped = 0;
 393	}
 394
 395	if (status && status != -ESHUTDOWN)
 396		dev_vdbg(dev->dev, "complete %s req %p stat %d len %u/%u buf %p\n",
 397			ep->ep.name, &req->req, status,
 398			req->req.actual, req->req.length, req->req.buf);
 399
 400	/* don't modify queue heads during completion callback */
 401	ep->stopped = 1;
 402	spin_unlock(&dev->lock);
 403	req->req.complete(&ep->ep, &req->req);
 404	spin_lock(&dev->lock);
 405	ep->stopped = stopped;
 406}
 407
 408static int
 409net2272_write_packet(struct net2272_ep *ep, u8 *buf,
 410	struct net2272_request *req, unsigned max)
 411{
 412	u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA);
 413	u16 *bufp;
 414	unsigned length, count;
 415	u8 tmp;
 416
 417	length = min(req->req.length - req->req.actual, max);
 418	req->req.actual += length;
 419
 420	dev_vdbg(ep->dev->dev, "write packet %s req %p max %u len %u avail %u\n",
 421		ep->ep.name, req, max, length,
 422		(net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0));
 423
 424	count = length;
 425	bufp = (u16 *)buf;
 426
 427	while (likely(count >= 2)) {
 428		/* no byte-swap required; chip endian set during init */
 429		writew(*bufp++, ep_data);
 430		count -= 2;
 431	}
 432	buf = (u8 *)bufp;
 433
 434	/* write final byte by placing the NET2272 into 8-bit mode */
 435	if (unlikely(count)) {
 436		tmp = net2272_read(ep->dev, LOCCTL);
 437		net2272_write(ep->dev, LOCCTL, tmp & ~(1 << DATA_WIDTH));
 438		writeb(*buf, ep_data);
 439		net2272_write(ep->dev, LOCCTL, tmp);
 440	}
 441	return length;
 442}
 443
 444/* returns: 0: still running, 1: completed, negative: errno */
 445static int
 446net2272_write_fifo(struct net2272_ep *ep, struct net2272_request *req)
 447{
 448	u8 *buf;
 449	unsigned count, max;
 450	int status;
 451
 452	dev_vdbg(ep->dev->dev, "write_fifo %s actual %d len %d\n",
 453		ep->ep.name, req->req.actual, req->req.length);
 454
 455	/*
 456	 * Keep loading the endpoint until the final packet is loaded,
 457	 * or the endpoint buffer is full.
 458	 */
 459 top:
 460	/*
 461	 * Clear interrupt status
 462	 *  - Packet Transmitted interrupt will become set again when the
 463	 *    host successfully takes another packet
 464	 */
 465	net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT));
 466	while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_FULL))) {
 467		buf = req->req.buf + req->req.actual;
 468		prefetch(buf);
 469
 470		/* force pagesel */
 471		net2272_ep_read(ep, EP_STAT0);
 472
 473		max = (net2272_ep_read(ep, EP_AVAIL1) << 8) |
 474			(net2272_ep_read(ep, EP_AVAIL0));
 475
 476		if (max < ep->ep.maxpacket)
 477			max = (net2272_ep_read(ep, EP_AVAIL1) << 8)
 478				| (net2272_ep_read(ep, EP_AVAIL0));
 479
 480		count = net2272_write_packet(ep, buf, req, max);
 481		/* see if we are done */
 482		if (req->req.length == req->req.actual) {
 483			/* validate short or zlp packet */
 484			if (count < ep->ep.maxpacket)
 485				set_fifo_bytecount(ep, 0);
 486			net2272_done(ep, req, 0);
 487
 488			if (!list_empty(&ep->queue)) {
 489				req = list_entry(ep->queue.next,
 490						struct net2272_request,
 491						queue);
 492				status = net2272_kick_dma(ep, req);
 493
 494				if (status < 0)
 495					if ((net2272_ep_read(ep, EP_STAT0)
 496							& (1 << BUFFER_EMPTY)))
 497						goto top;
 498			}
 499			return 1;
 500		}
 501		net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT));
 502	}
 503	return 0;
 504}
 505
 506static void
 507net2272_out_flush(struct net2272_ep *ep)
 508{
 509	ASSERT_OUT_NAKING(ep);
 510
 511	net2272_ep_write(ep, EP_STAT0, (1 << DATA_OUT_TOKEN_INTERRUPT)
 512			| (1 << DATA_PACKET_RECEIVED_INTERRUPT));
 513	net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
 514}
 515
 516static int
 517net2272_read_packet(struct net2272_ep *ep, u8 *buf,
 518	struct net2272_request *req, unsigned avail)
 519{
 520	u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA);
 521	unsigned is_short;
 522	u16 *bufp;
 523
 524	req->req.actual += avail;
 525
 526	dev_vdbg(ep->dev->dev, "read packet %s req %p len %u avail %u\n",
 527		ep->ep.name, req, avail,
 528		(net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0));
 529
 530	is_short = (avail < ep->ep.maxpacket);
 531
 532	if (unlikely(avail == 0)) {
 533		/* remove any zlp from the buffer */
 534		(void)readw(ep_data);
 535		return is_short;
 536	}
 537
 538	/* Ensure we get the final byte */
 539	if (unlikely(avail % 2))
 540		avail++;
 541	bufp = (u16 *)buf;
 542
 543	do {
 544		*bufp++ = readw(ep_data);
 545		avail -= 2;
 546	} while (avail);
 547
 548	/*
 549	 * To avoid false endpoint available race condition must read
 550	 * ep stat0 twice in the case of a short transfer
 551	 */
 552	if (net2272_ep_read(ep, EP_STAT0) & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT))
 553		net2272_ep_read(ep, EP_STAT0);
 554
 555	return is_short;
 556}
 557
 558static int
 559net2272_read_fifo(struct net2272_ep *ep, struct net2272_request *req)
 560{
 561	u8 *buf;
 562	unsigned is_short;
 563	int count;
 564	int tmp;
 565	int cleanup = 0;
 566	int status = -1;
 567
 568	dev_vdbg(ep->dev->dev, "read_fifo %s actual %d len %d\n",
 569		ep->ep.name, req->req.actual, req->req.length);
 570
 571 top:
 572	do {
 573		buf = req->req.buf + req->req.actual;
 574		prefetchw(buf);
 575
 576		count = (net2272_ep_read(ep, EP_AVAIL1) << 8)
 577			| net2272_ep_read(ep, EP_AVAIL0);
 578
 579		net2272_ep_write(ep, EP_STAT0,
 580			(1 << SHORT_PACKET_TRANSFERRED_INTERRUPT) |
 581			(1 << DATA_PACKET_RECEIVED_INTERRUPT));
 582
 583		tmp = req->req.length - req->req.actual;
 584
 585		if (count > tmp) {
 586			if ((tmp % ep->ep.maxpacket) != 0) {
 587				dev_err(ep->dev->dev,
 588					"%s out fifo %d bytes, expected %d\n",
 589					ep->ep.name, count, tmp);
 590				cleanup = 1;
 591			}
 592			count = (tmp > 0) ? tmp : 0;
 593		}
 594
 595		is_short = net2272_read_packet(ep, buf, req, count);
 596
 597		/* completion */
 598		if (unlikely(cleanup || is_short ||
 599				((req->req.actual == req->req.length)
 600				 && !req->req.zero))) {
 601
 602			if (cleanup) {
 603				net2272_out_flush(ep);
 604				net2272_done(ep, req, -EOVERFLOW);
 605			} else
 606				net2272_done(ep, req, 0);
 607
 608			/* re-initialize endpoint transfer registers
 609			 * otherwise they may result in erroneous pre-validation
 610			 * for subsequent control reads
 611			 */
 612			if (unlikely(ep->num == 0)) {
 613				net2272_ep_write(ep, EP_TRANSFER2, 0);
 614				net2272_ep_write(ep, EP_TRANSFER1, 0);
 615				net2272_ep_write(ep, EP_TRANSFER0, 0);
 616			}
 617
 618			if (!list_empty(&ep->queue)) {
 619				req = list_entry(ep->queue.next,
 620					struct net2272_request, queue);
 621				status = net2272_kick_dma(ep, req);
 622				if ((status < 0) &&
 623				    !(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY)))
 624					goto top;
 625			}
 626			return 1;
 627		}
 628	} while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY)));
 629
 630	return 0;
 631}
 632
 633static void
 634net2272_pio_advance(struct net2272_ep *ep)
 635{
 636	struct net2272_request *req;
 637
 638	if (unlikely(list_empty(&ep->queue)))
 639		return;
 640
 641	req = list_entry(ep->queue.next, struct net2272_request, queue);
 642	(ep->is_in ? net2272_write_fifo : net2272_read_fifo)(ep, req);
 643}
 644
 645/* returns 0 on success, else negative errno */
 646static int
 647net2272_request_dma(struct net2272 *dev, unsigned ep, u32 buf,
 648	unsigned len, unsigned dir)
 649{
 650	dev_vdbg(dev->dev, "request_dma ep %d buf %08x len %d dir %d\n",
 651		ep, buf, len, dir);
 652
 653	/* The NET2272 only supports a single dma channel */
 654	if (dev->dma_busy)
 655		return -EBUSY;
 656	/*
 657	 * EP_TRANSFER (used to determine the number of bytes received
 658	 * in an OUT transfer) is 24 bits wide; don't ask for more than that.
 659	 */
 660	if ((dir == 1) && (len > 0x1000000))
 661		return -EINVAL;
 662
 663	dev->dma_busy = 1;
 664
 665	/* initialize platform's dma */
 666#ifdef CONFIG_PCI
 667	/* NET2272 addr, buffer addr, length, etc. */
 668	switch (dev->dev_id) {
 669	case PCI_DEVICE_ID_RDK1:
 670		/* Setup PLX 9054 DMA mode */
 671		writel((1 << LOCAL_BUS_WIDTH) |
 672			(1 << TA_READY_INPUT_ENABLE) |
 673			(0 << LOCAL_BURST_ENABLE) |
 674			(1 << DONE_INTERRUPT_ENABLE) |
 675			(1 << LOCAL_ADDRESSING_MODE) |
 676			(1 << DEMAND_MODE) |
 677			(1 << DMA_EOT_ENABLE) |
 678			(1 << FAST_SLOW_TERMINATE_MODE_SELECT) |
 679			(1 << DMA_CHANNEL_INTERRUPT_SELECT),
 680			dev->rdk1.plx9054_base_addr + DMAMODE0);
 681
 682		writel(0x100000, dev->rdk1.plx9054_base_addr + DMALADR0);
 683		writel(buf, dev->rdk1.plx9054_base_addr + DMAPADR0);
 684		writel(len, dev->rdk1.plx9054_base_addr + DMASIZ0);
 685		writel((dir << DIRECTION_OF_TRANSFER) |
 686			(1 << INTERRUPT_AFTER_TERMINAL_COUNT),
 687			dev->rdk1.plx9054_base_addr + DMADPR0);
 688		writel((1 << LOCAL_DMA_CHANNEL_0_INTERRUPT_ENABLE) |
 689			readl(dev->rdk1.plx9054_base_addr + INTCSR),
 690			dev->rdk1.plx9054_base_addr + INTCSR);
 691
 692		break;
 693	}
 694#endif
 695
 696	net2272_write(dev, DMAREQ,
 697		(0 << DMA_BUFFER_VALID) |
 698		(1 << DMA_REQUEST_ENABLE) |
 699		(1 << DMA_CONTROL_DACK) |
 700		(dev->dma_eot_polarity << EOT_POLARITY) |
 701		(dev->dma_dack_polarity << DACK_POLARITY) |
 702		(dev->dma_dreq_polarity << DREQ_POLARITY) |
 703		((ep >> 1) << DMA_ENDPOINT_SELECT));
 704
 705	(void) net2272_read(dev, SCRATCH);
 706
 707	return 0;
 708}
 709
 710static void
 711net2272_start_dma(struct net2272 *dev)
 712{
 713	/* start platform's dma controller */
 714#ifdef CONFIG_PCI
 715	switch (dev->dev_id) {
 716	case PCI_DEVICE_ID_RDK1:
 717		writeb((1 << CHANNEL_ENABLE) | (1 << CHANNEL_START),
 718			dev->rdk1.plx9054_base_addr + DMACSR0);
 719		break;
 720	}
 721#endif
 722}
 723
 724/* returns 0 on success, else negative errno */
 725static int
 726net2272_kick_dma(struct net2272_ep *ep, struct net2272_request *req)
 727{
 728	unsigned size;
 729	u8 tmp;
 730
 731	if (!use_dma || (ep->num < 1) || (ep->num > 2) || !ep->dma)
 732		return -EINVAL;
 733
 734	/* don't use dma for odd-length transfers
 735	 * otherwise, we'd need to deal with the last byte with pio
 736	 */
 737	if (req->req.length & 1)
 738		return -EINVAL;
 739
 740	dev_vdbg(ep->dev->dev, "kick_dma %s req %p dma %08llx\n",
 741		ep->ep.name, req, (unsigned long long) req->req.dma);
 742
 743	net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
 744
 745	/* The NET2272 can only use DMA on one endpoint at a time */
 746	if (ep->dev->dma_busy)
 747		return -EBUSY;
 748
 749	/* Make sure we only DMA an even number of bytes (we'll use
 750	 * pio to complete the transfer)
 751	 */
 752	size = req->req.length;
 753	size &= ~1;
 754
 755	/* device-to-host transfer */
 756	if (ep->is_in) {
 757		/* initialize platform's dma controller */
 758		if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 0))
 759			/* unable to obtain DMA channel; return error and use pio mode */
 760			return -EBUSY;
 761		req->req.actual += size;
 762
 763	/* host-to-device transfer */
 764	} else {
 765		tmp = net2272_ep_read(ep, EP_STAT0);
 766
 767		/* initialize platform's dma controller */
 768		if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 1))
 769			/* unable to obtain DMA channel; return error and use pio mode */
 770			return -EBUSY;
 771
 772		if (!(tmp & (1 << BUFFER_EMPTY)))
 773			ep->not_empty = 1;
 774		else
 775			ep->not_empty = 0;
 776
 777
 778		/* allow the endpoint's buffer to fill */
 779		net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
 780
 781		/* this transfer completed and data's already in the fifo
 782		 * return error so pio gets used.
 783		 */
 784		if (tmp & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT)) {
 785
 786			/* deassert dreq */
 787			net2272_write(ep->dev, DMAREQ,
 788				(0 << DMA_BUFFER_VALID) |
 789				(0 << DMA_REQUEST_ENABLE) |
 790				(1 << DMA_CONTROL_DACK) |
 791				(ep->dev->dma_eot_polarity << EOT_POLARITY) |
 792				(ep->dev->dma_dack_polarity << DACK_POLARITY) |
 793				(ep->dev->dma_dreq_polarity << DREQ_POLARITY) |
 794				((ep->num >> 1) << DMA_ENDPOINT_SELECT));
 795
 796			return -EBUSY;
 797		}
 798	}
 799
 800	/* Don't use per-packet interrupts: use dma interrupts only */
 801	net2272_ep_write(ep, EP_IRQENB, 0);
 802
 803	net2272_start_dma(ep->dev);
 804
 805	return 0;
 806}
 807
 808static void net2272_cancel_dma(struct net2272 *dev)
 809{
 810#ifdef CONFIG_PCI
 811	switch (dev->dev_id) {
 812	case PCI_DEVICE_ID_RDK1:
 813		writeb(0, dev->rdk1.plx9054_base_addr + DMACSR0);
 814		writeb(1 << CHANNEL_ABORT, dev->rdk1.plx9054_base_addr + DMACSR0);
 815		while (!(readb(dev->rdk1.plx9054_base_addr + DMACSR0) &
 816		         (1 << CHANNEL_DONE)))
 817			continue;	/* wait for dma to stabalize */
 818
 819		/* dma abort generates an interrupt */
 820		writeb(1 << CHANNEL_CLEAR_INTERRUPT,
 821			dev->rdk1.plx9054_base_addr + DMACSR0);
 822		break;
 823	}
 824#endif
 825
 826	dev->dma_busy = 0;
 827}
 828
 829/*---------------------------------------------------------------------------*/
 830
 831static int
 832net2272_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
 833{
 834	struct net2272_request *req;
 835	struct net2272_ep *ep;
 836	struct net2272 *dev;
 837	unsigned long flags;
 838	int status = -1;
 839	u8 s;
 840
 841	req = container_of(_req, struct net2272_request, req);
 842	if (!_req || !_req->complete || !_req->buf
 843			|| !list_empty(&req->queue))
 844		return -EINVAL;
 845	ep = container_of(_ep, struct net2272_ep, ep);
 846	if (!_ep || (!ep->desc && ep->num != 0))
 847		return -EINVAL;
 848	dev = ep->dev;
 849	if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
 850		return -ESHUTDOWN;
 851
 852	/* set up dma mapping in case the caller didn't */
 853	if (use_dma && ep->dma && _req->dma == DMA_ADDR_INVALID) {
 854		_req->dma = dma_map_single(dev->dev, _req->buf, _req->length,
 855			ep->is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
 856		req->mapped = 1;
 857	}
 858
 859	dev_vdbg(dev->dev, "%s queue req %p, len %d buf %p dma %08llx %s\n",
 860		_ep->name, _req, _req->length, _req->buf,
 861		(unsigned long long) _req->dma, _req->zero ? "zero" : "!zero");
 862
 863	spin_lock_irqsave(&dev->lock, flags);
 864
 865	_req->status = -EINPROGRESS;
 866	_req->actual = 0;
 867
 868	/* kickstart this i/o queue? */
 869	if (list_empty(&ep->queue) && !ep->stopped) {
 870		/* maybe there's no control data, just status ack */
 871		if (ep->num == 0 && _req->length == 0) {
 872			net2272_done(ep, req, 0);
 873			dev_vdbg(dev->dev, "%s status ack\n", ep->ep.name);
 874			goto done;
 875		}
 876
 877		/* Return zlp, don't let it block subsequent packets */
 878		s = net2272_ep_read(ep, EP_STAT0);
 879		if (s & (1 << BUFFER_EMPTY)) {
 880			/* Buffer is empty check for a blocking zlp, handle it */
 881			if ((s & (1 << NAK_OUT_PACKETS)) &&
 882			    net2272_ep_read(ep, EP_STAT1) & (1 << LOCAL_OUT_ZLP)) {
 883				dev_dbg(dev->dev, "WARNING: returning ZLP short packet termination!\n");
 884				/*
 885				 * Request is going to terminate with a short packet ...
 886				 * hope the client is ready for it!
 887				 */
 888				status = net2272_read_fifo(ep, req);
 889				/* clear short packet naking */
 890				net2272_ep_write(ep, EP_STAT0, (1 << NAK_OUT_PACKETS));
 891				goto done;
 892			}
 893		}
 894
 895		/* try dma first */
 896		status = net2272_kick_dma(ep, req);
 897
 898		if (status < 0) {
 899			/* dma failed (most likely in use by another endpoint)
 900			 * fallback to pio
 901			 */
 902			status = 0;
 903
 904			if (ep->is_in)
 905				status = net2272_write_fifo(ep, req);
 906			else {
 907				s = net2272_ep_read(ep, EP_STAT0);
 908				if ((s & (1 << BUFFER_EMPTY)) == 0)
 909					status = net2272_read_fifo(ep, req);
 910			}
 911
 912			if (unlikely(status != 0)) {
 913				if (status > 0)
 914					status = 0;
 915				req = NULL;
 916			}
 917		}
 918	}
 919	if (likely(req != 0))
 920		list_add_tail(&req->queue, &ep->queue);
 921
 922	if (likely(!list_empty(&ep->queue)))
 923		net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
 924 done:
 925	spin_unlock_irqrestore(&dev->lock, flags);
 926
 927	return 0;
 928}
 929
 930/* dequeue ALL requests */
 931static void
 932net2272_dequeue_all(struct net2272_ep *ep)
 933{
 934	struct net2272_request *req;
 935
 936	/* called with spinlock held */
 937	ep->stopped = 1;
 938
 939	while (!list_empty(&ep->queue)) {
 940		req = list_entry(ep->queue.next,
 941				struct net2272_request,
 942				queue);
 943		net2272_done(ep, req, -ESHUTDOWN);
 944	}
 945}
 946
 947/* dequeue JUST ONE request */
 948static int
 949net2272_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 950{
 951	struct net2272_ep *ep;
 952	struct net2272_request *req;
 953	unsigned long flags;
 954	int stopped;
 955
 956	ep = container_of(_ep, struct net2272_ep, ep);
 957	if (!_ep || (!ep->desc && ep->num != 0) || !_req)
 958		return -EINVAL;
 959
 960	spin_lock_irqsave(&ep->dev->lock, flags);
 961	stopped = ep->stopped;
 962	ep->stopped = 1;
 963
 964	/* make sure it's still queued on this endpoint */
 965	list_for_each_entry(req, &ep->queue, queue) {
 966		if (&req->req == _req)
 967			break;
 968	}
 969	if (&req->req != _req) {
 970		spin_unlock_irqrestore(&ep->dev->lock, flags);
 971		return -EINVAL;
 972	}
 973
 974	/* queue head may be partially complete */
 975	if (ep->queue.next == &req->queue) {
 976		dev_dbg(ep->dev->dev, "unlink (%s) pio\n", _ep->name);
 977		net2272_done(ep, req, -ECONNRESET);
 978	}
 979	req = NULL;
 980	ep->stopped = stopped;
 981
 982	spin_unlock_irqrestore(&ep->dev->lock, flags);
 983	return 0;
 984}
 985
 986/*---------------------------------------------------------------------------*/
 987
 988static int
 989net2272_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
 990{
 991	struct net2272_ep *ep;
 992	unsigned long flags;
 993	int ret = 0;
 994
 995	ep = container_of(_ep, struct net2272_ep, ep);
 996	if (!_ep || (!ep->desc && ep->num != 0))
 997		return -EINVAL;
 998	if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
 999		return -ESHUTDOWN;
1000	if (ep->desc /* not ep0 */ && usb_endpoint_xfer_isoc(ep->desc))
1001		return -EINVAL;
1002
1003	spin_lock_irqsave(&ep->dev->lock, flags);
1004	if (!list_empty(&ep->queue))
1005		ret = -EAGAIN;
1006	else if (ep->is_in && value && net2272_fifo_status(_ep) != 0)
1007		ret = -EAGAIN;
1008	else {
1009		dev_vdbg(ep->dev->dev, "%s %s %s\n", _ep->name,
1010			value ? "set" : "clear",
1011			wedged ? "wedge" : "halt");
1012		/* set/clear */
1013		if (value) {
1014			if (ep->num == 0)
1015				ep->dev->protocol_stall = 1;
1016			else
1017				set_halt(ep);
1018			if (wedged)
1019				ep->wedged = 1;
1020		} else {
1021			clear_halt(ep);
1022			ep->wedged = 0;
1023		}
1024	}
1025	spin_unlock_irqrestore(&ep->dev->lock, flags);
1026
1027	return ret;
1028}
1029
1030static int
1031net2272_set_halt(struct usb_ep *_ep, int value)
1032{
1033	return net2272_set_halt_and_wedge(_ep, value, 0);
1034}
1035
1036static int
1037net2272_set_wedge(struct usb_ep *_ep)
1038{
1039	if (!_ep || _ep->name == ep0name)
1040		return -EINVAL;
1041	return net2272_set_halt_and_wedge(_ep, 1, 1);
1042}
1043
1044static int
1045net2272_fifo_status(struct usb_ep *_ep)
1046{
1047	struct net2272_ep *ep;
1048	u16 avail;
1049
1050	ep = container_of(_ep, struct net2272_ep, ep);
1051	if (!_ep || (!ep->desc && ep->num != 0))
1052		return -ENODEV;
1053	if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1054		return -ESHUTDOWN;
1055
1056	avail = net2272_ep_read(ep, EP_AVAIL1) << 8;
1057	avail |= net2272_ep_read(ep, EP_AVAIL0);
1058	if (avail > ep->fifo_size)
1059		return -EOVERFLOW;
1060	if (ep->is_in)
1061		avail = ep->fifo_size - avail;
1062	return avail;
1063}
1064
1065static void
1066net2272_fifo_flush(struct usb_ep *_ep)
1067{
1068	struct net2272_ep *ep;
1069
1070	ep = container_of(_ep, struct net2272_ep, ep);
1071	if (!_ep || (!ep->desc && ep->num != 0))
1072		return;
1073	if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1074		return;
1075
1076	net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
1077}
1078
1079static struct usb_ep_ops net2272_ep_ops = {
1080	.enable        = net2272_enable,
1081	.disable       = net2272_disable,
1082
1083	.alloc_request = net2272_alloc_request,
1084	.free_request  = net2272_free_request,
1085
1086	.queue         = net2272_queue,
1087	.dequeue       = net2272_dequeue,
1088
1089	.set_halt      = net2272_set_halt,
1090	.set_wedge     = net2272_set_wedge,
1091	.fifo_status   = net2272_fifo_status,
1092	.fifo_flush    = net2272_fifo_flush,
1093};
1094
1095/*---------------------------------------------------------------------------*/
1096
1097static int
1098net2272_get_frame(struct usb_gadget *_gadget)
1099{
1100	struct net2272 *dev;
1101	unsigned long flags;
1102	u16 ret;
1103
1104	if (!_gadget)
1105		return -ENODEV;
1106	dev = container_of(_gadget, struct net2272, gadget);
1107	spin_lock_irqsave(&dev->lock, flags);
1108
1109	ret = net2272_read(dev, FRAME1) << 8;
1110	ret |= net2272_read(dev, FRAME0);
1111
1112	spin_unlock_irqrestore(&dev->lock, flags);
1113	return ret;
1114}
1115
1116static int
1117net2272_wakeup(struct usb_gadget *_gadget)
1118{
1119	struct net2272 *dev;
1120	u8 tmp;
1121	unsigned long flags;
1122
1123	if (!_gadget)
1124		return 0;
1125	dev = container_of(_gadget, struct net2272, gadget);
1126
1127	spin_lock_irqsave(&dev->lock, flags);
1128	tmp = net2272_read(dev, USBCTL0);
1129	if (tmp & (1 << IO_WAKEUP_ENABLE))
1130		net2272_write(dev, USBCTL1, (1 << GENERATE_RESUME));
1131
1132	spin_unlock_irqrestore(&dev->lock, flags);
1133
1134	return 0;
1135}
1136
1137static int
1138net2272_set_selfpowered(struct usb_gadget *_gadget, int value)
1139{
1140	struct net2272 *dev;
1141
1142	if (!_gadget)
1143		return -ENODEV;
1144	dev = container_of(_gadget, struct net2272, gadget);
1145
1146	dev->is_selfpowered = value;
1147
1148	return 0;
1149}
1150
1151static int
1152net2272_pullup(struct usb_gadget *_gadget, int is_on)
1153{
1154	struct net2272 *dev;
1155	u8 tmp;
1156	unsigned long flags;
1157
1158	if (!_gadget)
1159		return -ENODEV;
1160	dev = container_of(_gadget, struct net2272, gadget);
1161
1162	spin_lock_irqsave(&dev->lock, flags);
1163	tmp = net2272_read(dev, USBCTL0);
1164	dev->softconnect = (is_on != 0);
1165	if (is_on)
1166		tmp |= (1 << USB_DETECT_ENABLE);
1167	else
1168		tmp &= ~(1 << USB_DETECT_ENABLE);
1169	net2272_write(dev, USBCTL0, tmp);
1170	spin_unlock_irqrestore(&dev->lock, flags);
1171
1172	return 0;
1173}
1174
1175static int net2272_start(struct usb_gadget_driver *driver,
1176		int (*bind)(struct usb_gadget *));
1177static int net2272_stop(struct usb_gadget_driver *driver);
1178
1179static const struct usb_gadget_ops net2272_ops = {
1180	.get_frame       = net2272_get_frame,
1181	.wakeup          = net2272_wakeup,
1182	.set_selfpowered = net2272_set_selfpowered,
1183	.pullup			= net2272_pullup,
1184	.start			= net2272_start,
1185	.stop			= net2272_stop,
1186};
1187
1188/*---------------------------------------------------------------------------*/
1189
1190static ssize_t
1191net2272_show_registers(struct device *_dev, struct device_attribute *attr, char *buf)
1192{
1193	struct net2272 *dev;
1194	char *next;
1195	unsigned size, t;
1196	unsigned long flags;
1197	u8 t1, t2;
1198	int i;
1199	const char *s;
1200
1201	dev = dev_get_drvdata(_dev);
1202	next = buf;
1203	size = PAGE_SIZE;
1204	spin_lock_irqsave(&dev->lock, flags);
1205
1206	if (dev->driver)
1207		s = dev->driver->driver.name;
1208	else
1209		s = "(none)";
1210
1211	/* Main Control Registers */
1212	t = scnprintf(next, size, "%s version %s,"
1213		"chiprev %02x, locctl %02x\n"
1214		"irqenb0 %02x irqenb1 %02x "
1215		"irqstat0 %02x irqstat1 %02x\n",
1216		driver_name, driver_vers, dev->chiprev,
1217		net2272_read(dev, LOCCTL),
1218		net2272_read(dev, IRQENB0),
1219		net2272_read(dev, IRQENB1),
1220		net2272_read(dev, IRQSTAT0),
1221		net2272_read(dev, IRQSTAT1));
1222	size -= t;
1223	next += t;
1224
1225	/* DMA */
1226	t1 = net2272_read(dev, DMAREQ);
1227	t = scnprintf(next, size, "\ndmareq %02x: %s %s%s%s%s\n",
1228		t1, ep_name[(t1 & 0x01) + 1],
1229		t1 & (1 << DMA_CONTROL_DACK) ? "dack " : "",
1230		t1 & (1 << DMA_REQUEST_ENABLE) ? "reqenb " : "",
1231		t1 & (1 << DMA_REQUEST) ? "req " : "",
1232		t1 & (1 << DMA_BUFFER_VALID) ? "valid " : "");
1233	size -= t;
1234	next += t;
1235
1236	/* USB Control Registers */
1237	t1 = net2272_read(dev, USBCTL1);
1238	if (t1 & (1 << VBUS_PIN)) {
1239		if (t1 & (1 << USB_HIGH_SPEED))
1240			s = "high speed";
1241		else if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1242			s = "powered";
1243		else
1244			s = "full speed";
1245	} else
1246		s = "not attached";
1247	t = scnprintf(next, size,
1248		"usbctl0 %02x usbctl1 %02x addr 0x%02x (%s)\n",
1249		net2272_read(dev, USBCTL0), t1,
1250		net2272_read(dev, OURADDR), s);
1251	size -= t;
1252	next += t;
1253
1254	/* Endpoint Registers */
1255	for (i = 0; i < 4; ++i) {
1256		struct net2272_ep *ep;
1257
1258		ep = &dev->ep[i];
1259		if (i && !ep->desc)
1260			continue;
1261
1262		t1 = net2272_ep_read(ep, EP_CFG);
1263		t2 = net2272_ep_read(ep, EP_RSPSET);
1264		t = scnprintf(next, size,
1265			"\n%s\tcfg %02x rsp (%02x) %s%s%s%s%s%s%s%s"
1266			"irqenb %02x\n",
1267			ep->ep.name, t1, t2,
1268			(t2 & (1 << ALT_NAK_OUT_PACKETS)) ? "NAK " : "",
1269			(t2 & (1 << HIDE_STATUS_PHASE)) ? "hide " : "",
1270			(t2 & (1 << AUTOVALIDATE)) ? "auto " : "",
1271			(t2 & (1 << INTERRUPT_MODE)) ? "interrupt " : "",
1272			(t2 & (1 << CONTROL_STATUS_PHASE_HANDSHAKE)) ? "status " : "",
1273			(t2 & (1 << NAK_OUT_PACKETS_MODE)) ? "NAKmode " : "",
1274			(t2 & (1 << ENDPOINT_TOGGLE)) ? "DATA1 " : "DATA0 ",
1275			(t2 & (1 << ENDPOINT_HALT)) ? "HALT " : "",
1276			net2272_ep_read(ep, EP_IRQENB));
1277		size -= t;
1278		next += t;
1279
1280		t = scnprintf(next, size,
1281			"\tstat0 %02x stat1 %02x avail %04x "
1282			"(ep%d%s-%s)%s\n",
1283			net2272_ep_read(ep, EP_STAT0),
1284			net2272_ep_read(ep, EP_STAT1),
1285			(net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0),
1286			t1 & 0x0f,
1287			ep->is_in ? "in" : "out",
1288			type_string(t1 >> 5),
1289			ep->stopped ? "*" : "");
1290		size -= t;
1291		next += t;
1292
1293		t = scnprintf(next, size,
1294			"\tep_transfer %06x\n",
1295			((net2272_ep_read(ep, EP_TRANSFER2) & 0xff) << 16) |
1296			((net2272_ep_read(ep, EP_TRANSFER1) & 0xff) << 8) |
1297			((net2272_ep_read(ep, EP_TRANSFER0) & 0xff)));
1298		size -= t;
1299		next += t;
1300
1301		t1 = net2272_ep_read(ep, EP_BUFF_STATES) & 0x03;
1302		t2 = (net2272_ep_read(ep, EP_BUFF_STATES) >> 2) & 0x03;
1303		t = scnprintf(next, size,
1304			"\tbuf-a %s buf-b %s\n",
1305			buf_state_string(t1),
1306			buf_state_string(t2));
1307		size -= t;
1308		next += t;
1309	}
1310
1311	spin_unlock_irqrestore(&dev->lock, flags);
1312
1313	return PAGE_SIZE - size;
1314}
1315static DEVICE_ATTR(registers, S_IRUGO, net2272_show_registers, NULL);
1316
1317/*---------------------------------------------------------------------------*/
1318
1319static void
1320net2272_set_fifo_mode(struct net2272 *dev, int mode)
1321{
1322	u8 tmp;
1323
1324	tmp = net2272_read(dev, LOCCTL) & 0x3f;
1325	tmp |= (mode << 6);
1326	net2272_write(dev, LOCCTL, tmp);
1327
1328	INIT_LIST_HEAD(&dev->gadget.ep_list);
1329
1330	/* always ep-a, ep-c ... maybe not ep-b */
1331	list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list);
1332
1333	switch (mode) {
1334	case 0:
1335		list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list);
1336		dev->ep[1].fifo_size = dev->ep[2].fifo_size = 512;
1337		break;
1338	case 1:
1339		list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list);
1340		dev->ep[1].fifo_size = 1024;
1341		dev->ep[2].fifo_size = 512;
1342		break;
1343	case 2:
1344		list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list);
1345		dev->ep[1].fifo_size = dev->ep[2].fifo_size = 1024;
1346		break;
1347	case 3:
1348		dev->ep[1].fifo_size = 1024;
1349		break;
1350	}
1351
1352	/* ep-c is always 2 512 byte buffers */
1353	list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list);
1354	dev->ep[3].fifo_size = 512;
1355}
1356
1357/*---------------------------------------------------------------------------*/
1358
1359static struct net2272 *the_controller;
1360
1361static void
1362net2272_usb_reset(struct net2272 *dev)
1363{
1364	dev->gadget.speed = USB_SPEED_UNKNOWN;
1365
1366	net2272_cancel_dma(dev);
1367
1368	net2272_write(dev, IRQENB0, 0);
1369	net2272_write(dev, IRQENB1, 0);
1370
1371	/* clear irq state */
1372	net2272_write(dev, IRQSTAT0, 0xff);
1373	net2272_write(dev, IRQSTAT1, ~(1 << SUSPEND_REQUEST_INTERRUPT));
1374
1375	net2272_write(dev, DMAREQ,
1376		(0 << DMA_BUFFER_VALID) |
1377		(0 << DMA_REQUEST_ENABLE) |
1378		(1 << DMA_CONTROL_DACK) |
1379		(dev->dma_eot_polarity << EOT_POLARITY) |
1380		(dev->dma_dack_polarity << DACK_POLARITY) |
1381		(dev->dma_dreq_polarity << DREQ_POLARITY) |
1382		((dma_ep >> 1) << DMA_ENDPOINT_SELECT));
1383
1384	net2272_cancel_dma(dev);
1385	net2272_set_fifo_mode(dev, (fifo_mode <= 3) ? fifo_mode : 0);
1386
1387	/* Set the NET2272 ep fifo data width to 16-bit mode and for correct byte swapping
1388	 * note that the higher level gadget drivers are expected to convert data to little endian.
1389	 * Enable byte swap for your local bus/cpu if needed by setting BYTE_SWAP in LOCCTL here
1390	 */
1391	net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) | (1 << DATA_WIDTH));
1392	net2272_write(dev, LOCCTL1, (dma_mode << DMA_MODE));
1393}
1394
1395static void
1396net2272_usb_reinit(struct net2272 *dev)
1397{
1398	int i;
1399
1400	/* basic endpoint init */
1401	for (i = 0; i < 4; ++i) {
1402		struct net2272_ep *ep = &dev->ep[i];
1403
1404		ep->ep.name = ep_name[i];
1405		ep->dev = dev;
1406		ep->num = i;
1407		ep->not_empty = 0;
1408
1409		if (use_dma && ep->num == dma_ep)
1410			ep->dma = 1;
1411
1412		if (i > 0 && i <= 3)
1413			ep->fifo_size = 512;
1414		else
1415			ep->fifo_size = 64;
1416		net2272_ep_reset(ep);
1417	}
1418	dev->ep[0].ep.maxpacket = 64;
1419
1420	dev->gadget.ep0 = &dev->ep[0].ep;
1421	dev->ep[0].stopped = 0;
1422	INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
1423}
1424
1425static void
1426net2272_ep0_start(struct net2272 *dev)
1427{
1428	struct net2272_ep *ep0 = &dev->ep[0];
1429
1430	net2272_ep_write(ep0, EP_RSPSET,
1431		(1 << NAK_OUT_PACKETS_MODE) |
1432		(1 << ALT_NAK_OUT_PACKETS));
1433	net2272_ep_write(ep0, EP_RSPCLR,
1434		(1 << HIDE_STATUS_PHASE) |
1435		(1 << CONTROL_STATUS_PHASE_HANDSHAKE));
1436	net2272_write(dev, USBCTL0,
1437		(dev->softconnect << USB_DETECT_ENABLE) |
1438		(1 << USB_ROOT_PORT_WAKEUP_ENABLE) |
1439		(1 << IO_WAKEUP_ENABLE));
1440	net2272_write(dev, IRQENB0,
1441		(1 << SETUP_PACKET_INTERRUPT_ENABLE) |
1442		(1 << ENDPOINT_0_INTERRUPT_ENABLE) |
1443		(1 << DMA_DONE_INTERRUPT_ENABLE));
1444	net2272_write(dev, IRQENB1,
1445		(1 << VBUS_INTERRUPT_ENABLE) |
1446		(1 << ROOT_PORT_RESET_INTERRUPT_ENABLE) |
1447		(1 << SUSPEND_REQUEST_CHANGE_INTERRUPT_ENABLE));
1448}
1449
1450/* when a driver is successfully registered, it will receive
1451 * control requests including set_configuration(), which enables
1452 * non-control requests.  then usb traffic follows until a
1453 * disconnect is reported.  then a host may connect again, or
1454 * the driver might get unbound.
1455 */
1456static int net2272_start(struct usb_gadget_driver *driver,
1457	int (*bind)(struct usb_gadget *))
1458{
1459	struct net2272 *dev = the_controller;
1460	int ret;
1461	unsigned i;
1462
1463	if (!driver || !bind || !driver->unbind || !driver->setup ||
1464	    driver->speed != USB_SPEED_HIGH)
1465		return -EINVAL;
1466	if (!dev)
1467		return -ENODEV;
1468	if (dev->driver)
1469		return -EBUSY;
1470
1471	for (i = 0; i < 4; ++i)
1472		dev->ep[i].irqs = 0;
1473	/* hook up the driver ... */
1474	dev->softconnect = 1;
1475	driver->driver.bus = NULL;
1476	dev->driver = driver;
1477	dev->gadget.dev.driver = &driver->driver;
1478	ret = bind(&dev->gadget);
1479	if (ret) {
1480		dev_dbg(dev->dev, "bind to driver %s --> %d\n",
1481			driver->driver.name, ret);
1482		dev->driver = NULL;
1483		dev->gadget.dev.driver = NULL;
1484		return ret;
1485	}
1486
1487	/* ... then enable host detection and ep0; and we're ready
1488	 * for set_configuration as well as eventual disconnect.
1489	 */
1490	net2272_ep0_start(dev);
1491
1492	dev_dbg(dev->dev, "%s ready\n", driver->driver.name);
1493
1494	return 0;
1495}
1496
1497static void
1498stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver)
1499{
1500	int i;
1501
1502	/* don't disconnect if it's not connected */
1503	if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1504		driver = NULL;
1505
1506	/* stop hardware; prevent new request submissions;
1507	 * and kill any outstanding requests.
1508	 */
1509	net2272_usb_reset(dev);
1510	for (i = 0; i < 4; ++i)
1511		net2272_dequeue_all(&dev->ep[i]);
1512
1513	/* report disconnect; the driver is already quiesced */
1514	if (driver) {
1515		spin_unlock(&dev->lock);
1516		driver->disconnect(&dev->gadget);
1517		spin_lock(&dev->lock);
1518
1519	}
1520	net2272_usb_reinit(dev);
1521}
1522
1523static int net2272_stop(struct usb_gadget_driver *driver)
1524{
1525	struct net2272 *dev = the_controller;
1526	unsigned long flags;
1527
1528	if (!dev)
1529		return -ENODEV;
1530	if (!driver || driver != dev->driver)
1531		return -EINVAL;
1532
1533	spin_lock_irqsave(&dev->lock, flags);
1534	stop_activity(dev, driver);
1535	spin_unlock_irqrestore(&dev->lock, flags);
1536
1537	net2272_pullup(&dev->gadget, 0);
1538
1539	driver->unbind(&dev->gadget);
1540	dev->gadget.dev.driver = NULL;
1541	dev->driver = NULL;
1542
1543	dev_dbg(dev->dev, "unregistered driver '%s'\n", driver->driver.name);
1544	return 0;
1545}
1546
1547/*---------------------------------------------------------------------------*/
1548/* handle ep-a/ep-b dma completions */
1549static void
1550net2272_handle_dma(struct net2272_ep *ep)
1551{
1552	struct net2272_request *req;
1553	unsigned len;
1554	int status;
1555
1556	if (!list_empty(&ep->queue))
1557		req = list_entry(ep->queue.next,
1558				struct net2272_request, queue);
1559	else
1560		req = NULL;
1561
1562	dev_vdbg(ep->dev->dev, "handle_dma %s req %p\n", ep->ep.name, req);
1563
1564	/* Ensure DREQ is de-asserted */
1565	net2272_write(ep->dev, DMAREQ,
1566		(0 << DMA_BUFFER_VALID)
1567	      | (0 << DMA_REQUEST_ENABLE)
1568	      | (1 << DMA_CONTROL_DACK)
1569	      | (ep->dev->dma_eot_polarity << EOT_POLARITY)
1570	      | (ep->dev->dma_dack_polarity << DACK_POLARITY)
1571	      | (ep->dev->dma_dreq_polarity << DREQ_POLARITY)
1572	      | ((ep->dma >> 1) << DMA_ENDPOINT_SELECT));
1573
1574	ep->dev->dma_busy = 0;
1575
1576	net2272_ep_write(ep, EP_IRQENB,
1577		  (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE)
1578		| (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE)
1579		| net2272_ep_read(ep, EP_IRQENB));
1580
1581	/* device-to-host transfer completed */
1582	if (ep->is_in) {
1583		/* validate a short packet or zlp if necessary */
1584		if ((req->req.length % ep->ep.maxpacket != 0) ||
1585				req->req.zero)
1586			set_fifo_bytecount(ep, 0);
1587
1588		net2272_done(ep, req, 0);
1589		if (!list_empty(&ep->queue)) {
1590			req = list_entry(ep->queue.next,
1591					struct net2272_request, queue);
1592			status = net2272_kick_dma(ep, req);
1593			if (status < 0)
1594				net2272_pio_advance(ep);
1595		}
1596
1597	/* host-to-device transfer completed */
1598	} else {
1599		/* terminated with a short packet? */
1600		if (net2272_read(ep->dev, IRQSTAT0) &
1601				(1 << DMA_DONE_INTERRUPT)) {
1602			/* abort system dma */
1603			net2272_cancel_dma(ep->dev);
1604		}
1605
1606		/* EP_TRANSFER will contain the number of bytes
1607		 * actually received.
1608		 * NOTE: There is no overflow detection on EP_TRANSFER:
1609		 * We can't deal with transfers larger than 2^24 bytes!
1610		 */
1611		len = (net2272_ep_read(ep, EP_TRANSFER2) << 16)
1612			| (net2272_ep_read(ep, EP_TRANSFER1) << 8)
1613			| (net2272_ep_read(ep, EP_TRANSFER0));
1614
1615		if (ep->not_empty)
1616			len += 4;
1617
1618		req->req.actual += len;
1619
1620		/* get any remaining data */
1621		net2272_pio_advance(ep);
1622	}
1623}
1624
1625/*---------------------------------------------------------------------------*/
1626
1627static void
1628net2272_handle_ep(struct net2272_ep *ep)
1629{
1630	struct net2272_request *req;
1631	u8 stat0, stat1;
1632
1633	if (!list_empty(&ep->queue))
1634		req = list_entry(ep->queue.next,
1635			struct net2272_request, queue);
1636	else
1637		req = NULL;
1638
1639	/* ack all, and handle what we care about */
1640	stat0 = net2272_ep_read(ep, EP_STAT0);
1641	stat1 = net2272_ep_read(ep, EP_STAT1);
1642	ep->irqs++;
1643
1644	dev_vdbg(ep->dev->dev, "%s ack ep_stat0 %02x, ep_stat1 %02x, req %p\n",
1645		ep->ep.name, stat0, stat1, req ? &req->req : 0);
1646
1647	net2272_ep_write(ep, EP_STAT0, stat0 &
1648		~((1 << NAK_OUT_PACKETS)
1649		| (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT)));
1650	net2272_ep_write(ep, EP_STAT1, stat1);
1651
1652	/* data packet(s) received (in the fifo, OUT)
1653	 * direction must be validated, otherwise control read status phase
1654	 * could be interpreted as a valid packet
1655	 */
1656	if (!ep->is_in && (stat0 & (1 << DATA_PACKET_RECEIVED_INTERRUPT)))
1657		net2272_pio_advance(ep);
1658	/* data packet(s) transmitted (IN) */
1659	else if (stat0 & (1 << DATA_PACKET_TRANSMITTED_INTERRUPT))
1660		net2272_pio_advance(ep);
1661}
1662
1663static struct net2272_ep *
1664net2272_get_ep_by_addr(struct net2272 *dev, u16 wIndex)
1665{
1666	struct net2272_ep *ep;
1667
1668	if ((wIndex & USB_ENDPOINT_NUMBER_MASK) == 0)
1669		return &dev->ep[0];
1670
1671	list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) {
1672		u8 bEndpointAddress;
1673
1674		if (!ep->desc)
1675			continue;
1676		bEndpointAddress = ep->desc->bEndpointAddress;
1677		if ((wIndex ^ bEndpointAddress) & USB_DIR_IN)
1678			continue;
1679		if ((wIndex & 0x0f) == (bEndpointAddress & 0x0f))
1680			return ep;
1681	}
1682	return NULL;
1683}
1684
1685/*
1686 * USB Test Packet:
1687 * JKJKJKJK * 9
1688 * JJKKJJKK * 8
1689 * JJJJKKKK * 8
1690 * JJJJJJJKKKKKKK * 8
1691 * JJJJJJJK * 8
1692 * {JKKKKKKK * 10}, JK
1693 */
1694static const u8 net2272_test_packet[] = {
1695	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1696	0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
1697	0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1698	0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1699	0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD,
1700	0xFC, 0x7E, 0xBF, 0xDF, 0xEF, 0xF7, 0xFD, 0x7E
1701};
1702
1703static void
1704net2272_set_test_mode(struct net2272 *dev, int mode)
1705{
1706	int i;
1707
1708	/* Disable all net2272 interrupts:
1709	 * Nothing but a power cycle should stop the test.
1710	 */
1711	net2272_write(dev, IRQENB0, 0x00);
1712	net2272_write(dev, IRQENB1, 0x00);
1713
1714	/* Force tranceiver to high-speed */
1715	net2272_write(dev, XCVRDIAG, 1 << FORCE_HIGH_SPEED);
1716
1717	net2272_write(dev, PAGESEL, 0);
1718	net2272_write(dev, EP_STAT0, 1 << DATA_PACKET_TRANSMITTED_INTERRUPT);
1719	net2272_write(dev, EP_RSPCLR,
1720			  (1 << CONTROL_STATUS_PHASE_HANDSHAKE)
1721			| (1 << HIDE_STATUS_PHASE));
1722	net2272_write(dev, EP_CFG, 1 << ENDPOINT_DIRECTION);
1723	net2272_write(dev, EP_STAT1, 1 << BUFFER_FLUSH);
1724
1725	/* wait for status phase to complete */
1726	while (!(net2272_read(dev, EP_STAT0) &
1727				(1 << DATA_PACKET_TRANSMITTED_INTERRUPT)))
1728		;
1729
1730	/* Enable test mode */
1731	net2272_write(dev, USBTEST, mode);
1732
1733	/* load test packet */
1734	if (mode == TEST_PACKET) {
1735		/* switch to 8 bit mode */
1736		net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) &
1737				~(1 << DATA_WIDTH));
1738
1739		for (i = 0; i < sizeof(net2272_test_packet); ++i)
1740			net2272_write(dev, EP_DATA, net2272_test_packet[i]);
1741
1742		/* Validate test packet */
1743		net2272_write(dev, EP_TRANSFER0, 0);
1744	}
1745}
1746
1747static void
1748net2272_handle_stat0_irqs(struct net2272 *dev, u8 stat)
1749{
1750	struct net2272_ep *ep;
1751	u8 num, scratch;
1752
1753	/* starting a control request? */
1754	if (unlikely(stat & (1 << SETUP_PACKET_INTERRUPT))) {
1755		union {
1756			u8 raw[8];
1757			struct usb_ctrlrequest	r;
1758		} u;
1759		int tmp = 0;
1760		struct net2272_request *req;
1761
1762		if (dev->gadget.speed == USB_SPEED_UNKNOWN) {
1763			if (net2272_read(dev, USBCTL1) & (1 << USB_HIGH_SPEED))
1764				dev->gadget.speed = USB_SPEED_HIGH;
1765			else
1766				dev->gadget.speed = USB_SPEED_FULL;
1767			dev_dbg(dev->dev, "%s speed\n",
1768				(dev->gadget.speed == USB_SPEED_HIGH) ? "high" : "full");
1769		}
1770
1771		ep = &dev->ep[0];
1772		ep->irqs++;
1773
1774		/* make sure any leftover interrupt state is cleared */
1775		stat &= ~(1 << ENDPOINT_0_INTERRUPT);
1776		while (!list_empty(&ep->queue)) {
1777			req = list_entry(ep->queue.next,
1778				struct net2272_request, queue);
1779			net2272_done(ep, req,
1780				(req->req.actual == req->req.length) ? 0 : -EPROTO);
1781		}
1782		ep->stopped = 0;
1783		dev->protocol_stall = 0;
1784		net2272_ep_write(ep, EP_STAT0,
1785			    (1 << DATA_IN_TOKEN_INTERRUPT)
1786			  | (1 << DATA_OUT_TOKEN_INTERRUPT)
1787			  | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)
1788			  | (1 << DATA_PACKET_RECEIVED_INTERRUPT)
1789			  | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT));
1790		net2272_ep_write(ep, EP_STAT1,
1791			    (1 << TIMEOUT)
1792			  | (1 << USB_OUT_ACK_SENT)
1793			  | (1 << USB_OUT_NAK_SENT)
1794			  | (1 << USB_IN_ACK_RCVD)
1795			  | (1 << USB_IN_NAK_SENT)
1796			  | (1 << USB_STALL_SENT)
1797			  | (1 << LOCAL_OUT_ZLP));
1798
1799		/*
1800		 * Ensure Control Read pre-validation setting is beyond maximum size
1801		 *  - Control Writes can leave non-zero values in EP_TRANSFER. If
1802		 *    an EP0 transfer following the Control Write is a Control Read,
1803		 *    the NET2272 sees the non-zero EP_TRANSFER as an unexpected
1804		 *    pre-validation count.
1805		 *  - Setting EP_TRANSFER beyond the maximum EP0 transfer size ensures
1806		 *    the pre-validation count cannot cause an unexpected validatation
1807		 */
1808		net2272_write(dev, PAGESEL, 0);
1809		net2272_write(dev, EP_TRANSFER2, 0xff);
1810		net2272_write(dev, EP_TRANSFER1, 0xff);
1811		net2272_write(dev, EP_TRANSFER0, 0xff);
1812
1813		u.raw[0] = net2272_read(dev, SETUP0);
1814		u.raw[1] = net2272_read(dev, SETUP1);
1815		u.raw[2] = net2272_read(dev, SETUP2);
1816		u.raw[3] = net2272_read(dev, SETUP3);
1817		u.raw[4] = net2272_read(dev, SETUP4);
1818		u.raw[5] = net2272_read(dev, SETUP5);
1819		u.raw[6] = net2272_read(dev, SETUP6);
1820		u.raw[7] = net2272_read(dev, SETUP7);
1821		/*
1822		 * If you have a big endian cpu make sure le16_to_cpus
1823		 * performs the proper byte swapping here...
1824		 */
1825		le16_to_cpus(&u.r.wValue);
1826		le16_to_cpus(&u.r.wIndex);
1827		le16_to_cpus(&u.r.wLength);
1828
1829		/* ack the irq */
1830		net2272_write(dev, IRQSTAT0, 1 << SETUP_PACKET_INTERRUPT);
1831		stat ^= (1 << SETUP_PACKET_INTERRUPT);
1832
1833		/* watch control traffic at the token level, and force
1834		 * synchronization before letting the status phase happen.
1835		 */
1836		ep->is_in = (u.r.bRequestType & USB_DIR_IN) != 0;
1837		if (ep->is_in) {
1838			scratch = (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE)
1839				| (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE)
1840				| (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE);
1841			stop_out_naking(ep);
1842		} else
1843			scratch = (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE)
1844				| (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE)
1845				| (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE);
1846		net2272_ep_write(ep, EP_IRQENB, scratch);
1847
1848		if ((u.r.bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD)
1849			goto delegate;
1850		switch (u.r.bRequest) {
1851		case USB_REQ_GET_STATUS: {
1852			struct net2272_ep *e;
1853			u16 status = 0;
1854
1855			switch (u.r.bRequestType & USB_RECIP_MASK) {
1856			case USB_RECIP_ENDPOINT:
1857				e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1858				if (!e || u.r.wLength > 2)
1859					goto do_stall;
1860				if (net2272_ep_read(e, EP_RSPSET) & (1 << ENDPOINT_HALT))
1861					status = __constant_cpu_to_le16(1);
1862				else
1863					status = __constant_cpu_to_le16(0);
1864
1865				/* don't bother with a request object! */
1866				net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
1867				writew(status, net2272_reg_addr(dev, EP_DATA));
1868				set_fifo_bytecount(&dev->ep[0], 0);
1869				allow_status(ep);
1870				dev_vdbg(dev->dev, "%s stat %02x\n",
1871					ep->ep.name, status);
1872				goto next_endpoints;
1873			case USB_RECIP_DEVICE:
1874				if (u.r.wLength > 2)
1875					goto do_stall;
1876				if (dev->is_selfpowered)
1877					status = (1 << USB_DEVICE_SELF_POWERED);
1878
1879				/* don't bother with a request object! */
1880				net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
1881				writew(status, net2272_reg_addr(dev, EP_DATA));
1882				set_fifo_bytecount(&dev->ep[0], 0);
1883				allow_status(ep);
1884				dev_vdbg(dev->dev, "device stat %02x\n", status);
1885				goto next_endpoints;
1886			case USB_RECIP_INTERFACE:
1887				if (u.r.wLength > 2)
1888					goto do_stall;
1889
1890				/* don't bother with a request object! */
1891				net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
1892				writew(status, net2272_reg_addr(dev, EP_DATA));
1893				set_fifo_bytecount(&dev->ep[0], 0);
1894				allow_status(ep);
1895				dev_vdbg(dev->dev, "interface status %02x\n", status);
1896				goto next_endpoints;
1897			}
1898
1899			break;
1900		}
1901		case USB_REQ_CLEAR_FEATURE: {
1902			struct net2272_ep *e;
1903
1904			if (u.r.bRequestType != USB_RECIP_ENDPOINT)
1905				goto delegate;
1906			if (u.r.wValue != USB_ENDPOINT_HALT ||
1907			    u.r.wLength != 0)
1908				goto do_stall;
1909			e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1910			if (!e)
1911				goto do_stall;
1912			if (e->wedged) {
1913				dev_vdbg(dev->dev, "%s wedged, halt not cleared\n",
1914					ep->ep.name);
1915			} else {
1916				dev_vdbg(dev->dev, "%s clear halt\n", ep->ep.name);
1917				clear_halt(e);
1918			}
1919			allow_status(ep);
1920			goto next_endpoints;
1921		}
1922		case USB_REQ_SET_FEATURE: {
1923			struct net2272_ep *e;
1924
1925			if (u.r.bRequestType == USB_RECIP_DEVICE) {
1926				if (u.r.wIndex != NORMAL_OPERATION)
1927					net2272_set_test_mode(dev, (u.r.wIndex >> 8));
1928				allow_status(ep);
1929				dev_vdbg(dev->dev, "test mode: %d\n", u.r.wIndex);
1930				goto next_endpoints;
1931			} else if (u.r.bRequestType != USB_RECIP_ENDPOINT)
1932				goto delegate;
1933			if (u.r.wValue != USB_ENDPOINT_HALT ||
1934			    u.r.wLength != 0)
1935				goto do_stall;
1936			e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1937			if (!e)
1938				goto do_stall;
1939			set_halt(e);
1940			allow_status(ep);
1941			dev_vdbg(dev->dev, "%s set halt\n", ep->ep.name);
1942			goto next_endpoints;
1943		}
1944		case USB_REQ_SET_ADDRESS: {
1945			net2272_write(dev, OURADDR, u.r.wValue & 0xff);
1946			allow_status(ep);
1947			break;
1948		}
1949		default:
1950 delegate:
1951			dev_vdbg(dev->dev, "setup %02x.%02x v%04x i%04x "
1952				"ep_cfg %08x\n",
1953				u.r.bRequestType, u.r.bRequest,
1954				u.r.wValue, u.r.wIndex,
1955				net2272_ep_read(ep, EP_CFG));
1956			spin_unlock(&dev->lock);
1957			tmp = dev->driver->setup(&dev->gadget, &u.r);
1958			spin_lock(&dev->lock);
1959		}
1960
1961		/* stall ep0 on error */
1962		if (tmp < 0) {
1963 do_stall:
1964			dev_vdbg(dev->dev, "req %02x.%02x protocol STALL; stat %d\n",
1965				u.r.bRequestType, u.r.bRequest, tmp);
1966			dev->protocol_stall = 1;
1967		}
1968	/* endpoint dma irq? */
1969	} else if (stat & (1 << DMA_DONE_INTERRUPT)) {
1970		net2272_cancel_dma(dev);
1971		net2272_write(dev, IRQSTAT0, 1 << DMA_DONE_INTERRUPT);
1972		stat &= ~(1 << DMA_DONE_INTERRUPT);
1973		num = (net2272_read(dev, DMAREQ) & (1 << DMA_ENDPOINT_SELECT))
1974			? 2 : 1;
1975
1976		ep = &dev->ep[num];
1977		net2272_handle_dma(ep);
1978	}
1979
1980 next_endpoints:
1981	/* endpoint data irq? */
1982	scratch = stat & 0x0f;
1983	stat &= ~0x0f;
1984	for (num = 0; scratch; num++) {
1985		u8 t;
1986
1987		/* does this endpoint's FIFO and queue need tending? */
1988		t = 1 << num;
1989		if ((scratch & t) == 0)
1990			continue;
1991		scratch ^= t;
1992
1993		ep = &dev->ep[num];
1994		net2272_handle_ep(ep);
1995	}
1996
1997	/* some interrupts we can just ignore */
1998	stat &= ~(1 << SOF_INTERRUPT);
1999
2000	if (stat)
2001		dev_dbg(dev->dev, "unhandled irqstat0 %02x\n", stat);
2002}
2003
2004static void
2005net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat)
2006{
2007	u8 tmp, mask;
2008
2009	/* after disconnect there's nothing else to do! */
2010	tmp = (1 << VBUS_INTERRUPT) | (1 << ROOT_PORT_RESET_INTERRUPT);
2011	mask = (1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED);
2012
2013	if (stat & tmp) {
2014		net2272_write(dev, IRQSTAT1, tmp);
2015		if ((((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) &&
2016				((net2272_read(dev, USBCTL1) & mask) == 0))
2017			|| ((net2272_read(dev, USBCTL1) & (1 << VBUS_PIN))
2018				== 0))
2019				&& (dev->gadget.speed != USB_SPEED_UNKNOWN)) {
2020			dev_dbg(dev->dev, "disconnect %s\n",
2021				dev->driver->driver.name);
2022			stop_activity(dev, dev->driver);
2023			net2272_ep0_start(dev);
2024			return;
2025		}
2026		stat &= ~tmp;
2027
2028		if (!stat)
2029			return;
2030	}
2031
2032	tmp = (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT);
2033	if (stat & tmp) {
2034		net2272_write(dev, IRQSTAT1, tmp);
2035		if (stat & (1 << SUSPEND_REQUEST_INTERRUPT)) {
2036			if (dev->driver->suspend)
2037				dev->driver->suspend(&dev->gadget);
2038			if (!enable_suspend) {
2039				stat &= ~(1 << SUSPEND_REQUEST_INTERRUPT);
2040				dev_dbg(dev->dev, "Suspend disabled, ignoring\n");
2041			}
2042		} else {
2043			if (dev->driver->resume)
2044				dev->driver->resume(&dev->gadget);
2045		}
2046		stat &= ~tmp;
2047	}
2048
2049	/* clear any other status/irqs */
2050	if (stat)
2051		net2272_write(dev, IRQSTAT1, stat);
2052
2053	/* some status we can just ignore */
2054	stat &= ~((1 << CONTROL_STATUS_INTERRUPT)
2055			| (1 << SUSPEND_REQUEST_INTERRUPT)
2056			| (1 << RESUME_INTERRUPT));
2057	if (!stat)
2058		return;
2059	else
2060		dev_dbg(dev->dev, "unhandled irqstat1 %02x\n", stat);
2061}
2062
2063static irqreturn_t net2272_irq(int irq, void *_dev)
2064{
2065	struct net2272 *dev = _dev;
2066#if defined(PLX_PCI_RDK) || defined(PLX_PCI_RDK2)
2067	u32 intcsr;
2068#endif
2069#if defined(PLX_PCI_RDK)
2070	u8 dmareq;
2071#endif
2072	spin_lock(&dev->lock);
2073#if defined(PLX_PCI_RDK)
2074	intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR);
2075
2076	if ((intcsr & LOCAL_INTERRUPT_TEST) == LOCAL_INTERRUPT_TEST) {
2077		writel(intcsr & ~(1 << PCI_INTERRUPT_ENABLE),
2078				dev->rdk1.plx9054_base_addr + INTCSR);
2079		net2272_handle_stat1_irqs(dev, net2272_read(dev, IRQSTAT1));
2080		net2272_handle_stat0_irqs(dev, net2272_read(dev, IRQSTAT0));
2081		intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR);
2082		writel(intcsr | (1 << PCI_INTERRUPT_ENABLE),
2083			dev->rdk1.plx9054_base_addr + INTCSR);
2084	}
2085	if ((intcsr & DMA_CHANNEL_0_TEST) == DMA_CHANNEL_0_TEST) {
2086		writeb((1 << CHANNEL_CLEAR_INTERRUPT | (0 << CHANNEL_ENABLE)),
2087				dev->rdk1.plx9054_base_addr + DMACSR0);
2088
2089		dmareq = net2272_read(dev, DMAREQ);
2090		if (dmareq & 0x01)
2091			net2272_handle_dma(&dev->ep[2]);
2092		else
2093			net2272_handle_dma(&dev->ep[1]);
2094	}
2095#endif
2096#if defined(PLX_PCI_RDK2)
2097	/* see if PCI int for us by checking irqstat */
2098	intcsr = readl(dev->rdk2.fpga_base_addr + RDK2_IRQSTAT);
2099	if (!intcsr & (1 << NET2272_PCI_IRQ))
2100		return IRQ_NONE;
2101	/* check dma interrupts */
2102#endif
2103	/* Platform/devcice interrupt handler */
2104#if !defined(PLX_PCI_RDK)
2105	net2272_handle_stat1_irqs(dev, net2272_read(dev, IRQSTAT1));
2106	net2272_handle_stat0_irqs(dev, net2272_read(dev, IRQSTAT0));
2107#endif
2108	spin_unlock(&dev->lock);
2109
2110	return IRQ_HANDLED;
2111}
2112
2113static int net2272_present(struct net2272 *dev)
2114{
2115	/*
2116	 * Quick test to see if CPU can communicate properly with the NET2272.
2117	 * Verifies connection using writes and reads to write/read and
2118	 * read-only registers.
2119	 *
2120	 * This routine is strongly recommended especially during early bring-up
2121	 * of new hardware, however for designs that do not apply Power On System
2122	 * Tests (POST) it may discarded (or perhaps minimized).
2123	 */
2124	unsigned int ii;
2125	u8 val, refval;
2126
2127	/* Verify NET2272 write/read SCRATCH register can write and read */
2128	refval = net2272_read(dev, SCRATCH);
2129	for (ii = 0; ii < 0x100; ii += 7) {
2130		net2272_write(dev, SCRATCH, ii);
2131		val = net2272_read(dev, SCRATCH);
2132		if (val != ii) {
2133			dev_dbg(dev->dev,
2134				"%s: write/read SCRATCH register test failed: "
2135				"wrote:0x%2.2x, read:0x%2.2x\n",
2136				__func__, ii, val);
2137			return -EINVAL;
2138		}
2139	}
2140	/* To be nice, we write the original SCRATCH value back: */
2141	net2272_write(dev, SCRATCH, refval);
2142
2143	/* Verify NET2272 CHIPREV register is read-only: */
2144	refval = net2272_read(dev, CHIPREV_2272);
2145	for (ii = 0; ii < 0x100; ii += 7) {
2146		net2272_write(dev, CHIPREV_2272, ii);
2147		val = net2272_read(dev, CHIPREV_2272);
2148		if (val != refval) {
2149			dev_dbg(dev->dev,
2150				"%s: write/read CHIPREV register test failed: "
2151				"wrote 0x%2.2x, read:0x%2.2x expected:0x%2.2x\n",
2152				__func__, ii, val, refval);
2153			return -EINVAL;
2154		}
2155	}
2156
2157	/*
2158	 * Verify NET2272's "NET2270 legacy revision" register
2159	 *  - NET2272 has two revision registers. The NET2270 legacy revision
2160	 *    register should read the same value, regardless of the NET2272
2161	 *    silicon revision.  The legacy register applies to NET2270
2162	 *    firmware being applied to the NET2272.
2163	 */
2164	val = net2272_read(dev, CHIPREV_LEGACY);
2165	if (val != NET2270_LEGACY_REV) {
2166		/*
2167		 * Unexpected legacy revision value
2168		 * - Perhaps the chip is a NET2270?
2169		 */
2170		dev_dbg(dev->dev,
2171			"%s: WARNING: UNEXPECTED NET2272 LEGACY REGISTER VALUE:\n"
2172			" - CHIPREV_LEGACY: expected 0x%2.2x, got:0x%2.2x. (Not NET2272?)\n",
2173			__func__, NET2270_LEGACY_REV, val);
2174		return -EINVAL;
2175	}
2176
2177	/*
2178	 * Verify NET2272 silicon revision
2179	 *  - This revision register is appropriate for the silicon version
2180	 *    of the NET2272
2181	 */
2182	val = net2272_read(dev, CHIPREV_2272);
2183	switch (val) {
2184	case CHIPREV_NET2272_R1:
2185		/*
2186		 * NET2272 Rev 1 has DMA related errata:
2187		 *  - Newer silicon (Rev 1A or better) required
2188		 */
2189		dev_dbg(dev->dev,
2190			"%s: Rev 1 detected: newer silicon recommended for DMA support\n",
2191			__func__);
2192		break;
2193	case CHIPREV_NET2272_R1A:
2194		break;
2195	default:
2196		/* NET2272 silicon version *may* not work with this firmware */
2197		dev_dbg(dev->dev,
2198			"%s: unexpected silicon revision register value: "
2199			" CHIPREV_2272: 0x%2.2x\n",
2200			__func__, val);
2201		/*
2202		 * Return Success, even though the chip rev is not an expected value
2203		 *  - Older, pre-built firmware can attempt to operate on newer silicon
2204		 *  - Often, new silicon is perfectly compatible
2205		 */
2206	}
2207
2208	/* Success: NET2272 checks out OK */
2209	return 0;
2210}
2211
2212static void
2213net2272_gadget_release(struct device *_dev)
2214{
2215	struct net2272 *dev = dev_get_drvdata(_dev);
2216	kfree(dev);
2217}
2218
2219/*---------------------------------------------------------------------------*/
2220
2221static void __devexit
2222net2272_remove(struct net2272 *dev)
2223{
2224	usb_del_gadget_udc(&dev->gadget);
2225
2226	/* start with the driver above us */
2227	if (dev->driver) {
2228		/* should have been done already by driver model core */
2229		dev_warn(dev->dev, "pci remove, driver '%s' is still registered\n",
2230			dev->driver->driver.name);
2231		usb_gadget_unregister_driver(dev->driver);
2232	}
2233
2234	free_irq(dev->irq, dev);
2235	iounmap(dev->base_addr);
2236
2237	device_unregister(&dev->gadget.dev);
2238	device_remove_file(dev->dev, &dev_attr_registers);
2239
2240	dev_info(dev->dev, "unbind\n");
2241	the_controller = NULL;
2242}
2243
2244static struct net2272 * __devinit
2245net2272_probe_init(struct device *dev, unsigned int irq)
2246{
2247	struct net2272 *ret;
2248
2249	if (the_controller) {
2250		dev_warn(dev, "ignoring\n");
2251		return ERR_PTR(-EBUSY);
2252	}
2253
2254	if (!irq) {
2255		dev_dbg(dev, "No IRQ!\n");
2256		return ERR_PTR(-ENODEV);
2257	}
2258
2259	/* alloc, and start init */
2260	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
2261	if (!ret)
2262		return ERR_PTR(-ENOMEM);
2263
2264	spin_lock_init(&ret->lock);
2265	ret->irq = irq;
2266	ret->dev = dev;
2267	ret->gadget.ops = &net2272_ops;
2268	ret->gadget.is_dualspeed = 1;
2269
2270	/* the "gadget" abstracts/virtualizes the controller */
2271	dev_set_name(&ret->gadget.dev, "gadget");
2272	ret->gadget.dev.parent = dev;
2273	ret->gadget.dev.dma_mask = dev->dma_mask;
2274	ret->gadget.dev.release = net2272_gadget_release;
2275	ret->gadget.name = driver_name;
2276
2277	return ret;
2278}
2279
2280static int __devinit
2281net2272_probe_fin(struct net2272 *dev, unsigned int irqflags)
2282{
2283	int ret;
2284
2285	/* See if there... */
2286	if (net2272_present(dev)) {
2287		dev_warn(dev->dev, "2272 not found!\n");
2288		ret = -ENODEV;
2289		goto err;
2290	}
2291
2292	net2272_usb_reset(dev);
2293	net2272_usb_reinit(dev);
2294
2295	ret = request_irq(dev->irq, net2272_irq, irqflags, driver_name, dev);
2296	if (ret) {
2297		dev_err(dev->dev, "request interrupt %i failed\n", dev->irq);
2298		goto err;
2299	}
2300
2301	dev->chiprev = net2272_read(dev, CHIPREV_2272);
2302
2303	/* done */
2304	dev_info(dev->dev, "%s\n", driver_desc);
2305	dev_info(dev->dev, "irq %i, mem %p, chip rev %04x, dma %s\n",
2306		dev->irq, dev->base_addr, dev->chiprev,
2307		dma_mode_string());
2308	dev_info(dev->dev, "version: %s\n", driver_vers);
2309
2310	the_controller = dev;
2311
2312	ret = device_register(&dev->gadget.dev);
2313	if (ret)
2314		goto err_irq;
2315	ret = device_create_file(dev->dev, &dev_attr_registers);
2316	if (ret)
2317		goto err_dev_reg;
2318
2319	ret = usb_add_gadget_udc(dev->dev, &dev->gadget);
2320	if (ret)
2321		goto err_add_udc;
2322
2323	return 0;
2324
2325err_add_udc:
2326	device_remove_file(dev->dev, &dev_attr_registers);
2327 err_dev_reg:
2328	device_unregister(&dev->gadget.dev);
2329 err_irq:
2330	free_irq(dev->irq, dev);
2331 err:
2332	return ret;
2333}
2334
2335#ifdef CONFIG_PCI
2336
2337/*
2338 * wrap this driver around the specified device, but
2339 * don't respond over USB until a gadget driver binds to us
2340 */
2341
2342static int __devinit
2343net2272_rdk1_probe(struct pci_dev *pdev, struct net2272 *dev)
2344{
2345	unsigned long resource, len, tmp;
2346	void __iomem *mem_mapped_addr[4];
2347	int ret, i;
2348
2349	/*
2350	 * BAR 0 holds PLX 9054 config registers
2351	 * BAR 1 is i/o memory; unused here
2352	 * BAR 2 holds EPLD config registers
2353	 * BAR 3 holds NET2272 registers
2354	 */
2355
2356	/* Find and map all address spaces */
2357	for (i = 0; i < 4; ++i) {
2358		if (i == 1)
2359			continue;	/* BAR1 unused */
2360
2361		resource = pci_resource_start(pdev, i);
2362		len = pci_resource_len(pdev, i);
2363
2364		if (!request_mem_region(resource, len, driver_name)) {
2365			dev_dbg(dev->dev, "controller already in use\n");
2366			ret = -EBUSY;
2367			goto err;
2368		}
2369
2370		mem_mapped_addr[i] = ioremap_nocache(resource, len);
2371		if (mem_mapped_addr[i] == NULL) {
2372			release_mem_region(resource, len);
2373			dev_dbg(dev->dev, "can't map memory\n");
2374			ret = -EFAULT;
2375			goto err;
2376		}
2377	}
2378
2379	dev->rdk1.plx9054_base_addr = mem_mapped_addr[0];
2380	dev->rdk1.epld_base_addr = mem_mapped_addr[2];
2381	dev->base_addr = mem_mapped_addr[3];
2382
2383	/* Set PLX 9054 bus width (16 bits) */
2384	tmp = readl(dev->rdk1.plx9054_base_addr + LBRD1);
2385	writel((tmp & ~(3 << MEMORY_SPACE_LOCAL_BUS_WIDTH)) | W16_BIT,
2386			dev->rdk1.plx9054_base_addr + LBRD1);
2387
2388	/* Enable PLX 9054 Interrupts */
2389	writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) |
2390			(1 << PCI_INTERRUPT_ENABLE) |
2391			(1 << LOCAL_INTERRUPT_INPUT_ENABLE),
2392			dev->rdk1.plx9054_base_addr + INTCSR);
2393
2394	writeb((1 << CHANNEL_CLEAR_INTERRUPT | (0 << CHANNEL_ENABLE)),
2395			dev->rdk1.plx9054_base_addr + DMACSR0);
2396
2397	/* reset */
2398	writeb((1 << EPLD_DMA_ENABLE) |
2399		(1 << DMA_CTL_DACK) |
2400		(1 << DMA_TIMEOUT_ENABLE) |
2401		(1 << USER) |
2402		(0 << MPX_MODE) |
2403		(1 << BUSWIDTH) |
2404		(1 << NET2272_RESET),
2405		dev->base_addr + EPLD_IO_CONTROL_REGISTER);
2406
2407	mb();
2408	writeb(readb(dev->base_addr + EPLD_IO_CONTROL_REGISTER) &
2409		~(1 << NET2272_RESET),
2410		dev->base_addr + EPLD_IO_CONTROL_REGISTER);
2411	udelay(200);
2412
2413	return 0;
2414
2415 err:
2416	while (--i >= 0) {
2417		iounmap(mem_mapped_addr[i]);
2418		release_mem_region(pci_resource_start(pdev, i),
2419			pci_resource_len(pdev, i));
2420	}
2421
2422	return ret;
2423}
2424
2425static int __devinit
2426net2272_rdk2_probe(struct pci_dev *pdev, struct net2272 *dev)
2427{
2428	unsigned long resource, len;
2429	void __iomem *mem_mapped_addr[2];
2430	int ret, i;
2431
2432	/*
2433	 * BAR 0 holds FGPA config registers
2434	 * BAR 1 holds NET2272 registers
2435	 */
2436
2437	/* Find and map all address spaces, bar2-3 unused in rdk 2 */
2438	for (i = 0; i < 2; ++i) {
2439		resource = pci_resource_start(pdev, i);
2440		len = pci_resource_len(pdev, i);
2441
2442		if (!request_mem_region(resource, len, driver_name)) {
2443			dev_dbg(dev->dev, "controller already in use\n");
2444			ret = -EBUSY;
2445			goto err;
2446		}
2447
2448		mem_mapped_addr[i] = ioremap_nocache(resource, len);
2449		if (mem_mapped_addr[i] == NULL) {
2450			release_mem_region(resource, len);
2451			dev_dbg(dev->dev, "can't map memory\n");
2452			ret = -EFAULT;
2453			goto err;
2454		}
2455	}
2456
2457	dev->rdk2.fpga_base_addr = mem_mapped_addr[0];
2458	dev->base_addr = mem_mapped_addr[1];
2459
2460	mb();
2461	/* Set 2272 bus width (16 bits) and reset */
2462	writel((1 << CHIP_RESET), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK);
2463	udelay(200);
2464	writel((1 << BUS_WIDTH), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK);
2465	/* Print fpga version number */
2466	dev_info(dev->dev, "RDK2 FPGA version %08x\n",
2467		readl(dev->rdk2.fpga_base_addr + RDK2_FPGAREV));
2468	/* Enable FPGA Interrupts */
2469	writel((1 << NET2272_PCI_IRQ), dev->rdk2.fpga_base_addr + RDK2_IRQENB);
2470
2471	return 0;
2472
2473 err:
2474	while (--i >= 0) {
2475		iounmap(mem_mapped_addr[i]);
2476		release_mem_region(pci_resource_start(pdev, i),
2477			pci_resource_len(pdev, i));
2478	}
2479
2480	return ret;
2481}
2482
2483static int __devinit
2484net2272_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2485{
2486	struct net2272 *dev;
2487	int ret;
2488
2489	dev = net2272_probe_init(&pdev->dev, pdev->irq);
2490	if (IS_ERR(dev))
2491		return PTR_ERR(dev);
2492	dev->dev_id = pdev->device;
2493
2494	if (pci_enable_device(pdev) < 0) {
2495		ret = -ENODEV;
2496		goto err_free;
2497	}
2498
2499	pci_set_master(pdev);
2500
2501	switch (pdev->device) {
2502	case PCI_DEVICE_ID_RDK1: ret = net2272_rdk1_probe(pdev, dev); break;
2503	case PCI_DEVICE_ID_RDK2: ret = net2272_rdk2_probe(pdev, dev); break;
2504	default: BUG();
2505	}
2506	if (ret)
2507		goto err_pci;
2508
2509	ret = net2272_probe_fin(dev, 0);
2510	if (ret)
2511		goto err_pci;
2512
2513	pci_set_drvdata(pdev, dev);
2514
2515	return 0;
2516
2517 err_pci:
2518	pci_disable_device(pdev);
2519 err_free:
2520	kfree(dev);
2521
2522	return ret;
2523}
2524
2525static void __devexit
2526net2272_rdk1_remove(struct pci_dev *pdev, struct net2272 *dev)
2527{
2528	int i;
2529
2530	/* disable PLX 9054 interrupts */
2531	writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) &
2532		~(1 << PCI_INTERRUPT_ENABLE),
2533		dev->rdk1.plx9054_base_addr + INTCSR);
2534
2535	/* clean up resources allocated during probe() */
2536	iounmap(dev->rdk1.plx9054_base_addr);
2537	iounmap(dev->rdk1.epld_base_addr);
2538
2539	for (i = 0; i < 4; ++i) {
2540		if (i == 1)
2541			continue;	/* BAR1 unused */
2542		release_mem_region(pci_resource_start(pdev, i),
2543			pci_resource_len(pdev, i));
2544	}
2545}
2546
2547static void __devexit
2548net2272_rdk2_remove(struct pci_dev *pdev, struct net2272 *dev)
2549{
2550	int i;
2551
2552	/* disable fpga interrupts
2553	writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) &
2554			~(1 << PCI_INTERRUPT_ENABLE),
2555			dev->rdk1.plx9054_base_addr + INTCSR);
2556	*/
2557
2558	/* clean up resources allocated during probe() */
2559	iounmap(dev->rdk2.fpga_base_addr);
2560
2561	for (i = 0; i < 2; ++i)
2562		release_mem_region(pci_resource_start(pdev, i),
2563			pci_resource_len(pdev, i));
2564}
2565
2566static void __devexit
2567net2272_pci_remove(struct pci_dev *pdev)
2568{
2569	struct net2272 *dev = pci_get_drvdata(pdev);
2570
2571	net2272_remove(dev);
2572
2573	switch (pdev->device) {
2574	case PCI_DEVICE_ID_RDK1: net2272_rdk1_remove(pdev, dev); break;
2575	case PCI_DEVICE_ID_RDK2: net2272_rdk2_remove(pdev, dev); break;
2576	default: BUG();
2577	}
2578
2579	pci_disable_device(pdev);
2580
2581	kfree(dev);
2582}
2583
2584/* Table of matching PCI IDs */
2585static struct pci_device_id __devinitdata pci_ids[] = {
2586	{	/* RDK 1 card */
2587		.class       = ((PCI_CLASS_BRIDGE_OTHER << 8) | 0xfe),
2588		.class_mask  = 0,
2589		.vendor      = PCI_VENDOR_ID_PLX,
2590		.device      = PCI_DEVICE_ID_RDK1,
2591		.subvendor   = PCI_ANY_ID,
2592		.subdevice   = PCI_ANY_ID,
2593	},
2594	{	/* RDK 2 card */
2595		.class       = ((PCI_CLASS_BRIDGE_OTHER << 8) | 0xfe),
2596		.class_mask  = 0,
2597		.vendor      = PCI_VENDOR_ID_PLX,
2598		.device      = PCI_DEVICE_ID_RDK2,
2599		.subvendor   = PCI_ANY_ID,
2600		.subdevice   = PCI_ANY_ID,
2601	},
2602	{ }
2603};
2604MODULE_DEVICE_TABLE(pci, pci_ids);
2605
2606static struct pci_driver net2272_pci_driver = {
2607	.name     = driver_name,
2608	.id_table = pci_ids,
2609
2610	.probe    = net2272_pci_probe,
2611	.remove   = __devexit_p(net2272_pci_remove),
2612};
2613
2614static int net2272_pci_register(void)
2615{
2616	return pci_register_driver(&net2272_pci_driver);
2617}
2618
2619static void net2272_pci_unregister(void)
2620{
2621	pci_unregister_driver(&net2272_pci_driver);
2622}
2623
2624#else
2625static inline int net2272_pci_register(void) { return 0; }
2626static inline void net2272_pci_unregister(void) { }
2627#endif
2628
2629/*---------------------------------------------------------------------------*/
2630
2631static int __devinit
2632net2272_plat_probe(struct platform_device *pdev)
2633{
2634	struct net2272 *dev;
2635	int ret;
2636	unsigned int irqflags;
2637	resource_size_t base, len;
2638	struct resource *iomem, *iomem_bus, *irq_res;
2639
2640	irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
2641	iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2642	iomem_bus = platform_get_resource(pdev, IORESOURCE_BUS, 0);
2643	if (!irq_res || !iomem) {
2644		dev_err(&pdev->dev, "must provide irq/base addr");
2645		return -EINVAL;
2646	}
2647
2648	dev = net2272_probe_init(&pdev->dev, irq_res->start);
2649	if (IS_ERR(dev))
2650		return PTR_ERR(dev);
2651
2652	irqflags = 0;
2653	if (irq_res->flags & IORESOURCE_IRQ_HIGHEDGE)
2654		irqflags |= IRQF_TRIGGER_RISING;
2655	if (irq_res->flags & IORESOURCE_IRQ_LOWEDGE)
2656		irqflags |= IRQF_TRIGGER_FALLING;
2657	if (irq_res->flags & IORESOURCE_IRQ_HIGHLEVEL)
2658		irqflags |= IRQF_TRIGGER_HIGH;
2659	if (irq_res->flags & IORESOURCE_IRQ_LOWLEVEL)
2660		irqflags |= IRQF_TRIGGER_LOW;
2661
2662	base = iomem->start;
2663	len = resource_size(iomem);
2664	if (iomem_bus)
2665		dev->base_shift = iomem_bus->start;
2666
2667	if (!request_mem_region(base, len, driver_name)) {
2668		dev_dbg(dev->dev, "get request memory region!\n");
2669		ret = -EBUSY;
2670		goto err;
2671	}
2672	dev->base_addr = ioremap_nocache(base, len);
2673	if (!dev->base_addr) {
2674		dev_dbg(dev->dev, "can't map memory\n");
2675		ret = -EFAULT;
2676		goto err_req;
2677	}
2678
2679	ret = net2272_probe_fin(dev, IRQF_TRIGGER_LOW);
2680	if (ret)
2681		goto err_io;
2682
2683	platform_set_drvdata(pdev, dev);
2684	dev_info(&pdev->dev, "running in 16-bit, %sbyte swap local bus mode\n",
2685		(net2272_read(dev, LOCCTL) & (1 << BYTE_SWAP)) ? "" : "no ");
2686
2687	the_controller = dev;
2688
2689	return 0;
2690
2691 err_io:
2692	iounmap(dev->base_addr);
2693 err_req:
2694	release_mem_region(base, len);
2695 err:
2696	return ret;
2697}
2698
2699static int __devexit
2700net2272_plat_remove(struct platform_device *pdev)
2701{
2702	struct net2272 *dev = platform_get_drvdata(pdev);
2703
2704	net2272_remove(dev);
2705
2706	release_mem_region(pdev->resource[0].start,
2707		resource_size(&pdev->resource[0]));
2708
2709	kfree(dev);
2710
2711	return 0;
2712}
2713
2714static struct platform_driver net2272_plat_driver = {
2715	.probe   = net2272_plat_probe,
2716	.remove  = __devexit_p(net2272_plat_remove),
2717	.driver  = {
2718		.name  = driver_name,
2719		.owner = THIS_MODULE,
2720	},
2721	/* FIXME .suspend, .resume */
2722};
2723MODULE_ALIAS("platform:net2272");
2724
2725static int __init net2272_init(void)
2726{
2727	int ret;
2728
2729	ret = net2272_pci_register();
2730	if (ret)
2731		return ret;
2732	ret = platform_driver_register(&net2272_plat_driver);
2733	if (ret)
2734		goto err_pci;
2735	return ret;
2736
2737err_pci:
2738	net2272_pci_unregister();
2739	return ret;
2740}
2741module_init(net2272_init);
2742
2743static void __exit net2272_cleanup(void)
2744{
2745	net2272_pci_unregister();
2746	platform_driver_unregister(&net2272_plat_driver);
2747}
2748module_exit(net2272_cleanup);
2749
2750MODULE_DESCRIPTION(DRIVER_DESC);
2751MODULE_AUTHOR("PLX Technology, Inc.");
2752MODULE_LICENSE("GPL");