linux/drivers/usb/gadget/ci13xxx_udc.c
<<
>>
Prefs
   1/*
   2 * ci13xxx_udc.c - MIPS USB IP core family device controller
   3 *
   4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
   5 *
   6 * Author: David Lopo
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13/*
  14 * Description: MIPS USB IP core family device controller
  15 *              Currently it only supports IP part number CI13412
  16 *
  17 * This driver is composed of several blocks:
  18 * - HW:     hardware interface
  19 * - DBG:    debug facilities (optional)
  20 * - UTIL:   utilities
  21 * - ISR:    interrupts handling
  22 * - ENDPT:  endpoint operations (Gadget API)
  23 * - GADGET: gadget operations (Gadget API)
  24 * - BUS:    bus glue code, bus abstraction layer
  25 * - PCI:    PCI core interface and PCI resources (interrupts, memory...)
  26 *
  27 * Compile Options
  28 * - CONFIG_USB_GADGET_DEBUG_FILES: enable debug facilities
  29 * - STALL_IN:  non-empty bulk-in pipes cannot be halted
  30 *              if defined mass storage compliance succeeds but with warnings
  31 *              => case 4: Hi >  Dn
  32 *              => case 5: Hi >  Di
  33 *              => case 8: Hi <> Do
  34 *              if undefined usbtest 13 fails
  35 * - TRACE:     enable function tracing (depends on DEBUG)
  36 *
  37 * Main Features
  38 * - Chapter 9 & Mass Storage Compliance with Gadget File Storage
  39 * - Chapter 9 Compliance with Gadget Zero (STALL_IN undefined)
  40 * - Normal & LPM support
  41 *
  42 * USBTEST Report
  43 * - OK: 0-12, 13 (STALL_IN defined) & 14
  44 * - Not Supported: 15 & 16 (ISO)
  45 *
  46 * TODO List
  47 * - OTG
  48 * - Isochronous & Interrupt Traffic
  49 * - Handle requests which spawns into several TDs
  50 * - GET_STATUS(device) - always reports 0
  51 * - Gadget API (majority of optional features)
  52 * - Suspend & Remote Wakeup
  53 */
  54#include <linux/delay.h>
  55#include <linux/device.h>
  56#include <linux/dmapool.h>
  57#include <linux/dma-mapping.h>
  58#include <linux/init.h>
  59#include <linux/interrupt.h>
  60#include <linux/io.h>
  61#include <linux/irq.h>
  62#include <linux/kernel.h>
  63#include <linux/module.h>
  64#include <linux/pci.h>
  65#include <linux/usb/ch9.h>
  66#include <linux/usb/gadget.h>
  67
  68#include "ci13xxx_udc.h"
  69
  70
  71/******************************************************************************
  72 * DEFINE
  73 *****************************************************************************/
  74/* ctrl register bank access */
  75static DEFINE_SPINLOCK(udc_lock);
  76
  77/* driver name */
  78#define UDC_DRIVER_NAME   "ci13xxx_udc"
  79
  80/* control endpoint description */
  81static const struct usb_endpoint_descriptor
  82ctrl_endpt_desc = {
  83        .bLength         = USB_DT_ENDPOINT_SIZE,
  84        .bDescriptorType = USB_DT_ENDPOINT,
  85
  86        .bmAttributes    = USB_ENDPOINT_XFER_CONTROL,
  87        .wMaxPacketSize  = cpu_to_le16(CTRL_PAYLOAD_MAX),
  88};
  89
  90/* UDC descriptor */
  91static struct ci13xxx *_udc;
  92
  93/* Interrupt statistics */
  94#define ISR_MASK   0x1F
  95static struct {
  96        u32 test;
  97        u32 ui;
  98        u32 uei;
  99        u32 pci;
 100        u32 uri;
 101        u32 sli;
 102        u32 none;
 103        struct {
 104                u32 cnt;
 105                u32 buf[ISR_MASK+1];
 106                u32 idx;
 107        } hndl;
 108} isr_statistics;
 109
 110/**
 111 * ffs_nr: find first (least significant) bit set
 112 * @x: the word to search
 113 *
 114 * This function returns bit number (instead of position)
 115 */
 116static int ffs_nr(u32 x)
 117{
 118        int n = ffs(x);
 119
 120        return n ? n-1 : 32;
 121}
 122
 123/******************************************************************************
 124 * HW block
 125 *****************************************************************************/
 126/* register bank descriptor */
 127static struct {
 128        unsigned      lpm;    /* is LPM? */
 129        void __iomem *abs;    /* bus map offset */
 130        void __iomem *cap;    /* bus map offset + CAP offset + CAP data */
 131        size_t        size;   /* bank size */
 132} hw_bank;
 133
 134/* UDC register map */
 135#define ABS_CAPLENGTH       (0x100UL)
 136#define ABS_HCCPARAMS       (0x108UL)
 137#define ABS_DCCPARAMS       (0x124UL)
 138#define ABS_TESTMODE        (hw_bank.lpm ? 0x0FCUL : 0x138UL)
 139/* offset to CAPLENTGH (addr + data) */
 140#define CAP_USBCMD          (0x000UL)
 141#define CAP_USBSTS          (0x004UL)
 142#define CAP_USBINTR         (0x008UL)
 143#define CAP_DEVICEADDR      (0x014UL)
 144#define CAP_ENDPTLISTADDR   (0x018UL)
 145#define CAP_PORTSC          (0x044UL)
 146#define CAP_DEVLC           (0x084UL)
 147#define CAP_USBMODE         (hw_bank.lpm ? 0x0C8UL : 0x068UL)
 148#define CAP_ENDPTSETUPSTAT  (hw_bank.lpm ? 0x0D8UL : 0x06CUL)
 149#define CAP_ENDPTPRIME      (hw_bank.lpm ? 0x0DCUL : 0x070UL)
 150#define CAP_ENDPTFLUSH      (hw_bank.lpm ? 0x0E0UL : 0x074UL)
 151#define CAP_ENDPTSTAT       (hw_bank.lpm ? 0x0E4UL : 0x078UL)
 152#define CAP_ENDPTCOMPLETE   (hw_bank.lpm ? 0x0E8UL : 0x07CUL)
 153#define CAP_ENDPTCTRL       (hw_bank.lpm ? 0x0ECUL : 0x080UL)
 154#define CAP_LAST            (hw_bank.lpm ? 0x12CUL : 0x0C0UL)
 155
 156/* maximum number of enpoints: valid only after hw_device_reset() */
 157static unsigned hw_ep_max;
 158
 159/**
 160 * hw_ep_bit: calculates the bit number
 161 * @num: endpoint number
 162 * @dir: endpoint direction
 163 *
 164 * This function returns bit number
 165 */
 166static inline int hw_ep_bit(int num, int dir)
 167{
 168        return num + (dir ? 16 : 0);
 169}
 170
 171/**
 172 * hw_aread: reads from register bitfield
 173 * @addr: address relative to bus map
 174 * @mask: bitfield mask
 175 *
 176 * This function returns register bitfield data
 177 */
 178static u32 hw_aread(u32 addr, u32 mask)
 179{
 180        return ioread32(addr + hw_bank.abs) & mask;
 181}
 182
 183/**
 184 * hw_awrite: writes to register bitfield
 185 * @addr: address relative to bus map
 186 * @mask: bitfield mask
 187 * @data: new data
 188 */
 189static void hw_awrite(u32 addr, u32 mask, u32 data)
 190{
 191        iowrite32(hw_aread(addr, ~mask) | (data & mask),
 192                  addr + hw_bank.abs);
 193}
 194
 195/**
 196 * hw_cread: reads from register bitfield
 197 * @addr: address relative to CAP offset plus content
 198 * @mask: bitfield mask
 199 *
 200 * This function returns register bitfield data
 201 */
 202static u32 hw_cread(u32 addr, u32 mask)
 203{
 204        return ioread32(addr + hw_bank.cap) & mask;
 205}
 206
 207/**
 208 * hw_cwrite: writes to register bitfield
 209 * @addr: address relative to CAP offset plus content
 210 * @mask: bitfield mask
 211 * @data: new data
 212 */
 213static void hw_cwrite(u32 addr, u32 mask, u32 data)
 214{
 215        iowrite32(hw_cread(addr, ~mask) | (data & mask),
 216                  addr + hw_bank.cap);
 217}
 218
 219/**
 220 * hw_ctest_and_clear: tests & clears register bitfield
 221 * @addr: address relative to CAP offset plus content
 222 * @mask: bitfield mask
 223 *
 224 * This function returns register bitfield data
 225 */
 226static u32 hw_ctest_and_clear(u32 addr, u32 mask)
 227{
 228        u32 reg = hw_cread(addr, mask);
 229
 230        iowrite32(reg, addr + hw_bank.cap);
 231        return reg;
 232}
 233
 234/**
 235 * hw_ctest_and_write: tests & writes register bitfield
 236 * @addr: address relative to CAP offset plus content
 237 * @mask: bitfield mask
 238 * @data: new data
 239 *
 240 * This function returns register bitfield data
 241 */
 242static u32 hw_ctest_and_write(u32 addr, u32 mask, u32 data)
 243{
 244        u32 reg = hw_cread(addr, ~0);
 245
 246        iowrite32((reg & ~mask) | (data & mask), addr + hw_bank.cap);
 247        return (reg & mask) >> ffs_nr(mask);
 248}
 249
 250/**
 251 * hw_device_reset: resets chip (execute without interruption)
 252 * @base: register base address
 253 *
 254 * This function returns an error code
 255 */
 256static int hw_device_reset(void __iomem *base)
 257{
 258        u32 reg;
 259
 260        /* bank is a module variable */
 261        hw_bank.abs = base;
 262
 263        hw_bank.cap = hw_bank.abs;
 264        hw_bank.cap += ABS_CAPLENGTH;
 265        hw_bank.cap += ioread8(hw_bank.cap);
 266
 267        reg = hw_aread(ABS_HCCPARAMS, HCCPARAMS_LEN) >> ffs_nr(HCCPARAMS_LEN);
 268        hw_bank.lpm  = reg;
 269        hw_bank.size = hw_bank.cap - hw_bank.abs;
 270        hw_bank.size += CAP_LAST;
 271        hw_bank.size /= sizeof(u32);
 272
 273        /* should flush & stop before reset */
 274        hw_cwrite(CAP_ENDPTFLUSH, ~0, ~0);
 275        hw_cwrite(CAP_USBCMD, USBCMD_RS, 0);
 276
 277        hw_cwrite(CAP_USBCMD, USBCMD_RST, USBCMD_RST);
 278        while (hw_cread(CAP_USBCMD, USBCMD_RST))
 279                udelay(10);             /* not RTOS friendly */
 280
 281        /* USBMODE should be configured step by step */
 282        hw_cwrite(CAP_USBMODE, USBMODE_CM, USBMODE_CM_IDLE);
 283        hw_cwrite(CAP_USBMODE, USBMODE_CM, USBMODE_CM_DEVICE);
 284        hw_cwrite(CAP_USBMODE, USBMODE_SLOM, USBMODE_SLOM);  /* HW >= 2.3 */
 285
 286        if (hw_cread(CAP_USBMODE, USBMODE_CM) != USBMODE_CM_DEVICE) {
 287                pr_err("cannot enter in device mode");
 288                pr_err("lpm = %i", hw_bank.lpm);
 289                return -ENODEV;
 290        }
 291
 292        reg = hw_aread(ABS_DCCPARAMS, DCCPARAMS_DEN) >> ffs_nr(DCCPARAMS_DEN);
 293        if (reg == 0 || reg > ENDPT_MAX)
 294                return -ENODEV;
 295
 296        hw_ep_max = reg;   /* cache hw ENDPT_MAX */
 297
 298        /* setup lock mode ? */
 299
 300        /* ENDPTSETUPSTAT is '0' by default */
 301
 302        /* HCSPARAMS.bf.ppc SHOULD BE zero for device */
 303
 304        return 0;
 305}
 306
 307/**
 308 * hw_device_state: enables/disables interrupts & starts/stops device (execute
 309 *                  without interruption)
 310 * @dma: 0 => disable, !0 => enable and set dma engine
 311 *
 312 * This function returns an error code
 313 */
 314static int hw_device_state(u32 dma)
 315{
 316        if (dma) {
 317                hw_cwrite(CAP_ENDPTLISTADDR, ~0, dma);
 318                /* interrupt, error, port change, reset, sleep/suspend */
 319                hw_cwrite(CAP_USBINTR, ~0,
 320                             USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
 321                hw_cwrite(CAP_USBCMD, USBCMD_RS, USBCMD_RS);
 322        } else {
 323                hw_cwrite(CAP_USBCMD, USBCMD_RS, 0);
 324                hw_cwrite(CAP_USBINTR, ~0, 0);
 325        }
 326        return 0;
 327}
 328
 329/**
 330 * hw_ep_flush: flush endpoint fifo (execute without interruption)
 331 * @num: endpoint number
 332 * @dir: endpoint direction
 333 *
 334 * This function returns an error code
 335 */
 336static int hw_ep_flush(int num, int dir)
 337{
 338        int n = hw_ep_bit(num, dir);
 339
 340        do {
 341                /* flush any pending transfer */
 342                hw_cwrite(CAP_ENDPTFLUSH, BIT(n), BIT(n));
 343                while (hw_cread(CAP_ENDPTFLUSH, BIT(n)))
 344                        cpu_relax();
 345        } while (hw_cread(CAP_ENDPTSTAT, BIT(n)));
 346
 347        return 0;
 348}
 349
 350/**
 351 * hw_ep_disable: disables endpoint (execute without interruption)
 352 * @num: endpoint number
 353 * @dir: endpoint direction
 354 *
 355 * This function returns an error code
 356 */
 357static int hw_ep_disable(int num, int dir)
 358{
 359        hw_ep_flush(num, dir);
 360        hw_cwrite(CAP_ENDPTCTRL + num * sizeof(u32),
 361                  dir ? ENDPTCTRL_TXE : ENDPTCTRL_RXE, 0);
 362        return 0;
 363}
 364
 365/**
 366 * hw_ep_enable: enables endpoint (execute without interruption)
 367 * @num:  endpoint number
 368 * @dir:  endpoint direction
 369 * @type: endpoint type
 370 *
 371 * This function returns an error code
 372 */
 373static int hw_ep_enable(int num, int dir, int type)
 374{
 375        u32 mask, data;
 376
 377        if (dir) {
 378                mask  = ENDPTCTRL_TXT;  /* type    */
 379                data  = type << ffs_nr(mask);
 380
 381                mask |= ENDPTCTRL_TXS;  /* unstall */
 382                mask |= ENDPTCTRL_TXR;  /* reset data toggle */
 383                data |= ENDPTCTRL_TXR;
 384                mask |= ENDPTCTRL_TXE;  /* enable  */
 385                data |= ENDPTCTRL_TXE;
 386        } else {
 387                mask  = ENDPTCTRL_RXT;  /* type    */
 388                data  = type << ffs_nr(mask);
 389
 390                mask |= ENDPTCTRL_RXS;  /* unstall */
 391                mask |= ENDPTCTRL_RXR;  /* reset data toggle */
 392                data |= ENDPTCTRL_RXR;
 393                mask |= ENDPTCTRL_RXE;  /* enable  */
 394                data |= ENDPTCTRL_RXE;
 395        }
 396        hw_cwrite(CAP_ENDPTCTRL + num * sizeof(u32), mask, data);
 397        return 0;
 398}
 399
 400/**
 401 * hw_ep_get_halt: return endpoint halt status
 402 * @num: endpoint number
 403 * @dir: endpoint direction
 404 *
 405 * This function returns 1 if endpoint halted
 406 */
 407static int hw_ep_get_halt(int num, int dir)
 408{
 409        u32 mask = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
 410
 411        return hw_cread(CAP_ENDPTCTRL + num * sizeof(u32), mask) ? 1 : 0;
 412}
 413
 414/**
 415 * hw_ep_is_primed: test if endpoint is primed (execute without interruption)
 416 * @num:   endpoint number
 417 * @dir:   endpoint direction
 418 *
 419 * This function returns true if endpoint primed
 420 */
 421static int hw_ep_is_primed(int num, int dir)
 422{
 423        u32 reg = hw_cread(CAP_ENDPTPRIME, ~0) | hw_cread(CAP_ENDPTSTAT, ~0);
 424
 425        return test_bit(hw_ep_bit(num, dir), (void *)&reg);
 426}
 427
 428/**
 429 * hw_test_and_clear_setup_status: test & clear setup status (execute without
 430 *                                 interruption)
 431 * @n: bit number (endpoint)
 432 *
 433 * This function returns setup status
 434 */
 435static int hw_test_and_clear_setup_status(int n)
 436{
 437        return hw_ctest_and_clear(CAP_ENDPTSETUPSTAT, BIT(n));
 438}
 439
 440/**
 441 * hw_ep_prime: primes endpoint (execute without interruption)
 442 * @num:     endpoint number
 443 * @dir:     endpoint direction
 444 * @is_ctrl: true if control endpoint
 445 *
 446 * This function returns an error code
 447 */
 448static int hw_ep_prime(int num, int dir, int is_ctrl)
 449{
 450        int n = hw_ep_bit(num, dir);
 451
 452        /* the caller should flush first */
 453        if (hw_ep_is_primed(num, dir))
 454                return -EBUSY;
 455
 456        if (is_ctrl && dir == RX && hw_cread(CAP_ENDPTSETUPSTAT, BIT(num)))
 457                return -EAGAIN;
 458
 459        hw_cwrite(CAP_ENDPTPRIME, BIT(n), BIT(n));
 460
 461        while (hw_cread(CAP_ENDPTPRIME, BIT(n)))
 462                cpu_relax();
 463        if (is_ctrl && dir == RX  && hw_cread(CAP_ENDPTSETUPSTAT, BIT(num)))
 464                return -EAGAIN;
 465
 466        /* status shoult be tested according with manual but it doesn't work */
 467        return 0;
 468}
 469
 470/**
 471 * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute
 472 *                 without interruption)
 473 * @num:   endpoint number
 474 * @dir:   endpoint direction
 475 * @value: true => stall, false => unstall
 476 *
 477 * This function returns an error code
 478 */
 479static int hw_ep_set_halt(int num, int dir, int value)
 480{
 481        if (value != 0 && value != 1)
 482                return -EINVAL;
 483
 484        do {
 485                u32 addr = CAP_ENDPTCTRL + num * sizeof(u32);
 486                u32 mask_xs = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
 487                u32 mask_xr = dir ? ENDPTCTRL_TXR : ENDPTCTRL_RXR;
 488
 489                /* data toggle - reserved for EP0 but it's in ESS */
 490                hw_cwrite(addr, mask_xs|mask_xr, value ? mask_xs : mask_xr);
 491
 492        } while (value != hw_ep_get_halt(num, dir));
 493
 494        return 0;
 495}
 496
 497/**
 498 * hw_intr_clear: disables interrupt & clears interrupt status (execute without
 499 *                interruption)
 500 * @n: interrupt bit
 501 *
 502 * This function returns an error code
 503 */
 504static int hw_intr_clear(int n)
 505{
 506        if (n >= REG_BITS)
 507                return -EINVAL;
 508
 509        hw_cwrite(CAP_USBINTR, BIT(n), 0);
 510        hw_cwrite(CAP_USBSTS,  BIT(n), BIT(n));
 511        return 0;
 512}
 513
 514/**
 515 * hw_intr_force: enables interrupt & forces interrupt status (execute without
 516 *                interruption)
 517 * @n: interrupt bit
 518 *
 519 * This function returns an error code
 520 */
 521static int hw_intr_force(int n)
 522{
 523        if (n >= REG_BITS)
 524                return -EINVAL;
 525
 526        hw_awrite(ABS_TESTMODE, TESTMODE_FORCE, TESTMODE_FORCE);
 527        hw_cwrite(CAP_USBINTR,  BIT(n), BIT(n));
 528        hw_cwrite(CAP_USBSTS,   BIT(n), BIT(n));
 529        hw_awrite(ABS_TESTMODE, TESTMODE_FORCE, 0);
 530        return 0;
 531}
 532
 533/**
 534 * hw_is_port_high_speed: test if port is high speed
 535 *
 536 * This function returns true if high speed port
 537 */
 538static int hw_port_is_high_speed(void)
 539{
 540        return hw_bank.lpm ? hw_cread(CAP_DEVLC, DEVLC_PSPD) :
 541                hw_cread(CAP_PORTSC, PORTSC_HSP);
 542}
 543
 544/**
 545 * hw_port_test_get: reads port test mode value
 546 *
 547 * This function returns port test mode value
 548 */
 549static u8 hw_port_test_get(void)
 550{
 551        return hw_cread(CAP_PORTSC, PORTSC_PTC) >> ffs_nr(PORTSC_PTC);
 552}
 553
 554/**
 555 * hw_port_test_set: writes port test mode (execute without interruption)
 556 * @mode: new value
 557 *
 558 * This function returns an error code
 559 */
 560static int hw_port_test_set(u8 mode)
 561{
 562        const u8 TEST_MODE_MAX = 7;
 563
 564        if (mode > TEST_MODE_MAX)
 565                return -EINVAL;
 566
 567        hw_cwrite(CAP_PORTSC, PORTSC_PTC, mode << ffs_nr(PORTSC_PTC));
 568        return 0;
 569}
 570
 571/**
 572 * hw_read_intr_enable: returns interrupt enable register
 573 *
 574 * This function returns register data
 575 */
 576static u32 hw_read_intr_enable(void)
 577{
 578        return hw_cread(CAP_USBINTR, ~0);
 579}
 580
 581/**
 582 * hw_read_intr_status: returns interrupt status register
 583 *
 584 * This function returns register data
 585 */
 586static u32 hw_read_intr_status(void)
 587{
 588        return hw_cread(CAP_USBSTS, ~0);
 589}
 590
 591/**
 592 * hw_register_read: reads all device registers (execute without interruption)
 593 * @buf:  destination buffer
 594 * @size: buffer size
 595 *
 596 * This function returns number of registers read
 597 */
 598static size_t hw_register_read(u32 *buf, size_t size)
 599{
 600        unsigned i;
 601
 602        if (size > hw_bank.size)
 603                size = hw_bank.size;
 604
 605        for (i = 0; i < size; i++)
 606                buf[i] = hw_aread(i * sizeof(u32), ~0);
 607
 608        return size;
 609}
 610
 611/**
 612 * hw_register_write: writes to register
 613 * @addr: register address
 614 * @data: register value
 615 *
 616 * This function returns an error code
 617 */
 618static int hw_register_write(u16 addr, u32 data)
 619{
 620        /* align */
 621        addr /= sizeof(u32);
 622
 623        if (addr >= hw_bank.size)
 624                return -EINVAL;
 625
 626        /* align */
 627        addr *= sizeof(u32);
 628
 629        hw_awrite(addr, ~0, data);
 630        return 0;
 631}
 632
 633/**
 634 * hw_test_and_clear_complete: test & clear complete status (execute without
 635 *                             interruption)
 636 * @n: bit number (endpoint)
 637 *
 638 * This function returns complete status
 639 */
 640static int hw_test_and_clear_complete(int n)
 641{
 642        return hw_ctest_and_clear(CAP_ENDPTCOMPLETE, BIT(n));
 643}
 644
 645/**
 646 * hw_test_and_clear_intr_active: test & clear active interrupts (execute
 647 *                                without interruption)
 648 *
 649 * This function returns active interrutps
 650 */
 651static u32 hw_test_and_clear_intr_active(void)
 652{
 653        u32 reg = hw_read_intr_status() & hw_read_intr_enable();
 654
 655        hw_cwrite(CAP_USBSTS, ~0, reg);
 656        return reg;
 657}
 658
 659/**
 660 * hw_test_and_clear_setup_guard: test & clear setup guard (execute without
 661 *                                interruption)
 662 *
 663 * This function returns guard value
 664 */
 665static int hw_test_and_clear_setup_guard(void)
 666{
 667        return hw_ctest_and_write(CAP_USBCMD, USBCMD_SUTW, 0);
 668}
 669
 670/**
 671 * hw_test_and_set_setup_guard: test & set setup guard (execute without
 672 *                              interruption)
 673 *
 674 * This function returns guard value
 675 */
 676static int hw_test_and_set_setup_guard(void)
 677{
 678        return hw_ctest_and_write(CAP_USBCMD, USBCMD_SUTW, USBCMD_SUTW);
 679}
 680
 681/**
 682 * hw_usb_set_address: configures USB address (execute without interruption)
 683 * @value: new USB address
 684 *
 685 * This function returns an error code
 686 */
 687static int hw_usb_set_address(u8 value)
 688{
 689        /* advance */
 690        hw_cwrite(CAP_DEVICEADDR, DEVICEADDR_USBADR | DEVICEADDR_USBADRA,
 691                  value << ffs_nr(DEVICEADDR_USBADR) | DEVICEADDR_USBADRA);
 692        return 0;
 693}
 694
 695/**
 696 * hw_usb_reset: restart device after a bus reset (execute without
 697 *               interruption)
 698 *
 699 * This function returns an error code
 700 */
 701static int hw_usb_reset(void)
 702{
 703        hw_usb_set_address(0);
 704
 705        /* ESS flushes only at end?!? */
 706        hw_cwrite(CAP_ENDPTFLUSH,    ~0, ~0);   /* flush all EPs */
 707
 708        /* clear setup token semaphores */
 709        hw_cwrite(CAP_ENDPTSETUPSTAT, 0,  0);   /* writes its content */
 710
 711        /* clear complete status */
 712        hw_cwrite(CAP_ENDPTCOMPLETE,  0,  0);   /* writes its content */
 713
 714        /* wait until all bits cleared */
 715        while (hw_cread(CAP_ENDPTPRIME, ~0))
 716                udelay(10);             /* not RTOS friendly */
 717
 718        /* reset all endpoints ? */
 719
 720        /* reset internal status and wait for further instructions
 721           no need to verify the port reset status (ESS does it) */
 722
 723        return 0;
 724}
 725
 726/******************************************************************************
 727 * DBG block
 728 *****************************************************************************/
 729/**
 730 * show_device: prints information about device capabilities and status
 731 *
 732 * Check "device.h" for details
 733 */
 734static ssize_t show_device(struct device *dev, struct device_attribute *attr,
 735                           char *buf)
 736{
 737        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
 738        struct usb_gadget *gadget = &udc->gadget;
 739        int n = 0;
 740
 741        dbg_trace("[%s] %p\n", __func__, buf);
 742        if (attr == NULL || buf == NULL) {
 743                dev_err(dev, "[%s] EINVAL\n", __func__);
 744                return 0;
 745        }
 746
 747        n += scnprintf(buf + n, PAGE_SIZE - n, "speed             = %d\n",
 748                       gadget->speed);
 749        n += scnprintf(buf + n, PAGE_SIZE - n, "is_dualspeed      = %d\n",
 750                       gadget->is_dualspeed);
 751        n += scnprintf(buf + n, PAGE_SIZE - n, "is_otg            = %d\n",
 752                       gadget->is_otg);
 753        n += scnprintf(buf + n, PAGE_SIZE - n, "is_a_peripheral   = %d\n",
 754                       gadget->is_a_peripheral);
 755        n += scnprintf(buf + n, PAGE_SIZE - n, "b_hnp_enable      = %d\n",
 756                       gadget->b_hnp_enable);
 757        n += scnprintf(buf + n, PAGE_SIZE - n, "a_hnp_support     = %d\n",
 758                       gadget->a_hnp_support);
 759        n += scnprintf(buf + n, PAGE_SIZE - n, "a_alt_hnp_support = %d\n",
 760                       gadget->a_alt_hnp_support);
 761        n += scnprintf(buf + n, PAGE_SIZE - n, "name              = %s\n",
 762                       (gadget->name ? gadget->name : ""));
 763
 764        return n;
 765}
 766static DEVICE_ATTR(device, S_IRUSR, show_device, NULL);
 767
 768/**
 769 * show_driver: prints information about attached gadget (if any)
 770 *
 771 * Check "device.h" for details
 772 */
 773static ssize_t show_driver(struct device *dev, struct device_attribute *attr,
 774                           char *buf)
 775{
 776        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
 777        struct usb_gadget_driver *driver = udc->driver;
 778        int n = 0;
 779
 780        dbg_trace("[%s] %p\n", __func__, buf);
 781        if (attr == NULL || buf == NULL) {
 782                dev_err(dev, "[%s] EINVAL\n", __func__);
 783                return 0;
 784        }
 785
 786        if (driver == NULL)
 787                return scnprintf(buf, PAGE_SIZE,
 788                                 "There is no gadget attached!\n");
 789
 790        n += scnprintf(buf + n, PAGE_SIZE - n, "function  = %s\n",
 791                       (driver->function ? driver->function : ""));
 792        n += scnprintf(buf + n, PAGE_SIZE - n, "max speed = %d\n",
 793                       driver->speed);
 794
 795        return n;
 796}
 797static DEVICE_ATTR(driver, S_IRUSR, show_driver, NULL);
 798
 799/* Maximum event message length */
 800#define DBG_DATA_MSG   64UL
 801
 802/* Maximum event messages */
 803#define DBG_DATA_MAX   128UL
 804
 805/* Event buffer descriptor */
 806static struct {
 807        char     (buf[DBG_DATA_MAX])[DBG_DATA_MSG];   /* buffer */
 808        unsigned idx;   /* index */
 809        unsigned tty;   /* print to console? */
 810        rwlock_t lck;   /* lock */
 811} dbg_data = {
 812        .idx = 0,
 813        .tty = 0,
 814        .lck = __RW_LOCK_UNLOCKED(lck)
 815};
 816
 817/**
 818 * dbg_dec: decrements debug event index
 819 * @idx: buffer index
 820 */
 821static void dbg_dec(unsigned *idx)
 822{
 823        *idx = (*idx - 1) & (DBG_DATA_MAX-1);
 824}
 825
 826/**
 827 * dbg_inc: increments debug event index
 828 * @idx: buffer index
 829 */
 830static void dbg_inc(unsigned *idx)
 831{
 832        *idx = (*idx + 1) & (DBG_DATA_MAX-1);
 833}
 834
 835/**
 836 * dbg_print:  prints the common part of the event
 837 * @addr:   endpoint address
 838 * @name:   event name
 839 * @status: status
 840 * @extra:  extra information
 841 */
 842static void dbg_print(u8 addr, const char *name, int status, const char *extra)
 843{
 844        struct timeval tval;
 845        unsigned int stamp;
 846        unsigned long flags;
 847
 848        write_lock_irqsave(&dbg_data.lck, flags);
 849
 850        do_gettimeofday(&tval);
 851        stamp = tval.tv_sec & 0xFFFF;   /* 2^32 = 4294967296. Limit to 4096s */
 852        stamp = stamp * 1000000 + tval.tv_usec;
 853
 854        scnprintf(dbg_data.buf[dbg_data.idx], DBG_DATA_MSG,
 855                  "%04X\t» %02X %-7.7s %4i «\t%s\n",
 856                  stamp, addr, name, status, extra);
 857
 858        dbg_inc(&dbg_data.idx);
 859
 860        write_unlock_irqrestore(&dbg_data.lck, flags);
 861
 862        if (dbg_data.tty != 0)
 863                pr_notice("%04X\t» %02X %-7.7s %4i «\t%s\n",
 864                          stamp, addr, name, status, extra);
 865}
 866
 867/**
 868 * dbg_done: prints a DONE event
 869 * @addr:   endpoint address
 870 * @td:     transfer descriptor
 871 * @status: status
 872 */
 873static void dbg_done(u8 addr, const u32 token, int status)
 874{
 875        char msg[DBG_DATA_MSG];
 876
 877        scnprintf(msg, sizeof(msg), "%d %02X",
 878                  (int)(token & TD_TOTAL_BYTES) >> ffs_nr(TD_TOTAL_BYTES),
 879                  (int)(token & TD_STATUS)      >> ffs_nr(TD_STATUS));
 880        dbg_print(addr, "DONE", status, msg);
 881}
 882
 883/**
 884 * dbg_event: prints a generic event
 885 * @addr:   endpoint address
 886 * @name:   event name
 887 * @status: status
 888 */
 889static void dbg_event(u8 addr, const char *name, int status)
 890{
 891        if (name != NULL)
 892                dbg_print(addr, name, status, "");
 893}
 894
 895/*
 896 * dbg_queue: prints a QUEUE event
 897 * @addr:   endpoint address
 898 * @req:    USB request
 899 * @status: status
 900 */
 901static void dbg_queue(u8 addr, const struct usb_request *req, int status)
 902{
 903        char msg[DBG_DATA_MSG];
 904
 905        if (req != NULL) {
 906                scnprintf(msg, sizeof(msg),
 907                          "%d %d", !req->no_interrupt, req->length);
 908                dbg_print(addr, "QUEUE", status, msg);
 909        }
 910}
 911
 912/**
 913 * dbg_setup: prints a SETUP event
 914 * @addr: endpoint address
 915 * @req:  setup request
 916 */
 917static void dbg_setup(u8 addr, const struct usb_ctrlrequest *req)
 918{
 919        char msg[DBG_DATA_MSG];
 920
 921        if (req != NULL) {
 922                scnprintf(msg, sizeof(msg),
 923                          "%02X %02X %04X %04X %d", req->bRequestType,
 924                          req->bRequest, le16_to_cpu(req->wValue),
 925                          le16_to_cpu(req->wIndex), le16_to_cpu(req->wLength));
 926                dbg_print(addr, "SETUP", 0, msg);
 927        }
 928}
 929
 930/**
 931 * show_events: displays the event buffer
 932 *
 933 * Check "device.h" for details
 934 */
 935static ssize_t show_events(struct device *dev, struct device_attribute *attr,
 936                           char *buf)
 937{
 938        unsigned long flags;
 939        unsigned i, j, n = 0;
 940
 941        dbg_trace("[%s] %p\n", __func__, buf);
 942        if (attr == NULL || buf == NULL) {
 943                dev_err(dev, "[%s] EINVAL\n", __func__);
 944                return 0;
 945        }
 946
 947        read_lock_irqsave(&dbg_data.lck, flags);
 948
 949        i = dbg_data.idx;
 950        for (dbg_dec(&i); i != dbg_data.idx; dbg_dec(&i)) {
 951                n += strlen(dbg_data.buf[i]);
 952                if (n >= PAGE_SIZE) {
 953                        n -= strlen(dbg_data.buf[i]);
 954                        break;
 955                }
 956        }
 957        for (j = 0, dbg_inc(&i); j < n; dbg_inc(&i))
 958                j += scnprintf(buf + j, PAGE_SIZE - j,
 959                               "%s", dbg_data.buf[i]);
 960
 961        read_unlock_irqrestore(&dbg_data.lck, flags);
 962
 963        return n;
 964}
 965
 966/**
 967 * store_events: configure if events are going to be also printed to console
 968 *
 969 * Check "device.h" for details
 970 */
 971static ssize_t store_events(struct device *dev, struct device_attribute *attr,
 972                            const char *buf, size_t count)
 973{
 974        unsigned tty;
 975
 976        dbg_trace("[%s] %p, %d\n", __func__, buf, count);
 977        if (attr == NULL || buf == NULL) {
 978                dev_err(dev, "[%s] EINVAL\n", __func__);
 979                goto done;
 980        }
 981
 982        if (sscanf(buf, "%u", &tty) != 1 || tty > 1) {
 983                dev_err(dev, "<1|0>: enable|disable console log\n");
 984                goto done;
 985        }
 986
 987        dbg_data.tty = tty;
 988        dev_info(dev, "tty = %u", dbg_data.tty);
 989
 990 done:
 991        return count;
 992}
 993static DEVICE_ATTR(events, S_IRUSR | S_IWUSR, show_events, store_events);
 994
 995/**
 996 * show_inters: interrupt status, enable status and historic
 997 *
 998 * Check "device.h" for details
 999 */
1000static ssize_t show_inters(struct device *dev, struct device_attribute *attr,
1001                           char *buf)
1002{
1003        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1004        unsigned long flags;
1005        u32 intr;
1006        unsigned i, j, n = 0;
1007
1008        dbg_trace("[%s] %p\n", __func__, buf);
1009        if (attr == NULL || buf == NULL) {
1010                dev_err(dev, "[%s] EINVAL\n", __func__);
1011                return 0;
1012        }
1013
1014        spin_lock_irqsave(udc->lock, flags);
1015
1016        n += scnprintf(buf + n, PAGE_SIZE - n,
1017                       "status = %08x\n", hw_read_intr_status());
1018        n += scnprintf(buf + n, PAGE_SIZE - n,
1019                       "enable = %08x\n", hw_read_intr_enable());
1020
1021        n += scnprintf(buf + n, PAGE_SIZE - n, "*test = %d\n",
1022                       isr_statistics.test);
1023        n += scnprintf(buf + n, PAGE_SIZE - n, "» ui  = %d\n",
1024                       isr_statistics.ui);
1025        n += scnprintf(buf + n, PAGE_SIZE - n, "» uei = %d\n",
1026                       isr_statistics.uei);
1027        n += scnprintf(buf + n, PAGE_SIZE - n, "» pci = %d\n",
1028                       isr_statistics.pci);
1029        n += scnprintf(buf + n, PAGE_SIZE - n, "» uri = %d\n",
1030                       isr_statistics.uri);
1031        n += scnprintf(buf + n, PAGE_SIZE - n, "» sli = %d\n",
1032                       isr_statistics.sli);
1033        n += scnprintf(buf + n, PAGE_SIZE - n, "*none = %d\n",
1034                       isr_statistics.none);
1035        n += scnprintf(buf + n, PAGE_SIZE - n, "*hndl = %d\n",
1036                       isr_statistics.hndl.cnt);
1037
1038        for (i = isr_statistics.hndl.idx, j = 0; j <= ISR_MASK; j++, i++) {
1039                i   &= ISR_MASK;
1040                intr = isr_statistics.hndl.buf[i];
1041
1042                if (USBi_UI  & intr)
1043                        n += scnprintf(buf + n, PAGE_SIZE - n, "ui  ");
1044                intr &= ~USBi_UI;
1045                if (USBi_UEI & intr)
1046                        n += scnprintf(buf + n, PAGE_SIZE - n, "uei ");
1047                intr &= ~USBi_UEI;
1048                if (USBi_PCI & intr)
1049                        n += scnprintf(buf + n, PAGE_SIZE - n, "pci ");
1050                intr &= ~USBi_PCI;
1051                if (USBi_URI & intr)
1052                        n += scnprintf(buf + n, PAGE_SIZE - n, "uri ");
1053                intr &= ~USBi_URI;
1054                if (USBi_SLI & intr)
1055                        n += scnprintf(buf + n, PAGE_SIZE - n, "sli ");
1056                intr &= ~USBi_SLI;
1057                if (intr)
1058                        n += scnprintf(buf + n, PAGE_SIZE - n, "??? ");
1059                if (isr_statistics.hndl.buf[i])
1060                        n += scnprintf(buf + n, PAGE_SIZE - n, "\n");
1061        }
1062
1063        spin_unlock_irqrestore(udc->lock, flags);
1064
1065        return n;
1066}
1067
1068/**
1069 * store_inters: enable & force or disable an individual interrutps
1070 *                   (to be used for test purposes only)
1071 *
1072 * Check "device.h" for details
1073 */
1074static ssize_t store_inters(struct device *dev, struct device_attribute *attr,
1075                            const char *buf, size_t count)
1076{
1077        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1078        unsigned long flags;
1079        unsigned en, bit;
1080
1081        dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1082        if (attr == NULL || buf == NULL) {
1083                dev_err(dev, "[%s] EINVAL\n", __func__);
1084                goto done;
1085        }
1086
1087        if (sscanf(buf, "%u %u", &en, &bit) != 2 || en > 1) {
1088                dev_err(dev, "<1|0> <bit>: enable|disable interrupt");
1089                goto done;
1090        }
1091
1092        spin_lock_irqsave(udc->lock, flags);
1093        if (en) {
1094                if (hw_intr_force(bit))
1095                        dev_err(dev, "invalid bit number\n");
1096                else
1097                        isr_statistics.test++;
1098        } else {
1099                if (hw_intr_clear(bit))
1100                        dev_err(dev, "invalid bit number\n");
1101        }
1102        spin_unlock_irqrestore(udc->lock, flags);
1103
1104 done:
1105        return count;
1106}
1107static DEVICE_ATTR(inters, S_IRUSR | S_IWUSR, show_inters, store_inters);
1108
1109/**
1110 * show_port_test: reads port test mode
1111 *
1112 * Check "device.h" for details
1113 */
1114static ssize_t show_port_test(struct device *dev,
1115                              struct device_attribute *attr, char *buf)
1116{
1117        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1118        unsigned long flags;
1119        unsigned mode;
1120
1121        dbg_trace("[%s] %p\n", __func__, buf);
1122        if (attr == NULL || buf == NULL) {
1123                dev_err(dev, "[%s] EINVAL\n", __func__);
1124                return 0;
1125        }
1126
1127        spin_lock_irqsave(udc->lock, flags);
1128        mode = hw_port_test_get();
1129        spin_unlock_irqrestore(udc->lock, flags);
1130
1131        return scnprintf(buf, PAGE_SIZE, "mode = %u\n", mode);
1132}
1133
1134/**
1135 * store_port_test: writes port test mode
1136 *
1137 * Check "device.h" for details
1138 */
1139static ssize_t store_port_test(struct device *dev,
1140                               struct device_attribute *attr,
1141                               const char *buf, size_t count)
1142{
1143        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1144        unsigned long flags;
1145        unsigned mode;
1146
1147        dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1148        if (attr == NULL || buf == NULL) {
1149                dev_err(dev, "[%s] EINVAL\n", __func__);
1150                goto done;
1151        }
1152
1153        if (sscanf(buf, "%u", &mode) != 1) {
1154                dev_err(dev, "<mode>: set port test mode");
1155                goto done;
1156        }
1157
1158        spin_lock_irqsave(udc->lock, flags);
1159        if (hw_port_test_set(mode))
1160                dev_err(dev, "invalid mode\n");
1161        spin_unlock_irqrestore(udc->lock, flags);
1162
1163 done:
1164        return count;
1165}
1166static DEVICE_ATTR(port_test, S_IRUSR | S_IWUSR,
1167                   show_port_test, store_port_test);
1168
1169/**
1170 * show_qheads: DMA contents of all queue heads
1171 *
1172 * Check "device.h" for details
1173 */
1174static ssize_t show_qheads(struct device *dev, struct device_attribute *attr,
1175                           char *buf)
1176{
1177        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1178        unsigned long flags;
1179        unsigned i, j, n = 0;
1180
1181        dbg_trace("[%s] %p\n", __func__, buf);
1182        if (attr == NULL || buf == NULL) {
1183                dev_err(dev, "[%s] EINVAL\n", __func__);
1184                return 0;
1185        }
1186
1187        spin_lock_irqsave(udc->lock, flags);
1188        for (i = 0; i < hw_ep_max; i++) {
1189                struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
1190                n += scnprintf(buf + n, PAGE_SIZE - n,
1191                               "EP=%02i: RX=%08X TX=%08X\n",
1192                               i, (u32)mEp->qh[RX].dma, (u32)mEp->qh[TX].dma);
1193                for (j = 0; j < (sizeof(struct ci13xxx_qh)/sizeof(u32)); j++) {
1194                        n += scnprintf(buf + n, PAGE_SIZE - n,
1195                                       " %04X:    %08X    %08X\n", j,
1196                                       *((u32 *)mEp->qh[RX].ptr + j),
1197                                       *((u32 *)mEp->qh[TX].ptr + j));
1198                }
1199        }
1200        spin_unlock_irqrestore(udc->lock, flags);
1201
1202        return n;
1203}
1204static DEVICE_ATTR(qheads, S_IRUSR, show_qheads, NULL);
1205
1206/**
1207 * show_registers: dumps all registers
1208 *
1209 * Check "device.h" for details
1210 */
1211static ssize_t show_registers(struct device *dev,
1212                              struct device_attribute *attr, char *buf)
1213{
1214        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1215        unsigned long flags;
1216        u32 dump[512];
1217        unsigned i, k, n = 0;
1218
1219        dbg_trace("[%s] %p\n", __func__, buf);
1220        if (attr == NULL || buf == NULL) {
1221                dev_err(dev, "[%s] EINVAL\n", __func__);
1222                return 0;
1223        }
1224
1225        spin_lock_irqsave(udc->lock, flags);
1226        k = hw_register_read(dump, sizeof(dump)/sizeof(u32));
1227        spin_unlock_irqrestore(udc->lock, flags);
1228
1229        for (i = 0; i < k; i++) {
1230                n += scnprintf(buf + n, PAGE_SIZE - n,
1231                               "reg[0x%04X] = 0x%08X\n",
1232                               i * (unsigned)sizeof(u32), dump[i]);
1233        }
1234
1235        return n;
1236}
1237
1238/**
1239 * store_registers: writes value to register address
1240 *
1241 * Check "device.h" for details
1242 */
1243static ssize_t store_registers(struct device *dev,
1244                               struct device_attribute *attr,
1245                               const char *buf, size_t count)
1246{
1247        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1248        unsigned long addr, data, flags;
1249
1250        dbg_trace("[%s] %p, %d\n", __func__, buf, count);
1251        if (attr == NULL || buf == NULL) {
1252                dev_err(dev, "[%s] EINVAL\n", __func__);
1253                goto done;
1254        }
1255
1256        if (sscanf(buf, "%li %li", &addr, &data) != 2) {
1257                dev_err(dev, "<addr> <data>: write data to register address");
1258                goto done;
1259        }
1260
1261        spin_lock_irqsave(udc->lock, flags);
1262        if (hw_register_write(addr, data))
1263                dev_err(dev, "invalid address range\n");
1264        spin_unlock_irqrestore(udc->lock, flags);
1265
1266 done:
1267        return count;
1268}
1269static DEVICE_ATTR(registers, S_IRUSR | S_IWUSR,
1270                   show_registers, store_registers);
1271
1272/**
1273 * show_requests: DMA contents of all requests currently queued (all endpts)
1274 *
1275 * Check "device.h" for details
1276 */
1277static ssize_t show_requests(struct device *dev, struct device_attribute *attr,
1278                             char *buf)
1279{
1280        struct ci13xxx *udc = container_of(dev, struct ci13xxx, gadget.dev);
1281        unsigned long flags;
1282        struct list_head   *ptr = NULL;
1283        struct ci13xxx_req *req = NULL;
1284        unsigned i, j, k, n = 0, qSize = sizeof(struct ci13xxx_td)/sizeof(u32);
1285
1286        dbg_trace("[%s] %p\n", __func__, buf);
1287        if (attr == NULL || buf == NULL) {
1288                dev_err(dev, "[%s] EINVAL\n", __func__);
1289                return 0;
1290        }
1291
1292        spin_lock_irqsave(udc->lock, flags);
1293        for (i = 0; i < hw_ep_max; i++)
1294                for (k = RX; k <= TX; k++)
1295                        list_for_each(ptr, &udc->ci13xxx_ep[i].qh[k].queue)
1296                        {
1297                                req = list_entry(ptr,
1298                                                 struct ci13xxx_req, queue);
1299
1300                                n += scnprintf(buf + n, PAGE_SIZE - n,
1301                                               "EP=%02i: TD=%08X %s\n",
1302                                               i, (u32)req->dma,
1303                                               ((k == RX) ? "RX" : "TX"));
1304
1305                                for (j = 0; j < qSize; j++)
1306                                        n += scnprintf(buf + n, PAGE_SIZE - n,
1307                                                       " %04X:    %08X\n", j,
1308                                                       *((u32 *)req->ptr + j));
1309                        }
1310        spin_unlock_irqrestore(udc->lock, flags);
1311
1312        return n;
1313}
1314static DEVICE_ATTR(requests, S_IRUSR, show_requests, NULL);
1315
1316/**
1317 * dbg_create_files: initializes the attribute interface
1318 * @dev: device
1319 *
1320 * This function returns an error code
1321 */
1322__maybe_unused static int dbg_create_files(struct device *dev)
1323{
1324        int retval = 0;
1325
1326        if (dev == NULL)
1327                return -EINVAL;
1328        retval = device_create_file(dev, &dev_attr_device);
1329        if (retval)
1330                goto done;
1331        retval = device_create_file(dev, &dev_attr_driver);
1332        if (retval)
1333                goto rm_device;
1334        retval = device_create_file(dev, &dev_attr_events);
1335        if (retval)
1336                goto rm_driver;
1337        retval = device_create_file(dev, &dev_attr_inters);
1338        if (retval)
1339                goto rm_events;
1340        retval = device_create_file(dev, &dev_attr_port_test);
1341        if (retval)
1342                goto rm_inters;
1343        retval = device_create_file(dev, &dev_attr_qheads);
1344        if (retval)
1345                goto rm_port_test;
1346        retval = device_create_file(dev, &dev_attr_registers);
1347        if (retval)
1348                goto rm_qheads;
1349        retval = device_create_file(dev, &dev_attr_requests);
1350        if (retval)
1351                goto rm_registers;
1352        return 0;
1353
1354 rm_registers:
1355        device_remove_file(dev, &dev_attr_registers);
1356 rm_qheads:
1357        device_remove_file(dev, &dev_attr_qheads);
1358 rm_port_test:
1359        device_remove_file(dev, &dev_attr_port_test);
1360 rm_inters:
1361        device_remove_file(dev, &dev_attr_inters);
1362 rm_events:
1363        device_remove_file(dev, &dev_attr_events);
1364 rm_driver:
1365        device_remove_file(dev, &dev_attr_driver);
1366 rm_device:
1367        device_remove_file(dev, &dev_attr_device);
1368 done:
1369        return retval;
1370}
1371
1372/**
1373 * dbg_remove_files: destroys the attribute interface
1374 * @dev: device
1375 *
1376 * This function returns an error code
1377 */
1378__maybe_unused static int dbg_remove_files(struct device *dev)
1379{
1380        if (dev == NULL)
1381                return -EINVAL;
1382        device_remove_file(dev, &dev_attr_requests);
1383        device_remove_file(dev, &dev_attr_registers);
1384        device_remove_file(dev, &dev_attr_qheads);
1385        device_remove_file(dev, &dev_attr_port_test);
1386        device_remove_file(dev, &dev_attr_inters);
1387        device_remove_file(dev, &dev_attr_events);
1388        device_remove_file(dev, &dev_attr_driver);
1389        device_remove_file(dev, &dev_attr_device);
1390        return 0;
1391}
1392
1393/******************************************************************************
1394 * UTIL block
1395 *****************************************************************************/
1396/**
1397 * _usb_addr: calculates endpoint address from direction & number
1398 * @ep:  endpoint
1399 */
1400static inline u8 _usb_addr(struct ci13xxx_ep *ep)
1401{
1402        return ((ep->dir == TX) ? USB_ENDPOINT_DIR_MASK : 0) | ep->num;
1403}
1404
1405/**
1406 * _hardware_queue: configures a request at hardware level
1407 * @gadget: gadget
1408 * @mEp:    endpoint
1409 *
1410 * This function returns an error code
1411 */
1412static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
1413{
1414        unsigned i;
1415
1416        trace("%p, %p", mEp, mReq);
1417
1418        /* don't queue twice */
1419        if (mReq->req.status == -EALREADY)
1420                return -EALREADY;
1421
1422        if (hw_ep_is_primed(mEp->num, mEp->dir))
1423                return -EBUSY;
1424
1425        mReq->req.status = -EALREADY;
1426
1427        if (mReq->req.length && !mReq->req.dma) {
1428                mReq->req.dma = \
1429                        dma_map_single(mEp->device, mReq->req.buf,
1430                                       mReq->req.length, mEp->dir ?
1431                                       DMA_TO_DEVICE : DMA_FROM_DEVICE);
1432                if (mReq->req.dma == 0)
1433                        return -ENOMEM;
1434
1435                mReq->map = 1;
1436        }
1437
1438        /*
1439         * TD configuration
1440         * TODO - handle requests which spawns into several TDs
1441         */
1442        memset(mReq->ptr, 0, sizeof(*mReq->ptr));
1443        mReq->ptr->next    |= TD_TERMINATE;
1444        mReq->ptr->token    = mReq->req.length << ffs_nr(TD_TOTAL_BYTES);
1445        mReq->ptr->token   &= TD_TOTAL_BYTES;
1446        mReq->ptr->token   |= TD_IOC;
1447        mReq->ptr->token   |= TD_STATUS_ACTIVE;
1448        mReq->ptr->page[0]  = mReq->req.dma;
1449        for (i = 1; i < 5; i++)
1450                mReq->ptr->page[i] =
1451                        (mReq->req.dma + i * PAGE_SIZE) & ~TD_RESERVED_MASK;
1452
1453        /*
1454         *  QH configuration
1455         *  At this point it's guaranteed exclusive access to qhead
1456         *  (endpt is not primed) so it's no need to use tripwire
1457         */
1458        mEp->qh[mEp->dir].ptr->td.next   = mReq->dma;    /* TERMINATE = 0 */
1459        mEp->qh[mEp->dir].ptr->td.token &= ~TD_STATUS;   /* clear status */
1460        if (mReq->req.zero == 0)
1461                mEp->qh[mEp->dir].ptr->cap |=  QH_ZLT;
1462        else
1463                mEp->qh[mEp->dir].ptr->cap &= ~QH_ZLT;
1464
1465        wmb();   /* synchronize before ep prime */
1466
1467        return hw_ep_prime(mEp->num, mEp->dir,
1468                           mEp->type == USB_ENDPOINT_XFER_CONTROL);
1469}
1470
1471/**
1472 * _hardware_dequeue: handles a request at hardware level
1473 * @gadget: gadget
1474 * @mEp:    endpoint
1475 *
1476 * This function returns an error code
1477 */
1478static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
1479{
1480        trace("%p, %p", mEp, mReq);
1481
1482        if (mReq->req.status != -EALREADY)
1483                return -EINVAL;
1484
1485        if (hw_ep_is_primed(mEp->num, mEp->dir))
1486                hw_ep_flush(mEp->num, mEp->dir);
1487
1488        mReq->req.status = 0;
1489
1490        if (mReq->map) {
1491                dma_unmap_single(mEp->device, mReq->req.dma, mReq->req.length,
1492                                 mEp->dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
1493                mReq->req.dma = 0;
1494                mReq->map     = 0;
1495        }
1496
1497        mReq->req.status = mReq->ptr->token & TD_STATUS;
1498        if      ((TD_STATUS_ACTIVE & mReq->req.status) != 0)
1499                mReq->req.status = -ECONNRESET;
1500        else if ((TD_STATUS_HALTED & mReq->req.status) != 0)
1501                mReq->req.status = -1;
1502        else if ((TD_STATUS_DT_ERR & mReq->req.status) != 0)
1503                mReq->req.status = -1;
1504        else if ((TD_STATUS_TR_ERR & mReq->req.status) != 0)
1505                mReq->req.status = -1;
1506
1507        mReq->req.actual   = mReq->ptr->token & TD_TOTAL_BYTES;
1508        mReq->req.actual >>= ffs_nr(TD_TOTAL_BYTES);
1509        mReq->req.actual   = mReq->req.length - mReq->req.actual;
1510        mReq->req.actual   = mReq->req.status ? 0 : mReq->req.actual;
1511
1512        return mReq->req.actual;
1513}
1514
1515/**
1516 * _ep_nuke: dequeues all endpoint requests
1517 * @mEp: endpoint
1518 *
1519 * This function returns an error code
1520 * Caller must hold lock
1521 */
1522static int _ep_nuke(struct ci13xxx_ep *mEp)
1523__releases(mEp->lock)
1524__acquires(mEp->lock)
1525{
1526        trace("%p", mEp);
1527
1528        if (mEp == NULL)
1529                return -EINVAL;
1530
1531        hw_ep_flush(mEp->num, mEp->dir);
1532
1533        while (!list_empty(&mEp->qh[mEp->dir].queue)) {
1534
1535                /* pop oldest request */
1536                struct ci13xxx_req *mReq = \
1537                        list_entry(mEp->qh[mEp->dir].queue.next,
1538                                   struct ci13xxx_req, queue);
1539                list_del_init(&mReq->queue);
1540                mReq->req.status = -ESHUTDOWN;
1541
1542                if (!mReq->req.no_interrupt && mReq->req.complete != NULL) {
1543                        spin_unlock(mEp->lock);
1544                        mReq->req.complete(&mEp->ep, &mReq->req);
1545                        spin_lock(mEp->lock);
1546                }
1547        }
1548        return 0;
1549}
1550
1551/**
1552 * _gadget_stop_activity: stops all USB activity, flushes & disables all endpts
1553 * @gadget: gadget
1554 *
1555 * This function returns an error code
1556 * Caller must hold lock
1557 */
1558static int _gadget_stop_activity(struct usb_gadget *gadget)
1559__releases(udc->lock)
1560__acquires(udc->lock)
1561{
1562        struct usb_ep *ep;
1563        struct ci13xxx    *udc = container_of(gadget, struct ci13xxx, gadget);
1564        struct ci13xxx_ep *mEp = container_of(gadget->ep0,
1565                                              struct ci13xxx_ep, ep);
1566
1567        trace("%p", gadget);
1568
1569        if (gadget == NULL)
1570                return -EINVAL;
1571
1572        spin_unlock(udc->lock);
1573
1574        /* flush all endpoints */
1575        gadget_for_each_ep(ep, gadget) {
1576                usb_ep_fifo_flush(ep);
1577        }
1578        usb_ep_fifo_flush(gadget->ep0);
1579
1580        udc->driver->disconnect(gadget);
1581
1582        /* make sure to disable all endpoints */
1583        gadget_for_each_ep(ep, gadget) {
1584                usb_ep_disable(ep);
1585        }
1586        usb_ep_disable(gadget->ep0);
1587
1588        if (mEp->status != NULL) {
1589                usb_ep_free_request(gadget->ep0, mEp->status);
1590                mEp->status = NULL;
1591        }
1592
1593        spin_lock(udc->lock);
1594
1595        return 0;
1596}
1597
1598/******************************************************************************
1599 * ISR block
1600 *****************************************************************************/
1601/**
1602 * isr_reset_handler: USB reset interrupt handler
1603 * @udc: UDC device
1604 *
1605 * This function resets USB engine after a bus reset occurred
1606 */
1607static void isr_reset_handler(struct ci13xxx *udc)
1608__releases(udc->lock)
1609__acquires(udc->lock)
1610{
1611        struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[0];
1612        int retval;
1613
1614        trace("%p", udc);
1615
1616        if (udc == NULL) {
1617                err("EINVAL");
1618                return;
1619        }
1620
1621        dbg_event(0xFF, "BUS RST", 0);
1622
1623        retval = _gadget_stop_activity(&udc->gadget);
1624        if (retval)
1625                goto done;
1626
1627        retval = hw_usb_reset();
1628        if (retval)
1629                goto done;
1630
1631        spin_unlock(udc->lock);
1632        retval = usb_ep_enable(&mEp->ep, &ctrl_endpt_desc);
1633        if (!retval) {
1634                mEp->status = usb_ep_alloc_request(&mEp->ep, GFP_KERNEL);
1635                if (mEp->status == NULL) {
1636                        usb_ep_disable(&mEp->ep);
1637                        retval = -ENOMEM;
1638                }
1639        }
1640        spin_lock(udc->lock);
1641
1642 done:
1643        if (retval)
1644                err("error: %i", retval);
1645}
1646
1647/**
1648 * isr_get_status_complete: get_status request complete function
1649 * @ep:  endpoint
1650 * @req: request handled
1651 *
1652 * Caller must release lock
1653 */
1654static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req)
1655{
1656        trace("%p, %p", ep, req);
1657
1658        if (ep == NULL || req == NULL) {
1659                err("EINVAL");
1660                return;
1661        }
1662
1663        kfree(req->buf);
1664        usb_ep_free_request(ep, req);
1665}
1666
1667/**
1668 * isr_get_status_response: get_status request response
1669 * @ep:    endpoint
1670 * @setup: setup request packet
1671 *
1672 * This function returns an error code
1673 */
1674static int isr_get_status_response(struct ci13xxx_ep *mEp,
1675                                   struct usb_ctrlrequest *setup)
1676__releases(mEp->lock)
1677__acquires(mEp->lock)
1678{
1679        struct usb_request *req = NULL;
1680        gfp_t gfp_flags = GFP_ATOMIC;
1681        int dir, num, retval;
1682
1683        trace("%p, %p", mEp, setup);
1684
1685        if (mEp == NULL || setup == NULL)
1686                return -EINVAL;
1687
1688        spin_unlock(mEp->lock);
1689        req = usb_ep_alloc_request(&mEp->ep, gfp_flags);
1690        spin_lock(mEp->lock);
1691        if (req == NULL)
1692                return -ENOMEM;
1693
1694        req->complete = isr_get_status_complete;
1695        req->length   = 2;
1696        req->buf      = kzalloc(req->length, gfp_flags);
1697        if (req->buf == NULL) {
1698                retval = -ENOMEM;
1699                goto err_free_req;
1700        }
1701
1702        if ((setup->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
1703                /* TODO: D1 - Remote Wakeup; D0 - Self Powered */
1704                retval = 0;
1705        } else if ((setup->bRequestType & USB_RECIP_MASK) \
1706                   == USB_RECIP_ENDPOINT) {
1707                dir = (le16_to_cpu(setup->wIndex) & USB_ENDPOINT_DIR_MASK) ?
1708                        TX : RX;
1709                num =  le16_to_cpu(setup->wIndex) & USB_ENDPOINT_NUMBER_MASK;
1710                *((u16 *)req->buf) = hw_ep_get_halt(num, dir);
1711        }
1712        /* else do nothing; reserved for future use */
1713
1714        spin_unlock(mEp->lock);
1715        retval = usb_ep_queue(&mEp->ep, req, gfp_flags);
1716        spin_lock(mEp->lock);
1717        if (retval)
1718                goto err_free_buf;
1719
1720        return 0;
1721
1722 err_free_buf:
1723        kfree(req->buf);
1724 err_free_req:
1725        spin_unlock(mEp->lock);
1726        usb_ep_free_request(&mEp->ep, req);
1727        spin_lock(mEp->lock);
1728        return retval;
1729}
1730
1731/**
1732 * isr_setup_status_phase: queues the status phase of a setup transation
1733 * @mEp: endpoint
1734 *
1735 * This function returns an error code
1736 */
1737static int isr_setup_status_phase(struct ci13xxx_ep *mEp)
1738__releases(mEp->lock)
1739__acquires(mEp->lock)
1740{
1741        int retval;
1742
1743        trace("%p", mEp);
1744
1745        /* mEp is always valid & configured */
1746
1747        if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1748                mEp->dir = (mEp->dir == TX) ? RX : TX;
1749
1750        mEp->status->no_interrupt = 1;
1751
1752        spin_unlock(mEp->lock);
1753        retval = usb_ep_queue(&mEp->ep, mEp->status, GFP_ATOMIC);
1754        spin_lock(mEp->lock);
1755
1756        return retval;
1757}
1758
1759/**
1760 * isr_tr_complete_low: transaction complete low level handler
1761 * @mEp: endpoint
1762 *
1763 * This function returns an error code
1764 * Caller must hold lock
1765 */
1766static int isr_tr_complete_low(struct ci13xxx_ep *mEp)
1767__releases(mEp->lock)
1768__acquires(mEp->lock)
1769{
1770        struct ci13xxx_req *mReq;
1771        int retval;
1772
1773        trace("%p", mEp);
1774
1775        if (list_empty(&mEp->qh[mEp->dir].queue))
1776                return -EINVAL;
1777
1778        /* pop oldest request */
1779        mReq = list_entry(mEp->qh[mEp->dir].queue.next,
1780                          struct ci13xxx_req, queue);
1781        list_del_init(&mReq->queue);
1782
1783        retval = _hardware_dequeue(mEp, mReq);
1784        if (retval < 0) {
1785                dbg_event(_usb_addr(mEp), "DONE", retval);
1786                goto done;
1787        }
1788
1789        dbg_done(_usb_addr(mEp), mReq->ptr->token, retval);
1790
1791        if (!mReq->req.no_interrupt && mReq->req.complete != NULL) {
1792                spin_unlock(mEp->lock);
1793                mReq->req.complete(&mEp->ep, &mReq->req);
1794                spin_lock(mEp->lock);
1795        }
1796
1797        if (!list_empty(&mEp->qh[mEp->dir].queue)) {
1798                mReq = list_entry(mEp->qh[mEp->dir].queue.next,
1799                                  struct ci13xxx_req, queue);
1800                _hardware_enqueue(mEp, mReq);
1801        }
1802
1803 done:
1804        return retval;
1805}
1806
1807/**
1808 * isr_tr_complete_handler: transaction complete interrupt handler
1809 * @udc: UDC descriptor
1810 *
1811 * This function handles traffic events
1812 */
1813static void isr_tr_complete_handler(struct ci13xxx *udc)
1814__releases(udc->lock)
1815__acquires(udc->lock)
1816{
1817        unsigned i;
1818
1819        trace("%p", udc);
1820
1821        if (udc == NULL) {
1822                err("EINVAL");
1823                return;
1824        }
1825
1826        for (i = 0; i < hw_ep_max; i++) {
1827                struct ci13xxx_ep *mEp  = &udc->ci13xxx_ep[i];
1828                int type, num, err = -EINVAL;
1829                struct usb_ctrlrequest req;
1830
1831
1832                if (mEp->desc == NULL)
1833                        continue;   /* not configured */
1834
1835                if ((mEp->dir == RX && hw_test_and_clear_complete(i)) ||
1836                    (mEp->dir == TX && hw_test_and_clear_complete(i + 16))) {
1837                        err = isr_tr_complete_low(mEp);
1838                        if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
1839                                if (err > 0)   /* needs status phase */
1840                                        err = isr_setup_status_phase(mEp);
1841                                if (err < 0) {
1842                                        dbg_event(_usb_addr(mEp),
1843                                                  "ERROR", err);
1844                                        spin_unlock(udc->lock);
1845                                        if (usb_ep_set_halt(&mEp->ep))
1846                                                err("error: ep_set_halt");
1847                                        spin_lock(udc->lock);
1848                                }
1849                        }
1850                }
1851
1852                if (mEp->type != USB_ENDPOINT_XFER_CONTROL ||
1853                    !hw_test_and_clear_setup_status(i))
1854                        continue;
1855
1856                if (i != 0) {
1857                        warn("ctrl traffic received at endpoint");
1858                        continue;
1859                }
1860
1861                /* read_setup_packet */
1862                do {
1863                        hw_test_and_set_setup_guard();
1864                        memcpy(&req, &mEp->qh[RX].ptr->setup, sizeof(req));
1865                } while (!hw_test_and_clear_setup_guard());
1866
1867                type = req.bRequestType;
1868
1869                mEp->dir = (type & USB_DIR_IN) ? TX : RX;
1870
1871                dbg_setup(_usb_addr(mEp), &req);
1872
1873                switch (req.bRequest) {
1874                case USB_REQ_CLEAR_FEATURE:
1875                        if (type != (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
1876                            le16_to_cpu(req.wValue) != USB_ENDPOINT_HALT)
1877                                goto delegate;
1878                        if (req.wLength != 0)
1879                                break;
1880                        num  = le16_to_cpu(req.wIndex);
1881                        num &= USB_ENDPOINT_NUMBER_MASK;
1882                        if (!udc->ci13xxx_ep[num].wedge) {
1883                                spin_unlock(udc->lock);
1884                                err = usb_ep_clear_halt(
1885                                        &udc->ci13xxx_ep[num].ep);
1886                                spin_lock(udc->lock);
1887                                if (err)
1888                                        break;
1889                        }
1890                        err = isr_setup_status_phase(mEp);
1891                        break;
1892                case USB_REQ_GET_STATUS:
1893                        if (type != (USB_DIR_IN|USB_RECIP_DEVICE)   &&
1894                            type != (USB_DIR_IN|USB_RECIP_ENDPOINT) &&
1895                            type != (USB_DIR_IN|USB_RECIP_INTERFACE))
1896                                goto delegate;
1897                        if (le16_to_cpu(req.wLength) != 2 ||
1898                            le16_to_cpu(req.wValue)  != 0)
1899                                break;
1900                        err = isr_get_status_response(mEp, &req);
1901                        break;
1902                case USB_REQ_SET_ADDRESS:
1903                        if (type != (USB_DIR_OUT|USB_RECIP_DEVICE))
1904                                goto delegate;
1905                        if (le16_to_cpu(req.wLength) != 0 ||
1906                            le16_to_cpu(req.wIndex)  != 0)
1907                                break;
1908                        err = hw_usb_set_address((u8)le16_to_cpu(req.wValue));
1909                        if (err)
1910                                break;
1911                        err = isr_setup_status_phase(mEp);
1912                        break;
1913                case USB_REQ_SET_FEATURE:
1914                        if (type != (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
1915                            le16_to_cpu(req.wValue) != USB_ENDPOINT_HALT)
1916                                goto delegate;
1917                        if (req.wLength != 0)
1918                                break;
1919                        num  = le16_to_cpu(req.wIndex);
1920                        num &= USB_ENDPOINT_NUMBER_MASK;
1921
1922                        spin_unlock(udc->lock);
1923                        err = usb_ep_set_halt(&udc->ci13xxx_ep[num].ep);
1924                        spin_lock(udc->lock);
1925                        if (err)
1926                                break;
1927                        err = isr_setup_status_phase(mEp);
1928                        break;
1929                default:
1930delegate:
1931                        if (req.wLength == 0)   /* no data phase */
1932                                mEp->dir = TX;
1933
1934                        spin_unlock(udc->lock);
1935                        err = udc->driver->setup(&udc->gadget, &req);
1936                        spin_lock(udc->lock);
1937                        break;
1938                }
1939
1940                if (err < 0) {
1941                        dbg_event(_usb_addr(mEp), "ERROR", err);
1942
1943                        spin_unlock(udc->lock);
1944                        if (usb_ep_set_halt(&mEp->ep))
1945                                err("error: ep_set_halt");
1946                        spin_lock(udc->lock);
1947                }
1948        }
1949}
1950
1951/******************************************************************************
1952 * ENDPT block
1953 *****************************************************************************/
1954/**
1955 * ep_enable: configure endpoint, making it usable
1956 *
1957 * Check usb_ep_enable() at "usb_gadget.h" for details
1958 */
1959static int ep_enable(struct usb_ep *ep,
1960                     const struct usb_endpoint_descriptor *desc)
1961{
1962        struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1963        int direction, retval = 0;
1964        unsigned long flags;
1965
1966        trace("%p, %p", ep, desc);
1967
1968        if (ep == NULL || desc == NULL)
1969                return -EINVAL;
1970
1971        spin_lock_irqsave(mEp->lock, flags);
1972
1973        /* only internal SW should enable ctrl endpts */
1974
1975        mEp->desc = desc;
1976
1977        if (!list_empty(&mEp->qh[mEp->dir].queue))
1978                warn("enabling a non-empty endpoint!");
1979
1980        mEp->dir  = usb_endpoint_dir_in(desc) ? TX : RX;
1981        mEp->num  = usb_endpoint_num(desc);
1982        mEp->type = usb_endpoint_type(desc);
1983
1984        mEp->ep.maxpacket = __constant_le16_to_cpu(desc->wMaxPacketSize);
1985
1986        direction = mEp->dir;
1987        do {
1988                dbg_event(_usb_addr(mEp), "ENABLE", 0);
1989
1990                mEp->qh[mEp->dir].ptr->cap = 0;
1991
1992                if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1993                        mEp->qh[mEp->dir].ptr->cap |=  QH_IOS;
1994                else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
1995                        mEp->qh[mEp->dir].ptr->cap &= ~QH_MULT;
1996                else
1997                        mEp->qh[mEp->dir].ptr->cap &= ~QH_ZLT;
1998
1999                mEp->qh[mEp->dir].ptr->cap |=
2000                        (mEp->ep.maxpacket << ffs_nr(QH_MAX_PKT)) & QH_MAX_PKT;
2001                mEp->qh[mEp->dir].ptr->td.next |= TD_TERMINATE;   /* needed? */
2002
2003                retval |= hw_ep_enable(mEp->num, mEp->dir, mEp->type);
2004
2005                if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
2006                        mEp->dir = (mEp->dir == TX) ? RX : TX;
2007
2008        } while (mEp->dir != direction);
2009
2010        spin_unlock_irqrestore(mEp->lock, flags);
2011        return retval;
2012}
2013
2014/**
2015 * ep_disable: endpoint is no longer usable
2016 *
2017 * Check usb_ep_disable() at "usb_gadget.h" for details
2018 */
2019static int ep_disable(struct usb_ep *ep)
2020{
2021        struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2022        int direction, retval = 0;
2023        unsigned long flags;
2024
2025        trace("%p", ep);
2026
2027        if (ep == NULL)
2028                return -EINVAL;
2029        else if (mEp->desc == NULL)
2030                return -EBUSY;
2031
2032        spin_lock_irqsave(mEp->lock, flags);
2033
2034        /* only internal SW should disable ctrl endpts */
2035
2036        direction = mEp->dir;
2037        do {
2038                dbg_event(_usb_addr(mEp), "DISABLE", 0);
2039
2040                retval |= _ep_nuke(mEp);
2041                retval |= hw_ep_disable(mEp->num, mEp->dir);
2042
2043                if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
2044                        mEp->dir = (mEp->dir == TX) ? RX : TX;
2045
2046        } while (mEp->dir != direction);
2047
2048        mEp->desc = NULL;
2049
2050        spin_unlock_irqrestore(mEp->lock, flags);
2051        return retval;
2052}
2053
2054/**
2055 * ep_alloc_request: allocate a request object to use with this endpoint
2056 *
2057 * Check usb_ep_alloc_request() at "usb_gadget.h" for details
2058 */
2059static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
2060{
2061        struct ci13xxx_ep  *mEp  = container_of(ep, struct ci13xxx_ep, ep);
2062        struct ci13xxx_req *mReq = NULL;
2063        unsigned long flags;
2064
2065        trace("%p, %i", ep, gfp_flags);
2066
2067        if (ep == NULL) {
2068                err("EINVAL");
2069                return NULL;
2070        }
2071
2072        spin_lock_irqsave(mEp->lock, flags);
2073
2074        mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags);
2075        if (mReq != NULL) {
2076                INIT_LIST_HEAD(&mReq->queue);
2077
2078                mReq->ptr = dma_pool_alloc(mEp->td_pool, gfp_flags,
2079                                           &mReq->dma);
2080                if (mReq->ptr == NULL) {
2081                        kfree(mReq);
2082                        mReq = NULL;
2083                }
2084        }
2085
2086        dbg_event(_usb_addr(mEp), "ALLOC", mReq == NULL);
2087
2088        spin_unlock_irqrestore(mEp->lock, flags);
2089
2090        return (mReq == NULL) ? NULL : &mReq->req;
2091}
2092
2093/**
2094 * ep_free_request: frees a request object
2095 *
2096 * Check usb_ep_free_request() at "usb_gadget.h" for details
2097 */
2098static void ep_free_request(struct usb_ep *ep, struct usb_request *req)
2099{
2100        struct ci13xxx_ep  *mEp  = container_of(ep,  struct ci13xxx_ep, ep);
2101        struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
2102        unsigned long flags;
2103
2104        trace("%p, %p", ep, req);
2105
2106        if (ep == NULL || req == NULL) {
2107                err("EINVAL");
2108                return;
2109        } else if (!list_empty(&mReq->queue)) {
2110                err("EBUSY");
2111                return;
2112        }
2113
2114        spin_lock_irqsave(mEp->lock, flags);
2115
2116        if (mReq->ptr)
2117                dma_pool_free(mEp->td_pool, mReq->ptr, mReq->dma);
2118        kfree(mReq);
2119
2120        dbg_event(_usb_addr(mEp), "FREE", 0);
2121
2122        spin_unlock_irqrestore(mEp->lock, flags);
2123}
2124
2125/**
2126 * ep_queue: queues (submits) an I/O request to an endpoint
2127 *
2128 * Check usb_ep_queue()* at usb_gadget.h" for details
2129 */
2130static int ep_queue(struct usb_ep *ep, struct usb_request *req,
2131                    gfp_t __maybe_unused gfp_flags)
2132{
2133        struct ci13xxx_ep  *mEp  = container_of(ep,  struct ci13xxx_ep, ep);
2134        struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
2135        int retval = 0;
2136        unsigned long flags;
2137
2138        trace("%p, %p, %X", ep, req, gfp_flags);
2139
2140        if (ep == NULL || req == NULL || mEp->desc == NULL)
2141                return -EINVAL;
2142
2143        spin_lock_irqsave(mEp->lock, flags);
2144
2145        if (mEp->type == USB_ENDPOINT_XFER_CONTROL &&
2146            !list_empty(&mEp->qh[mEp->dir].queue)) {
2147                _ep_nuke(mEp);
2148                retval = -EOVERFLOW;
2149                warn("endpoint ctrl %X nuked", _usb_addr(mEp));
2150        }
2151
2152        /* first nuke then test link, e.g. previous status has not sent */
2153        if (!list_empty(&mReq->queue)) {
2154                retval = -EBUSY;
2155                err("request already in queue");
2156                goto done;
2157        }
2158
2159        if (req->length > (4 * PAGE_SIZE)) {
2160                req->length = (4 * PAGE_SIZE);
2161                retval = -EMSGSIZE;
2162                warn("request length truncated");
2163        }
2164
2165        dbg_queue(_usb_addr(mEp), req, retval);
2166
2167        /* push request */
2168        mReq->req.status = -EINPROGRESS;
2169        mReq->req.actual = 0;
2170        list_add_tail(&mReq->queue, &mEp->qh[mEp->dir].queue);
2171
2172        retval = _hardware_enqueue(mEp, mReq);
2173        if (retval == -EALREADY || retval == -EBUSY) {
2174                dbg_event(_usb_addr(mEp), "QUEUE", retval);
2175                retval = 0;
2176        }
2177
2178 done:
2179        spin_unlock_irqrestore(mEp->lock, flags);
2180        return retval;
2181}
2182
2183/**
2184 * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint
2185 *
2186 * Check usb_ep_dequeue() at "usb_gadget.h" for details
2187 */
2188static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
2189{
2190        struct ci13xxx_ep  *mEp  = container_of(ep,  struct ci13xxx_ep, ep);
2191        struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
2192        unsigned long flags;
2193
2194        trace("%p, %p", ep, req);
2195
2196        if (ep == NULL || req == NULL || mEp->desc == NULL ||
2197            list_empty(&mReq->queue)  || list_empty(&mEp->qh[mEp->dir].queue))
2198                return -EINVAL;
2199
2200        spin_lock_irqsave(mEp->lock, flags);
2201
2202        dbg_event(_usb_addr(mEp), "DEQUEUE", 0);
2203
2204        if (mReq->req.status == -EALREADY)
2205                _hardware_dequeue(mEp, mReq);
2206
2207        /* pop request */
2208        list_del_init(&mReq->queue);
2209        req->status = -ECONNRESET;
2210
2211        if (!mReq->req.no_interrupt && mReq->req.complete != NULL) {
2212                spin_unlock(mEp->lock);
2213                mReq->req.complete(&mEp->ep, &mReq->req);
2214                spin_lock(mEp->lock);
2215        }
2216
2217        spin_unlock_irqrestore(mEp->lock, flags);
2218        return 0;
2219}
2220
2221/**
2222 * ep_set_halt: sets the endpoint halt feature
2223 *
2224 * Check usb_ep_set_halt() at "usb_gadget.h" for details
2225 */
2226static int ep_set_halt(struct usb_ep *ep, int value)
2227{
2228        struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2229        int direction, retval = 0;
2230        unsigned long flags;
2231
2232        trace("%p, %i", ep, value);
2233
2234        if (ep == NULL || mEp->desc == NULL)
2235                return -EINVAL;
2236
2237        spin_lock_irqsave(mEp->lock, flags);
2238
2239#ifndef STALL_IN
2240        /* g_file_storage MS compliant but g_zero fails chapter 9 compliance */
2241        if (value && mEp->type == USB_ENDPOINT_XFER_BULK && mEp->dir == TX &&
2242            !list_empty(&mEp->qh[mEp->dir].queue)) {
2243                spin_unlock_irqrestore(mEp->lock, flags);
2244                return -EAGAIN;
2245        }
2246#endif
2247
2248        direction = mEp->dir;
2249        do {
2250                dbg_event(_usb_addr(mEp), "HALT", value);
2251                retval |= hw_ep_set_halt(mEp->num, mEp->dir, value);
2252
2253                if (!value)
2254                        mEp->wedge = 0;
2255
2256                if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
2257                        mEp->dir = (mEp->dir == TX) ? RX : TX;
2258
2259        } while (mEp->dir != direction);
2260
2261        spin_unlock_irqrestore(mEp->lock, flags);
2262        return retval;
2263}
2264
2265/**
2266 * ep_set_wedge: sets the halt feature and ignores clear requests
2267 *
2268 * Check usb_ep_set_wedge() at "usb_gadget.h" for details
2269 */
2270static int ep_set_wedge(struct usb_ep *ep)
2271{
2272        struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2273        unsigned long flags;
2274
2275        trace("%p", ep);
2276
2277        if (ep == NULL || mEp->desc == NULL)
2278                return -EINVAL;
2279
2280        spin_lock_irqsave(mEp->lock, flags);
2281
2282        dbg_event(_usb_addr(mEp), "WEDGE", 0);
2283        mEp->wedge = 1;
2284
2285        spin_unlock_irqrestore(mEp->lock, flags);
2286
2287        return usb_ep_set_halt(ep);
2288}
2289
2290/**
2291 * ep_fifo_flush: flushes contents of a fifo
2292 *
2293 * Check usb_ep_fifo_flush() at "usb_gadget.h" for details
2294 */
2295static void ep_fifo_flush(struct usb_ep *ep)
2296{
2297        struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
2298        unsigned long flags;
2299
2300        trace("%p", ep);
2301
2302        if (ep == NULL) {
2303                err("%02X: -EINVAL", _usb_addr(mEp));
2304                return;
2305        }
2306
2307        spin_lock_irqsave(mEp->lock, flags);
2308
2309        dbg_event(_usb_addr(mEp), "FFLUSH", 0);
2310        hw_ep_flush(mEp->num, mEp->dir);
2311
2312        spin_unlock_irqrestore(mEp->lock, flags);
2313}
2314
2315/**
2316 * Endpoint-specific part of the API to the USB controller hardware
2317 * Check "usb_gadget.h" for details
2318 */
2319static const struct usb_ep_ops usb_ep_ops = {
2320        .enable        = ep_enable,
2321        .disable       = ep_disable,
2322        .alloc_request = ep_alloc_request,
2323        .free_request  = ep_free_request,
2324        .queue         = ep_queue,
2325        .dequeue       = ep_dequeue,
2326        .set_halt      = ep_set_halt,
2327        .set_wedge     = ep_set_wedge,
2328        .fifo_flush    = ep_fifo_flush,
2329};
2330
2331/******************************************************************************
2332 * GADGET block
2333 *****************************************************************************/
2334/**
2335 * Device operations part of the API to the USB controller hardware,
2336 * which don't involve endpoints (or i/o)
2337 * Check  "usb_gadget.h" for details
2338 */
2339static const struct usb_gadget_ops usb_gadget_ops;
2340
2341/**
2342 * usb_gadget_register_driver: register a gadget driver
2343 *
2344 * Check usb_gadget_register_driver() at "usb_gadget.h" for details
2345 * Interrupts are enabled here
2346 */
2347int usb_gadget_register_driver(struct usb_gadget_driver *driver)
2348{
2349        struct ci13xxx *udc = _udc;
2350        unsigned long i, k, flags;
2351        int retval = -ENOMEM;
2352
2353        trace("%p", driver);
2354
2355        if (driver             == NULL ||
2356            driver->bind       == NULL ||
2357            driver->unbind     == NULL ||
2358            driver->setup      == NULL ||
2359            driver->disconnect == NULL ||
2360            driver->suspend    == NULL ||
2361            driver->resume     == NULL)
2362                return -EINVAL;
2363        else if (udc         == NULL)
2364                return -ENODEV;
2365        else if (udc->driver != NULL)
2366                return -EBUSY;
2367
2368        /* alloc resources */
2369        udc->qh_pool = dma_pool_create("ci13xxx_qh", &udc->gadget.dev,
2370                                       sizeof(struct ci13xxx_qh),
2371                                       64, PAGE_SIZE);
2372        if (udc->qh_pool == NULL)
2373                return -ENOMEM;
2374
2375        udc->td_pool = dma_pool_create("ci13xxx_td", &udc->gadget.dev,
2376                                       sizeof(struct ci13xxx_td),
2377                                       64, PAGE_SIZE);
2378        if (udc->td_pool == NULL) {
2379                dma_pool_destroy(udc->qh_pool);
2380                udc->qh_pool = NULL;
2381                return -ENOMEM;
2382        }
2383
2384        spin_lock_irqsave(udc->lock, flags);
2385
2386        info("hw_ep_max = %d", hw_ep_max);
2387
2388        udc->driver = driver;
2389        udc->gadget.ops        = NULL;
2390        udc->gadget.dev.driver = NULL;
2391
2392        retval = 0;
2393        for (i = 0; i < hw_ep_max; i++) {
2394                struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
2395
2396                scnprintf(mEp->name, sizeof(mEp->name), "ep%i", (int)i);
2397
2398                mEp->lock         = udc->lock;
2399                mEp->device       = &udc->gadget.dev;
2400                mEp->td_pool      = udc->td_pool;
2401
2402                mEp->ep.name      = mEp->name;
2403                mEp->ep.ops       = &usb_ep_ops;
2404                mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
2405
2406                /* this allocation cannot be random */
2407                for (k = RX; k <= TX; k++) {
2408                        INIT_LIST_HEAD(&mEp->qh[k].queue);
2409                        mEp->qh[k].ptr = dma_pool_alloc(udc->qh_pool,
2410                                                        GFP_KERNEL,
2411                                                        &mEp->qh[k].dma);
2412                        if (mEp->qh[k].ptr == NULL)
2413                                retval = -ENOMEM;
2414                        else
2415                                memset(mEp->qh[k].ptr, 0,
2416                                       sizeof(*mEp->qh[k].ptr));
2417                }
2418                if (i == 0)
2419                        udc->gadget.ep0 = &mEp->ep;
2420                else
2421                        list_add_tail(&mEp->ep.ep_list, &udc->gadget.ep_list);
2422        }
2423        if (retval)
2424                goto done;
2425
2426        /* bind gadget */
2427        driver->driver.bus     = NULL;
2428        udc->gadget.ops        = &usb_gadget_ops;
2429        udc->gadget.dev.driver = &driver->driver;
2430
2431        spin_unlock_irqrestore(udc->lock, flags);
2432        retval = driver->bind(&udc->gadget);                /* MAY SLEEP */
2433        spin_lock_irqsave(udc->lock, flags);
2434
2435        if (retval) {
2436                udc->gadget.ops        = NULL;
2437                udc->gadget.dev.driver = NULL;
2438                goto done;
2439        }
2440
2441        retval = hw_device_state(udc->ci13xxx_ep[0].qh[RX].dma);
2442
2443 done:
2444        spin_unlock_irqrestore(udc->lock, flags);
2445        if (retval)
2446                usb_gadget_unregister_driver(driver);
2447        return retval;
2448}
2449EXPORT_SYMBOL(usb_gadget_register_driver);
2450
2451/**
2452 * usb_gadget_unregister_driver: unregister a gadget driver
2453 *
2454 * Check usb_gadget_unregister_driver() at "usb_gadget.h" for details
2455 */
2456int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
2457{
2458        struct ci13xxx *udc = _udc;
2459        unsigned long i, k, flags;
2460
2461        trace("%p", driver);
2462
2463        if (driver             == NULL ||
2464            driver->bind       == NULL ||
2465            driver->unbind     == NULL ||
2466            driver->setup      == NULL ||
2467            driver->disconnect == NULL ||
2468            driver->suspend    == NULL ||
2469            driver->resume     == NULL ||
2470            driver             != udc->driver)
2471                return -EINVAL;
2472
2473        spin_lock_irqsave(udc->lock, flags);
2474
2475        hw_device_state(0);
2476
2477        /* unbind gadget */
2478        if (udc->gadget.ops != NULL) {
2479                _gadget_stop_activity(&udc->gadget);
2480
2481                spin_unlock_irqrestore(udc->lock, flags);
2482                driver->unbind(&udc->gadget);               /* MAY SLEEP */
2483                spin_lock_irqsave(udc->lock, flags);
2484
2485                udc->gadget.ops        = NULL;
2486                udc->gadget.dev.driver = NULL;
2487        }
2488
2489        /* free resources */
2490        for (i = 0; i < hw_ep_max; i++) {
2491                struct ci13xxx_ep *mEp = &udc->ci13xxx_ep[i];
2492
2493                if (i == 0)
2494                        udc->gadget.ep0 = NULL;
2495                else if (!list_empty(&mEp->ep.ep_list))
2496                        list_del_init(&mEp->ep.ep_list);
2497
2498                for (k = RX; k <= TX; k++)
2499                        if (mEp->qh[k].ptr != NULL)
2500                                dma_pool_free(udc->qh_pool,
2501                                              mEp->qh[k].ptr, mEp->qh[k].dma);
2502        }
2503
2504        udc->driver = NULL;
2505
2506        spin_unlock_irqrestore(udc->lock, flags);
2507
2508        if (udc->td_pool != NULL) {
2509                dma_pool_destroy(udc->td_pool);
2510                udc->td_pool = NULL;
2511        }
2512        if (udc->qh_pool != NULL) {
2513                dma_pool_destroy(udc->qh_pool);
2514                udc->qh_pool = NULL;
2515        }
2516
2517        return 0;
2518}
2519EXPORT_SYMBOL(usb_gadget_unregister_driver);
2520
2521/******************************************************************************
2522 * BUS block
2523 *****************************************************************************/
2524/**
2525 * udc_irq: global interrupt handler
2526 *
2527 * This function returns IRQ_HANDLED if the IRQ has been handled
2528 * It locks access to registers
2529 */
2530static irqreturn_t udc_irq(void)
2531{
2532        struct ci13xxx *udc = _udc;
2533        irqreturn_t retval;
2534        u32 intr;
2535
2536        trace();
2537
2538        if (udc == NULL) {
2539                err("ENODEV");
2540                return IRQ_HANDLED;
2541        }
2542
2543        spin_lock(udc->lock);
2544        intr = hw_test_and_clear_intr_active();
2545        if (intr) {
2546                isr_statistics.hndl.buf[isr_statistics.hndl.idx++] = intr;
2547                isr_statistics.hndl.idx &= ISR_MASK;
2548                isr_statistics.hndl.cnt++;
2549
2550                /* order defines priority - do NOT change it */
2551                if (USBi_URI & intr) {
2552                        isr_statistics.uri++;
2553                        isr_reset_handler(udc);
2554                }
2555                if (USBi_PCI & intr) {
2556                        isr_statistics.pci++;
2557                        udc->gadget.speed = hw_port_is_high_speed() ?
2558                                USB_SPEED_HIGH : USB_SPEED_FULL;
2559                }
2560                if (USBi_UEI & intr)
2561                        isr_statistics.uei++;
2562                if (USBi_UI  & intr) {
2563                        isr_statistics.ui++;
2564                        isr_tr_complete_handler(udc);
2565                }
2566                if (USBi_SLI & intr)
2567                        isr_statistics.sli++;
2568                retval = IRQ_HANDLED;
2569        } else {
2570                isr_statistics.none++;
2571                retval = IRQ_NONE;
2572        }
2573        spin_unlock(udc->lock);
2574
2575        return retval;
2576}
2577
2578/**
2579 * udc_release: driver release function
2580 * @dev: device
2581 *
2582 * Currently does nothing
2583 */
2584static void udc_release(struct device *dev)
2585{
2586        trace("%p", dev);
2587
2588        if (dev == NULL)
2589                err("EINVAL");
2590}
2591
2592/**
2593 * udc_probe: parent probe must call this to initialize UDC
2594 * @dev:  parent device
2595 * @regs: registers base address
2596 * @name: driver name
2597 *
2598 * This function returns an error code
2599 * No interrupts active, the IRQ has not been requested yet
2600 * Kernel assumes 32-bit DMA operations by default, no need to dma_set_mask
2601 */
2602static int udc_probe(struct device *dev, void __iomem *regs, const char *name)
2603{
2604        struct ci13xxx *udc;
2605        int retval = 0;
2606
2607        trace("%p, %p, %p", dev, regs, name);
2608
2609        if (dev == NULL || regs == NULL || name == NULL)
2610                return -EINVAL;
2611
2612        udc = kzalloc(sizeof(struct ci13xxx), GFP_KERNEL);
2613        if (udc == NULL)
2614                return -ENOMEM;
2615
2616        udc->lock = &udc_lock;
2617
2618        retval = hw_device_reset(regs);
2619        if (retval)
2620                goto done;
2621
2622        udc->gadget.ops          = NULL;
2623        udc->gadget.speed        = USB_SPEED_UNKNOWN;
2624        udc->gadget.is_dualspeed = 1;
2625        udc->gadget.is_otg       = 0;
2626        udc->gadget.name         = name;
2627
2628        INIT_LIST_HEAD(&udc->gadget.ep_list);
2629        udc->gadget.ep0 = NULL;
2630
2631        dev_set_name(&udc->gadget.dev, "gadget");
2632        udc->gadget.dev.dma_mask = dev->dma_mask;
2633        udc->gadget.dev.parent   = dev;
2634        udc->gadget.dev.release  = udc_release;
2635
2636        retval = device_register(&udc->gadget.dev);
2637        if (retval)
2638                goto done;
2639
2640#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2641        retval = dbg_create_files(&udc->gadget.dev);
2642#endif
2643        if (retval) {
2644                device_unregister(&udc->gadget.dev);
2645                goto done;
2646        }
2647
2648        _udc = udc;
2649        return retval;
2650
2651 done:
2652        err("error = %i", retval);
2653        kfree(udc);
2654        _udc = NULL;
2655        return retval;
2656}
2657
2658/**
2659 * udc_remove: parent remove must call this to remove UDC
2660 *
2661 * No interrupts active, the IRQ has been released
2662 */
2663static void udc_remove(void)
2664{
2665        struct ci13xxx *udc = _udc;
2666
2667        if (udc == NULL) {
2668                err("EINVAL");
2669                return;
2670        }
2671
2672#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2673        dbg_remove_files(&udc->gadget.dev);
2674#endif
2675        device_unregister(&udc->gadget.dev);
2676
2677        kfree(udc);
2678        _udc = NULL;
2679}
2680
2681/******************************************************************************
2682 * PCI block
2683 *****************************************************************************/
2684/**
2685 * ci13xxx_pci_irq: interrut handler
2686 * @irq:  irq number
2687 * @pdev: USB Device Controller interrupt source
2688 *
2689 * This function returns IRQ_HANDLED if the IRQ has been handled
2690 * This is an ISR don't trace, use attribute interface instead
2691 */
2692static irqreturn_t ci13xxx_pci_irq(int irq, void *pdev)
2693{
2694        if (irq == 0) {
2695                dev_err(&((struct pci_dev *)pdev)->dev, "Invalid IRQ0 usage!");
2696                return IRQ_HANDLED;
2697        }
2698        return udc_irq();
2699}
2700
2701/**
2702 * ci13xxx_pci_probe: PCI probe
2703 * @pdev: USB device controller being probed
2704 * @id:   PCI hotplug ID connecting controller to UDC framework
2705 *
2706 * This function returns an error code
2707 * Allocates basic PCI resources for this USB device controller, and then
2708 * invokes the udc_probe() method to start the UDC associated with it
2709 */
2710static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev,
2711                                       const struct pci_device_id *id)
2712{
2713        void __iomem *regs = NULL;
2714        int retval = 0;
2715
2716        if (id == NULL)
2717                return -EINVAL;
2718
2719        retval = pci_enable_device(pdev);
2720        if (retval)
2721                goto done;
2722
2723        if (!pdev->irq) {
2724                dev_err(&pdev->dev, "No IRQ, check BIOS/PCI setup!");
2725                retval = -ENODEV;
2726                goto disable_device;
2727        }
2728
2729        retval = pci_request_regions(pdev, UDC_DRIVER_NAME);
2730        if (retval)
2731                goto disable_device;
2732
2733        /* BAR 0 holds all the registers */
2734        regs = pci_iomap(pdev, 0, 0);
2735        if (!regs) {
2736                dev_err(&pdev->dev, "Error mapping memory!");
2737                retval = -EFAULT;
2738                goto release_regions;
2739        }
2740        pci_set_drvdata(pdev, (__force void *)regs);
2741
2742        pci_set_master(pdev);
2743        pci_try_set_mwi(pdev);
2744
2745        retval = udc_probe(&pdev->dev, regs, UDC_DRIVER_NAME);
2746        if (retval)
2747                goto iounmap;
2748
2749        /* our device does not have MSI capability */
2750
2751        retval = request_irq(pdev->irq, ci13xxx_pci_irq, IRQF_SHARED,
2752                             UDC_DRIVER_NAME, pdev);
2753        if (retval)
2754                goto gadget_remove;
2755
2756        return 0;
2757
2758 gadget_remove:
2759        udc_remove();
2760 iounmap:
2761        pci_iounmap(pdev, regs);
2762 release_regions:
2763        pci_release_regions(pdev);
2764 disable_device:
2765        pci_disable_device(pdev);
2766 done:
2767        return retval;
2768}
2769
2770/**
2771 * ci13xxx_pci_remove: PCI remove
2772 * @pdev: USB Device Controller being removed
2773 *
2774 * Reverses the effect of ci13xxx_pci_probe(),
2775 * first invoking the udc_remove() and then releases
2776 * all PCI resources allocated for this USB device controller
2777 */
2778static void __devexit ci13xxx_pci_remove(struct pci_dev *pdev)
2779{
2780        free_irq(pdev->irq, pdev);
2781        udc_remove();
2782        pci_iounmap(pdev, (__force void __iomem *)pci_get_drvdata(pdev));
2783        pci_release_regions(pdev);
2784        pci_disable_device(pdev);
2785}
2786
2787/**
2788 * PCI device table
2789 * PCI device structure
2790 *
2791 * Check "pci.h" for details
2792 */
2793static DEFINE_PCI_DEVICE_TABLE(ci13xxx_pci_id_table) = {
2794        { PCI_DEVICE(0x153F, 0x1004) },
2795        { PCI_DEVICE(0x153F, 0x1006) },
2796        { 0, 0, 0, 0, 0, 0, 0 /* end: all zeroes */ }
2797};
2798MODULE_DEVICE_TABLE(pci, ci13xxx_pci_id_table);
2799
2800static struct pci_driver ci13xxx_pci_driver = {
2801        .name         = UDC_DRIVER_NAME,
2802        .id_table     = ci13xxx_pci_id_table,
2803        .probe        = ci13xxx_pci_probe,
2804        .remove       = __devexit_p(ci13xxx_pci_remove),
2805};
2806
2807/**
2808 * ci13xxx_pci_init: module init
2809 *
2810 * Driver load
2811 */
2812static int __init ci13xxx_pci_init(void)
2813{
2814        return pci_register_driver(&ci13xxx_pci_driver);
2815}
2816module_init(ci13xxx_pci_init);
2817
2818/**
2819 * ci13xxx_pci_exit: module exit
2820 *
2821 * Driver unload
2822 */
2823static void __exit ci13xxx_pci_exit(void)
2824{
2825        pci_unregister_driver(&ci13xxx_pci_driver);
2826}
2827module_exit(ci13xxx_pci_exit);
2828
2829MODULE_AUTHOR("MIPS - David Lopo <dlopo@chipidea.mips.com>");
2830MODULE_DESCRIPTION("MIPS CI13XXX USB Peripheral Controller");
2831MODULE_LICENSE("GPL");
2832MODULE_VERSION("June 2008");
2833
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.