[PATCH 1/2] Add new drmOpenWithType function (v4)

Emil Velikov emil.l.velikov at gmail.com
Wed Feb 11 05:31:33 PST 2015


On 11 February 2015 at 04:40, Jammy Zhou <Jammy.Zhou at amd.com> wrote:
> v2: Add drmGetMinorBase, and call drmOpenWithType in drmOpen
> v3: Pass 'type' to drmOpenByBusid and drmOpenDevice in drmOpenByName
> v4: Renumber node type definitions, and return -1 for unsupported type
>
> Signed-off-by: Jammy Zhou <Jammy.Zhou at amd.com>
> Reviewed-by: Alex Deucher <alexander.deucher at amd.com> (v3)
> ---
>  xf86drm.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++--------------
>  xf86drm.h |  9 +++++++-
>  2 files changed, 63 insertions(+), 16 deletions(-)
>
> diff --git a/xf86drm.c b/xf86drm.c
> index 345325a..998f010 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
[snip]
> @@ -507,16 +517,20 @@ int drmAvailable(void)
>   *
>   * \sa drmOpenMinor() and drmGetBusid().
>   */
> -static int drmOpenByBusid(const char *busid)
> +static int drmOpenByBusid(const char *busid, int type)
>  {
>      int        i, pci_domain_ok = 1;
>      int        fd;
>      const char *buf;
>      drmSetVersion sv;
> +    int        base = drmGetMinorBase(type);
Nitpick: If we make this const int, the compiler should not
fetch/compute the loop upper limit on each iteration.
Same thing goes for the other use cases.

> +
> +    if (base < 0)
> +        return -1;
>
>      drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid);
> -    for (i = 0; i < DRM_MAX_MINOR; i++) {
> -       fd = drmOpenMinor(i, 1, DRM_NODE_PRIMARY);
> +    for (i = base; i < base + DRM_MAX_MINOR; i++) {
> +       fd = drmOpenMinor(i, 1, type);
>         drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
>         if (fd >= 0) {
>             /* We need to try for 1.4 first for proper PCI domain support
[snip]
> diff --git a/xf86drm.h b/xf86drm.h
> index bfd0670..7e82521 100644
> --- a/xf86drm.h
> +++ b/xf86drm.h
> @@ -552,7 +552,14 @@ do {       register unsigned int __old __asm("o0");                \
>  /* General user-level programmer's API: unprivileged */
>  extern int           drmAvailable(void);
>  extern int           drmOpen(const char *name, const char *busid);
> -extern int drmOpenControl(int minor);
> +
> +#define DRM_NODE_PRIMARY 0
> +#define DRM_NODE_CONTROL 1
> +#define DRM_NODE_RENDER  2
How do others feel about define vs enum nowadays ? I both are fine
imho yet I've went with the latter in another patch :-)

-Emil


More information about the dri-devel mailing list