199767f8919635c4928607450d9e0abb932109ceToomas Soome/*
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Copyright (c) 2007 Hidetoshi Shimokawa
199767f8919635c4928607450d9e0abb932109ceToomas Soome * All rights reserved.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Redistribution and use in source and binary forms, with or without
199767f8919635c4928607450d9e0abb932109ceToomas Soome * modification, are permitted provided that the following conditions
199767f8919635c4928607450d9e0abb932109ceToomas Soome * are met:
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 1. Redistributions of source code must retain the above copyright
199767f8919635c4928607450d9e0abb932109ceToomas Soome * notice, this list of conditions and the following disclaimer.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 2. Redistributions in binary form must reproduce the above copyright
199767f8919635c4928607450d9e0abb932109ceToomas Soome * notice, this list of conditions and the following disclaimer in the
199767f8919635c4928607450d9e0abb932109ceToomas Soome * documentation and/or other materials provided with the distribution.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 3. All advertising materials mentioning features or use of this software
199767f8919635c4928607450d9e0abb932109ceToomas Soome * must display the acknowledgement as bellow:
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * This product includes software developed by K. Kobayashi and H. Shimokawa
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 4. The name of the author may not be used to endorse or promote products
199767f8919635c4928607450d9e0abb932109ceToomas Soome * derived from this software without specific prior written permission.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
199767f8919635c4928607450d9e0abb932109ceToomas Soome * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
199767f8919635c4928607450d9e0abb932109ceToomas Soome * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
199767f8919635c4928607450d9e0abb932109ceToomas Soome * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
199767f8919635c4928607450d9e0abb932109ceToomas Soome * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
199767f8919635c4928607450d9e0abb932109ceToomas Soome * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
199767f8919635c4928607450d9e0abb932109ceToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
199767f8919635c4928607450d9e0abb932109ceToomas Soome * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
199767f8919635c4928607450d9e0abb932109ceToomas Soome * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * POSSIBILITY OF SUCH DAMAGE.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * $FreeBSD$
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define MAX_OHCI 5
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define CROMSIZE 0x400
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomestruct fw_eui64 {
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t hi, lo;
199767f8919635c4928607450d9e0abb932109ceToomas Soome};
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomestruct fwohci_softc {
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t locator;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t devid;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t base_addr;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t bus_id;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t handle;
199767f8919635c4928607450d9e0abb932109ceToomas Soome int32_t state;
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct crom_src_buf *crom_src_buf;
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct crom_src *crom_src;
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct crom_chunk *crom_root;
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct fw_eui64 eui;
199767f8919635c4928607450d9e0abb932109ceToomas Soome int speed;
199767f8919635c4928607450d9e0abb932109ceToomas Soome int maxrec;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uint32_t *config_rom;
199767f8919635c4928607450d9e0abb932109ceToomas Soome char config_rom_buf[CROMSIZE*2]; /* double size for alignment */
199767f8919635c4928607450d9e0abb932109ceToomas Soome};
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeint fwohci_init(struct fwohci_softc *, int);
199767f8919635c4928607450d9e0abb932109ceToomas Soomevoid fwohci_ibr(struct fwohci_softc *);
199767f8919635c4928607450d9e0abb932109ceToomas Soomevoid fwohci_poll(struct fwohci_softc *);
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define FWOHCI_STATE_DEAD (-1)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define FWOHCI_STATE_INIT 0
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define FWOHCI_STATE_ENABLED 1
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define FWOHCI_STATE_BUSRESET 2
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define FWOHCI_STATE_NORMAL 3
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OREAD(f, o) (*(volatile uint32_t *)((f)->handle + (o)))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OWRITE(f, o, v) (*(volatile uint32_t *)((f)->handle + (o)) = (v))
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_VERSION 0x00
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATRETRY 0x08
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_CROMHDR 0x18
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUS_ID 0x1c
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUS_OPT 0x20
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUSIRMC (1U << 31)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUSCMC (1 << 30)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUSISC (1 << 29)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUSBMC (1 << 28)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUSPMC (1 << 27)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_BUSFNC OHCI_BUSIRMC | OHCI_BUSCMC | OHCI_BUSISC |\
199767f8919635c4928607450d9e0abb932109ceToomas Soome OHCI_BUSBMC | OHCI_BUSPMC
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_EUID_HI 0x24
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_EUID_LO 0x28
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_CROMPTR 0x34
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_HCCCTL 0x50
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_HCCCTLCLR 0x54
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_AREQHI 0x100
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_AREQHICLR 0x104
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_AREQLO 0x108
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_AREQLOCLR 0x10c
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_PREQHI 0x110
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_PREQHICLR 0x114
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_PREQLO 0x118
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_PREQLOCLR 0x11c
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_PREQUPPER 0x120
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_SID_BUF 0x64
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_SID_CNT 0x68
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_SID_ERR (1U << 31)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_SID_CNT_MASK 0xffc
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IT_STAT 0x90
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IT_STATCLR 0x94
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IT_MASK 0x98
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IT_MASKCLR 0x9c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IR_STAT 0xa0
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IR_STATCLR 0xa4
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IR_MASK 0xa8
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IR_MASKCLR 0xac
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_LNKCTL 0xe0
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_LNKCTLCLR 0xe4
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_PHYACCESS 0xec
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_CYCLETIMER 0xf0
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_DMACTL(off) (off)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_DMACTLCLR(off) (off + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_DMACMD(off) (off + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_DMAMATCH(off) (off + 0x10)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATQOFF 0x180
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATQCTL OHCI_ATQOFF
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATQCTLCLR (OHCI_ATQOFF + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATQCMD (OHCI_ATQOFF + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATQMATCH (OHCI_ATQOFF + 0x10)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATSOFF 0x1a0
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATSCTL OHCI_ATSOFF
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATSCTLCLR (OHCI_ATSOFF + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATSCMD (OHCI_ATSOFF + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ATSMATCH (OHCI_ATSOFF + 0x10)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARQOFF 0x1c0
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARQCTL OHCI_ARQOFF
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARQCTLCLR (OHCI_ARQOFF + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARQCMD (OHCI_ARQOFF + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARQMATCH (OHCI_ARQOFF + 0x10)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARSOFF 0x1e0
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARSCTL OHCI_ARSOFF
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARSCTLCLR (OHCI_ARSOFF + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARSCMD (OHCI_ARSOFF + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ARSMATCH (OHCI_ARSOFF + 0x10)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ITOFF(CH) (0x200 + 0x10 * (CH))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ITCTL(CH) (OHCI_ITOFF(CH))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ITCTLCLR(CH) (OHCI_ITOFF(CH) + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_ITCMD(CH) (OHCI_ITOFF(CH) + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IROFF(CH) (0x400 + 0x20 * (CH))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IRCTL(CH) (OHCI_IROFF(CH))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IRCTLCLR(CH) (OHCI_IROFF(CH) + 4)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IRCMD(CH) (OHCI_IROFF(CH) + 0xc)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define OHCI_IRMATCH(CH) (OHCI_IROFF(CH) + 0x10)