73 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /**
 | ||
|  |  * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. | ||
|  |  * | ||
|  |  * This source file is released under GPL v2 license (no other versions). | ||
|  |  * See the COPYING file included in the main directory of this source | ||
|  |  * distribution for the license terms and conditions. | ||
|  |  * | ||
|  |  * @File	ctresource.h | ||
|  |  * | ||
|  |  * @Brief | ||
|  |  * This file contains the definition of generic hardware resources for | ||
|  |  * resource management. | ||
|  |  * | ||
|  |  * @Author	Liu Chun | ||
|  |  * @Date 	May 13 2008 | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef CTRESOURCE_H
 | ||
|  | #define CTRESOURCE_H
 | ||
|  | 
 | ||
|  | #include <linux/types.h>
 | ||
|  | 
 | ||
|  | enum RSCTYP { | ||
|  | 	SRC, | ||
|  | 	SRCIMP, | ||
|  | 	AMIXER, | ||
|  | 	SUM, | ||
|  | 	DAIO, | ||
|  | 	NUM_RSCTYP	/* This must be the last one and less than 16 */ | ||
|  | }; | ||
|  | 
 | ||
|  | struct rsc_ops; | ||
|  | 
 | ||
|  | struct rsc { | ||
|  | 	u32 idx:12;	/* The index of a resource */ | ||
|  | 	u32 type:4;	/* The type (RSCTYP) of a resource */ | ||
|  | 	u32 conj:12;	/* Current conjugate index */ | ||
|  | 	u32 msr:4;	/* The Master Sample Rate a resource working on */ | ||
|  | 	void *ctrl_blk;	/* Chip specific control info block for a resource */ | ||
|  | 	void *hw;	/* Chip specific object for hardware access means */ | ||
|  | 	struct rsc_ops *ops;	/* Generic resource operations */ | ||
|  | }; | ||
|  | 
 | ||
|  | struct rsc_ops { | ||
|  | 	int (*master)(struct rsc *rsc);	/* Move to master resource */ | ||
|  | 	int (*next_conj)(struct rsc *rsc); /* Move to next conjugate resource */ | ||
|  | 	int (*index)(const struct rsc *rsc); /* Return the index of resource */ | ||
|  | 	/* Return the output slot number */ | ||
|  | 	int (*output_slot)(const struct rsc *rsc); | ||
|  | }; | ||
|  | 
 | ||
|  | int rsc_init(struct rsc *rsc, u32 idx, enum RSCTYP type, u32 msr, void *hw); | ||
|  | int rsc_uninit(struct rsc *rsc); | ||
|  | 
 | ||
|  | struct rsc_mgr { | ||
|  | 	enum RSCTYP type; /* The type (RSCTYP) of resource to manage */ | ||
|  | 	unsigned int amount; /* The total amount of a kind of resource */ | ||
|  | 	unsigned int avail; /* The amount of currently available resources */ | ||
|  | 	unsigned char *rscs; /* The bit-map for resource allocation */ | ||
|  | 	void *ctrl_blk; /* Chip specific control info block */ | ||
|  | 	void *hw; /* Chip specific object for hardware access */ | ||
|  | }; | ||
|  | 
 | ||
|  | /* Resource management is based on bit-map mechanism */ | ||
|  | int rsc_mgr_init(struct rsc_mgr *mgr, enum RSCTYP type, | ||
|  | 		 unsigned int amount, void *hw); | ||
|  | int rsc_mgr_uninit(struct rsc_mgr *mgr); | ||
|  | int mgr_get_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int *ridx); | ||
|  | int mgr_put_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int idx); | ||
|  | 
 | ||
|  | #endif /* CTRESOURCE_H */
 |