Commit | Line | Data |
---|---|---|
8cc72361 WYC |
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 | ||
24 | enum 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 | ||
33 | struct rsc_ops; | |
34 | ||
35 | struct 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 */ | |
66640898 | 41 | struct hw *hw; /* Chip specific object for hardware access means */ |
43f2cdeb | 42 | const struct rsc_ops *ops; /* Generic resource operations */ |
8cc72361 WYC |
43 | }; |
44 | ||
45 | struct 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 | ||
66640898 SM |
53 | int |
54 | rsc_init(struct rsc *rsc, u32 idx, enum RSCTYP type, u32 msr, struct hw *hw); | |
8cc72361 WYC |
55 | int rsc_uninit(struct rsc *rsc); |
56 | ||
57 | struct 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 */ | |
66640898 | 63 | struct hw *hw; /* Chip specific object for hardware access */ |
8cc72361 WYC |
64 | }; |
65 | ||
66 | /* Resource management is based on bit-map mechanism */ | |
67 | int rsc_mgr_init(struct rsc_mgr *mgr, enum RSCTYP type, | |
66640898 | 68 | unsigned int amount, struct hw *hw); |
8cc72361 WYC |
69 | int rsc_mgr_uninit(struct rsc_mgr *mgr); |
70 | int mgr_get_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int *ridx); | |
71 | int mgr_put_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int idx); | |
72 | ||
73 | #endif /* CTRESOURCE_H */ |