| /* | |
| * (C) Copyright 2000 | |
| * Wolfgang Denk, DENX Software Engineering, wd@denx.de. | |
| * | |
| * See file CREDITS for list of people who contributed to this | |
| * project. | |
| * | |
| * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License as | |
| * published by the Free Software Foundation; either version 2 of | |
| * the License, or (at your option) any later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
| * MA 02111-1307 USA | |
| */ | |
| /** | |
| * hcWriteWord - write a 16 bit value into the USB controller | |
| * @base: base address to access the chip registers | |
| * @value: 16 bit value to write into register @offset | |
| * @offset: register to write the @value into | |
| * | |
| */ | |
| static void inline hcWriteWord (unsigned long base, unsigned int value, | |
| unsigned int offset) | |
| { | |
| out_le16 ((volatile u16*)(base + 2), offset | 0x80); | |
| out_le16 ((volatile u16*)base, value); | |
| } | |
| /** | |
| * hcWriteDWord - write a 32 bit value into the USB controller | |
| * @base: base address to access the chip registers | |
| * @value: 32 bit value to write into register @offset | |
| * @offset: register to write the @value into | |
| * | |
| */ | |
| static void inline hcWriteDWord (unsigned long base, unsigned long value, | |
| unsigned int offset) | |
| { | |
| out_le16 ((volatile u16*)(base + 2), offset | 0x80); | |
| out_le16 ((volatile u16*)base, value); | |
| out_le16 ((volatile u16*)base, value >> 16); | |
| } | |
| /** | |
| * hcReadWord - read a 16 bit value from the USB controller | |
| * @base: base address to access the chip registers | |
| * @offset: register to read from | |
| * | |
| * Returns the readed register value | |
| */ | |
| static unsigned int inline hcReadWord (unsigned long base, unsigned int offset) | |
| { | |
| out_le16 ((volatile u16*)(base + 2), offset); | |
| return (in_le16 ((volatile u16*)base)); | |
| } | |
| /** | |
| * hcReadDWord - read a 32 bit value from the USB controller | |
| * @base: base address to access the chip registers | |
| * @offset: register to read from | |
| * | |
| * Returns the readed register value | |
| */ | |
| static unsigned long inline hcReadDWord (unsigned long base, unsigned int offset) | |
| { | |
| unsigned long val, val16; | |
| out_le16 ((volatile u16*)(base + 2), offset); | |
| val = in_le16((volatile u16*)base); | |
| val16 = in_le16((volatile u16*)base); | |
| return (val | (val16 << 16)); | |
| } | |
| /* control and status registers isp1161 */ | |
| #define HcRevision 0x00 | |
| #define HcControl 0x01 | |
| #define HcCommandStatus 0x02 | |
| #define HcInterruptStatus 0x03 | |
| #define HcInterruptEnable 0x04 | |
| #define HcInterruptDisable 0x05 | |
| #define HcFmInterval 0x0D | |
| #define HcFmRemaining 0x0E | |
| #define HcFmNumber 0x0F | |
| #define HcLSThreshold 0x11 | |
| #define HcRhDescriptorA 0x12 | |
| #define HcRhDescriptorB 0x13 | |
| #define HcRhStatus 0x14 | |
| #define HcRhPortStatus1 0x15 | |
| #define HcRhPortStatus2 0x16 | |
| #define HcHardwareConfiguration 0x20 | |
| #define HcDMAConfiguration 0x21 | |
| #define HcTransferCounter 0x22 | |
| #define HcuPInterrupt 0x24 | |
| #define HcuPInterruptEnable 0x25 | |
| #define HcChipID 0x27 | |
| #define HcScratch 0x28 | |
| #define HcSoftwareReset 0x29 | |
| #define HcITLBufferLength 0x2A | |
| #define HcATLBufferLength 0x2B | |
| #define HcBufferStatus 0x2C | |
| #define HcReadBackITL0Length 0x2D | |
| #define HcReadBackITL1Length 0x2E | |
| #define HcITLBufferPort 0x40 | |
| #define HcATLBufferPort 0x41 |