linux/sound/pci/ctxfi/ctresource.h
<<
>>
Prefs
   1/**
   2 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
   3 *
   4 * This source file is released under GPL v2 license (no other versions).
   5 * See the COPYING file included in the main directory of this source
   6 * distribution for the license terms and conditions.
   7 *
   8 * @File        ctresource.h
   9 *
  10 * @Brief
  11 * This file contains the definition of generic hardware resources for
  12 * resource management.
  13 *
  14 * @Author      Liu Chun
  15 * @Date        May 13 2008
  16 *
  17 */
  18
  19#ifndef CTRESOURCE_H
  20#define CTRESOURCE_H
  21
  22#include <linux/types.h>
  23
  24enum RSCTYP {
  25        SRC,
  26        SRCIMP,
  27        AMIXER,
  28        SUM,
  29        DAIO,
  30        NUM_RSCTYP      /* This must be the last one and less than 16 */
  31};
  32
  33struct rsc_ops;
  34
  35struct rsc {
  36        u32 idx:12;     /* The index of a resource */
  37        u32 type:4;     /* The type (RSCTYP) of a resource */
  38        u32 conj:12;    /* Current conjugate index */
  39        u32 msr:4;      /* The Master Sample Rate a resource working on */
  40        void *ctrl_blk; /* Chip specific control info block for a resource */
  41        struct hw *hw;  /* Chip specific object for hardware access means */
  42        const struct rsc_ops *ops;      /* Generic resource operations */
  43};
  44
  45struct rsc_ops {
  46        int (*master)(struct rsc *rsc); /* Move to master resource */
  47        int (*next_conj)(struct rsc *rsc); /* Move to next conjugate resource */
  48        int (*index)(const struct rsc *rsc); /* Return the index of resource */
  49        /* Return the output slot number */
  50        int (*output_slot)(const struct rsc *rsc);
  51};
  52
  53int
  54rsc_init(struct rsc *rsc, u32 idx, enum RSCTYP type, u32 msr, struct hw *hw);
  55int rsc_uninit(struct rsc *rsc);
  56
  57struct rsc_mgr {
  58        enum RSCTYP type; /* The type (RSCTYP) of resource to manage */
  59        unsigned int amount; /* The total amount of a kind of resource */
  60        unsigned int avail; /* The amount of currently available resources */
  61        unsigned char *rscs; /* The bit-map for resource allocation */
  62        void *ctrl_blk; /* Chip specific control info block */
  63        struct hw *hw; /* Chip specific object for hardware access */
  64};
  65
  66/* Resource management is based on bit-map mechanism */
  67int rsc_mgr_init(struct rsc_mgr *mgr, enum RSCTYP type,
  68                 unsigned int amount, struct hw *hw);
  69int rsc_mgr_uninit(struct rsc_mgr *mgr);
  70int mgr_get_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int *ridx);
  71int mgr_put_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int idx);
  72
  73#endif /* CTRESOURCE_H */
  74