Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Dec 2002 10:40:17 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Bernd Walter <ticso@cicely8.cicely.de>, toshii@netbsd.org
Cc:        Nate Lawson <nate@root.org>, freebsd-current@FreeBSD.ORG
Subject:   Re: UMASS USB bug? (getting the Sony disk-on-key device working)
Message-ID:  <200212201840.gBKIeHIi052554@apollo.backplane.com>
References:  <Pine.BSF.4.21.0212191442450.60085-100000@root.org> <200212200111.gBK1BW0h026510@apollo.backplane.com> <20021220121100.GA658@cicely8.cicely.de>

next in thread | previous in thread | raw e-mail | index | archive | help

:The NetBSD code is already different:
:1.48         (augustss 15-Sep-99):              /* The OHCI hardware can handle at most one page crossing. */
:1.48         (augustss 15-Sep-99):              if (OHCI_PAGE(dataphys) == dataphysend ||
:1.48         (augustss 15-Sep-99):                  OHCI_PAGE(dataphys) + OHCI_PAGE_SIZE == dataphysend) {
:1.48         (augustss 15-Sep-99):                      /* we can handle it in this TD */
:1.48         (augustss 15-Sep-99):                      curlen = len;
:1.48         (augustss 15-Sep-99):              } else {
:1.48         (augustss 15-Sep-99):                      /* must use multiple TDs, fill as much as possible. */
:1.120        (augustss 03-Feb-02):                      curlen = 2 * OHCI_PAGE_SIZE -
:1.48         (augustss 15-Sep-99):                               (dataphys & (OHCI_PAGE_SIZE-1));
:1.78         (augustss 20-Mar-00):                      /* the length must be a multiple of the max size */
:1.78         (augustss 20-Mar-00):                      curlen -= curlen % UGETW(opipe->pipe.endpoint->edesc->wMaxPacketSize);
:1.78         (augustss 20-Mar-00): #ifdef DIAGNOSTIC
:1.78         (augustss 20-Mar-00):                      if (curlen == 0)
:1.128        (provos   27-Sep-02):                              panic("ohci_alloc_std: curlen == 0");
:1.78         (augustss 20-Mar-00): #endif
:1.48         (augustss 15-Sep-99):              }
:
:
:To bad we did not catch it.
:
:-- 
:B.Walter              COSMO-Project         http://www.cosmo-project.de

    Well, that's the curlen fix, which doesn't apply to us at all 
    (in FreeBSD we do not try to optimize for two physically contiguous
    pages).  I'm not sure why they are using a mod there, I think
    it is as simple as if (curlen > len) curlen = len, but I don't
    understand the 'the length must be a multiple of the max size'
    comment so maybe there is some magic there that I haven't considered.

    The fix that applies to both FreeBSD and NetBSD was the calculation of 
    dataphysend just above the code you indicate.  When I look at ohci.c
    via cvsweb for NetBSD, their 1.135, they have not fixed the 
    dataphysend calculation yet.

    They still have (which is WRONG):

	dataphysend = OHCI_PAGE(dataphys + len - 1);	

    The correct answer is:

	dataphysend = OHCI_PAGE(DMAADDR(dma, len - 1));

    I am going to attempt to add toshii@netbsd.org to this thread, I
    don't know if that is a valid email address :-)

						-Matt


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200212201840.gBKIeHIi052554>