Ignore:
Timestamp:
Sep 26, 2021, 6:18:40 PM (4 years ago)
Author:
David Azarewicz
Message:

Merge changes from next branch.

Location:
GPL/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/pci/trident/trident.c

    r695 r703  
    7777                return err;
    7878
    79         if ((err = snd_trident_create(card, pci,
    80                                       pcm_channels[dev],
    81                                       ((pci->vendor << 16) | pci->device) == TRIDENT_DEVICE_ID_SI7018 ? 1 : 2,
    82                                       wavetable_size[dev],
    83                                       &trident)) < 0) {
     79        err = snd_trident_create(card, pci,
     80                                 pcm_channels[dev],
     81                                 ((pci->vendor << 16) | pci->device) == TRIDENT_DEVICE_ID_SI7018 ? 1 : 2,
     82                                 wavetable_size[dev],
     83                                 &trident);
     84        if (err < 0) {
    8485                snd_card_free(card);
    8586                return err;
     
    110111                card->shortname, trident->port, trident->irq);
    111112
    112         if ((err = snd_trident_pcm(trident, pcm_dev++)) < 0) {
     113        err = snd_trident_pcm(trident, pcm_dev++);
     114        if (err < 0) {
    113115                snd_card_free(card);
    114116                return err;
     
    117119        case TRIDENT_DEVICE_ID_DX:
    118120        case TRIDENT_DEVICE_ID_NX:
    119                 if ((err = snd_trident_foldback_pcm(trident, pcm_dev++)) < 0) {
     121                err = snd_trident_foldback_pcm(trident, pcm_dev++);
     122                if (err < 0) {
    120123                        snd_card_free(card);
    121124                        return err;
     
    124127        }
    125128        if (trident->device == TRIDENT_DEVICE_ID_NX || trident->device == TRIDENT_DEVICE_ID_SI7018) {
    126                 if ((err = snd_trident_spdif_pcm(trident, pcm_dev++)) < 0) {
     129                err = snd_trident_spdif_pcm(trident, pcm_dev++);
     130                if (err < 0) {
    127131                        snd_card_free(card);
    128132                        return err;
    129133                }
    130134        }
    131         if (trident->device != TRIDENT_DEVICE_ID_SI7018 &&
    132             (err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
    133                                        trident->midi_port,
    134                                        MPU401_INFO_INTEGRATED |
    135                                        MPU401_INFO_IRQ_HOOK,
    136                                        -1, &trident->rmidi)) < 0) {
    137                 snd_card_free(card);
    138                 return err;
     135        if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
     136                err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
     137                                          trident->midi_port,
     138                                          MPU401_INFO_INTEGRATED |
     139                                          MPU401_INFO_IRQ_HOOK,
     140                                          -1, &trident->rmidi);
     141                if (err < 0) {
     142                        snd_card_free(card);
     143                        return err;
     144                }
    139145        }
    140146
    141147        snd_trident_create_gameport(trident);
    142148
    143         if ((err = snd_card_register(card)) < 0) {
     149        err = snd_card_register(card);
     150        if (err < 0) {
    144151                snd_card_free(card);
    145152                return err;
  • GPL/trunk/alsa-kernel/pci/trident/trident.h

    r679 r703  
    252252        __le32 *entries;                /* 16k-aligned TLB table */
    253253        dma_addr_t entries_dmaaddr;     /* 16k-aligned PCI address to TLB table */
    254         unsigned long * shadow_entries; /* shadow entries with virtual addresses */
    255254        struct snd_dma_buffer buffer;
    256255        struct snd_util_memhdr * memhdr;        /* page allocation list */
  • GPL/trunk/alsa-kernel/pci/trident/trident_main.c

    r695 r703  
    21322132        int err;
    21332133
    2134         if ((err = snd_pcm_new(trident->card, "trident_dx_nx", device, trident->ChanPCM, 1, &pcm)) < 0)
     2134        err = snd_pcm_new(trident->card, "trident_dx_nx", device, trident->ChanPCM, 1, &pcm);
     2135        if (err < 0)
    21352136                return err;
    21362137
     
    21912192        if (trident->device == TRIDENT_DEVICE_ID_NX)
    21922193                num_chan = 4;
    2193         if ((err = snd_pcm_new(trident->card, "trident_dx_nx", device, 0, num_chan, &foldback)) < 0)
     2194        err = snd_pcm_new(trident->card, "trident_dx_nx", device, 0, num_chan, &foldback);
     2195        if (err < 0)
    21942196                return err;
    21952197
     
    22412243        int err;
    22422244
    2243         if ((err = snd_pcm_new(trident->card, "trident_dx_nx IEC958", device, 1, 0, &spdif)) < 0)
     2245        err = snd_pcm_new(trident->card, "trident_dx_nx IEC958", device, 1, 0, &spdif);
     2246        if (err < 0)
    22442247                return err;
    22452248
     
    29342937                return -ENOMEM;
    29352938
    2936         if ((err = snd_ac97_bus(trident->card, 0, &ops, NULL, &trident->ac97_bus)) < 0)
     2939        err = snd_ac97_bus(trident->card, 0, &ops, NULL, &trident->ac97_bus);
     2940        if (err < 0)
    29372941                goto __out;
    29382942
     
    29422946
    29432947      __again:
    2944         if ((err = snd_ac97_mixer(trident->ac97_bus, &_ac97, &trident->ac97)) < 0) {
     2948        err = snd_ac97_mixer(trident->ac97_bus, &_ac97, &trident->ac97);
     2949        if (err < 0) {
    29452950                if (trident->device == TRIDENT_DEVICE_ID_SI7018) {
    2946                         if ((err = snd_trident_sis_reset(trident)) < 0)
     2951                        err = snd_trident_sis_reset(trident);
     2952                        if (err < 0)
    29472953                                goto __out;
    29482954                        if (retries-- > 0)
     
    29752981
    29762982        if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
    2977                 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_vol_wave_control, trident))) < 0)
     2983                kctl = snd_ctl_new1(&snd_trident_vol_wave_control, trident);
     2984                err = snd_ctl_add(card, kctl);
     2985                if (err < 0)
    29782986                        goto __out;
    29792987                kctl->put(kctl, uctl);
    2980                 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_vol_music_control, trident))) < 0)
     2988                kctl = snd_ctl_new1(&snd_trident_vol_music_control, trident);
     2989                err = snd_ctl_add(card, kctl);
     2990                if (err < 0)
    29812991                        goto __out;
    29822992                kctl->put(kctl, uctl);
     
    29923002                tmix->voice = NULL;
    29933003        }
    2994         if ((trident->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control, trident)) == NULL)
     3004        trident->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control, trident);
     3005        if (!trident->ctl_vol)
    29953006                goto __nomem;
    2996         if ((err = snd_ctl_add(card, trident->ctl_vol)))
     3007        err = snd_ctl_add(card, trident->ctl_vol);
     3008        if (err)
    29973009                goto __out;
    29983010               
    2999         if ((trident->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control, trident)) == NULL)
     3011        trident->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control, trident);
     3012        if (!trident->ctl_pan)
    30003013                goto __nomem;
    3001         if ((err = snd_ctl_add(card, trident->ctl_pan)))
     3014        err = snd_ctl_add(card, trident->ctl_pan);
     3015        if (err)
    30023016                goto __out;
    30033017
    3004         if ((trident->ctl_rvol = snd_ctl_new1(&snd_trident_pcm_rvol_control, trident)) == NULL)
     3018        trident->ctl_rvol = snd_ctl_new1(&snd_trident_pcm_rvol_control, trident);
     3019        if (!trident->ctl_rvol)
    30053020                goto __nomem;
    3006         if ((err = snd_ctl_add(card, trident->ctl_rvol)))
     3021        err = snd_ctl_add(card, trident->ctl_rvol);
     3022        if (err)
    30073023                goto __out;
    30083024
    3009         if ((trident->ctl_cvol = snd_ctl_new1(&snd_trident_pcm_cvol_control, trident)) == NULL)
     3025        trident->ctl_cvol = snd_ctl_new1(&snd_trident_pcm_cvol_control, trident);
     3026        if (!trident->ctl_cvol)
    30103027                goto __nomem;
    3011         if ((err = snd_ctl_add(card, trident->ctl_cvol)))
     3028        err = snd_ctl_add(card, trident->ctl_cvol);
     3029        if (err)
    30123030                goto __out;
    30133031
    30143032        if (trident->device == TRIDENT_DEVICE_ID_NX) {
    3015                 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_ac97_rear_control, trident))) < 0)
     3033                kctl = snd_ctl_new1(&snd_trident_ac97_rear_control, trident);
     3034                err = snd_ctl_add(card, kctl);
     3035                if (err < 0)
    30163036                        goto __out;
    30173037                kctl->put(kctl, uctl);
     
    30293049                        kctl->id.index++;
    30303050                idx = kctl->id.index;
    3031                 if ((err = snd_ctl_add(card, kctl)) < 0)
     3051                err = snd_ctl_add(card, kctl);
     3052                if (err < 0)
    30323053                        goto __out;
    30333054                kctl->put(kctl, uctl);
     
    30403061                kctl->id.index = idx;
    30413062                kctl->id.device = pcm_spdif_device;
    3042                 if ((err = snd_ctl_add(card, kctl)) < 0)
     3063                err = snd_ctl_add(card, kctl);
     3064                if (err < 0)
    30433065                        goto __out;
    30443066
     
    30503072                kctl->id.index = idx;
    30513073                kctl->id.device = pcm_spdif_device;
    3052                 if ((err = snd_ctl_add(card, kctl)) < 0)
     3074                err = snd_ctl_add(card, kctl);
     3075                if (err < 0)
    30533076                        goto __out;
    30543077
     
    30603083                kctl->id.index = idx;
    30613084                kctl->id.device = pcm_spdif_device;
    3062                 if ((err = snd_ctl_add(card, kctl)) < 0)
     3085                err = snd_ctl_add(card, kctl);
     3086                if (err < 0)
    30633087                        goto __out;
    30643088                trident->spdif_pcm_ctl = kctl;
     
    33203344        trident->tlb.entries = (__le32 *)ALIGN((unsigned long)trident->tlb.buffer.area, SNDRV_TRIDENT_MAX_PAGES * 4);
    33213345        trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer.addr, SNDRV_TRIDENT_MAX_PAGES * 4);
    3322         /* allocate shadow TLB page table (virtual addresses) */
    3323         trident->tlb.shadow_entries =
    3324                 vmalloc(array_size(SNDRV_TRIDENT_MAX_PAGES,
    3325                                    sizeof(unsigned long)));
    3326         if (!trident->tlb.shadow_entries)
    3327                 return -ENOMEM;
    33283346
    33293347        /* allocate and setup silent page and initialise TLB entries */
     
    33343352        }
    33353353        memset(trident->tlb.silent_page.area, 0, SNDRV_TRIDENT_PAGE_SIZE);
    3336         for (i = 0; i < SNDRV_TRIDENT_MAX_PAGES; i++) {
     3354        for (i = 0; i < SNDRV_TRIDENT_MAX_PAGES; i++)
    33373355                trident->tlb.entries[i] = cpu_to_le32(trident->tlb.silent_page.addr & ~(SNDRV_TRIDENT_PAGE_SIZE-1));
    3338                 trident->tlb.shadow_entries[i] = (unsigned long)trident->tlb.silent_page.area;
    3339         }
    33403356
    33413357        /* use emu memory block manager code to manage tlb page allocation */
     
    34623478        int err;
    34633479
    3464         if ((err = snd_trident_sis_reset(trident)) < 0)
     3480        err = snd_trident_sis_reset(trident);
     3481        if (err < 0)
    34653482                return err;
    34663483
     
    35073524
    35083525        /* enable PCI device */
    3509         if ((err = pci_enable_device(pci)) < 0)
     3526        err = pci_enable_device(pci);
     3527        if (err < 0)
    35103528                return err;
    35113529        /* check, if we can restrict PCI DMA transfers to 30 bits */
     
    35413559        pci_set_master(pci);
    35423560
    3543         if ((err = pci_request_regions(pci, "Trident Audio")) < 0) {
     3561        err = pci_request_regions(pci, "Trident Audio");
     3562        if (err < 0) {
    35443563                kfree(trident);
    35453564                pci_disable_device(pci);
     
    35613580        trident->tlb.buffer.area = NULL;
    35623581        if (trident->device == TRIDENT_DEVICE_ID_NX) {
    3563                 if ((err = snd_trident_tlb_alloc(trident)) < 0) {
     3582                err = snd_trident_tlb_alloc(trident);
     3583                if (err < 0) {
    35643584                        snd_trident_free(trident);
    35653585                        return err;
     
    35893609        }
    35903610
    3591         if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, trident, &ops)) < 0) {
     3611        err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, trident, &ops);
     3612        if (err < 0) {
    35923613                snd_trident_free(trident);
    35933614                return err;
    35943615        }
    35953616
    3596         if ((err = snd_trident_mixer(trident, pcm_spdif_device)) < 0)
     3617        err = snd_trident_mixer(trident, pcm_spdif_device);
     3618        if (err < 0)
    35973619                return err;
    35983620       
     
    36483670                if (trident->tlb.silent_page.area)
    36493671                        snd_dma_free_pages(&trident->tlb.silent_page);
    3650                 vfree(trident->tlb.shadow_entries);
    36513672                snd_dma_free_pages(&trident->tlb.buffer);
    36523673        }
  • GPL/trunk/alsa-kernel/pci/trident/trident_memory.c

    r679 r703  
    2020 * aligned pages in others
    2121 */
    22 #define __set_tlb_bus(trident,page,ptr,addr) \
    23         do { (trident)->tlb.entries[page] = cpu_to_le32((addr) & ~(SNDRV_TRIDENT_PAGE_SIZE-1)); \
    24              (trident)->tlb.shadow_entries[page] = (ptr); } while (0)
    25 #define __tlb_to_ptr(trident,page) \
    26         (void*)((trident)->tlb.shadow_entries[page])
     22#define __set_tlb_bus(trident,page,addr) \
     23        (trident)->tlb.entries[page] = cpu_to_le32((addr) & ~(SNDRV_TRIDENT_PAGE_SIZE-1))
    2724#define __tlb_to_addr(trident,page) \
    2825        (dma_addr_t)le32_to_cpu((trident->tlb.entries[page]) & ~(SNDRV_TRIDENT_PAGE_SIZE - 1))
     
    3330#define MAX_ALIGN_PAGES         SNDRV_TRIDENT_MAX_PAGES /* maxmium aligned pages */
    3431/* fill TLB entrie(s) corresponding to page with ptr */
    35 #define set_tlb_bus(trident,page,ptr,addr) __set_tlb_bus(trident,page,ptr,addr)
     32#define set_tlb_bus(trident,page,addr) __set_tlb_bus(trident,page,addr)
    3633/* fill TLB entrie(s) corresponding to page with silence pointer */
    37 #define set_silent_tlb(trident,page)    __set_tlb_bus(trident, page, (unsigned long)trident->tlb.silent_page.area, trident->tlb.silent_page.addr)
     34#define set_silent_tlb(trident,page)    __set_tlb_bus(trident, page, trident->tlb.silent_page.addr)
    3835/* get aligned page from offset address */
    3936#define get_aligned_page(offset)        ((offset) >> 12)
    4037/* get offset address from aligned page */
    4138#define aligned_page_offset(page)       ((page) << 12)
    42 /* get buffer address from aligned page */
    43 #define page_to_ptr(trident,page)       __tlb_to_ptr(trident, page)
    4439/* get PCI physical address from aligned page */
    4540#define page_to_addr(trident,page)      __tlb_to_addr(trident, page)
     
    5146#define get_aligned_page(offset)        ((offset) >> 13)
    5247#define aligned_page_offset(page)       ((page) << 13)
    53 #define page_to_ptr(trident,page)       __tlb_to_ptr(trident, (page) << 1)
    5448#define page_to_addr(trident,page)      __tlb_to_addr(trident, (page) << 1)
    5549
    5650/* fill TLB entries -- we need to fill two entries */
    5751static inline void set_tlb_bus(struct snd_trident *trident, int page,
    58                                unsigned long ptr, dma_addr_t addr)
     52                               dma_addr_t addr)
    5953{
    6054        page <<= 1;
    61         __set_tlb_bus(trident, page, ptr, addr);
    62         __set_tlb_bus(trident, page+1, ptr + SNDRV_TRIDENT_PAGE_SIZE, addr + SNDRV_TRIDENT_PAGE_SIZE);
     55        __set_tlb_bus(trident, page, addr);
     56        __set_tlb_bus(trident, page+1, addr + SNDRV_TRIDENT_PAGE_SIZE);
    6357}
    6458static inline void set_silent_tlb(struct snd_trident *trident, int page)
    6559{
    6660        page <<= 1;
    67         __set_tlb_bus(trident, page, (unsigned long)trident->tlb.silent_page.area, trident->tlb.silent_page.addr);
    68         __set_tlb_bus(trident, page+1, (unsigned long)trident->tlb.silent_page.area, trident->tlb.silent_page.addr);
     61        __set_tlb_bus(trident, page, trident->tlb.silent_page.addr);
     62        __set_tlb_bus(trident, page+1, trident->tlb.silent_page.addr);
    6963}
    7064
     
    8175#define get_aligned_page(offset)        ((offset) / ALIGN_PAGE_SIZE)
    8276#define aligned_page_offset(page)       ((page) * ALIGN_PAGE_SIZE)
    83 #define page_to_ptr(trident,page)       __tlb_to_ptr(trident, (page) * UNIT_PAGES)
    8477#define page_to_addr(trident,page)      __tlb_to_addr(trident, (page) * UNIT_PAGES)
    8578
    8679/* fill TLB entries -- UNIT_PAGES entries must be filled */
    8780static inline void set_tlb_bus(struct snd_trident *trident, int page,
    88                                unsigned long ptr, dma_addr_t addr)
     81                               dma_addr_t addr)
    8982{
    9083        int i;
    9184        page *= UNIT_PAGES;
    9285        for (i = 0; i < UNIT_PAGES; i++, page++) {
    93                 __set_tlb_bus(trident, page, ptr, addr);
    94                 ptr += SNDRV_TRIDENT_PAGE_SIZE;
     86                __set_tlb_bus(trident, page, addr);
    9587                addr += SNDRV_TRIDENT_PAGE_SIZE;
    9688        }
     
    10193        page *= UNIT_PAGES;
    10294        for (i = 0; i < UNIT_PAGES; i++, page++)
    103                 __set_tlb_bus(trident, page, (unsigned long)trident->tlb.silent_page.area, trident->tlb.silent_page.addr);
     95                __set_tlb_bus(trident, page, trident->tlb.silent_page.addr);
    10496}
    10597
    10698#endif /* PAGE_SIZE */
    107 
    108 /* calculate buffer pointer from offset address */
    109 static inline void *offset_ptr(struct snd_trident *trident, int offset)
    110 {
    111         char *ptr;
    112         ptr = page_to_ptr(trident, get_aligned_page(offset));
    113         ptr += offset % ALIGN_PAGE_SIZE;
    114         return (void*)ptr;
    115 }
    11699
    117100/* first and last (aligned) pages of memory block */
     
    204187                unsigned long ofs = idx << PAGE_SHIFT;
    205188                dma_addr_t addr = snd_pcm_sgbuf_get_addr(substream, ofs);
    206                 unsigned long ptr = (unsigned long)
    207                         snd_pcm_sgbuf_get_ptr(substream, ofs);
    208189                if (! is_valid_page(addr)) {
    209190                        __snd_util_mem_free(hdr, blk);
     
    211192                        return NULL;
    212193                }
    213                 set_tlb_bus(trident, page, ptr, addr);
     194                set_tlb_bus(trident, page, addr);
    214195        }
    215196        mutex_unlock(&hdr->block_mutex);
     
    229210        struct snd_pcm_runtime *runtime = substream->runtime;
    230211        dma_addr_t addr;
    231         unsigned long ptr;
    232212
    233213#pragma disable_message (136)
     
    250230        /* set TLB entries */
    251231        addr = runtime->dma_addr;
    252         ptr = (unsigned long)runtime->dma_area;
    253232        for (page = firstpg(blk); page <= lastpg(blk); page++,
    254              ptr += SNDRV_TRIDENT_PAGE_SIZE, addr += SNDRV_TRIDENT_PAGE_SIZE) {
     233             addr += SNDRV_TRIDENT_PAGE_SIZE) {
    255234                if (! is_valid_page(addr)) {
    256235                        __snd_util_mem_free(hdr, blk);
     
    258237                        return NULL;
    259238                }
    260                 set_tlb_bus(trident, page, ptr, addr);
     239                set_tlb_bus(trident, page, addr);
    261240        }
    262241        mutex_unlock(&hdr->block_mutex);
Note: See TracChangeset for help on using the changeset viewer.