|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 10/10] driver/char: add RX support to the XHCI driver
On Fri, Aug 05, 2022 at 10:38:13AM +0200, Jan Beulich wrote:
> On 26.07.2022 05:23, Marek Marczykowski-Górecki wrote:
> > @@ -440,6 +442,16 @@ static void xhci_trb_norm_set_ioc(struct xhci_trb *trb)
> > trb->ctrl |= 0x20;
> > }
> >
> > +static uint64_t xhci_trb_norm_buf(struct xhci_trb *trb)
>
> const please.
>
> > +{
> > + return trb->params;
> > +}
> > +
> > +static uint32_t xhci_trb_norm_len(struct xhci_trb *trb)
>
> And again.
>
> > +{
> > + return trb->status & 0x1FFFF;
> > +}
> > +
> > /**
> > * Fields for Transfer Event TRBs (see section 6.4.2.1). Note that event
> > * TRBs are read-only from software
> > @@ -454,6 +466,12 @@ static uint32_t xhci_trb_tfre_cc(const struct xhci_trb
> > *trb)
> > return trb->status >> 24;
> > }
> >
> > +/* Amount of data _not_ transferred */
> > +static uint32_t xhci_trb_tfre_len(const struct xhci_trb *trb)
> > +{
> > + return trb->status & 0x1FFFF;
> > +}
>
> Same as xhci_trb_norm_len()?
Yes, I was considering to use that, but technically those are different
packets, only incidentally using the same bits.
>
> > @@ -985,6 +1054,33 @@ static void dbc_flush(struct dbc *dbc, struct
> > xhci_trb_ring *trb,
> > }
> >
> > /**
> > + * Ensure DbC has a pending transfer TRB to receive data into.
> > + *
> > + * @param dbc the dbc to flush
> > + * @param trb the ring for the TRBs to transfer
> > + * @param wrk the work ring to receive data into
> > + */
> > +static void dbc_enqueue_in(struct dbc *dbc, struct xhci_trb_ring *trb,
> > + struct dbc_work_ring *wrk)
>
> I can't seem to be able to spot any use of this function - it being
> static, how do things build for you?
It's in dbc_uart_poll().
>
> > +{
> > + struct dbc_reg *reg = dbc->dbc_reg;
> > + uint32_t db = (readl(®->db) & 0xFFFF00FF) | (trb->db << 8);
>
> I think I've seen this constant in earlier patches. Can this be
> a #define please, such that one can easily connect all the places
> where the same things is meant?
Ok.
> > +
> > + /* Check if there is already queued TRB */
> > + if ( xhci_trb_ring_size(trb) >= 1 )
> > + return;
> > +
> > + if ( dbc_work_ring_full(wrk) )
> > + return;
>
> What made me spot the lack of caller are these return statements.
> Without letting the caller know of the failure, how would it know
> to make another attempt later?
Next iteration of dbc_uart_poll() will take care of it.
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |