Changeset 269
- Timestamp:
- Nov 19, 2007, 7:04:04 AM (18 years ago)
- Location:
- GPL/trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk/alsa-kernel/core/seq/seq_clientmgr.c
r135 r269 2180 2180 } 2181 2181 2182 2183 static int snd_seq_ioctl(struct file *file,unsigned int cmd, unsigned long arg)2182 //PS++ static int snd_seq_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 2183 static int snd_seq_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 2184 2184 { 2185 2185 struct snd_seq_client *client = file->private_data; -
GPL/trunk/include/dbgos2.h
r130 r269 42 42 #define dprintf3(a) if(DebugLevel > 2) DPE a 43 43 #define DebugInt3() ; //_asm int 3; 44 #define DebInt3() _asm int 3; 44 45 #else // #ifndef DEBUG 45 46 #define dprintf(a) -
GPL/trunk/include/watcom32.mak
r73 r269 13 13 14 14 !if "$(DEBUG)" == "1" 15 CFLAGS = -dDEBUG - bt=os2v2 -e60 -hc -d2 -5r-omlinear -s -w4 -ze -zdp -zl -zq -nt=CODE32 -zff -zgf15 CFLAGS = -dDEBUG -dCONFIG_SND_DEBUG_DETECT -bt=os2v2 -e60 -hc -d2 -5s -omlinear -s -w4 -ze -zdp -zl -zq -nt=CODE32 -zff -zgf 16 16 CPPFLAGS= -xd 17 17 ASFLAGS = -Mb -Li -Sv:M510 -
GPL/trunk/lib32/memory.cpp
r131 r269 264 264 //oops, this didn't work, fail 265 265 VMFree((LINEAR)addr); 266 dprintf(("get_free_dma_pages failed , trying wasteful method instead"));266 dprintf(("get_free_dma_pages failed %x size:%x st:%x end:%x, trying wasteful method instead",physaddr,size,startpage,endpage)); 267 267 return 0; 268 268 } -
GPL/trunk/lib32/ossidc.cpp
r265 r269 110 110 } 111 111 112 dprintf(("OSS32_Initialize. Start addre es: %X", OffsetBeginCS32));112 dprintf(("OSS32_Initialize. Start address: %X", OffsetBeginCS32)); 113 113 // DebugInt3(); 114 114 115 115 if(call_module_init(alsa_sound_init) != 0) return OSSERR_INIT_FAILED; 116 dprintf(("OSS32_Initialize1 "));116 dprintf(("OSS32_Initialize1. Start address: %X", OffsetBeginCS32)); 117 117 if(call_module_init(alsa_pcm_init) != 0) return OSSERR_INIT_FAILED; 118 118 if(call_module_init(alsa_hwdep_init) != 0) return OSSERR_INIT_FAILED; -
GPL/trunk/lib32/sound.c
r267 r269 52 52 int pcm_device = 0; 53 53 int total = 0; 54 int pcm_instances = 0; 54 // int pcm_instances = 0; //PS+++ !!!!!!! what is it!!!! see pcm.lib 55 55 56 56 OpenedHandles opened_handles[8 * 256] = {0}; … … 1065 1065 1066 1066 //****************************************************************************** 1067 ULONG CountWv=0; 1068 ULONG LockAdd=0; 1069 extern ULONG xchg( ULONG *p, ULONG x); 1070 #pragma aux xchg = "xchg [esi],eax" parm [ESI][EAX] value [EAX]; 1067 1071 //****************************************************************************** 1068 1072 OSSRET OSS32_WaveAddBuffer(OSSSTREAMID streamid, ULONG buffer, ULONG size, ULONG *pTransferred, int pcm) … … 1072 1076 int ret, align, size1, ret1; 1073 1077 LONG transferred; 1074 ULONG position,i ;1078 ULONG position,i,j; 1075 1079 char *buf; 1076 int toret = 0;1077 1080 1078 1081 // return OSSERR_SUCCESS; … … 1103 1106 1104 1107 size = min(size, samples_to_bytes(status.avail)); 1108 1109 #ifdef DEBUG_PK 1105 1110 if (size1 != size) 1106 printk("requested size [%i] less then available [%i]\n", size1, size); 1107 #if 0 1108 if (size < per_bytes) 1109 { /*HACK!!!*/ 1110 printk("HACK avoid buffer overrun: requested buffer [%i] less than period [%i]. prev size: %i\n", size, per_bytes, prev_size); 1111 *pTransferred = size; 1112 prev_size = size; 1113 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1114 return OSSERR_SUCCESS; 1115 } 1111 printk("requested size [%d] less then available [%d]\n", size1, size); 1116 1112 #endif 1117 // size = per_bytes * (size / per_bytes); 1118 1119 #ifdef DEBUG_PK 1120 printk("OSS32_WaveAddBuffer hw %i app %i avail %i, orig size: %i, size %i align %i\n", samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr), samples_to_bytes(status.avail), size1, size, per_bytes); 1113 1114 CountWv++; 1115 1116 #ifdef DEBUG 1117 printk("OSS32_WaveAddBuffer N:%d hw %d app %d avail %d, orig size: %d, size %d\n",CountWv, samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr), samples_to_bytes(status.avail), size1, size); 1121 1118 #endif 1122 1119 1123 if(size == 0) { 1120 if (size == 0) 1121 { 1124 1122 #ifdef DEBUG_PK 1125 1123 printk("OSS32_WaveAddBuffer: no room left in hardware buffer!!\n"); … … 1133 1131 1134 1132 transferred = 0; 1133 *pTransferred = 0; 1134 ret = -11; 1135 1135 switch(SNDRV_MINOR_DEVICE(MINOR(pHandle->inode.i_rdev-pcm))) 1136 1136 { 1137 1137 case SNDRV_MINOR_PCM_PLAYBACK: 1138 // size should be aligned to channels number * samplesize 1139 1140 while(TRUE) { 1141 again: 1142 for ( i=0; i < 10000; i++) 1143 { 1144 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status)); 1145 if ( status.state != SNDRV_PCM_STATE_XRUN ) break; 1146 } 1147 if ( i > 9998 ) 1148 { 1149 printk("timeout stat %x avail:%i:%i \n",status.state,samples_to_bytes(status.avail),status.avail); 1150 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1151 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status)); 1152 } 1153 ret = pHandle->file.f_op->write(&pHandle->file, (char *)buffer, size, &pHandle->file.f_pos); 1154 if(ret < 0) { 1155 // check EAGAIN 1156 if (ret == -EPIPE) 1157 { 1158 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1159 // if (ret1 == 0) continue; 1160 // printk("prepare rc %i\n",ret); 1161 } 1162 1163 if(transferred > 0) { 1164 printk("OSS32_WaveAddBuffer failed on partial transfer %x %i; ret = %i\n", buffer, size, ret); 1165 *pTransferred = transferred; 1166 if (toret > 4) 1167 return OSSERR_SUCCESS; /* avoid infinite loop */ 1168 toret++; 1169 goto again; 1170 } 1171 1172 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status)); 1173 1174 if ( ((status.state != SNDRV_PCM_STATE_PREPARED) && 1175 (status.state != SNDRV_PCM_STATE_RUNNING) && 1176 (status.state != SNDRV_PCM_STATE_DRAINING)) || ret == -32 ) { 1177 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1178 printk("OSS32_WaveAddBuffer buffer overrun: size %i, ret %i, trans %i, prev sz %i per sz %i total %i\n", size, ret, transferred, prev_size, per_bytes, total); 1179 //ret = size; 1180 //transferred = size; 1181 if (toret) break; /* avoid infinite loop */ 1182 toret = 1; 1183 goto again; 1184 } 1185 else { 1186 printk("OSS32_WaveAddBuffer failed when SNDRV_MINOR_PCM_PLAYBACK. rc = %i\n",ret); 1187 printk("hw %i app %i avail %i, size %i\n", samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr), samples_to_bytes(status.avail), size); 1188 printk("total = %i\n",total); 1189 printk("state = %i\n",status.state); 1190 printk("avail = %i\n",status.avail); 1191 printk("size req = %i\n",size1); 1192 DebugInt3(); 1193 return UNIXToOSSError(transferred); 1194 } 1195 } 1196 if(ret == 0) { 1197 break; 1198 } 1199 toret = 0; 1200 transferred += ret; 1201 // printk("written: now: %i, buffer: %i, total: %i\n", ret, transferred, total); 1202 buffer += ret; 1203 size -= ret; 1204 if((int)size <= 0) { 1205 break; 1206 } 1138 // size should be aligned to channels number * samplesize //PS+++ what is it and why?!?!?! 1139 j = 10; // 10 try if error 1140 while (size && j && ret) 1141 { 1142 for (i=0; i < 1000; i++) 1143 { 1144 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status)); 1145 // If here any state and have free buffer to any byte 1146 if ((status.state != SNDRV_PCM_STATE_XRUN ) && samples_to_bytes(status.avail) ) 1147 break; 1148 if (i > 998) 1149 { 1150 // printk("timeout stat %x avail:%d hw:%d app:%d\n",status.state,samples_to_bytes(status.avail),samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr)); 1151 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1152 } 1153 } 1154 1155 if (ret1 < 0) 1156 { 1157 // printk("Status Error ret1:%i trans: %i need %d tot:%d\n",ret1,transferred, size,size1); 1158 break; // We have any global error, don't try more 1159 } 1160 1161 ret = pHandle->file.f_op->write(&pHandle->file, (char *)buffer, size, &pHandle->file.f_pos); 1162 1163 if (ret < 0 ) 1164 { // We have any error, don't try more 1165 j--; 1166 if ( ret != -11 ) 1167 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1168 // printk("Error ret:%i ret1:%i trans: %d need %d tot:%d\n",ret,ret1,transferred, size,size1); 1169 continue; 1170 } 1171 if (ret == 0) continue; 1172 transferred += ret; 1173 // printk("written: now: %d, trans: %d need %d tot:%d\n", ret, transferred, size,size1); 1174 buffer += ret; 1175 if (size > ret) 1176 size -= ret; 1177 else 1178 size = 0; 1207 1179 } 1208 1180 break; … … 1215 1187 return OSSERR_INVALID_PARAMETER; 1216 1188 } 1217 if(ret < 0) { 1218 dprintf(("OSS32_WaveAddBuffer failed")); 1219 DebugInt3(); 1220 return UNIXToOSSError(transferred); 1221 } 1222 1223 total+=transferred; 1189 1190 total += transferred; 1224 1191 *pTransferred = transferred; 1225 1192 prev_size = transferred; 1226 if ( transferred < size)1227 { 1228 printk("warning: transferred [% i] less than requested [%i]\n", transferred, size);1229 ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);1193 if (*pTransferred < size1) 1194 { 1195 printk("warning: transferred [%d] less than requested [%d]\n", *pTransferred, size1); 1196 // ret1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0); 1230 1197 } 1231 1198 … … 1292 1259 return UNIXToOSSError(ret); 1293 1260 } 1294 *pBytesAvail = samples_to_bytes(status.avail); 1261 ret = samples_to_bytes(status.avail); 1262 *pBytesAvail = ret > 752? ret - 752 : 0; 1295 1263 return OSSERR_SUCCESS; 1296 1264 }
Note:
See TracChangeset
for help on using the changeset viewer.