⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emu10k1.h

📁 Linux Kernel 2.6.9 for OMAP1710
💻 H
📖 第 1 页 / 共 5 页
字号:
} emu10k1_pcm_mixer_t;#define snd_emu10k1_compose_send_routing(route) \((route[0] | (route[1] << 4) | (route[2] << 8) | (route[3] << 12)) << 16)#define snd_emu10k1_compose_audigy_fxrt1(route) \(((unsigned int)route[0] | ((unsigned int)route[1] << 8) | ((unsigned int)route[2] << 16) | ((unsigned int)route[3] << 12)) << 24)#define snd_emu10k1_compose_audigy_fxrt2(route) \(((unsigned int)route[4] | ((unsigned int)route[5] << 8) | ((unsigned int)route[6] << 16) | ((unsigned int)route[7] << 12)) << 24)typedef struct snd_emu10k1_memblk {	snd_util_memblk_t mem;	/* private part */	int first_page, last_page, pages, mapped_page;	unsigned int map_locked;	struct list_head mapped_link;	struct list_head mapped_order_link;} emu10k1_memblk_t;#define snd_emu10k1_memblk_offset(blk)	(((blk)->mapped_page << PAGE_SHIFT) | ((blk)->mem.offset & (PAGE_SIZE - 1)))#define EMU10K1_MAX_TRAM_BLOCKS_PER_CODE	16typedef struct {	struct list_head list;		/* list link container */	unsigned int vcount;	unsigned int count;		/* count of GPR (1..16) */	unsigned char gpr[32];		/* GPR number(s) */	unsigned int value[32];	unsigned int min;		/* minimum range */	unsigned int max;		/* maximum range */	unsigned int translation;	/* translation type (EMU10K1_GPR_TRANSLATION*) */	snd_kcontrol_t *kcontrol;} snd_emu10k1_fx8010_ctl_t;typedef void (snd_fx8010_irq_handler_t)(emu10k1_t *emu, void *private_data);typedef struct _snd_emu10k1_fx8010_irq {	struct _snd_emu10k1_fx8010_irq *next;	snd_fx8010_irq_handler_t *handler;	unsigned char gpr_running;	void *private_data;} snd_emu10k1_fx8010_irq_t;typedef struct {	unsigned int valid: 1,		     opened: 1,		     active: 1;	unsigned int channels;		/* 16-bit channels count */	unsigned int tram_start;	/* initial ring buffer position in TRAM (in samples) */	unsigned int buffer_size;	/* count of buffered samples */	unsigned char gpr_size;		/* GPR containing size of ring buffer in samples (host) */	unsigned char gpr_ptr;		/* GPR containing current pointer in the ring buffer (host = reset, FX8010) */	unsigned char gpr_count;	/* GPR containing count of samples between two interrupts (host) */	unsigned char gpr_tmpcount;	/* GPR containing current count of samples to interrupt (host = set, FX8010) */	unsigned char gpr_trigger;	/* GPR containing trigger (activate) information (host) */	unsigned char gpr_running;	/* GPR containing info if PCM is running (FX8010) */	unsigned char etram[32];	/* external TRAM address & data */	snd_pcm_indirect_t pcm_rec;	unsigned int tram_pos;	unsigned int tram_shift;	snd_emu10k1_fx8010_irq_t *irq;} snd_emu10k1_fx8010_pcm_t;typedef struct {	unsigned short fxbus_mask;	/* used FX buses (bitmask) */	unsigned short extin_mask;	/* used external inputs (bitmask) */	unsigned short extout_mask;	/* used external outputs (bitmask) */	unsigned short pad1;	unsigned int itram_size;	/* internal TRAM size in samples */	struct snd_dma_buffer etram_pages; /* external TRAM pages and size */	unsigned int dbg;		/* FX debugger register */	unsigned char name[128];	int gpr_size;			/* size of allocated GPR controls */	int gpr_count;			/* count of used kcontrols */	struct list_head gpr_ctl;	/* GPR controls */	struct semaphore lock;	snd_emu10k1_fx8010_pcm_t pcm[8];	spinlock_t irq_lock;	snd_emu10k1_fx8010_irq_t *irq_handlers;} snd_emu10k1_fx8010_t;#define emu10k1_gpr_ctl(n) list_entry(n, snd_emu10k1_fx8010_ctl_t, list)typedef struct {	struct _snd_emu10k1 *emu;	snd_rawmidi_t *rmidi;	snd_rawmidi_substream_t *substream_input;	snd_rawmidi_substream_t *substream_output;	unsigned int midi_mode;	spinlock_t input_lock;	spinlock_t output_lock;	spinlock_t open_lock;	int tx_enable, rx_enable;	int port;	int ipr_tx, ipr_rx;	void (*interrupt)(emu10k1_t *emu, unsigned int status);} emu10k1_midi_t;struct _snd_emu10k1 {	int irq;	unsigned long port;			/* I/O port number */	int APS: 1,				/* APS flag */	    no_ac97: 1,				/* no AC'97 */	    tos_link: 1,			/* tos link detected */	    rear_ac97: 1,			/* rear channels are on AC'97 */	    spk71:1;				/* 7.1 configuration (Audigy 2 ZS) */	unsigned int audigy;			/* is Audigy? */	unsigned int revision;			/* chip revision */	unsigned int serial;			/* serial number */	unsigned short model;			/* subsystem id */	unsigned int card_type;			/* EMU10K1_CARD_* */	unsigned int ecard_ctrl;		/* ecard control bits */	unsigned long dma_mask;			/* PCI DMA mask */	int max_cache_pages;			/* max memory size / PAGE_SIZE */	struct snd_dma_buffer silent_page;	/* silent page */	struct snd_dma_buffer ptb_pages;	/* page table pages */	snd_util_memhdr_t *memhdr;		/* page allocation list */	emu10k1_memblk_t *reserved_page;	/* reserved page */	struct list_head mapped_link_head;	struct list_head mapped_order_link_head;	void **page_ptr_table;	unsigned long *page_addr_table;	spinlock_t memblk_lock;	unsigned int spdif_bits[3];		/* s/pdif out setup */	snd_emu10k1_fx8010_t fx8010;		/* FX8010 info */	int gpr_base;		ac97_t *ac97;	struct pci_dev *pci;	snd_card_t *card;	snd_pcm_t *pcm;	snd_pcm_t *pcm_mic;	snd_pcm_t *pcm_efx;	spinlock_t synth_lock;	void *synth;	int (*get_synth_voice)(emu10k1_t *emu);	spinlock_t reg_lock;	spinlock_t emu_lock;	spinlock_t voice_lock;	struct semaphore ptb_lock;	emu10k1_voice_t voices[64];	emu10k1_pcm_mixer_t pcm_mixer[32];	snd_kcontrol_t *ctl_send_routing;	snd_kcontrol_t *ctl_send_volume;	snd_kcontrol_t *ctl_attn;	void (*hwvol_interrupt)(emu10k1_t *emu, unsigned int status);	void (*capture_interrupt)(emu10k1_t *emu, unsigned int status);	void (*capture_mic_interrupt)(emu10k1_t *emu, unsigned int status);	void (*capture_efx_interrupt)(emu10k1_t *emu, unsigned int status);	void (*timer_interrupt)(emu10k1_t *emu);	void (*spdif_interrupt)(emu10k1_t *emu, unsigned int status);	void (*dsp_interrupt)(emu10k1_t *emu);	snd_pcm_substream_t *pcm_capture_substream;	snd_pcm_substream_t *pcm_capture_mic_substream;	snd_pcm_substream_t *pcm_capture_efx_substream;	emu10k1_midi_t midi;	emu10k1_midi_t midi2; /* for audigy */	unsigned int efx_voices_mask[2];};int snd_emu10k1_create(snd_card_t * card,		       struct pci_dev *pci,		       unsigned short extin_mask,		       unsigned short extout_mask,		       long max_cache_bytes,		       int enable_ir,		       emu10k1_t ** remu);int snd_emu10k1_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);int snd_emu10k1_pcm_mic(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);int snd_emu10k1_pcm_efx(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);int snd_emu10k1_fx8010_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);int snd_emu10k1_mixer(emu10k1_t * emu);int snd_emu10k1_fx8010_new(emu10k1_t *emu, int device, snd_hwdep_t ** rhwdep);irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs);/* initialization */void snd_emu10k1_voice_init(emu10k1_t * emu, int voice);int snd_emu10k1_init_efx(emu10k1_t *emu);void snd_emu10k1_free_efx(emu10k1_t *emu);int snd_emu10k1_fx8010_tram_setup(emu10k1_t *emu, u32 size);/* I/O functions */unsigned int snd_emu10k1_ptr_read(emu10k1_t * emu, unsigned int reg, unsigned int chn);void snd_emu10k1_ptr_write(emu10k1_t *emu, unsigned int reg, unsigned int chn, unsigned int data);void snd_emu10k1_efx_write(emu10k1_t *emu, unsigned int pc, unsigned int data);unsigned int snd_emu10k1_efx_read(emu10k1_t *emu, unsigned int pc);void snd_emu10k1_intr_enable(emu10k1_t *emu, unsigned int intrenb);void snd_emu10k1_intr_disable(emu10k1_t *emu, unsigned int intrenb);void snd_emu10k1_voice_intr_enable(emu10k1_t *emu, unsigned int voicenum);void snd_emu10k1_voice_intr_disable(emu10k1_t *emu, unsigned int voicenum);void snd_emu10k1_voice_intr_ack(emu10k1_t *emu, unsigned int voicenum);void snd_emu10k1_voice_set_loop_stop(emu10k1_t *emu, unsigned int voicenum);void snd_emu10k1_voice_clear_loop_stop(emu10k1_t *emu, unsigned int voicenum);void snd_emu10k1_wait(emu10k1_t *emu, unsigned int wait);static inline unsigned int snd_emu10k1_wc(emu10k1_t *emu) { return (inl(emu->port + WC) >> 6) & 0xfffff; }unsigned short snd_emu10k1_ac97_read(ac97_t *ac97, unsigned short reg);void snd_emu10k1_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short data);unsigned int snd_emu10k1_rate_to_pitch(unsigned int rate);unsigned char snd_emu10k1_sum_vol_attn(unsigned int value);/* memory allocation */snd_util_memblk_t *snd_emu10k1_alloc_pages(emu10k1_t *emu, snd_pcm_substream_t *substream);int snd_emu10k1_free_pages(emu10k1_t *emu, snd_util_memblk_t *blk);snd_util_memblk_t *snd_emu10k1_synth_alloc(emu10k1_t *emu, unsigned int size);int snd_emu10k1_synth_free(emu10k1_t *emu, snd_util_memblk_t *blk);int snd_emu10k1_synth_bzero(emu10k1_t *emu, snd_util_memblk_t *blk, int offset, int size);int snd_emu10k1_synth_copy_from_user(emu10k1_t *emu, snd_util_memblk_t *blk, int offset, const char __user *data, int size);int snd_emu10k1_memblk_map(emu10k1_t *emu, emu10k1_memblk_t *blk);/* voice allocation */int snd_emu10k1_voice_alloc(emu10k1_t *emu, emu10k1_voice_type_t type, int pair, emu10k1_voice_t **rvoice);int snd_emu10k1_voice_free(emu10k1_t *emu, emu10k1_voice_t *pvoice);/* MIDI uart */int snd_emu10k1_midi(emu10k1_t * emu);int snd_emu10k1_audigy_midi(emu10k1_t * emu);/* proc interface */int snd_emu10k1_proc_init(emu10k1_t * emu);/* fx8010 irq handler */int snd_emu10k1_fx8010_register_irq_handler(emu10k1_t *emu,					    snd_fx8010_irq_handler_t *handler,					    unsigned char gpr_running,					    void *private_data,					    snd_emu10k1_fx8010_irq_t **r_irq);int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,					      snd_emu10k1_fx8010_irq_t *irq);#endif /* __KERNEL__ *//* * ---- FX8010 ---- */#define EMU10K1_CARD_CREATIVE			0x00000000#define EMU10K1_CARD_EMUAPS			0x00000001#define EMU10K1_FX8010_PCM_COUNT		8/* instruction set */#define iMAC0	 0x00	/* R = A + (X * Y >> 31)   ; saturation */#define iMAC1	 0x01	/* R = A + (-X * Y >> 31)  ; saturation */#define iMAC2	 0x02	/* R = A + (X * Y >> 31)   ; wraparound */#define iMAC3	 0x03	/* R = A + (-X * Y >> 31)  ; wraparound */#define iMACINT0 0x04	/* R = A + X * Y	   ; saturation */#define iMACINT1 0x05	/* R = A + X * Y	   ; wraparound (31-bit) */#define iACC3	 0x06	/* R = A + X + Y	   ; saturation */#define iMACMV   0x07	/* R = A, acc += X * Y >> 31 */#define iANDXOR  0x08	/* R = (A & X) ^ Y */#define iTSTNEG  0x09	/* R = (A >= Y) ? X : ~X */#define iLIMITGE 0x0a	/* R = (A >= Y) ? X : Y */#define iLIMITLT 0x0b	/* R = (A < Y) ? X : Y */#define iLOG	 0x0c	/* R = linear_data, A (log_data), X (max_exp), Y (format_word) */#define iEXP	 0x0d	/* R = log_data, A (linear_data), X (max_exp), Y (format_word) */#define iINTERP  0x0e	/* R = A + (X * (Y - A) >> 31)  ; saturation */#define iSKIP    0x0f	/* R = A (cc_reg), X (count), Y (cc_test) *//* GPRs */#define FXBUS(x)	(0x00 + (x))	/* x = 0x00 - 0x0f */#define EXTIN(x)	(0x10 + (x))	/* x = 0x00 - 0x0f */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -