Changeset 587 for GPL/trunk/drv32
- Timestamp:
- Jun 9, 2016, 10:38:13 PM (9 years ago)
- Location:
- GPL/trunk/drv32
- Files:
-
- 5 added
- 5 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk/drv32/dispatch.c
r542 r587 30 30 #include <devhelp.h> 31 31 #include <devtype.h> 32 #include < devrp.h>32 #include <strategy.h> 33 33 #include "devown.h" 34 34 #include <ossidc.h> … … 36 36 #include <version.h> 37 37 38 extern "C"int cdecl printk(const char * fmt, ...);38 extern int cdecl printk(const char * fmt, ...); 39 39 //****************************************************************************** 40 40 // Dispatch IOCtl requests received from the Strategy routine 41 41 //****************************************************************************** 42 extern "C"int GetUniaudCardInfo(ULONG deviceid, void *info);43 extern "C"int GetUniaudControlNum(ULONG deviceid);44 extern "C"int GetUniaudControls(ULONG deviceid, void *pids);45 extern "C"int GetUniaudControlInfo(ULONG deviceid, ULONG id, void *info);46 extern "C"int GetUniaudControlValueGet(ULONG deviceid, ULONG id, void *value);47 extern "C"int GetUniaudControlValuePut(ULONG deviceid, ULONG id, void *value);48 extern "C"int GetNumberOfPcm(int card_id);49 extern "C"int GetUniaudPcmCaps(ULONG deviceid, void *caps);50 extern "C"int SetPCMInstance(int card_id, int pcm);51 extern "C"int WaitForControlChange(int card_id, int timeout);52 extern "C"int GetNumberOfCards(void);53 extern "C"OSSRET OSS32_WaveOpen(ULONG deviceid, ULONG streamtype, OSSSTREAMID *pStreamId, int pcm, USHORT fileid);54 extern "C"OSSRET OSS32_WaveClose(OSSSTREAMID streamid);55 extern "C"int UniaudIoctlHWRefine(OSSSTREAMID streamid, void *pHwParams);56 extern "C"int UniaudIoctlHWParamSet(OSSSTREAMID streamid, void *pHwParams);57 extern "C"int UniaudIoctlSWParamSet(OSSSTREAMID streamid, void *pSwParams);58 extern "C"int UniaudIoctlPCMStatus(OSSSTREAMID streamid, void *pstatus);59 extern "C"int UniaudIoctlPCMWrite(OSSSTREAMID streamid, char *buf, int size);60 extern "C"int UniaudIoctlPCMRead(OSSSTREAMID streamid, char *buf, int size);61 extern "C"int UniaudIoctlPCMPrepare(OSSSTREAMID streamid);62 extern "C"int UniaudIoctlPCMStart(OSSSTREAMID streamid);63 extern "C"int UniaudIoctlPCMDrop(OSSSTREAMID streamid);64 extern "C"int UniaudIoctlPCMResume(OSSSTREAMID streamid, int pause);65 extern "C"void UniaudCloseAll(USHORT fileid);66 extern "C"int WaitForPCMInterrupt(void *file, int timeout);67 extern "C"int unlock_all;68 extern "C"int OSS32_CloseUNI16(void);69 extern "C"int UniaudCtlGetPowerState(ULONG deviceid, void *state);70 extern "C"int UniaudCtlSetPowerState(ULONG deviceid, void *state);42 extern int GetUniaudCardInfo(ULONG deviceid, void *info); 43 extern int GetUniaudControlNum(ULONG deviceid); 44 extern int GetUniaudControls(ULONG deviceid, void *pids); 45 extern int GetUniaudControlInfo(ULONG deviceid, ULONG id, void *info); 46 extern int GetUniaudControlValueGet(ULONG deviceid, ULONG id, void *value); 47 extern int GetUniaudControlValuePut(ULONG deviceid, ULONG id, void *value); 48 extern int GetNumberOfPcm(int card_id); 49 extern int GetUniaudPcmCaps(ULONG deviceid, void *caps); 50 extern int SetPCMInstance(int card_id, int pcm); 51 extern int WaitForControlChange(int card_id, int timeout); 52 extern int GetNumberOfCards(void); 53 extern OSSRET OSS32_WaveOpen(ULONG deviceid, ULONG streamtype, OSSSTREAMID *pStreamId, int pcm, USHORT fileid); 54 extern OSSRET OSS32_WaveClose(OSSSTREAMID streamid); 55 extern int UniaudIoctlHWRefine(OSSSTREAMID streamid, void *pHwParams); 56 extern int UniaudIoctlHWParamSet(OSSSTREAMID streamid, void *pHwParams); 57 extern int UniaudIoctlSWParamSet(OSSSTREAMID streamid, void *pSwParams); 58 extern int UniaudIoctlPCMStatus(OSSSTREAMID streamid, void *pstatus); 59 extern int UniaudIoctlPCMWrite(OSSSTREAMID streamid, char *buf, int size); 60 extern int UniaudIoctlPCMRead(OSSSTREAMID streamid, char *buf, int size); 61 extern int UniaudIoctlPCMPrepare(OSSSTREAMID streamid); 62 extern int UniaudIoctlPCMStart(OSSSTREAMID streamid); 63 extern int UniaudIoctlPCMDrop(OSSSTREAMID streamid); 64 extern int UniaudIoctlPCMResume(OSSSTREAMID streamid, int pause); 65 extern void UniaudCloseAll(USHORT fileid); 66 extern int WaitForPCMInterrupt(void *file, int timeout); 67 extern int unlock_all; 68 extern int OSS32_CloseUNI16(void); 69 extern int UniaudCtlGetPowerState(ULONG deviceid, void *state); 70 extern int UniaudCtlSetPowerState(ULONG deviceid, void *state); 71 71 72 72 typedef UCHAR LOCKHANDLE[12]; … … 85 85 #pragma pack() 86 86 87 ULONG StratIOCtl(R P __far* _rp)87 ULONG StratIOCtl(REQPACKET __far* rp) 88 88 { 89 RPIOCtl __far* rp = (RPIOCtl __far*)_rp;90 89 USHORT rc = 0;; 91 90 LOCKHANDLE lhParm, lhData; … … 96 95 ULONG ctl_id; 97 96 98 if (rp-> Category != CAT_IOCTL_OSS32)99 { 100 //printk("not our cat %x. func %x\n", rp->Category, rp->Function);97 if (rp->ioctl.bCategory != CAT_IOCTL_OSS32) 98 { 99 //printk("not our cat %x. func %x\n", rp->Category, rp->Function); 101 100 // not our category, exit with error 102 return (RPERR_ COMMAND | RPDONE);101 return (RPERR_BADCOMMAND | RPDONE); 103 102 } 104 103 105 #ifdef DEBUG104 #ifdef DEBUG 106 105 //printk("StratIOCtl 0x%x\n", rp->Function); 107 #endif108 // printk("cmd: %x, len: %i, pack: %x\n",rp->Function, rp->ParmLength, rp->ParmPacket);106 #endif 107 // printk("cmd: %x, len: %i, pack: %x\n",rp->Function, rp->ioctl.usParmLen, rp->ParmPacket); 109 108 // work with Parm Packet 110 if ((rp-> ParmLength!= 0 ||111 rp-> Function == IOCTL_OSS32_ATTACH /*16 bit ioctl*/) &&112 ((rp-> ParmPacket& 0xfffcffff) != 0))109 if ((rp->ioctl.usParmLen != 0 || 110 rp->ioctl.bFunction == IOCTL_OSS32_ATTACH /*16 bit ioctl*/) && 111 ((rp->ioctl.pvParm & 0xfffcffff) != 0)) 113 112 { 114 113 // got Parm Packet 115 rc = DevVirtToLin((USHORT)((ULONG)(rp-> ParmPacket) >> 16),116 (ULONG)((USHORT)(rp-> ParmPacket)),114 rc = DevVirtToLin((USHORT)((ULONG)(rp->ioctl.pvParm) >> 16), 115 (ULONG)((USHORT)(rp->ioctl.pvParm)), 117 116 (UCHAR * __far *)&linParm); 118 117 119 118 if (rc == 0) 120 119 { 121 if (rp->Function == IOCTL_OSS32_ATTACH) 122 { 123 rc = DevVMLock(VMDHL_LONG, 124 (ULONG)linParm, 125 4, 126 (LINEAR)-1L, 127 lhParm, 128 (UCHAR*)&pages); 129 }else 130 { 131 rc = DevVMLock(VMDHL_LONG, 132 (ULONG)linParm, 133 rp->ParmLength, 134 (LINEAR)-1L, 135 lhParm, 136 (UCHAR*)&pages); 120 if (rp->ioctl.bFunction == IOCTL_OSS32_ATTACH) 121 { 122 rc = DevVMLock(VMDHL_LONG, (ULONG)linParm, 4, (LINEAR)-1L, lhParm, (UCHAR*)&pages); 123 } 124 else 125 { 126 rc = DevVMLock(VMDHL_LONG, (ULONG)linParm, rp->ioctl.usParmLen, (LINEAR)-1L, lhParm, (UCHAR*)&pages); 137 127 } 138 128 … … 154 144 155 145 // work with Data Packet 156 if ((rp-> DataLength!= 0) &&157 ((rp-> DataPacket& 0xfffcffff) != 0))146 if ((rp->ioctl.usDataLen != 0) && 147 ((rp->ioctl.pvData & 0xfffcffff) != 0)) 158 148 { 159 149 // got Data Packet 160 rc = DevVirtToLin((USHORT)((ULONG)(rp-> DataPacket) >> 16),161 (ULONG)((USHORT)(rp-> DataPacket)),150 rc = DevVirtToLin((USHORT)((ULONG)(rp->ioctl.pvData) >> 16), 151 (ULONG)((USHORT)(rp->ioctl.pvData)), 162 152 (UCHAR * __far *)&linData); 163 153 if (rc == 0) 164 154 { 165 rc = DevVMLock(VMDHL_LONG, 166 (ULONG)linData, 167 rp->DataLength, 168 (LINEAR)-1L, 169 lhData, 155 rc = DevVMLock(VMDHL_LONG, (ULONG)linData, rp->ioctl.usDataLen, (LINEAR)-1L, lhData, 170 156 (UCHAR*)&pages); 171 157 } else … … 193 179 rc = RPDONE; // ok by default 194 180 195 switch(rp-> Function)181 switch(rp->ioctl.bFunction) 196 182 { 197 183 case IOCTL_OSS32_ATTACH: … … 199 185 card_id = (ULONG) *linParm; 200 186 // Check if audio init was successful 201 if (OSS32_QueryNames(card_id, NULL, 0, 202 NULL, 0, FALSE) != OSSERR_SUCCESS) 187 if (OSS32_QueryNames(card_id, NULL, 0, NULL, 0, FALSE) != OSSERR_SUCCESS) 203 188 { 204 189 rc = RPERR_GENERAL | RPDONE; … … 208 193 case IOCTL_OSS32_VERSION: 209 194 { 210 if (rp-> DataLength< sizeof(ULONG))195 if (rp->ioctl.usDataLen < sizeof(ULONG)) 211 196 { 212 197 // invalid Data Pkt … … 221 206 case IOCTL_OSS32_GET_PCM_NUM: 222 207 { 223 if (rp-> DataLength< sizeof(ULONG))208 if (rp->ioctl.usDataLen < sizeof(ULONG)) 224 209 { 225 210 // invalid Data Pkt … … 234 219 235 220 case IOCTL_OSS32_CARDS_NUM: 236 if (rp-> DataLength< sizeof(ULONG))221 if (rp->ioctl.usDataLen < sizeof(ULONG)) 237 222 { 238 223 // invalid Data Pkt … … 246 231 case IOCTL_OSS32_PCM_CAPS: 247 232 { 248 if (rp-> DataLength< sizeof(ULONG))233 if (rp->ioctl.usDataLen < sizeof(ULONG)) 249 234 { 250 235 // invalid Data Pkt … … 259 244 case IOCTL_OSS32_CARD_INFO: 260 245 { 261 if (rp-> DataLength< sizeof(ULONG))246 if (rp->ioctl.usDataLen < sizeof(ULONG)) 262 247 { 263 248 // invalid Data Pkt … … 272 257 case IOCTL_OSS32_GET_POWER_STATE: 273 258 { 274 if (rp-> DataLength< sizeof(ULONG))259 if (rp->ioctl.usDataLen < sizeof(ULONG)) 275 260 { 276 261 // invalid Data Pkt … … 285 270 case IOCTL_OSS32_SET_POWER_STATE: 286 271 { 287 if (rp-> DataLength< sizeof(ULONG))272 if (rp->ioctl.usDataLen < sizeof(ULONG)) 288 273 { 289 274 // invalid Data Pkt … … 298 283 case IOCTL_OSS32_GET_CNTRLS_NUM: 299 284 { 300 if (rp-> DataLength< sizeof(ULONG))285 if (rp->ioctl.usDataLen < sizeof(ULONG)) 301 286 { 302 287 // invalid Data Pkt … … 313 298 case IOCTL_OSS32_GET_CNTRLS: 314 299 { 315 if (rp-> DataLength< sizeof(ULONG))300 if (rp->ioctl.usDataLen < sizeof(ULONG)) 316 301 { 317 302 // invalid Data Pkt … … 327 312 { 328 313 329 if (rp-> DataLength< sizeof(ULONG))330 { 331 // invalid Data Pkt 332 rc = RPERR_PARAMETER | RPDONE; 333 break; 334 } 335 336 if (rp-> ParmLength< sizeof(ULONG))314 if (rp->ioctl.usDataLen < sizeof(ULONG)) 315 { 316 // invalid Data Pkt 317 rc = RPERR_PARAMETER | RPDONE; 318 break; 319 } 320 321 if (rp->ioctl.usParmLen < sizeof(ULONG)) 337 322 { 338 323 // invalid Data Pkt … … 351 336 case IOCTL_OSS32_CNTRL_GET: 352 337 { 353 if (rp-> DataLength< sizeof(ULONG))354 { 355 // invalid Data Pkt 356 rc = RPERR_PARAMETER | RPDONE; 357 break; 358 } 359 360 if (rp-> ParmLength< sizeof(ULONG))338 if (rp->ioctl.usDataLen < sizeof(ULONG)) 339 { 340 // invalid Data Pkt 341 rc = RPERR_PARAMETER | RPDONE; 342 break; 343 } 344 345 if (rp->ioctl.usParmLen < sizeof(ULONG)) 361 346 { 362 347 // invalid Data Pkt … … 376 361 { 377 362 378 if (rp-> DataLength< sizeof(ULONG)) {379 // invalid Data Pkt 380 rc = RPERR_PARAMETER | RPDONE; 381 break; 382 } 383 384 if (rp-> ParmLength< sizeof(ULONG)) {363 if (rp->ioctl.usDataLen < sizeof(ULONG)) { 364 // invalid Data Pkt 365 rc = RPERR_PARAMETER | RPDONE; 366 break; 367 } 368 369 if (rp->ioctl.usParmLen < sizeof(ULONG)) { 385 370 // invalid Data Pkt 386 371 rc = RPERR_PARAMETER | RPDONE; … … 399 384 { 400 385 401 if (rp-> ParmLength< sizeof(ULONG))386 if (rp->ioctl.usParmLen < sizeof(ULONG)) 402 387 { 403 388 // invalid Data Pkt … … 414 399 case IOCTL_OSS32_CNTRL_WAIT: 415 400 { 416 if (rp-> DataLength< sizeof(ULONG))401 if (rp->ioctl.usDataLen < sizeof(ULONG)) 417 402 { 418 403 // invalid Data Pkt … … 430 415 ioctl_pcm *pcm = (ioctl_pcm *)linParm; 431 416 // close all pcms from uniaud16 first 432 pcm->ret = OSS32_WaveOpen(pcm->deviceid, pcm->streamtype, pData, pcm->pcm, rp-> FileID);417 pcm->ret = OSS32_WaveOpen(pcm->deviceid, pcm->streamtype, pData, pcm->pcm, rp->ioctl.usSysFileNum); 433 418 } 434 419 break; … … 536 521 default: 537 522 { 538 printk("invalid function code %i\n",rp-> Function);523 printk("invalid function code %i\n",rp->ioctl.bFunction); 539 524 // invalid function code 540 525 rc = RPERR_PARAMETER | RPDONE; … … 561 546 // Dispatch Close requests received from the strategy routine 562 547 //****************************************************************************** 563 ULONG StratClose(R P __far* _rp)548 ULONG StratClose(REQPACKET __far* rp) 564 549 { 565 RPOpenClose __far* rp = (RPOpenClose __far*)_rp;566 567 550 // only called if device successfully opened 568 // printk("strat close\n");551 // printk("strat close\n"); 569 552 numOS2Opens--; 570 553 571 UniaudCloseAll(rp-> FileID);554 UniaudCloseAll(rp->open_close.usSysFileNum); 572 555 573 556 if (numOS2Opens == 0) { 574 deviceOwner = DEV_NO_OWNER;557 deviceOwner = DEV_NO_OWNER; 575 558 } 576 559 return(RPDONE); 577 560 } 578 //****************************************************************************** 579 //****************************************************************************** 561 -
GPL/trunk/drv32/idc.c
r549 r587 23 23 */ 24 24 25 extern "C" { // 16-bit header files are not C++ aware25 //DAZ extern "C" { // 16-bit header files are not C++ aware 26 26 #define INCL_NOPMAPI 27 27 #define INCL_DOSINFOSEG 28 28 #include <os2.h> 29 }29 //DAZ } 30 30 #include <devtype.h> 31 31 #include <devhelp.h> 32 #include <strategy.h>32 //#include <strategy.h> 33 33 #include <ossidc32.h> 34 34 #include <irqos2.h> … … 38 38 //16:32 address of 16 bits pdd idc handler 39 39 IDC16_HANDLER idc16_PddHandler = 0; 40 extern "C"int pcm_device;40 extern int pcm_device; 41 41 WORD32 OSS32IDC(ULONG cmd, PIDC32_PACKET pPacket); 42 extern "C"BOOL fRewired; //pci.c42 extern BOOL fRewired; //pci.c 43 43 44 44 //packet pointer must reference a structure on the stack 45 45 46 OSSRET AlsaIDC(ULONG cmd, ULONG packet);47 46 #pragma aux AlsaIDC "ALSA_IDC" parm reverse [ecx edx] 48 47 OSSRET AlsaIDC(ULONG cmd, ULONG packet) -
GPL/trunk/drv32/init.c
r535 r587 31 31 #include <devhelp.h> 32 32 #include <devtype.h> 33 #include <devrp.h> 33 //DAZ #include <devrp.h> 34 #include <strategy.h> 34 35 #include "devown.h" 35 36 #include <version.h> … … 67 68 } MSG_TABLE; 68 69 69 extern "C"FARPTR16 MSG_TABLE32;70 extern "C"char szLastALSAError1[];71 extern "C"char szLastALSAError2[];72 extern "C"int sprintf (char *buffer, const char *format, ...);73 74 extern "C"APIRET APIENTRY DOS16OPEN(PSZ pszFileName, PHFILE phf, PULONG pulAction, ULONG cbFile, ULONG ulAttribute, ULONG fsOpenFlags, ULONG fsOpenMode, PEAOP2 peaop2 );75 extern "C"APIRET APIENTRY DOS16CLOSE(HFILE hFile);76 extern "C"APIRET APIENTRY DOS16WRITE(HFILE hFile, PVOID pBuffer, ULONG cbWrite, PULONG pcbActual);77 extern "C"void SaveBuffer(void);70 extern FARPTR16 MSG_TABLE32; 71 extern char szLastALSAError1[]; 72 extern char szLastALSAError2[]; 73 extern int sprintf (char *buffer, const char *format, ...); 74 75 extern APIRET APIENTRY DOS16OPEN(PSZ pszFileName, PHFILE phf, PULONG pulAction, ULONG cbFile, ULONG ulAttribute, ULONG fsOpenFlags, ULONG fsOpenMode, PEAOP2 peaop2 ); 76 extern APIRET APIENTRY DOS16CLOSE(HFILE hFile); 77 extern APIRET APIENTRY DOS16WRITE(HFILE hFile, PVOID pBuffer, ULONG cbWrite, PULONG pcbActual); 78 extern void SaveBuffer(void); 78 79 79 80 #define VMDHA_FIXED 0x0002 80 81 81 extern "C"APIRET VMAlloc(ULONG size, ULONG flags, char NEAR* *pAddr);82 extern APIRET VMAlloc(ULONG size, ULONG flags, char NEAR* *pAddr); 82 83 83 84 //Print messages with DosWrite when init is done or has failed (see startup.asm) … … 89 90 90 91 for(i=0;i<length;i++) { 91 92 str16[msg->MsgLength + i] = str[i]; 92 93 } 93 94 str16[msg->MsgLength + length] = 0; … … 116 117 segsize = OffsetFinalDS32 - ((OffsetBeginDS32) & ~0xFFF); 117 118 if(segsize & 0xFFF) { 118 119 segsize += PAGE_SIZE; 119 120 } 120 121 segsize &= ~0xFFF; … … 134 135 (LINEAR)&PgCount)) { 135 136 #endif 136 137 return(1); 137 138 } 138 139 /* … … 141 142 segsize = OffsetFinalCS32 - ((OffsetBeginCS32) & ~0xFFF); 142 143 if(segsize & 0xFFF) { 143 144 segsize += PAGE_SIZE; 144 145 } 145 146 segsize &= ~0xFFF; … … 159 160 (LINEAR)&PgCount)) { 160 161 #endif 161 162 return(1); 162 163 } 163 164 return 0; … … 195 196 #endif 196 197 // Initialize device driver 197 WORD32 DiscardableInit(RPInit __far* rp) 198 { 199 char debugmsg[64]; 200 char FAR48 *args; 201 202 #ifdef KEE 203 GetTKSSBase(); 204 #endif 205 206 if(LockSegments()) { 207 WriteString(ERR_ERROR, sizeof(ERR_ERROR)-1); 208 WriteString(ERR_LOCK, sizeof(ERR_LOCK)-1); 209 return RPDONE | RPERR_COMMAND; 210 } 211 212 DebugLevel = 1; 213 rp->Out.FinalCS = 0; 214 rp->Out.FinalDS = 0; 215 216 if ( szprintBuf == 0 ) { 217 VMAlloc( DBG_MAX_BUF_SIZE, VMDHA_FIXED, &szprintBuf ); 218 if (szprintBuf) { 219 memset( szprintBuf, 0, DBG_MAX_BUF_SIZE ); 220 wrOffset= 0; 221 } 222 } 223 if (!HeapInit(HEAP_SIZE)) { 224 rprintf(("HeapInit failed!")); 225 } 226 227 args = MAKE_FARPTR32(rp->In.Args); 228 GetParms(args); 229 230 #ifdef DEBUG 231 rprintf(("Uniaud32 version %s-DEBUG",UNIAUD_VERSION)); 232 #else 233 rprintf(("Uniaud32 version %s",UNIAUD_VERSION)); 234 #endif 235 236 if(fVerbose) { 237 WriteString(szALSA, sizeof(szALSA)-1); 238 WriteString(szCopyRight3, sizeof(szCopyRight3)-1); 239 WriteString(szCopyRight2, sizeof(szCopyRight2)-1); 240 } 241 242 243 if(fDebug) { 244 sprintf(debugmsg, szCodeStartEnd, OffsetBeginCS32, OffsetFinalCS32); 245 WriteString(debugmsg, strlen(debugmsg)); 246 } 247 248 //get the current time (to force retrieval of GIS pointer) 249 os2gettimemsec(); 250 251 char szMixerName[64]; 252 char szDeviceName[128]; 253 254 if(OSS32_Initialize() != OSSERR_SUCCESS) 255 { 256 WriteString(ERR_ERROR, sizeof(ERR_ERROR)-1); 257 WriteString(ERR_INIT, sizeof(ERR_INIT)-1); 258 if(szLastALSAError1[0]) { 259 WriteString(szLastALSAError1, strlen(szLastALSAError1)); 260 } 261 if(szLastALSAError2[0]) { 262 WriteString(szLastALSAError2, strlen(szLastALSAError2)); 263 } 264 // !! dont exit when error !! return RPDONE | RPERR_COMMAND; 265 } else if (OSS32_QueryNames(OSS32_DEFAULT_DEVICE, szDeviceName, 266 sizeof(szDeviceName),szMixerName, 267 sizeof(szMixerName), TRUE) != OSSERR_SUCCESS) 268 { 269 WriteString(ERR_ERROR, sizeof(ERR_ERROR)-1); 270 WriteString(ERR_NAMES, sizeof(ERR_INIT)-1); 271 if(szLastALSAError1[0]) { 272 WriteString(szLastALSAError1, strlen(szLastALSAError1)); 273 } 274 if(szLastALSAError2[0]) { 275 WriteString(szLastALSAError2, strlen(szLastALSAError2)); 276 } 277 278 // !! dont exit when error !! return RPDONE | RPERR_COMMAND; 279 } 280 else 281 if(fVerbose) { 198 WORD32 DiscardableInit(REQPACKET __far* rp) 199 { 200 char debugmsg[64]; 201 char FAR48 *args; 202 203 #ifdef KEE 204 GetTKSSBase(); 205 #endif 206 207 if(LockSegments()) 208 { 209 WriteString(ERR_ERROR, sizeof(ERR_ERROR)-1); 210 WriteString(ERR_LOCK, sizeof(ERR_LOCK)-1); 211 return RPDONE | RPERR_BADCOMMAND; 212 } 213 214 DebugLevel = 1; 215 rp->init_out.usCodeEnd = 0; 216 rp->init_out.usDataEnd = 0; 217 218 if ( szprintBuf == 0 ) 219 { 220 VMAlloc( DBG_MAX_BUF_SIZE, VMDHA_FIXED, &szprintBuf ); 221 if (szprintBuf) 222 { 223 memset( szprintBuf, 0, DBG_MAX_BUF_SIZE ); 224 wrOffset= 0; 225 } 226 } 227 if (!HeapInit(HEAP_SIZE)) 228 { 229 rprintf(("HeapInit failed!")); 230 } 231 232 args = MAKE_FARPTR32(rp->init_in.szArgs); 233 GetParms(args); 234 235 #ifdef DEBUG 236 rprintf(("Uniaud32 version %s-DEBUG",UNIAUD_VERSION)); 237 #else 238 rprintf(("Uniaud32 version %s",UNIAUD_VERSION)); 239 #endif 240 241 if(fVerbose) 242 { 243 WriteString(szALSA, sizeof(szALSA)-1); 244 WriteString(szCopyRight3, sizeof(szCopyRight3)-1); 245 WriteString(szCopyRight2, sizeof(szCopyRight2)-1); 246 } 247 248 if(fDebug) 249 { 250 sprintf(debugmsg, szCodeStartEnd, OffsetBeginCS32, OffsetFinalCS32); 251 WriteString(debugmsg, strlen(debugmsg)); 252 } 253 254 //get the current time (to force retrieval of GIS pointer) 255 os2gettimemsec(); 256 257 char szMixerName[64]; 258 char szDeviceName[128]; 259 260 if(OSS32_Initialize() != OSSERR_SUCCESS) 261 { 262 WriteString(ERR_ERROR, sizeof(ERR_ERROR)-1); 263 WriteString(ERR_INIT, sizeof(ERR_INIT)-1); 264 if(szLastALSAError1[0]) 265 { 266 WriteString(szLastALSAError1, strlen(szLastALSAError1)); 267 } 268 if(szLastALSAError2[0]) 269 { 270 WriteString(szLastALSAError2, strlen(szLastALSAError2)); 271 } 272 // !! dont exit when error !! return RPDONE | RPERR_COMMAND; 273 } 274 else if (OSS32_QueryNames(OSS32_DEFAULT_DEVICE, szDeviceName, 275 sizeof(szDeviceName),szMixerName, 276 sizeof(szMixerName), TRUE) != OSSERR_SUCCESS) 277 { 278 WriteString(ERR_ERROR, sizeof(ERR_ERROR)-1); 279 WriteString(ERR_NAMES, sizeof(ERR_INIT)-1); 280 if(szLastALSAError1[0]) 281 { 282 WriteString(szLastALSAError1, strlen(szLastALSAError1)); 283 } 284 if(szLastALSAError2[0]) 285 { 286 WriteString(szLastALSAError2, strlen(szLastALSAError2)); 287 } 288 289 // !! dont exit when error !! return RPDONE | RPERR_COMMAND; 290 } 291 else 292 if(fVerbose) 293 { 294 WriteString(szDeviceName, strlen(szDeviceName)); 295 WriteString(szEOL, sizeof(szEOL)-1); 296 WriteString(szMixerFound, sizeof(szMixerFound)-1); 297 WriteString(szMixerName, strlen(szMixerName)); 298 WriteString(szEOL, sizeof(szEOL)-1); 299 300 #if 0 301 for(int i=1;i<OSS32_MAX_AUDIOCARDS;i++) 302 { 303 if(OSS32_QueryNames(i, szDeviceName, sizeof(szDeviceName), szMixerName, sizeof(szMixerName)) == OSSERR_SUCCESS) 304 { 282 305 WriteString(szDeviceName, strlen(szDeviceName)); 283 306 WriteString(szEOL, sizeof(szEOL)-1); … … 285 308 WriteString(szMixerName, strlen(szMixerName)); 286 309 WriteString(szEOL, sizeof(szEOL)-1); 287 288 #if 0 289 for(int i=1;i<OSS32_MAX_AUDIOCARDS;i++) { 290 if(OSS32_QueryNames(i, szDeviceName, sizeof(szDeviceName), szMixerName, sizeof(szMixerName)) == OSSERR_SUCCESS) 291 { 292 WriteString(szDeviceName, strlen(szDeviceName)); 293 WriteString(szEOL, sizeof(szEOL)-1); 294 WriteString(szMixerFound, sizeof(szMixerFound)-1); 295 WriteString(szMixerName, strlen(szMixerName)); 296 WriteString(szEOL, sizeof(szEOL)-1); 297 } 298 else break; 299 } 300 #endif 301 WriteString(szEOL, sizeof(szEOL)-1); 302 } 303 // Complete the installation 304 rp->Out.FinalCS = _OffsetFinalCS16; 305 rp->Out.FinalDS = _OffsetFinalDS16; 306 307 //SaveBuffer(); 308 309 // Confirm a successful installation 310 return RPDONE; 311 } 312 310 } 311 else break; 312 } 313 #endif 314 WriteString(szEOL, sizeof(szEOL)-1); 315 } 316 // Complete the installation 317 rp->init_out.usCodeEnd = _OffsetFinalCS16; 318 rp->init_out.usDataEnd = _OffsetFinalDS16; 319 320 //SaveBuffer(); 321 322 // Confirm a successful installation 323 return RPDONE; 324 } 325 -
GPL/trunk/drv32/irq.h
r63 r587 25 25 #define __IRQ_H__ 26 26 27 extern "C"FARPTR16 ISR00;28 extern "C"FARPTR16 ISR01;29 extern "C"FARPTR16 ISR02;30 extern "C"FARPTR16 ISR03;31 extern "C"FARPTR16 ISR04;32 extern "C"FARPTR16 ISR05;33 extern "C"FARPTR16 ISR06;34 extern "C"FARPTR16 ISR07;27 extern FARPTR16 ISR00; 28 extern FARPTR16 ISR01; 29 extern FARPTR16 ISR02; 30 extern FARPTR16 ISR03; 31 extern FARPTR16 ISR04; 32 extern FARPTR16 ISR05; 33 extern FARPTR16 ISR06; 34 extern FARPTR16 ISR07; 35 35 36 36 #endif //__IRQ_H__ -
GPL/trunk/drv32/parse.c
r501 r587 34 34 #include <devhelp.h> 35 35 #include <devtype.h> 36 #include <devrp.h>37 36 #include <unicard.h> 38 37 #include "parse.h" // NUM_DEVICES … … 46 45 int ForceCard = CARD_NONE; 47 46 48 extern "C"short int midi_port;47 extern short int midi_port; 49 48 50 49 #ifdef COMM_DEBUG 51 extern "C"short int MAGIC_COMM_PORT;50 extern short int MAGIC_COMM_PORT; 52 51 #endif 53 52 -
GPL/trunk/drv32/strategy.c
r549 r587 5 5 * (C) 2000-2002 InnoTek Systemberatung GmbH 6 6 * (C) 2000-2001 Sander van Leeuwen (sandervl@xs4all.nl) 7 * Copyright (c) 2013-2015 David Azarewicz david@88watts.net 7 8 * 8 9 * This program is free software; you can redistribute it and/or … … 24 25 25 26 #define INCL_NOPMAPI 26 #define INCL_DOSINFOSEG 27 #define INCL_DOSINFOSEG // Need Global info seg in rm.cpp algorithms 27 28 #include <os2.h> 28 29 29 30 #include <devhelp.h> 30 #include <devrp.h>31 //DAZ #include <devrp.h> 31 32 #include <devown.h> 32 33 #include "strategy.h" … … 35 36 #include <string.h> 36 37 37 ULONG StratRead(R P__far *_rp);38 ULONG StratIOCtl(R P__far *_rp);39 ULONG StratClose(R P__far *_rp);38 ULONG StratRead(REQPACKET __far *_rp); 39 ULONG StratIOCtl(REQPACKET __far *_rp); 40 ULONG StratClose(REQPACKET __far *_rp); 40 41 41 ULONG DiscardableInit(R PInit__far*);42 ULONG DiscardableInit(REQPACKET __far*); 42 43 ULONG deviceOwner = DEV_NO_OWNER; 43 44 ULONG numOS2Opens = 0; 44 extern "C"BOOL fRewired; //pci.c45 extern BOOL fRewired; //pci.c 45 46 46 extern "C"DBGINT DbgInt;47 extern DBGINT DbgInt; 47 48 48 49 //****************************************************************************** 50 ULONG StratOpen(REQPACKET __far* rp) 51 { 52 if (numOS2Opens == 0) 53 { 54 deviceOwner = DEV_PDD_OWNER; 55 } 56 numOS2Opens++; 57 return RPDONE; 58 } 59 49 60 //****************************************************************************** 50 ULONG StratOpen(RP __far*) 51 { 52 if (numOS2Opens == 0) { 53 deviceOwner = DEV_PDD_OWNER; 54 } 55 numOS2Opens++; 56 return RPDONE; 57 } 58 //****************************************************************************** 59 //****************************************************************************** 60 #pragma off (unreferenced) 61 static ULONG StratWrite(RP __far* _rp) 62 #pragma on (unreferenced) 61 //DAZ #pragma off (unreferenced) 62 static ULONG StratWrite(REQPACKET __far* rp) 63 //DAZ #pragma on (unreferenced) 63 64 { 64 65 return RPDONE | RPERR; 65 66 } 67 66 68 //****************************************************************************** 67 69 // External initialization entry-point 68 70 //****************************************************************************** 69 ULONG StratInit(R P __far* _rp)71 ULONG StratInit(REQPACKET __far* rp) 70 72 { 71 73 ULONG rc; 72 74 73 74 75 memset(&DbgInt, 0, sizeof(DbgInt)); 76 DbgPrintIrq(); 75 77 76 77 78 79 80 81 78 //DAZ RPInit __far* rp = (RPInit __far*)_rp; 79 rc = DiscardableInit(rp); 80 //dprintf(("StratInit End rc=%d", rc)); 81 DbgPrintIrq(); 82 DbgInt.ulState = 1; 83 return rc; 82 84 } 85 83 86 //****************************************************************************** 84 87 // External initialization complete entry-point 85 #ifdef ACPI86 #include "irqos2.h"87 #endif //ACPI88 88 //****************************************************************************** 89 #pragma off (unreferenced)90 ULONG StratInitComplete(R P __far* _rp)91 #pragma on (unreferenced)89 //DAZ #pragma off (unreferenced) 90 ULONG StratInitComplete(REQPACKET __far* rp) 91 //DAZ #pragma on (unreferenced) 92 92 { 93 DbgInt.ulState = 2; 94 #ifdef ACPI 95 PciAdjustInterrupts(); 96 #endif 97 DbgPrintIrq(); 98 //dprintf(("StratInitComplete")); 99 return(RPDONE); 93 DbgInt.ulState = 2; 94 DbgPrintIrq(); 95 //dprintf(("StratInitComplete")); 96 return(RPDONE); 100 97 } 98 101 99 //****************************************************************************** 102 //****************************************************************************** 103 #pragma off (unreferenced) 104 ULONG StratShutdown(RP __far *_rp) 105 #pragma on (unreferenced) 100 //DAZ #pragma off (unreferenced) 101 ULONG StratShutdown(REQPACKET __far *rp) 102 //DAZ #pragma on (unreferenced) 106 103 { 107 104 //DAZ RPShutdown __far *rp = (RPShutdown __far *)_rp; 108 105 109 //dprintf(("StratShutdown %d", rp->Function)); 110 if(rp->Function == 1) {//end of shutdown 111 OSS32_Shutdown(); 112 } 113 return(RPDONE); 106 //dprintf(("StratShutdown %d", rp->Function)); 107 if(rp->shutdown.Function == 1) //end of shutdown 108 { 109 OSS32_Shutdown(); 110 } 111 return(RPDONE); 114 112 } 115 //****************************************************************************** 113 116 114 //****************************************************************************** 117 115 // Handle unsupported requests 118 static ULONG StratError(R P __far*)116 static ULONG StratError(REQPACKET __far* rp) 119 117 { 120 return RPERR_ COMMAND | RPDONE;118 return RPERR_BADCOMMAND | RPDONE; 121 119 } 120 122 121 //****************************************************************************** 123 122 // Strategy dispatch table … … 125 124 // This table is used by the strategy routine to dispatch strategy requests 126 125 //****************************************************************************** 127 typedef ULONG (*RPHandler)(R P__far* rp);126 typedef ULONG (*RPHandler)(REQPACKET __far* rp); 128 127 RPHandler StratDispatch[] = 129 128 { 130 StratInit, 131 StratError, 132 StratError, 133 StratError, 134 StratRead, 135 StratError, 136 StratError, 137 StratError, 138 StratWrite, 139 StratError, 140 StratError, 141 StratError, 142 StratError, 143 StratOpen, 144 StratClose, 145 StratError, 146 StratIOCtl, 147 StratError, 148 StratError, 149 StratError, 150 StratError, 151 StratError, 152 StratError, 153 StratError, 154 StratError, 155 StratError, 156 StratError, 157 StratError, 158 StratShutdown, 159 StratError, 160 StratError, 161 StratInitComplete 129 StratInit, // 00 (BC): Initialization 130 StratError, // 01 (B ): Media check 131 StratError, // 02 (B ): Build BIOS parameter block 132 StratError, // 03 ( ): Unused 133 StratRead, // 04 (BC): Read 134 StratError, // 05 ( C): Nondestructive read with no wait 135 StratError, // 06 ( C): Input status 136 StratError, // 07 ( C): Input flush 137 StratWrite, // 08 (BC): Write 138 StratError, // 09 (BC): Write verify 139 StratError, // 0A ( C): Output status 140 StratError, // 0B ( C): Output flush 141 StratError, // 0C ( ): Unused 142 StratOpen, // 0D (BC): Open 143 StratClose, // 0E (BC): Close 144 StratError, // 0F (B ): Removable media check 145 StratIOCtl, // 10 (BC): IO Control 146 StratError, // 11 (B ): Reset media 147 StratError, // 12 (B ): Get logical unit 148 StratError, // 13 (B ): Set logical unit 149 StratError, // 14 ( C): Deinstall character device driver 150 StratError, // 15 ( ): Unused 151 StratError, // 16 (B ): Count partitionable fixed disks 152 StratError, // 17 (B ): Get logical unit mapping of fixed disk 153 StratError, // 18 ( ): Unused 154 StratError, // 19 ( ): Unused 155 StratError, // 1A ( ): Unused 156 StratError, // 1B ( ): Unused 157 StratShutdown, // 1C (BC): Notify start or end of system shutdown 158 StratError, // 1D (B ): Get driver capabilities 159 StratError, // 1E ( ): Unused 160 StratInitComplete // 1F (BC): Notify end of initialization 162 161 }; 162 163 163 //****************************************************************************** 164 164 // Strategy entry point … … 167 167 // calling convention, which fetches arguments from the correct registers. 168 168 //****************************************************************************** 169 ULONG Strategy(RP __far* rp);170 169 #pragma aux (STRATEGY) Strategy "ALSA_STRATEGY"; 171 ULONG Strategy(R P__far* rp)170 ULONG Strategy(REQPACKET __far* rp) 172 171 { 173 if (fRewired) { 174 fRewired = FALSE; 175 rprintf(("Strategy: Resuming")); 176 OSS32_APMResume(); 177 DbgPrintIrq(); 178 } 172 if (fRewired) 173 { 174 fRewired = FALSE; 175 rprintf(("Strategy: Resuming")); 176 OSS32_APMResume(); 177 DbgPrintIrq(); 178 } 179 179 180 if (rp->Command < sizeof(StratDispatch)/sizeof(StratDispatch[0])) 181 return(StratDispatch[rp->Command](rp)); 182 else return(RPERR_COMMAND | RPDONE); 180 if (rp->bCommand < sizeof(StratDispatch)/sizeof(StratDispatch[0])) return(StratDispatch[rp->bCommand](rp)); 181 else return(RPERR_BADCOMMAND | RPDONE); 183 182 } 184 //****************************************************************************** 185 //****************************************************************************** 183
Note:
See TracChangeset
for help on using the changeset viewer.