Ignore:
Timestamp:
Mar 18, 2021, 8:57:36 PM (4 years ago)
Author:
David Azarewicz
Message:

Merge changes from Paul's uniaud32next branch.

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/lib32/sound.c

    r605 r679  
    3737#include <stdlib.h>
    3838#include <proto.h>
    39 //#include <dbgos2.h>
     39#include <u32ioctl.h>
    4040#include "soundoss.h"
    4141
     
    4444#define samples_to_bytes(a)     ((a*pHandle->doublesamplesize)/2)
    4545#define bytes_to_samples(a)    (pHandle->doublesamplesize ? ((a*2)/pHandle->doublesamplesize) : a)
    46 int GetMaxChannels(ULONG deviceid, int type);
    4746
    4847struct file_operations oss_devices[OSS32_MAX_DEVICES] = {0};
    49 struct file_operations *alsa_fops = NULL;
     48const struct file_operations *alsa_fops = NULL;
    5049int per_bytes = 0;
    5150int prev_size = 0;
     
    8079//******************************************************************************
    8180//******************************************************************************
    82 int register_chrdev(unsigned int version, const char *name, struct file_operations *fsop)
     81int register_chrdev(unsigned int version, const char *name, const struct file_operations *fsop)
    8382{
    8483   if(!strcmp(name, "alsa")) {
     
    369368                pHandle->file.f_flags = O_NONBLOCK;
    370369
    371                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_INFO, (ULONG)pcminfo);
     370                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_INFO, (ULONG)pcminfo);
    372371                if(ret != 0) {
    373372                        rprintf(("OSS32_QueryDevCaps: SNDRV_PCM_IOCTL_INFO error %i\n", ret));
     
    386385                //get all hardware parameters
    387386                _snd_pcm_hw_params_any(params);
    388                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)params);
     387                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)params);
    389388                if(ret != 0) {
    390389                        rprintf(("OSS32_QueryDevCaps: SNDRV_PCM_IOCTL_HW_REFINE error %i\n", ret));
     
    539538
    540539        ret = alsa_fops->open(&pHandle->inode, &pHandle->file);
     540
    541541        //dprintf(("OSS32_WaveOpen. ret: %i\n", ret));
    542542        /* check if PCM already opened (stupid uniaud16.sys doesnt closes it) */
     
    627627                        {
    628628                                /* prepare for reuse */
    629                                 pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_RESET, 0);
    630                                 pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     629                                pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_RESET, 0);
     630                                pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    631631                        }
    632632                        break;
     
    668668        pHandle->file.f_flags = O_NONBLOCK;
    669669
    670         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     670        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    671671        if (ret)
    672672                rprintf(("Wave prepare ret = %i, streamid %X\n",ret,(ULONG)pHandle));
     
    687687        //set operation to non-blocking
    688688        pHandle->file.f_flags = O_NONBLOCK;
    689         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_START, 0);
     689        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_START, 0);
    690690        if (ret)
    691691                rprintf(("Wave start ret = %i, streamid %X\n",ret,(ULONG)pHandle));
     
    707707        pHandle->file.f_flags = O_NONBLOCK;
    708708
    709         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_DROP, 0);
     709        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_DROP, 0);
    710710        if (ret)
    711711                rprintf(("Wave stop ret = %i. streamid %X\n",ret,(ULONG)pHandle));
     
    727727        pHandle->file.f_flags = O_NONBLOCK;
    728728
    729         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PAUSE, 0);
     729        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PAUSE, 0);
    730730        if (ret)
    731731                rprintf(("Wave pause ret = %i, streamid %X\n",ret,(ULONG)pHandle));
     
    747747        pHandle->file.f_flags = O_NONBLOCK;
    748748
    749         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PAUSE, 1);
     749        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PAUSE, 1);
    750750        if (ret)
    751751                rprintf(("Wave resume ret = %i, streamid %X\n",ret,(ULONG)pHandle));
     
    815815                _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_CHANNELS,
    816816                                                          pHwParams->ulNumChannels, 0);
    817                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     817                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    818818                if (ret == 0) break;
    819819                pHwParams->ulNumChannels--;
     
    828828        _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_FORMAT,
    829829                                                   OSSToALSADataType[pHwParams->ulDataType], 0);
    830         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     830        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    831831        if(ret != 0) {
    832832                rprintf(("invalid format %lx\n", OSSToALSADataType[pHwParams->ulDataType]));
     
    835835        _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
    836836                                                  pHwParams->ulBitsPerSample, 0);
    837         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     837        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    838838        if(ret != 0) {
    839839                rprintf(("invalid number of sample bits %d\n", pHwParams->ulBitsPerSample));
     
    842842        _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_FRAME_BITS,
    843843                                                  pHwParams->ulBitsPerSample*pHwParams->ulNumChannels, 0);
    844         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     844        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    845845        if(ret != 0) {
    846846                rprintf(("invalid number of frame bits %d\n", pHwParams->ulBitsPerSample*pHwParams->ulNumChannels));
     
    859859        _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_RATE,
    860860                                                  pHwParams->ulSampleRate, 0);
    861         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     861        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    862862        if(ret != 0) {
    863863                rprintf(("32_WSetHwPms (first pass) error %d bps:%d fmt: %d ch: %d sr: %d\n",
     
    878878                                _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_RATE,
    879879                                                                          pHwParams->ulSampleRate, 0);
    880                                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     880                                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    881881                                if(ret == 0)
    882882                                {
     
    892892                                        _snd_pcm_hw_param_set(&params, SNDRV_PCM_HW_PARAM_RATE,
    893893                                                                                  pHwParams->ulSampleRate, 0);
    894                                         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)__Stack32ToFlat(&params));
     894                                        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_REFINE, (ULONG)&params);
    895895                                        goto __next;
    896896                                }
     
    10001000                         pHwParams->ulSampleRate, pHwParams->ulBitsPerSample, pHwParams->ulNumChannels, periodsize, nrperiods));
    10011001
    1002         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_HW_PARAMS, (ULONG)__Stack32ToFlat(&params));
     1002        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_HW_PARAMS, (ULONG)&params);
    10031003        if (ret == -77 && fTryAgain == FALSE)
    10041004        {
    1005                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1005                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    10061006                fTryAgain = TRUE;
    10071007                rprintf((" Error -77 from first IOCTL HW Parms"));
     
    10451045                swparams.xfer_align        = periodsize;
    10461046
    1047                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_SW_PARAMS, (ULONG)__Stack32ToFlat(&swparams));
     1047                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_SW_PARAMS, (ULONG)&swparams);
    10481048        }
    10491049
    10501050        total = 0;
    10511051        per_bytes = periodbytes;
    1052         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1052        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    10531053        if ( ((status.state != SNDRV_PCM_STATE_PREPARED) &&
    10541054                   (status.state != SNDRV_PCM_STATE_SETUP) &&
     
    10561056                   (status.state != SNDRV_PCM_STATE_DRAINING))) {
    10571057                rprintf(("Device is not in proper state: %lx. Calling prepare\n", status.state));
    1058                 ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1058                ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    10591059        }
    10601060        return UNIXToOSSError(ret);
     
    10941094
    10951095        /* get the status of the circular dma buffer */
    1096         iRet = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1096        iRet = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    10971097
    10981098        if(iRet) {
     
    11261126                if (status.state == SNDRV_PCM_STATE_XRUN) {
    11271127                        rprintf(("Internal Error: Xrun"));
    1128                         iRet = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1128                        iRet = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    11291129                        if (iRet < 0) {
    11301130                                rprintf(("Prepare failed: state=%x avail=%x ReqSize=%x", status.state, status.avail, ulReqSize));
    11311131                                return UNIXToOSSError(iRet);
    11321132                        }
    1133                         iRet = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1133                        iRet = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    11341134                        rprintf(("Xrun restarted: state=%x avail=%x ReqSize=%x", status.state, status.avail, ulReqSize));
    11351135                        if (iRet < 0) return UNIXToOSSError(iRet);
     
    11651165                while (ulSize && ulJ && iRet) {
    11661166                        for (ulI=0; ulI < 1000; ulI++) {
    1167                                 iRet1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1167                                iRet1 = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    11681168                                // If here any state and have free buffer to any byte
    11691169                                if ((status.state != SNDRV_PCM_STATE_XRUN ) && samples_to_bytes(status.avail) ) break;
     
    11731173                                if (ulI > 998) {
    11741174                                        rprintf(("timeout state=%x avail=%d hw=%d app=%d",status.state,samples_to_bytes(status.avail),samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr)));
    1175                                         iRet1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1175                                        iRet1 = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    11761176                                }
    11771177                        }
     
    11901190                                if ( iRet != -11 ) {
    11911191                                        rprintf(("Doing prepare"));
    1192                                         iRet1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1192                                        iRet1 = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    11931193                                }
    11941194                                continue;
     
    12311231//        {
    12321232//                printk("warning: ulTransferred [%d] less than requested [%d]", *pulTransferred, ulSize);
    1233 //                iRet1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1233//                iRet1 = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    12341234//        }
    12351235
     
    12571257
    12581258        //Get the status of the stream
    1259         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1259        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    12601260
    12611261        if(ret) {
     
    12891289
    12901290        //Get the nr of bytes left in the audio buffer
    1291         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1291        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    12921292
    12931293        if(ret) {
     
    13211321
    13221322        //Get the status of the stream
    1323         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1323        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    13241324
    13251325        if(ret) {
     
    13521352
    13531353        //Get the status of the stream
    1354         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1354        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)&status);
    13551355        if(ret) return UNIXToOSSError(ret);
    13561356        *pStatus = status.state;
     
    13841384
    13851385        dprintf(("OSS32_WaveSetVolume %x to (%d,%d)", streamid, leftvol, rightvol));
    1386         ret = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_SETVOLUME, (ULONG)__Stack32ToFlat(&pcm_volume));
     1386        ret = pHandle->file.f_op->unlocked_ioctl(&pHandle->file, SNDRV_PCM_IOCTL_SETVOLUME, (ULONG)&pcm_volume);
    13871387        return UNIXToOSSError(ret);
    13881388}
Note: See TracChangeset for help on using the changeset viewer.