Back to index

libdrm  2.4.37
Classes | Functions
bufctx.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#include <errno.h>
#include "libdrm_lists.h"
#include "nouveau.h"
#include "private.h"

Go to the source code of this file.

Classes

struct  nouveau_bufref_priv
struct  nouveau_bufbin_priv
struct  nouveau_bufctx_priv

Functions

static struct nouveau_bufref_privnouveau_bufref (struct nouveau_bufref *bctx)
static struct nouveau_bufctx_privnouveau_bufctx (struct nouveau_bufctx *bctx)
int nouveau_bufctx_new (struct nouveau_client *client, int bins, struct nouveau_bufctx **pbctx)
void nouveau_bufctx_del (struct nouveau_bufctx **pbctx)
void nouveau_bufctx_reset (struct nouveau_bufctx *bctx, int bin)
struct nouveau_bufrefnouveau_bufctx_refn (struct nouveau_bufctx *bctx, int bin, struct nouveau_bo *bo, uint32_t flags)
struct nouveau_bufrefnouveau_bufctx_mthd (struct nouveau_bufctx *bctx, int bin, uint32_t packet, struct nouveau_bo *bo, uint64_t data, uint32_t flags, uint32_t vor, uint32_t tor)

Class Documentation

struct nouveau_bufref_priv

Definition at line 41 of file bufctx.c.

Collaboration diagram for nouveau_bufref_priv:
Class Members
struct nouveau_bufctx * bufctx
struct nouveau_bufref_priv * next
struct nouveau_bufbin_priv

Definition at line 53 of file bufctx.c.

Collaboration diagram for nouveau_bufbin_priv:
Class Members
struct nouveau_bufref_priv * list
int relocs
struct nouveau_bufctx_priv

Definition at line 58 of file bufctx.c.

Collaboration diagram for nouveau_bufctx_priv:
Class Members
struct nouveau_bufref_priv * free
int nr_bins

Function Documentation

static struct nouveau_bufctx_priv* nouveau_bufctx ( struct nouveau_bufctx bctx) [static, read]

Definition at line 66 of file bufctx.c.

{
       return (struct nouveau_bufctx_priv *)bctx;
}

Here is the caller graph for this function:

void nouveau_bufctx_del ( struct nouveau_bufctx **  pbctx)

Definition at line 92 of file bufctx.c.

{
       struct nouveau_bufctx_priv *pctx = nouveau_bufctx(*pbctx);
       struct nouveau_bufref_priv *pref;
       if (pctx) {
              while (pctx->nr_bins--)
                     nouveau_bufctx_reset(&pctx->base, pctx->nr_bins);
              while ((pref = pctx->free)) {
                     pctx->free = pref->next;
                     free(pref);
              }
              free(pctx);
              *pbctx = NULL;
       }
}

Here is the call graph for this function:

struct nouveau_bufref* nouveau_bufctx_mthd ( struct nouveau_bufctx bctx,
int  bin,
uint32_t  packet,
struct nouveau_bo bo,
uint64_t  data,
uint32_t  flags,
uint32_t  vor,
uint32_t  tor 
) [read]

Definition at line 154 of file bufctx.c.

{
       struct nouveau_bufctx_priv *pctx = nouveau_bufctx(bctx);
       struct nouveau_bufbin_priv *pbin = &pctx->bins[bin];
       struct nouveau_bufref *bref = nouveau_bufctx_refn(bctx, bin, bo, flags);
       if (bref) {
              bref->packet = packet;
              bref->data = data;
              bref->vor = vor;
              bref->tor = tor;
              pbin->relocs++;
              bctx->relocs++;
       }
       return bref;
}

Here is the call graph for this function:

int nouveau_bufctx_new ( struct nouveau_client client,
int  bins,
struct nouveau_bufctx **  pbctx 
)

Definition at line 72 of file bufctx.c.

{
       struct nouveau_bufctx_priv *priv;

       priv = calloc(1, sizeof(*priv) + sizeof(priv->bins[0]) * bins);
       if (priv) {
              DRMINITLISTHEAD(&priv->base.head);
              DRMINITLISTHEAD(&priv->base.pending);
              DRMINITLISTHEAD(&priv->base.current);
              priv->base.client = client;
              priv->nr_bins = bins;
              *pbctx = &priv->base;
              return 0;
       }

       return -ENOMEM;
}
struct nouveau_bufref* nouveau_bufctx_refn ( struct nouveau_bufctx bctx,
int  bin,
struct nouveau_bo bo,
uint32_t  flags 
) [read]

Definition at line 127 of file bufctx.c.

{
       struct nouveau_bufctx_priv *pctx = nouveau_bufctx(bctx);
       struct nouveau_bufbin_priv *pbin = &pctx->bins[bin];
       struct nouveau_bufref_priv *pref = pctx->free;

       if (!pref)
              pref = malloc(sizeof(*pref));
       else
              pctx->free = pref->next;

       if (pref) {
              pref->base.bo = bo;
              pref->base.flags = flags;
              pref->base.packet = 0;

              DRMLISTADDTAIL(&pref->base.thead, &bctx->pending);
              pref->bufctx = bctx;
              pref->next = pbin->list;
              pbin->list = pref;
       }

       return &pref->base;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nouveau_bufctx_reset ( struct nouveau_bufctx bctx,
int  bin 
)

Definition at line 109 of file bufctx.c.

{
       struct nouveau_bufctx_priv *pctx = nouveau_bufctx(bctx);
       struct nouveau_bufbin_priv *pbin = &pctx->bins[bin];
       struct nouveau_bufref_priv *pref;

       while ((pref = pbin->list)) {
              DRMLISTDELINIT(&pref->base.thead);
              pbin->list = pref->next;
              pref->next = pctx->free;
              pctx->free = pref;
       }

       bctx->relocs -= pbin->relocs;
       pbin->relocs  = 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static struct nouveau_bufref_priv* nouveau_bufref ( struct nouveau_bufref bctx) [static, read]

Definition at line 48 of file bufctx.c.

{
       return (struct nouveau_bufref_priv *)bctx;
}