- Remove unused code.

- Style fixes.
This commit is contained in:
Hidetoshi Shimokawa 2002-11-12 05:52:01 +00:00
parent 783058fa0d
commit c572b81055
2 changed files with 178 additions and 394 deletions

View File

@ -1154,7 +1154,8 @@ fw_poll(dev_t dev, int events, fw_proc *td)
/*
* To lookup node id. from EUI64.
*/
u_int16_t fw_noderesolve(struct firewire_comm *fc, struct fw_eui64 eui)
u_int16_t
fw_noderesolve(struct firewire_comm *fc, struct fw_eui64 eui)
{
struct fw_device *fwdev;
for(fwdev = TAILQ_FIRST(&fc->devices); fwdev != NULL;
@ -1191,48 +1192,6 @@ fw_asyreq(struct firewire_comm *fc, int sub, struct fw_xfer *xfer)
}
fp = (struct fw_pkt *)xfer->send.buf;
#if 0
switch(fp->mode.common.tcode){
case FWTCODE_STREAM:
len = ntohs(fp->mode.stream.len) + 4;
break;
case FWTCODE_RREQQ:
case FWTCODE_WRES:
case FWTCODE_PHY:
len = 12;
break;
case FWTCODE_WREQQ:
case FWTCODE_RRESQ:
len = 16;
break;
default:
len = ntohs(fp->mode.rresb.len) + 16;
break;
}
if( len > xfer->send.len ){
printf("len > send.len\n");
return EINVAL;
}
switch(fp->mode.common.tcode){
case FWTCODE_WREQQ:
case FWTCODE_WREQB:
case FWTCODE_RREQQ:
case FWTCODE_RREQB:
case FWTCODE_LREQ:
case FWTCODE_PHY:
case FWTCODE_STREAM:
xferq = fc->atq;
break;
case FWTCODE_WRES:
case FWTCODE_RRESQ:
case FWTCODE_RRESB:
case FWTCODE_LRES:
xferq = fc->ats;
break;
default:
return EINVAL;
}
#else
tcode = fp->mode.common.tcode & 0xf;
info = &fc->tcode[tcode];
if (info->flag == 0) {
@ -1254,7 +1213,7 @@ fw_asyreq(struct firewire_comm *fc, int sub, struct fw_xfer *xfer)
return EINVAL;
}
xfer->send.len = len;
#endif
if(xferq->start == NULL){
printf("xferq->start == NULL\n");
return EINVAL;
@ -1266,28 +1225,11 @@ fw_asyreq(struct firewire_comm *fc, int sub, struct fw_xfer *xfer)
}
#if 0
switch(tcode){
case FWTCODE_WREQQ:
case FWTCODE_WREQB:
case FWTCODE_RREQQ:
case FWTCODE_RREQB:
case FWTCODE_LREQ:
if((tl = fw_get_tlabel(fc, xfer)) == -1 ){
return EIO;
}
fp->mode.hdr.tlrt = tl << 2;
break;
default:
break;
}
#else
if (info->flag & FWTI_TLABEL) {
if((tl = fw_get_tlabel(fc, xfer)) == -1 )
return EIO;
fp->mode.hdr.tlrt = tl << 2;
}
#endif
xfer->tl = tl;
xfer->tcode = tcode;
@ -1346,7 +1288,9 @@ fw_xfer_timeout(void *arg)
/*
* Async. request with given xfer structure.
*/
static void fw_asystart(struct fw_xfer *xfer){
static void
fw_asystart(struct fw_xfer *xfer)
{
struct firewire_comm *fc = xfer->fc;
int s;
if(xfer->retry++ >= fc->max_asyretry){
@ -1378,6 +1322,7 @@ static void fw_asystart(struct fw_xfer *xfer){
#endif
return;
}
static int
fw_mmap (dev_t dev, vm_offset_t offset, int nproto)
{
@ -1391,12 +1336,14 @@ fw_mmap (dev_t dev, vm_offset_t offset, int nproto)
return EINVAL;
}
static int
firewire_match( device_t dev )
{
device_set_desc(dev, "IEEE1394(Firewire) bus");
return -140;
}
/*
* The attach routine.
*/
@ -1472,6 +1419,7 @@ firewire_add_child(device_t dev, int order, const char *name, int unit)
return child;
}
/*
* Dettach it.
*/
@ -1481,10 +1429,7 @@ firewire_detach( device_t dev )
struct firewire_softc *sc;
sc = (struct firewire_softc *)device_get_softc(dev);
#if 0
printf("%s:dettach prevented", device_get_nameunit(dev));
return(EINVAL);
#endif
#if __FreeBSD_version >= 500000
destroy_dev(sc->dev);
#else
@ -1508,10 +1453,12 @@ firewire_shutdown( device_t dev )
return 0;
}
#endif
/*
* Call ater bus reset.
* Called after bus reset.
*/
void fw_busreset(struct firewire_comm *fc)
void
fw_busreset(struct firewire_comm *fc)
{
int i;
struct fw_xfer *xfer;
@ -1601,9 +1548,9 @@ void fw_busreset(struct firewire_comm *fc)
CSRARC(fc, STATE_CLEAR) &= ~(1 << 23 | 1 << 15 | 1 << 14 );
CSRARC(fc, STATE_SET) = CSRARC(fc, STATE_CLEAR);
}
/* Call once after reboot */
void fw_init(fc)
struct firewire_comm *fc;
void fw_init(struct firewire_comm *fc)
{
int i;
struct csrdir *csrd;
@ -1733,13 +1680,12 @@ void fw_init(fc)
fw_bindadd(fc, fwb);
#endif
}
/*
* To lookup binded process from IEEE1394 address.
*/
static struct fw_bind *
fw_bindlookup(fc, dest_hi, dest_lo)
struct firewire_comm *fc;
u_int32_t dest_lo, dest_hi;
fw_bindlookup(struct firewire_comm *fc, u_int32_t dest_hi, u_int32_t dest_lo)
{
struct fw_bind *tfw;
for(tfw = STAILQ_FIRST(&fc->binds) ; tfw != NULL ;
@ -1753,10 +1699,12 @@ u_int32_t dest_lo, dest_hi;
}
return(NULL);
}
/*
* To bind IEEE1394 address block to process.
*/
int fw_bindadd(struct firewire_comm *fc, struct fw_bind *fwb)
int
fw_bindadd(struct firewire_comm *fc, struct fw_bind *fwb)
{
struct fw_bind *tfw, *tfw2 = NULL;
int err = 0;
@ -1803,7 +1751,8 @@ int fw_bindadd(struct firewire_comm *fc, struct fw_bind *fwb)
/*
* To free IEEE1394 address block.
*/
int fw_bindremove(struct firewire_comm *fc, struct fw_bind *fwb)
int
fw_bindremove(struct firewire_comm *fc, struct fw_bind *fwb)
{
int s;
@ -1820,7 +1769,8 @@ int fw_bindremove(struct firewire_comm *fc, struct fw_bind *fwb)
/*
* To free transaction label.
*/
static void fw_tl_free ( struct firewire_comm *fc, struct fw_xfer *xfer )
static void
fw_tl_free(struct firewire_comm *fc, struct fw_xfer *xfer)
{
struct tlabel *tl;
int s = splfw();
@ -1837,10 +1787,12 @@ static void fw_tl_free ( struct firewire_comm *fc, struct fw_xfer *xfer )
splx(s);
return;
}
/*
* To obtain XFER structure by transaction label.
*/
static struct fw_xfer *fw_tl2xfer ( struct firewire_comm *fc, int node, int tlabel )
static struct fw_xfer *
fw_tl2xfer(struct firewire_comm *fc, int node, int tlabel)
{
struct fw_xfer *xfer;
struct tlabel *tl;
@ -1850,10 +1802,6 @@ static struct fw_xfer *fw_tl2xfer ( struct firewire_comm *fc, int node, int tlab
tl = STAILQ_NEXT(tl, link)){
if(tl->xfer->dst == node){
xfer = tl->xfer;
#if 0
STAILQ_REMOVE(&fc->tlabels[tlabel], tl, tlabel, link);
free(tl, M_DEVBUF);
#endif
splx(s);
return(xfer);
}
@ -1861,41 +1809,25 @@ static struct fw_xfer *fw_tl2xfer ( struct firewire_comm *fc, int node, int tlab
splx(s);
return(NULL);
}
/*
* To allocate IEEE1394 XFER structure.
*/
struct fw_xfer *fw_xfer_alloc()
struct fw_xfer *
fw_xfer_alloc()
{
struct fw_xfer *xfer;
#if 0
xfer = malloc(sizeof(struct fw_xfer), M_DEVBUF, M_DONTWAIT);
#else
xfer = malloc(sizeof(struct fw_xfer), M_DEVBUF, M_DONTWAIT | M_ZERO);
#endif
if(xfer == NULL) return xfer;
#if 0 /* xfer->tl = 0 was missing.. */
xfer->act_type = FWACT_NULL;
xfer->fc = NULL;
xfer->retry = 0;
xfer->resp = 0;
xfer->state = FWXF_INIT;
if (xfer == NULL)
return xfer;
xfer->time = time_second;
xfer->sub = -1;
xfer->send.buf = NULL;
xfer->send.off = 0;
xfer->send.len = 0;
xfer->recv.buf = NULL;
xfer->recv.off = 0;
xfer->recv.len = 0;
xfer->retry_req = NULL;
xfer->act.hand = NULL;
xfer->sc = NULL;
#else
xfer->time = time_second;
xfer->sub = -1;
#endif
return xfer;
}
/*
* IEEE1394 XFER post process.
*/
@ -1923,7 +1855,8 @@ fw_xfer_done(struct fw_xfer *xfer)
/*
* To free IEEE1394 XFER structure.
*/
void fw_xfer_free( struct fw_xfer* xfer)
void
fw_xfer_free( struct fw_xfer* xfer)
{
int s;
if(xfer == NULL ) return;
@ -2014,14 +1947,6 @@ fw_phy_config(struct firewire_comm *fc, int root_node, int gap_count)
static void
fw_print_sid(u_int32_t sid)
{
#if 0
printf("node:%d link:%d gap:%d spd:%d del:%d con:%d pwr:%d"
" p0:%d p1:%d p2:%d i:%d m:%d\n",
FWPHYSIDNODE(sid), FWPHYSIDLINK(sid), FWPHYSIDGAP(sid),
FWPHYSIDSPD(sid), FWPHYSIDDEL(sid), FWPHYSIDCON(sid),
FWPHYSIDPWR(sid), FWPHYSIDP0(sid), FWPHYSIDP1(sid),
FWPHYSIDP2(sid), FWPHYSIDIR(sid), FWPHYSIDMORE(sid));
#else
union fw_self_id *s;
s = (union fw_self_id *) &sid;
printf("node:%d link:%d gap:%d spd:%d del:%d con:%d pwr:%d"
@ -2030,7 +1955,6 @@ fw_print_sid(u_int32_t sid)
s->p0.phy_speed, s->p0.phy_delay, s->p0.contender,
s->p0.power_class, s->p0.port0, s->p0.port1,
s->p0.port2, s->p0.initiated_reset, s->p0.more_packets);
#endif
}
#endif
@ -2161,10 +2085,12 @@ void fw_sidrcv(struct firewire_comm* fc, caddr_t buf, u_int len, u_int off)
fw_bus_probe(fc);
#endif
}
/*
* To probe devices on the IEEE1394 bus.
*/
static void fw_bus_probe(struct firewire_comm *fc)
static void
fw_bus_probe(struct firewire_comm *fc)
{
int s;
struct fw_device *fwdev, *next;
@ -2196,10 +2122,12 @@ static void fw_bus_probe(struct firewire_comm *fc)
fw_bus_explore(fc);
splx(s);
}
/*
* To collect device informations on the IEEE1394 bus.
*/
static void fw_bus_explore(struct firewire_comm *fc )
static void
fw_bus_explore(struct firewire_comm *fc )
{
int err = 0;
struct fw_device *fwdev, *tfwdev;
@ -2265,9 +2193,6 @@ static void fw_bus_explore(struct firewire_comm *fc )
fwdev->speed = fc->speed_map->speed[fc->nodeid][fc->ongonode];
#endif
#if 0
TAILQ_INSERT_TAIL(&fc->devices, fwdev, link);
#else
tfwdev = TAILQ_FIRST(&fc->devices);
while( tfwdev != NULL &&
(tfwdev->eui.hi > fwdev->eui.hi) &&
@ -2280,7 +2205,6 @@ static void fw_bus_explore(struct firewire_comm *fc )
}else{
TAILQ_INSERT_BEFORE(tfwdev, fwdev, link);
}
#endif
printf("%s:Discover new %s device ID:%08x%08x\n", device_get_nameunit(fc->dev), linkspeed[fwdev->speed], fc->ongoeui.hi, fc->ongoeui.lo);
@ -2335,9 +2259,10 @@ static void fw_bus_explore(struct firewire_comm *fc )
return;
}
/* Portable Async. request read quad */
struct fw_xfer *asyreqq(struct firewire_comm *fc,
u_int8_t spd, u_int8_t tl, u_int8_t rt,
struct fw_xfer *
asyreqq(struct firewire_comm *fc, u_int8_t spd, u_int8_t tl, u_int8_t rt,
u_int32_t addr_hi, u_int32_t addr_lo,
void (*hand) __P((struct fw_xfer*)))
{
@ -2381,10 +2306,13 @@ struct fw_xfer *asyreqq(struct firewire_comm *fc,
}
return xfer;
}
/*
* Callback for the IEEE1394 bus information collection.
*/
static void fw_bus_explore_callback(struct fw_xfer *xfer){
static void
fw_bus_explore_callback(struct fw_xfer *xfer)
{
struct firewire_comm *fc;
struct fw_pkt *sfp,*rfp;
struct csrhdr *chdr;
@ -2531,10 +2459,13 @@ static void fw_bus_explore_callback(struct fw_xfer *xfer){
fw_bus_explore(fc);
return;
}
#if 0
/*
* Async. write responce support for kernel internal use.
*/
int fw_writeres(struct firewire_comm *fc, u_int32_t dst, u_int32_t tlrt){
int
fw_writeres(struct firewire_comm *fc, u_int32_t dst, u_int32_t tlrt)
{
int err = 0;
struct fw_xfer *xfer;
struct fw_pkt *fp;
@ -2569,10 +2500,14 @@ int fw_writeres(struct firewire_comm *fc, u_int32_t dst, u_int32_t tlrt){
return err;
}
/*
* Async. read responce block support for kernel internal use.
*/
int fw_readresb(struct firewire_comm *fc, u_int32_t dst, u_int32_t tlrt, u_int32_t len, u_int32_t *buf){
int
fw_readresb(struct firewire_comm *fc, u_int32_t dst, u_int32_t tlrt,
u_int32_t len, u_int32_t *buf)
{
int err = 0;
struct fw_xfer *xfer ;
struct fw_pkt *fp;
@ -2609,10 +2544,14 @@ int fw_readresb(struct firewire_comm *fc, u_int32_t dst, u_int32_t tlrt, u_int32
fw_xfer_free( xfer);
return err;
}
/*
* Async. write request block support for kernel internal use.
*/
int fw_writereqb(struct firewire_comm *fc, u_int32_t addr_hi, u_int32_t addr_lo, u_int len, u_int32_t *buf){
int
fw_writereqb(struct firewire_comm *fc, u_int32_t addr_hi, u_int32_t addr_lo,
u_int len, u_int32_t *buf)
{
int err = 0;
struct fw_xfer *xfer ;
struct fw_pkt *fp;
@ -2650,10 +2589,12 @@ int fw_writereqb(struct firewire_comm *fc, u_int32_t addr_hi, u_int32_t addr_lo,
fw_xfer_free( xfer);
return err;
}
/*
* Async. read request support for kernel internal use.
*/
int fw_readreqq(struct firewire_comm *fc, u_int32_t addr_hi, u_int32_t addr_lo, u_int32_t *ret){
int
fw_readreqq(struct firewire_comm *fc, u_int32_t addr_hi, u_int32_t addr_lo, u_int32_t *ret){
int err = 0;
struct fw_xfer *xfer ;
struct fw_pkt *fp, *rfp;
@ -2693,6 +2634,7 @@ int fw_readreqq(struct firewire_comm *fc, u_int32_t addr_hi, u_int32_t addr_lo,
fw_xfer_free( xfer);
return err;
}
#endif
/*
* To obtain CSR register values.
*/

View File

@ -269,7 +269,8 @@ d_ioctl_t fwohci_ioctl;
/*
* Communication with PHY device
*/
static u_int32_t fwphy_wrdata( struct fwohci_softc *sc, u_int32_t addr, u_int32_t data)
static u_int32_t
fwphy_wrdata( struct fwohci_softc *sc, u_int32_t addr, u_int32_t data)
{
u_int32_t fun;
@ -311,7 +312,8 @@ fwohci_set_bus_manager(struct firewire_comm *fc, u_int node)
return(bm);
}
static u_int32_t fwphy_rddata(struct fwohci_softc *sc, u_int addr)
static u_int32_t
fwphy_rddata(struct fwohci_softc *sc, u_int addr)
{
u_int32_t fun;
u_int i;
@ -380,7 +382,9 @@ fwohci_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
}
return err;
}
int fwohci_init(struct fwohci_softc *sc, device_t dev)
int
fwohci_init(struct fwohci_softc *sc, device_t dev)
{
int err = 0;
int i;
@ -392,11 +396,6 @@ int fwohci_init(struct fwohci_softc *sc, device_t dev)
device_printf(dev, "OHCI version %x.%x (ROM=%d)\n",
(reg>>16) & 0xff, reg & 0xff, (reg>>24) & 1);
#if 0
/* XXX: Not support bridge function yet, then clear bus ID */
OWRITE(sc, FWOHCI_NODEID, (OREAD(sc, FWOHCI_NODEID)) & 0xffff003f);
#endif
/* XXX: Available Isochrounous DMA channel probe */
for( i = 0 ; i < 0x20 ; i ++ ){
OWRITE(sc, OHCI_IRCTL(i), OHCI_CNTL_DMA_RUN);
@ -489,9 +488,6 @@ int fwohci_init(struct fwohci_softc *sc, device_t dev)
DELAY(1000);
}
printf("done (%d)\n", i);
#if 0
OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_LINKEN | OHCI_HCC_LPS);
#endif
OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LPS);
/* XXX wait for SCLK. */
DELAY(100000);
@ -555,7 +551,7 @@ int fwohci_init(struct fwohci_softc *sc, device_t dev)
reg2 = fwphy_rddata(sc, 5);
#if 0
if (e1394a && (OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_PRPHY)) {
#else /* XXX f¤force to enable 1394a */
#else /* XXX force to enable 1394a */
if (e1394a) {
#endif
device_printf(dev, "Enable 1394a Enhancements\n");
@ -620,10 +616,7 @@ int fwohci_init(struct fwohci_softc *sc, device_t dev)
sc->fc.timeout = fwohci_timeout;
sc->fc.poll = fwohci_poll;
sc->fc.set_intr = fwohci_set_intr;
#if 0
/* why this need twice? */
fwohci_db_init(&sc->arrq);
#endif
/* enable link */
OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LINKEN);
fw_busreset(&sc->fc);
@ -653,26 +646,21 @@ int fwohci_init(struct fwohci_softc *sc, device_t dev)
OWRITE(sc, OHCI_ATQCTLCLR, OHCI_CNTL_DMA_RUN | OHCI_CNTL_DMA_DEAD);
OWRITE(sc, OHCI_ATSCTLCLR, OHCI_CNTL_DMA_RUN | OHCI_CNTL_DMA_DEAD);
#if 0
fwohci_ibr(sc);
#endif
return err;
}
void fwohci_timeout(void *arg)
void
fwohci_timeout(void *arg)
{
/*
fwohci_txd(sc, &(sc->atrq));
fwohci_txd(sc, &(sc->atrs));
fw_expire_tlabel(&sc->fc);
*/
struct fwohci_softc *sc;
sc = (struct fwohci_softc *)arg;
sc->fc.timeouthandle = timeout(fwohci_timeout,
(void *)sc, FW_XFERTIMEOUT * hz * 10);
}
u_int32_t fwohci_cyctimer(struct firewire_comm *fc)
u_int32_t
fwohci_cyctimer(struct firewire_comm *fc)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
return(OREAD(sc, OHCI_CYCLETIMER));
@ -684,15 +672,13 @@ u_int32_t fwohci_cyctimer(struct firewire_comm *fc)
db = &_dbtr->db[ (_cnt > 2) ? (_cnt -1) : 0]; \
} while (0)
static void fwohci_start(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
static void
fwohci_start(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
{
int i, s;
int tcode, hdr_len, hdr_off, len;
int fsegment = -1;
u_int32_t off;
#if 0
u_int32_t reg;
#endif
struct fw_xfer *xfer;
struct fw_pkt *fp;
volatile struct fwohci_txpkthdr *ohcifp;
@ -731,44 +717,10 @@ static void fwohci_start(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
tcode = fp->mode.common.tcode;
ohcifp = (volatile struct fwohci_txpkthdr *) db_tr->db[1].db.immed;
#if 0
switch(tcode){
case FWTCODE_STREAM:
hdr_off = 4;
hdr_len = 8;
len = ntohs(fp->mode.stream.len) + 4;
break;
case FWTCODE_RREQQ:
case FWTCODE_WRES:
hdr_off = 12;
hdr_len = 12;
len = 12;
break;
case FWTCODE_WREQQ:
case FWTCODE_RRESQ:
case FWTCODE_RREQB:
hdr_off = 16;
hdr_len = 16;
len = 16;
break;
case FWTCODE_PHY:
hdr_off = 12;
hdr_len = 12;
len = 12;
break;
default:
hdr_off = 16;
hdr_len = 16;
/* presume block request len */
len = ntohs(fp->mode.rresb.len) + 16;
break;
}
#else
info = &tinfo[tcode];
hdr_len = hdr_off = info->hdr_len;
/* fw_asyreq must pass valid send.len */
len = xfer->send.len;
#endif
for( i = 0 ; i < hdr_off ; i+= 4){
ohcifp->mode.ld[i/4] = ntohl(fp->mode.ld[i/4]);
}
@ -810,9 +762,6 @@ static void fwohci_start(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
} else {
/* XXX we assume mbuf chain is shorter than ndesc */
m = xfer->mbuf;
#if 0
m_adj(m, hdr_off);
#endif
do {
db->db.desc.addr
= vtophys(mtod(m, caddr_t));
@ -848,31 +797,8 @@ static void fwohci_start(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
kick:
if (firewire_debug) printf("kick\n");
/* kick asy q */
#if 0
if(!(OREAD(sc, OHCI_DMACTL(off)) & OHCI_CNTL_DMA_ACTIVE)
&& fsegment != -1){
if (OREAD(sc, OHCI_DMACTL(off)) & OHCI_CNTL_DMA_RUN) {
OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_WAKE);
} else if (dbch->top != db_tr) {
/* db_tr contains next unfilled db */
#if 0
printf("start DMA\n");
print_db(dbch->top->db, 0, 2);
#endif
OWRITE(sc, OHCI_DMACMD(off),
vtophys(dbch->top->db) | fsegment);
OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_RUN);
} else
printf("fwohci_start: nothing to kick\n");
}
#else
#if 1
if(dbch->xferq.flag & FWXFERQ_RUNNING) {
#else
reg = OREAD(sc, OHCI_DMACTL(off));
if ((reg & OHCI_CNTL_DMA_RUN) && !(reg & OHCI_CNTL_DMA_DEAD)) {
#endif
OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_WAKE);
} else {
printf("start AT DMA status=%x\n",
@ -881,36 +807,46 @@ static void fwohci_start(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_RUN);
dbch->xferq.flag |= FWXFERQ_RUNNING;
}
#endif
dbch->top = db_tr;
splx(s);
return;
}
static void fwohci_drain_atq(struct firewire_comm *fc, struct fw_xfer *xfer)
static void
fwohci_drain_atq(struct firewire_comm *fc, struct fw_xfer *xfer)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
fwohci_drain(&sc->fc, xfer, &(sc->atrq));
return;
}
static void fwohci_drain_ats(struct firewire_comm *fc, struct fw_xfer *xfer)
static void
fwohci_drain_ats(struct firewire_comm *fc, struct fw_xfer *xfer)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
fwohci_drain(&sc->fc, xfer, &(sc->atrs));
return;
}
static void fwohci_start_atq(struct firewire_comm *fc)
static void
fwohci_start_atq(struct firewire_comm *fc)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
fwohci_start( sc, &(sc->atrq));
return;
}
static void fwohci_start_ats(struct firewire_comm *fc)
static void
fwohci_start_ats(struct firewire_comm *fc)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
fwohci_start( sc, &(sc->atrs));
return;
}
void fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
void
fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
{
int s, err = 0;
struct fwohcidb_tr *tr;
@ -931,20 +867,13 @@ void fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
tr = dbch->bottom;
packets = 0;
while(dbch->xferq.queued > 0){
#if 0
cmd = 0xfffffff0 & OREAD(sc, OHCI_DMACMD(off));
#endif
LAST_DB(tr, db);
if(!(db->db.desc.status & OHCI_CNTL_DMA_ACTIVE)){
if (fc->status != FWBUSRESET)
/* maybe out of order?? */
goto out;
}
#if 0
if(OREAD(sc, OHCI_DMACTL(off)) & OHCI_CNTL_DMA_DEAD ){
#else
if(db->db.desc.status & OHCI_CNTL_DMA_DEAD) {
#endif
#ifdef OHCI_DEBUG
dump_dma(sc, ch);
dump_db(sc, ch);
@ -1017,11 +946,6 @@ void fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
}
}
dbch->xferq.queued --;
#if 0
} else {
/* already drained after timeout or getting response? */
printf("fwohci_txd: no xfer stat=%d\n", stat);
#endif
}
tr->xfer = NULL;
@ -1030,10 +954,6 @@ void fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
dbch->bottom = tr;
}
out:
#if 0
if (packets < 1)
printf("fwohci_txd: no packets..out of order execution??\n");
#endif
if ((dbch->flags & FWOHCI_DBCH_FULL) && packets > 0) {
printf("make free slot\n");
dbch->flags &= ~FWOHCI_DBCH_FULL;
@ -1041,7 +961,9 @@ void fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
}
splx(s);
}
static void fwohci_drain(struct firewire_comm *fc, struct fw_xfer *xfer, struct fwohci_dbch *dbch)
static void
fwohci_drain(struct firewire_comm *fc, struct fw_xfer *xfer, struct fwohci_dbch *dbch)
{
int i, s;
struct fwohcidb_tr *tr;
@ -1075,7 +997,8 @@ static void fwohci_drain(struct firewire_comm *fc, struct fw_xfer *xfer, struct
return;
}
static void fwohci_db_free(struct fwohci_dbch *dbch)
static void
fwohci_db_free(struct fwohci_dbch *dbch)
{
struct fwohcidb_tr *db_tr;
int idb;
@ -1096,7 +1019,9 @@ static void fwohci_db_free(struct fwohci_dbch *dbch)
free(db_tr, M_DEVBUF);
STAILQ_INIT(&dbch->db_trq);
}
static void fwohci_db_init(struct fwohci_dbch *dbch)
static void
fwohci_db_init(struct fwohci_dbch *dbch)
{
int idb;
struct fwohcidb *db;
@ -1146,7 +1071,9 @@ static void fwohci_db_init(struct fwohci_dbch *dbch)
dbch->top = STAILQ_FIRST(&dbch->db_trq);
dbch->bottom = dbch->top;
}
static int fwohci_itx_disable(struct firewire_comm *fc, int dmach)
static int
fwohci_itx_disable(struct firewire_comm *fc, int dmach)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
OWRITE(sc, OHCI_ITCTLCLR(dmach), OHCI_CNTL_DMA_RUN);
@ -1156,7 +1083,9 @@ static int fwohci_itx_disable(struct firewire_comm *fc, int dmach)
sc->it[dmach].xferq.flag &= ~FWXFERQ_RUNNING;
return 0;
}
static int fwohci_irx_disable(struct firewire_comm *fc, int dmach)
static int
fwohci_irx_disable(struct firewire_comm *fc, int dmach)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
@ -1171,12 +1100,16 @@ static int fwohci_irx_disable(struct firewire_comm *fc, int dmach)
sc->ir[dmach].xferq.flag &= ~FWXFERQ_RUNNING;
return 0;
}
static void fwohci_irx_post (struct firewire_comm *fc , u_int32_t *qld)
static void
fwohci_irx_post (struct firewire_comm *fc , u_int32_t *qld)
{
qld[0] = ntohl(qld[0]);
return;
}
static int fwohci_irxpp_enable(struct firewire_comm *fc, int dmach)
static int
fwohci_irxpp_enable(struct firewire_comm *fc, int dmach)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
int err = 0;
@ -1219,8 +1152,9 @@ static int fwohci_irxpp_enable(struct firewire_comm *fc, int dmach)
}
return err;
}
static int fwohci_tx_enable(struct fwohci_softc *sc,
struct fwohci_dbch *dbch)
static int
fwohci_tx_enable(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
{
int err = 0;
int idb, z, i, dmach = 0;
@ -1274,8 +1208,9 @@ static int fwohci_tx_enable(struct fwohci_softc *sc,
dbch->bottom->db[db_tr->dbcnt - 1].db.desc.depend &= 0xfffffff0;
return err;
}
static int fwohci_rx_enable(struct fwohci_softc *sc,
struct fwohci_dbch *dbch)
static int
fwohci_rx_enable(struct fwohci_softc *sc, struct fwohci_dbch *dbch)
{
int err = 0;
int idb, z, i, dmach = 0;
@ -1348,7 +1283,9 @@ static int fwohci_rx_enable(struct fwohci_softc *sc,
OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_RUN);
return err;
}
static int fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach)
static int
fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
int err = 0;
@ -1424,7 +1361,9 @@ static int fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach)
}
return err;
}
static int fwohci_irxbuf_enable(struct firewire_comm *fc, int dmach)
static int
fwohci_irxbuf_enable(struct firewire_comm *fc, int dmach)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
int err = 0;
@ -1487,7 +1426,9 @@ static int fwohci_irxbuf_enable(struct firewire_comm *fc, int dmach)
OWRITE(sc, FWOHCI_INTMASK, OHCI_INT_DMA_IR);
return err;
}
static int fwohci_irx_enable(struct firewire_comm *fc, int dmach)
static int
fwohci_irx_enable(struct firewire_comm *fc, int dmach)
{
struct fwohci_softc *sc = (struct fwohci_softc *)fc;
int err = 0;
@ -1500,7 +1441,9 @@ static int fwohci_irx_enable(struct firewire_comm *fc, int dmach)
return err;
}
}
int fwohci_shutdown(device_t dev)
int
fwohci_shutdown(device_t dev)
{
u_int i;
struct fwohci_softc *sc = device_get_softc(dev);
@ -1605,22 +1548,13 @@ fwohci_intr_body(struct fwohci_softc *sc, u_int32_t stat, int count)
OWRITE(sc, OHCI_PREQHI, 0x7fffffff);
OWRITE(sc, OHCI_PREQLO, 0xffffffff);
OWRITE(sc, OHCI_PREQUPPER, 0x10000);
#if 0
OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_LINKEN);
OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LPS);
OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LINKEN);
#endif
}
if((stat & OHCI_INT_DMA_IR )){
#ifndef ACK_ALL
OWRITE(sc, FWOHCI_INTSTATCLR, OHCI_INT_DMA_IR);
#endif
#if 0
irstat = OREAD(sc, OHCI_IR_STAT) & OREAD(sc, OHCI_IR_MASK);
#else
irstat = OREAD(sc, OHCI_IR_STAT);
#endif
OWRITE(sc, OHCI_IR_STATCLR, ~0);
for(i = 0; i < fc->nisodma ; i++){
if((irstat & (1 << i)) != 0){
@ -1636,11 +1570,7 @@ fwohci_intr_body(struct fwohci_softc *sc, u_int32_t stat, int count)
#ifndef ACK_ALL
OWRITE(sc, FWOHCI_INTSTATCLR, OHCI_INT_DMA_IT);
#endif
#if 0
itstat = OREAD(sc, OHCI_IT_STAT) & OREAD(sc, OHCI_IT_MASK);
#else
itstat = OREAD(sc, OHCI_IT_STAT);
#endif
OWRITE(sc, OHCI_IT_STATCLR, ~0);
for(i = 0; i < fc->nisodma ; i++){
if((itstat & (1 << i)) != 0){
@ -1679,15 +1609,9 @@ fwohci_intr_body(struct fwohci_softc *sc, u_int32_t stat, int count)
** Checking whether the node is root or not. If root, turn on
** cycle master.
*/
#if 0
OWRITE(sc, FWOHCI_NODEID, (OREAD(sc, FWOHCI_NODEID)) & 0xffff003f);
#endif
device_printf(fc->dev, "node_id = 0x%08x, ", OREAD(sc, FWOHCI_NODEID));
if(!(OREAD(sc, FWOHCI_NODEID) & OHCI_NODE_VALID)){
printf("Bus reset failure\n");
#if 0
fwohci_ibr(sc);
#endif
goto sidout;
}
if( OREAD(sc, FWOHCI_NODEID) & OHCI_NODE_ROOT ){
@ -1818,7 +1742,8 @@ fwohci_set_intr(struct firewire_comm *fc, int enable)
}
}
static void fwohci_tbuf_update(struct fwohci_softc *sc, int dmach)
static void
fwohci_tbuf_update(struct fwohci_softc *sc, int dmach)
{
int stat;
struct firewire_comm *fc = &sc->fc;
@ -1847,7 +1772,9 @@ static void fwohci_tbuf_update(struct fwohci_softc *sc, int dmach)
}
fwohci_itxbuf_enable(&sc->fc, dmach);
}
static void fwohci_rbuf_update(struct fwohci_softc *sc, int dmach)
static void
fwohci_rbuf_update(struct fwohci_softc *sc, int dmach)
{
int stat;
stat = OREAD(sc, OHCI_IRCTL(dmach)) & 0x1f;
@ -1861,7 +1788,10 @@ static void fwohci_rbuf_update(struct fwohci_softc *sc, int dmach)
break;
}
}
void dump_dma(struct fwohci_softc *sc, u_int32_t ch){
void
dump_dma(struct fwohci_softc *sc, u_int32_t ch)
{
u_int32_t off, cntl, stat, cmd, match;
if(ch == 0){
@ -1904,7 +1834,10 @@ void dump_dma(struct fwohci_softc *sc, u_int32_t ch){
device_printf(sc->fc.dev, "dma %d ch: Nostat\n", ch);
}
}
void dump_db(struct fwohci_softc *sc, u_int32_t ch){
void
dump_db(struct fwohci_softc *sc, u_int32_t ch)
{
struct fwohci_dbch *dbch;
struct fwohcidb_tr *cp = NULL, *pp, *np;
volatile struct fwohcidb *curr = NULL, *prev, *next = NULL;
@ -1977,7 +1910,10 @@ void dump_db(struct fwohci_softc *sc, u_int32_t ch){
}
return;
}
void print_db(volatile struct fwohcidb *db, u_int32_t ch, u_int32_t max){
void
print_db(volatile struct fwohcidb *db, u_int32_t ch, u_int32_t max)
{
fwohcireg_t stat;
int i, key;
@ -2054,7 +1990,9 @@ void print_db(volatile struct fwohcidb *db, u_int32_t ch, u_int32_t max){
}
return;
}
void fwohci_ibr(struct firewire_comm *fc)
void
fwohci_ibr(struct firewire_comm *fc)
{
struct fwohci_softc *sc;
u_int32_t fun;
@ -2070,8 +2008,9 @@ void fwohci_ibr(struct firewire_comm *fc)
fun = fwphy_wrdata(sc, FW_PHY_ISBR_REG, fun);
#endif
}
void fwohci_txbufdb(struct fwohci_softc *sc, int dmach,
struct fw_bulkxfer *bulkxfer)
void
fwohci_txbufdb(struct fwohci_softc *sc, int dmach, struct fw_bulkxfer *bulkxfer)
{
struct fwohcidb_tr *db_tr, *fdb_tr;
struct fwohci_dbch *dbch;
@ -2143,7 +2082,10 @@ device_printf(sc->fc.dev, "DB %08x %3d %08x %08x\n", bulkxfer, bulkxfer->npacket
*/
return;
}
static int fwohci_add_tx_buf(struct fwohcidb_tr *db_tr, unsigned short size, int mode, void *buf)
static int
fwohci_add_tx_buf(struct fwohcidb_tr *db_tr, unsigned short size,
int mode, void *buf)
{
volatile struct fwohcidb *db = db_tr->db;
int err = 0;
@ -2176,11 +2118,10 @@ static int fwohci_add_tx_buf(struct fwohcidb_tr *db_tr, unsigned short size, int
db[2].db.desc.cmd |= OHCI_BRANCH_ALWAYS;
return 1;
}
int fwohci_add_rx_buf(db_tr, size, mode, buf, dummy)
struct fwohcidb_tr *db_tr;
unsigned short size;
int mode;
void *buf, *dummy;
int
fwohci_add_rx_buf(struct fwohcidb_tr *db_tr, unsigned short size, int mode,
void *buf, void *dummy)
{
volatile struct fwohcidb *db = db_tr->db;
int i;
@ -2211,9 +2152,6 @@ void *buf, *dummy;
dbuf[1] = buf;
}
for(i = 0 ; i < db_tr->dbcnt ; i++){
#if 0
db[i].db.desc.depend = 0;
#endif
db[i].db.desc.addr = vtophys(dbuf[i]) ;
db[i].db.desc.cmd = OHCI_INPUT_MORE | dsiz[i];
if( mode & FWXFERQ_STREAM ){
@ -2232,17 +2170,9 @@ void *buf, *dummy;
db[db_tr->dbcnt - 1].db.desc.cmd |= OHCI_BRANCH_ALWAYS;
return 1;
}
#if 0
/* BUS parameter initialization after BUS reset */
void fwohci_busreset(sc)
struct fwohci_softc *sc;
{
}
#endif
static void fwohci_ircv(sc, dbch, count)
struct fwohci_softc *sc;
struct fwohci_dbch *dbch;
int count;
static void
fwohci_ircv(struct fwohci_softc *sc, struct fwohci_dbch *dbch, int count)
{
struct fwohcidb_tr *db_tr = dbch->top, *odb_tr;
struct firewire_comm *fc = (struct firewire_comm *)sc;
@ -2291,11 +2221,7 @@ device_printf(sc->fc.dev, "%04x %2x 0x%08x 0x%08x 0x%08x 0x%08x\n", len,
db_tr->db[0].db.desc.status & 0x1f, qld[0],qld[1],qld[2],qld[3]);
}
*/
#if 0
fp=(struct fw_pkt *)(ld + sizeof(struct fwohci_trailer));
#else
fp=(struct fw_pkt *)ld;
#endif
qld[0] = htonl(qld[0]);
plen = sizeof(struct fw_isohdr)
+ ntohs(fp->mode.stream.len) + sizeof(u_int32_t);
@ -2327,13 +2253,6 @@ device_printf(sc->fc.dev, "%04x %2x 0x%08x 0x%08x 0x%08x 0x%08x\n", len,
}
dbch->pdb_tr = db_tr;
db_tr = STAILQ_NEXT(db_tr, link);
#if 0
if (!(reg & OHCI_CNTL_DMA_RUN) ||
!(reg & OHCI_CNTL_DMA_ACTIVE) ||
(reg & OHCI_CNTL_DMA_DEAD)) {
printf("reg = %x\n", reg);
}
#endif
}
dbch->top = db_tr;
reg = OREAD(sc, OHCI_DMACTL(off));
@ -2385,21 +2304,14 @@ fwohci_get_plen(struct fwohci_softc *sc, struct fw_pkt *fp, int hlen)
return 0;
}
static void fwohci_arcv(sc, dbch, count)
struct fwohci_softc *sc;
struct fwohci_dbch *dbch;
int count;
static void
fwohci_arcv(struct fwohci_softc *sc, struct fwohci_dbch *dbch, int count)
{
struct fwohcidb_tr *db_tr;
int z = 1;
struct fw_pkt *fp;
u_int8_t *ld;
u_int32_t stat, off;
#if 0
u_int32_t *qld;
u_int32_t dbcmd;
int itr, i;
#endif
u_int spd;
int len, plen, hlen, pcnt, poff = 0, rlen;
int s;
@ -2415,61 +2327,6 @@ int count;
}
s = splfw();
#if 0
OWRITE(sc, OHCI_DMACTLCLR(off), OHCI_CNTL_DMA_RUN);
dbcmd = OREAD(sc, OHCI_DMACMD(off)) & ~0xf;
/*
{
db_tr = dbch->top;
ld = (u_int8_t *)db_tr->buf;
qld = (u_int32_t *)ld;
len = dbch->xferq.psize - (db_tr->db[0].db.desc.count);
device_printf(sc->fc.dev, "%08x %04x %2x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", ld, len,
db_tr->db[0].db.desc.status & 0x1f, qld[0],qld[1],qld[2],qld[3], dbcmd, vtophys(db_tr->db));
}
*/
for( db_tr = dbch->top, itr = 1;
dbcmd != vtophys(db_tr->db); itr++){
db_tr = STAILQ_NEXT(db_tr, link);
if( itr >= dbch->ndb ) break;
/*
if(itr != 1){
ld = (u_int8_t *)db_tr->buf;
qld = (u_int32_t *)ld;
len = dbch->xferq.psize - (db_tr->db[0].db.desc.count);
device_printf(sc->fc.dev, "%04x %2x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", len,
db_tr->db[0].db.desc.status & 0x1f, qld[0],qld[1],qld[2],qld[3], dbcmd, vtophys(db_tr->db));
}
*/
}
/* OHCI does not support per packet receive mode in Aync receive. */
if( dbcmd != vtophys(db_tr->db)){
if(&sc->arrq == dbch){
OWRITE(sc, FWOHCI_INTMASKCLR, OHCI_INT_DMA_PRRQ);
}else if(&sc->arrs == dbch){
OWRITE(sc, FWOHCI_INTMASKCLR, OHCI_INT_DMA_PRRS);
}
OWRITE(sc, OHCI_DMACTLCLR(off), OHCI_CNTL_DMA_RUN);
splx(s);
return;
}else{
db_tr = STAILQ_NEXT(db_tr, link);
dbch->top = db_tr;
OWRITE(sc, OHCI_DMACMD(off),vtophys(dbch->top->db) | 1);
OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_RUN);
}
db_tr = dbch->bottom;
while(itr > 0){
db_tr->db[0].db.desc.depend |= z;
db_tr = STAILQ_NEXT(db_tr, link);
ld = (u_int8_t *)db_tr->buf;
qld = (u_int32_t *)db_tr->buf;
len = dbch->xferq.psize - (db_tr->db[0].db.desc.count);
pcnt = 0;
do{
#else
db_tr = dbch->top;
pcnt = 0;
/* XXX we cannot handle a packet which lies in more than two buf */
@ -2478,12 +2335,7 @@ device_printf(sc->fc.dev, "%04x %2x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n"
resCount = db_tr->db[0].db.desc.count;
len = dbch->xferq.psize - resCount
- dbch->buf_offset;
#if 0
printf("len: %d resCount: %d offset: %d\n",
len, resCount, dbch->buf_offset);
#endif
while (len > 0 ) {
#endif
if (count >= 0 && count-- == 0)
goto out;
if(dbch->frag.buf != NULL){
@ -2622,10 +2474,6 @@ device_printf(sc->fc.dev, "%04x %2x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n"
pcnt ++;
};
out:
#if 0
itr--;
fwohci_add_rx_buf(db_tr, dbch->xferq.psize, dbch->xferq.flag, 0, NULL);
#else
if (resCount == 0) {
/* done on this buffer */
fwohci_add_rx_buf(db_tr, dbch->xferq.psize,
@ -2639,17 +2487,11 @@ device_printf(sc->fc.dev, "%04x %2x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n"
dbch->buf_offset = dbch->xferq.psize - resCount;
break;
}
#endif
/* XXX make sure DMA is not dead */
}
#if 0
dbch->bottom = db_tr;
dbch->bottom->db[0].db.desc.depend &= 0xfffffff0;
#else
#if 0
if (pcnt < 1)
printf("fwohci_arcv: no packets\n");
#endif
#endif
splx(s);
}