| Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 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 */ | 
 | 41 | 	void *hw;	/* Chip specific object for hardware access means */ | 
 | 42 | 	struct rsc_ops *ops;	/* Generic resource operations */ | 
 | 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 |  | 
 | 53 | int rsc_init(struct rsc *rsc, u32 idx, enum RSCTYP type, u32 msr, void *hw); | 
 | 54 | int rsc_uninit(struct rsc *rsc); | 
 | 55 |  | 
 | 56 | struct rsc_mgr { | 
 | 57 | 	enum RSCTYP type; /* The type (RSCTYP) of resource to manage */ | 
 | 58 | 	unsigned int amount; /* The total amount of a kind of resource */ | 
 | 59 | 	unsigned int avail; /* The amount of currently available resources */ | 
 | 60 | 	unsigned char *rscs; /* The bit-map for resource allocation */ | 
 | 61 | 	void *ctrl_blk; /* Chip specific control info block */ | 
 | 62 | 	void *hw; /* Chip specific object for hardware access */ | 
 | 63 | }; | 
 | 64 |  | 
 | 65 | /* Resource management is based on bit-map mechanism */ | 
 | 66 | int rsc_mgr_init(struct rsc_mgr *mgr, enum RSCTYP type, | 
 | 67 | 		 unsigned int amount, void *hw); | 
 | 68 | int rsc_mgr_uninit(struct rsc_mgr *mgr); | 
 | 69 | int mgr_get_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int *ridx); | 
 | 70 | int mgr_put_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int idx); | 
 | 71 |  | 
 | 72 | #endif /* CTRESOURCE_H */ |