[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] sndif: add ABI for Para-virtual sound



>>> On 20.01.15 at 10:02, <oleksandr.dmytryshyn@xxxxxxxxxxxxxxx> wrote:
> Frontend driver registers an virtual sound card
> and sends an PCM streams to the backend driver.

This seems backwards - a frontend driver may attach to a virtual sound
card, but is unlikely to be the entity creating (i.. registering) it.

> Backend driver is an user-space application.

This is irrelevant for the public interface.

> + 
> *****************************************************************************
> + *                            Frontend XenBus Nodes
> + 
> *****************************************************************************
> + *
> + *----------------------- Request Transport Parameters 
> -----------------------
> + *
> + * event-channel
> + *      Values:         <uint32_t>
> + *
> + *      The identifier of the Xen event channel used to signal activity
> + *      in the ring buffer.
> + *
> + * ring-ref
> + *      Values:         <uint32_t>
> + *      Notes:          6

Please don't blindly copy-and-paste from other headers. There's no note
6 anywhere here, and even if it was the numbering should start at 1.

> +/*
> + * PCM FORMATS.
> + */
> +#define SNDIF_PCM_FORMAT_S8             (0)
> +#define SNDIF_PCM_FORMAT_U8             (1)
> +#define SNDIF_PCM_FORMAT_S16_LE         (2)
> +#define SNDIF_PCM_FORMAT_S16_BE         (3)
> +#define SNDIF_PCM_FORMAT_U16_LE         (4)
> +#define SNDIF_PCM_FORMAT_U16_BE         (5)

Pointless parentheses.

> +/* low three bytes */
> +#define SNDIF_PCM_FORMAT_S24_LE         (6)
> +
> +/* low three bytes */
> +#define SNDIF_PCM_FORMAT_S24_BE         (7)
> +
> +/* low three bytes */
> +#define SNDIF_PCM_FORMAT_U24_LE         (8)
> +
> +/* low three bytes */
> +#define SNDIF_PCM_FORMAT_U24_BE         (9)

What are these "low three bytes" comments to tell us? Please if
you add comments, make them meaningful (and as this particular
one appears to apply to three similarly named #define-s, just
one instance of it will suffice). Furthermore the presence of a
comment here implies to me that one is missing from the
_[SU]16_[BL]E ones above as well as a few more below.

> +/*
> + * STATUS RETURN CODES.
> + */
> + /* Operation failed for some unspecified reason (-EIO). */
> +#define SNDIF_RSP_ERROR       -1

Missing parentheses.

> +struct sndif_request {
> +    uint8_t operation;          /* SNDIF_OP_??? */
> +    union {

Looks like you started from a Linux clone of blkif.h. This way of laying
out things is just not suitable without the use of (forbidden) compiler
extensions. Simply make the respective fields of this structure unions,
rather than using this union of structures.

> +        struct sndif_request_common common;
> +        struct sndif_request_open open;
> +        struct sndif_request_rw rw;
> +        struct sndif_request_volume vol;
> +    } u;
> +} __attribute__((__packed__));

And do you btw realize that this together with there not being
padding after "operation" yields all of the other structure fields
unaligned? IOW, besides needing to drop the packing, you
should also make all padding explicit, and that in a way that it
fits both 32- and 64-bit consumers.

> +struct sndif_response {
> +    uint64_t id;                /* copied from request */
> +    uint8_t operation;          /* copied from request */
> +    int16_t status;             /* SNDIF_RSP_???       */
> +};
> +
> +DEFINE_RING_TYPES(sndif, struct sndif_request, struct sndif_response);
> +
> +#endif /* __XEN_PUBLIC_IO_SNDIF_H__ */

Also, overall - despite existing headers under io/ giving bad examples,
please let's not add further public definitions without proper XEN_ or
xen_ prefixes.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.