Update of /cvsroot/alsa/alsa-kernel/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-kernel/include
Modified Files: cs46xx.h emu10k1.h memalloc.h pcm.h trident.h ymfpci.h Log Message: Big DMA cleanup originated by Russell King <[EMAIL PROTECTED]> * Russel - introduced 'struct device' support for 2.6 dma_alloc_coherent() * Jaroslav - removed all bus-specific allocation functions - extended snd_dma_alloc_pages/snd_dma_free_pages to handle all bus types - recoded all (or almost all) device drivers - sgbuf functions are bus independent now Index: cs46xx.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/include/cs46xx.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- cs46xx.h 23 Oct 2003 14:34:52 -0000 1.17 +++ cs46xx.h 2 Mar 2004 15:32:36 -0000 1.18 @@ -1646,9 +1646,7 @@ typedef struct _snd_cs46xx cs46xx_t; typedef struct _snd_cs46xx_pcm_t { - unsigned char *hw_area; - dma_addr_t hw_addr; /* PCI bus address, not accessible */ - unsigned long hw_size; + struct snd_dma_buffer hw_buf; unsigned int ctl; unsigned int shift; /* Shift count to trasform frames in bytes */ @@ -1693,9 +1691,7 @@ unsigned int mode; struct { - unsigned char *hw_area; - dma_addr_t hw_addr; /* PCI bus address, not accessible */ - unsigned long hw_size; + struct snd_dma_buffer hw_buf; unsigned int ctl; unsigned int shift; /* Shift count to trasform frames in bytes */ @@ -1727,6 +1723,8 @@ unsigned int midcr; unsigned int uartm; + struct snd_dma_device dma_dev; + int amplifier; void (*amplifier_ctrl)(cs46xx_t *, int); void (*active_ctrl)(cs46xx_t *, int); Index: emu10k1.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/include/emu10k1.h,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- emu10k1.h 25 Feb 2004 07:32:11 -0000 1.37 +++ emu10k1.h 2 Mar 2004 15:32:36 -0000 1.38 @@ -901,9 +901,7 @@ unsigned short extout_mask; /* used external outputs (bitmask) */ unsigned short pad1; unsigned int itram_size; /* internal TRAM size in samples */ - unsigned int etram_size; /* external TRAM size in samples */ - void *etram_pages; /* allocated pages for external TRAM */ - dma_addr_t etram_pages_dmaaddr; + 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 */ @@ -947,11 +945,10 @@ unsigned int card_type; /* EMU10K1_CARD_* */ unsigned int ecard_ctrl; /* ecard control bits */ unsigned long dma_mask; /* PCI DMA mask */ + struct snd_dma_device dma_dev; /* DMA device description */ int max_cache_pages; /* max memory size / PAGE_SIZE */ - void *silent_page; /* silent page */ - dma_addr_t silent_page_dmaaddr; - volatile u32 *ptb_pages; /* page table pages */ - dma_addr_t ptb_pages_dmaaddr; + 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 */ Index: memalloc.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/include/memalloc.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- memalloc.h 8 Apr 2003 15:36:30 -0000 1.2 +++ memalloc.h 2 Mar 2004 15:32:36 -0000 1.3 @@ -29,13 +29,17 @@ #include <asm/sbus.h> #endif +struct device; + /* * buffer device info */ struct snd_dma_device { int type; /* SNDRV_MEM_TYPE_XXX */ union { - struct pci_dev *pci; /* for PCI and PCI-SG types */ + void *data; + struct device *dev; /* generic device */ + struct pci_dev *pci; /* PCI device */ unsigned int flags; /* GFP_XXX for continous and ISA types */ #ifdef CONFIG_SBUS struct sbus_dev *sbus; /* for SBUS type */ @@ -51,22 +55,10 @@ #define SNDRV_DMA_TYPE_CONTINUOUS 1 /* continuous no-DMA memory */ #define SNDRV_DMA_TYPE_ISA 2 /* ISA continuous */ #define SNDRV_DMA_TYPE_PCI 3 /* PCI continuous */ -#define SNDRV_DMA_TYPE_SBUS 4 /* SBUS continuous */ -#define SNDRV_DMA_TYPE_PCI_SG 5 /* PCI SG-buffer */ - -#ifdef CONFIG_PCI -/* - * compose a snd_dma_device struct for the PCI device - */ -static inline void snd_dma_device_pci(struct snd_dma_device *dev, struct pci_dev *pci, unsigned int id) -{ - memset(dev, 0, sizeof(*dev)); - dev->type = SNDRV_DMA_TYPE_PCI; - dev->dev.pci = pci; - dev->id = id; -} -#endif - +#define SNDRV_DMA_TYPE_PCI_SG 4 /* PCI SG-buffer */ +#define SNDRV_DMA_TYPE_DEV 5 /* generic device continuous */ +#define SNDRV_DMA_TYPE_DEV_SG 6 /* generic device SG-buffer */ +#define SNDRV_DMA_TYPE_SBUS 7 /* SBUS continuous */ /* * info for buffer allocation @@ -78,67 +70,8 @@ void *private_data; /* private for allocator; don't touch */ }; -/* allocate/release a buffer */ -int snd_dma_alloc_pages(const struct snd_dma_device *dev, size_t size, struct snd_dma_buffer *dmab); -void snd_dma_free_pages(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab); - -/* buffer-preservation managements */ -size_t snd_dma_get_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab); -int snd_dma_free_reserved(const struct snd_dma_device *dev); -int snd_dma_set_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab); - - -/* - * Generic memory allocators - */ - -/* - * continuous pages - */ -void *snd_malloc_pages(size_t size, unsigned int gfp_flags); -void *snd_malloc_pages_fallback(size_t size, unsigned int gfp_flags, size_t *res_size); -void snd_free_pages(void *ptr, size_t size); - -#ifdef CONFIG_PCI -/* - * PCI continuous pages - */ -void *snd_malloc_pci_pages(struct pci_dev *pci, size_t size, dma_addr_t *dma_addr); -void *snd_malloc_pci_pages_fallback(struct pci_dev *pci, size_t size, dma_addr_t *dma_addr, size_t *res_size); -void snd_free_pci_pages(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t dma_addr); -/* one page allocation */ -void *snd_malloc_pci_page(struct pci_dev *pci, dma_addr_t *dma_addr); -#define snd_free_pci_page(pci,ptr,addr) snd_free_pci_pages(pci,PAGE_SIZE,ptr,addr) -#endif - -#ifdef CONFIG_SBUS -/* - * SBUS continuous pages - */ -void *snd_malloc_sbus_pages(struct sbus_dev *sdev, size_t size, dma_addr_t *dma_addr); -void *snd_malloc_sbus_pages_fallback(struct sbus_dev *sdev, size_t size, dma_addr_t *dma_addr, size_t *res_size); -void snd_free_sbus_pages(struct sbus_dev *sdev, size_t size, void *ptr, dma_addr_t dma_addr); -#endif - -#ifdef CONFIG_ISA -/* - * ISA continuous pages - */ -void *snd_malloc_isa_pages(size_t size, dma_addr_t *dma_addr); -void *snd_malloc_isa_pages_fallback(size_t size, dma_addr_t *dma_addr, size_t *res_size); -void snd_free_isa_pages(size_t size, void *ptr, dma_addr_t addr); -#ifdef CONFIG_PCI -#define snd_malloc_isa_pages(size, dma_addr) snd_malloc_pci_pages(NULL, size, dma_addr) -#define snd_malloc_isa_pages_fallback(size, dma_addr, res_size) snd_malloc_pci_pages_fallback(NULL, size, dma_addr, res_size) -#define snd_free_isa_pages(size, ptr, dma_addr) snd_free_pci_pages(NULL, size, ptr, dma_addr) -#else /* !CONFIG_PCI */ -#define snd_free_isa_pages(size, ptr, dma_addr) snd_free_pages(ptr, size) -#endif /* CONFIG_PCI */ -#endif /* CONFIG_ISA */ - -#ifdef CONFIG_PCI /* - * Scatter-Gather PCI pages + * Scatter-Gather generic device pages */ struct snd_sg_page { void *buf; @@ -151,12 +84,9 @@ int tblsize; /* allocated table size */ struct snd_sg_page *table; /* address table */ struct page **page_table; /* page table (for vmap/vunmap) */ - struct pci_dev *pci; + const struct snd_dma_device *dev; }; -void *snd_malloc_sgbuf_pages(struct pci_dev *pci, size_t size, struct snd_dma_buffer *dmab); -int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab); - /* * return the pages matching with the given byte size */ @@ -172,6 +102,27 @@ { return sgbuf->table[offset >> PAGE_SHIFT].addr + offset % PAGE_SIZE; } -#endif /* CONFIG_PCI */ + + +/* snd_dma_device management */ +void snd_dma_device_init(const struct snd_dma_device *dev, int type, void *data); + +/* allocate/release a buffer */ +int snd_dma_alloc_pages(const struct snd_dma_device *dev, size_t size, + struct snd_dma_buffer *dmab); +int snd_dma_alloc_pages_fallback(const struct snd_dma_device *dev, size_t size, + struct snd_dma_buffer *dmab); +void snd_dma_free_pages(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab); + +/* buffer-preservation managements */ +size_t snd_dma_get_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab); +int snd_dma_free_reserved(const struct snd_dma_device *dev); +int snd_dma_set_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab); + +/* basic memory allocation functions */ +void *snd_malloc_pages(size_t size, unsigned int gfp_flags); +void *snd_malloc_pages_fallback(size_t size, unsigned int gfp_flags, size_t *res_size); +void snd_free_pages(void *ptr, size_t size); #endif /* __SOUND_MEMALLOC_H */ + Index: pcm.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/include/pcm.h,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- pcm.h 24 Feb 2004 15:37:45 -0000 1.37 +++ pcm.h 2 Mar 2004 15:32:36 -0000 1.38 @@ -904,52 +904,23 @@ * Memory */ +#define snd_pcm_dma_flags(x) ((void *)(unsigned long)(x)) + int snd_pcm_lib_preallocate_free(snd_pcm_substream_t *substream); int snd_pcm_lib_preallocate_free_for_all(snd_pcm_t *pcm); int snd_pcm_lib_preallocate_pages(snd_pcm_substream_t *substream, - size_t size, size_t max, - unsigned int flags); + int type, void *data, + size_t size, size_t max); int snd_pcm_lib_preallocate_pages_for_all(snd_pcm_t *pcm, - size_t size, size_t max, - unsigned int flags); + int type, void *data, + size_t size, size_t max); int snd_pcm_lib_malloc_pages(snd_pcm_substream_t *substream, size_t size); int snd_pcm_lib_free_pages(snd_pcm_substream_t *substream); -#ifdef CONFIG_ISA -int snd_pcm_lib_preallocate_isa_pages(snd_pcm_substream_t *substream, - size_t size, size_t max); -int snd_pcm_lib_preallocate_isa_pages_for_all(snd_pcm_t *pcm, - size_t size, size_t max); -#endif -#ifdef CONFIG_PCI -int snd_pcm_lib_preallocate_pci_pages(struct pci_dev *pci, - snd_pcm_substream_t *substream, - size_t size, size_t max); -int snd_pcm_lib_preallocate_pci_pages_for_all(struct pci_dev *pci, - snd_pcm_t *pcm, - size_t size, - size_t max); -int snd_pcm_lib_preallocate_sg_pages(struct pci_dev *pci, - snd_pcm_substream_t *substream, - size_t size, size_t max); -int snd_pcm_lib_preallocate_sg_pages_for_all(struct pci_dev *pci, - snd_pcm_t *pcm, - size_t size, size_t max); #define snd_pcm_substream_sgbuf(substream) ((substream)->runtime->dma_private) #define snd_pcm_sgbuf_pages(size) snd_sgbuf_aligned_pages(size) #define snd_pcm_sgbuf_get_addr(sgbuf,ofs) snd_sgbuf_get_addr(sgbuf,ofs) struct page *snd_pcm_sgbuf_ops_page(snd_pcm_substream_t *substream, unsigned long offset); -#endif - -#ifdef CONFIG_SBUS -int snd_pcm_lib_preallocate_sbus_pages(struct sbus_dev *sdev, - snd_pcm_substream_t *substream, - size_t size, size_t max); -int snd_pcm_lib_preallocate_sbus_pages_for_all(struct sbus_dev *sdev, - snd_pcm_t *pcm, - size_t size, - size_t max); -#endif static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max) { Index: trident.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/include/trident.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- trident.h 23 Oct 2003 14:34:52 -0000 1.15 +++ trident.h 2 Mar 2004 15:32:36 -0000 1.16 @@ -308,11 +308,9 @@ unsigned int * entries; /* 16k-aligned TLB table */ dma_addr_t entries_dmaaddr; /* 16k-aligned PCI address to TLB table */ unsigned long * shadow_entries; /* shadow entries with virtual addresses */ - void * buffer; /* pointer for table calloc */ - dma_addr_t buffer_dmaaddr; /* not accessible PCI BUS physical address */ + struct snd_dma_buffer buffer; snd_util_memhdr_t * memhdr; /* page allocation list */ - void * silent_page; /* silent page */ - dma_addr_t silent_page_dmaaddr; /* not accessible PCI BUS physical address */ + struct snd_dma_buffer silent_page; } snd_trident_tlb_t; struct _snd_trident_voice { @@ -435,6 +433,8 @@ spinlock_t event_lock; spinlock_t voice_alloc; + struct snd_dma_device dma_dev; + struct pci_dev *pci; snd_card_t *card; snd_pcm_t *pcm; /* ADC/DAC PCM */ Index: ymfpci.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/include/ymfpci.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- ymfpci.h 23 Oct 2003 14:34:52 -0000 1.13 +++ ymfpci.h 2 Mar 2004 15:32:36 -0000 1.14 @@ -316,9 +316,8 @@ struct gameport gameport; #endif - void *work_ptr; - dma_addr_t work_ptr_addr; - unsigned long work_ptr_size; + struct snd_dma_device dma_dev; + struct snd_dma_buffer work_ptr; unsigned int bank_size_playback; unsigned int bank_size_capture; @@ -333,8 +332,7 @@ dma_addr_t bank_base_capture_addr; dma_addr_t bank_base_effect_addr; dma_addr_t work_base_addr; - void *ac3_tmp_base; - dma_addr_t ac3_tmp_base_addr; + struct snd_dma_buffer ac3_tmp_base; u32 *ctrl_playback; snd_ymfpci_playback_bank_t *bank_playback[YDSXG_PLAYBACK_VOICES][2]; ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog