root/drivers/gpu/drm/nouveau/nvif/client.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. nvif_client_ioctl
  2. nvif_client_suspend
  3. nvif_client_resume
  4. nvif_client_fini
  5. nvif_client_init

   1 /*
   2  * Copyright 2013 Red Hat Inc.
   3  *
   4  * Permission is hereby granted, free of charge, to any person obtaining a
   5  * copy of this software and associated documentation files (the "Software"),
   6  * to deal in the Software without restriction, including without limitation
   7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8  * and/or sell copies of the Software, and to permit persons to whom the
   9  * Software is furnished to do so, subject to the following conditions:
  10  *
  11  * The above copyright notice and this permission notice shall be included in
  12  * all copies or substantial portions of the Software.
  13  *
  14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20  * OTHER DEALINGS IN THE SOFTWARE.
  21  *
  22  * Authors: Ben Skeggs <bskeggs@redhat.com>
  23  */
  24 
  25 #include <nvif/client.h>
  26 #include <nvif/driver.h>
  27 #include <nvif/ioctl.h>
  28 
  29 #include <nvif/class.h>
  30 #include <nvif/if0000.h>
  31 
  32 int
  33 nvif_client_ioctl(struct nvif_client *client, void *data, u32 size)
  34 {
  35         return client->driver->ioctl(client->object.priv, client->super, data, size, NULL);
  36 }
  37 
  38 int
  39 nvif_client_suspend(struct nvif_client *client)
  40 {
  41         return client->driver->suspend(client->object.priv);
  42 }
  43 
  44 int
  45 nvif_client_resume(struct nvif_client *client)
  46 {
  47         return client->driver->resume(client->object.priv);
  48 }
  49 
  50 void
  51 nvif_client_fini(struct nvif_client *client)
  52 {
  53         nvif_object_fini(&client->object);
  54         if (client->driver) {
  55                 if (client->driver->fini)
  56                         client->driver->fini(client->object.priv);
  57                 client->driver = NULL;
  58         }
  59 }
  60 
  61 int
  62 nvif_client_init(struct nvif_client *parent, const char *name, u64 device,
  63                  struct nvif_client *client)
  64 {
  65         struct nvif_client_v0 args = { .device = device };
  66         struct {
  67                 struct nvif_ioctl_v0 ioctl;
  68                 struct nvif_ioctl_nop_v0 nop;
  69         } nop = {};
  70         int ret;
  71 
  72         strncpy(args.name, name, sizeof(args.name));
  73         ret = nvif_object_init(parent != client ? &parent->object : NULL,
  74                                0, NVIF_CLASS_CLIENT, &args, sizeof(args),
  75                                &client->object);
  76         if (ret)
  77                 return ret;
  78 
  79         client->object.client = client;
  80         client->object.handle = ~0;
  81         client->route = NVIF_IOCTL_V0_ROUTE_NVIF;
  82         client->super = true;
  83         client->driver = parent->driver;
  84 
  85         if (ret == 0) {
  86                 ret = nvif_client_ioctl(client, &nop, sizeof(nop));
  87                 client->version = nop.nop.version;
  88         }
  89 
  90         if (ret)
  91                 nvif_client_fini(client);
  92         return ret;
  93 }

/* [<][>][^][v][top][bottom][index][help] */