Changeset 63 for GPL/trunk/drv32


Ignore:
Timestamp:
Jan 3, 2006, 11:33:10 PM (20 years ago)
Author:
vladest
Message:

(Patches by Ruediger Ihle)
Support for IRQs > 15
Fixed resource manager registration
Fixed crash on APM suspend/resume and system shutdown

Location:
GPL/trunk/drv32
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk/drv32/init.c

    r34 r63  
    4444#include "parse.h"
    4545
    46 char copyright[]="@#Netlabs:1.13#@.Universal audio driver for OS/2 (c) Netlabs 2005\0x0\0x0\0xb";
    47 
    4846const char ERR_ERROR[]   = "ERROR: ";
    4947const char ERR_LOCK[]    = "Unable to lock 32 bit data & code segments, exiting...\r\r\n";
     
    5149const char ERR_NAMES[]    = "Query names failed\r\r\n";
    5250const char szALSA[]      = "\r\n\r\nOS/2 Universal Audio Core Driver v"ALSA_VERSION"\r\n";
     51
    5352const char szCopyRight1[]= "Copyright 2000-2002 InnoTek Systemberatung GmbH\r\n";
    5453const char szCopyRight2[]= "Copyright 2000-2002 The ALSA Project\r\n\r\n";
     54const char szCopyRight3[]= "Copyright 2005 Netlabs http://www.netlabs.org\r\n";
    5555//const char szCopyRight3[]= "Maintained by http://os2.kiev.ua/en/uniaud.php\r\n\r\n";
     56
    5657const char szCodeStartEnd[] = "Code 0x%0x - 0x%0x\r\n\r\n";
    5758const char szMixerFound[]= "Detected Mixer: ";
     
    218219        WriteString(szALSA, sizeof(szALSA)-1);
    219220        WriteString(szCopyRight1, sizeof(szCopyRight1)-1);
     221        WriteString(szCopyRight3, sizeof(szCopyRight3)-1);
    220222        WriteString(szCopyRight2, sizeof(szCopyRight2)-1);
    221223    }
    222224
    223     //    if(fDebug) {
    224     if(1) {
     225    if(fDebug) {
    225226        sprintf(debugmsg, szCodeStartEnd, OffsetBeginCS32, OffsetFinalCS32);
    226227        WriteString(debugmsg, strlen(debugmsg));
  • GPL/trunk/drv32/irq.cpp

    r34 r63  
    3535
    3636// List of handlers here.
    37 static FARPTR16 *pISR[NUM_IRQLEVELS] = {
    38    NULL,
    39    NULL,
    40    NULL,
     37static FARPTR16 *pISR[MAX_IRQ_SLOTS] = {
     38   &ISR00,
     39   &ISR01,
     40   &ISR02,
    4141   &ISR03,
    4242   &ISR04,
    4343   &ISR05,
    44    NULL,
    45    &ISR07,
    46    NULL,
    47    &ISR09,
    48    &ISR10,
    49    &ISR11,
    50    &ISR12,
    51    &ISR13,
    52    &ISR14,
    53    &ISR15,
     44   &ISR06,
     45   &ISR07
    5446};
    55 
    56 static PFNIRQ pfnAlsaIRQHandler = NULL;
    5747
    5848//******************************************************************************
    5949//******************************************************************************
    60 BOOL RMSetIrq(ULONG ulIrq, BOOL fShared, PFNIRQ pfnIrqHandler)
     50BOOL ALSA_SetIrq(ULONG ulIrq, ULONG ulSlotNo, BOOL fShared)
    6151{
    6252    USHORT rc = 1;
    6353
    64     if(pISR[ulIrq] == NULL) {
     54    if( ulSlotNo >= MAX_IRQ_SLOTS ) {
    6555        DebugInt3();
    6656        return FALSE;
    6757    }
    68     if(fShared)
     58
     59    if(fShared)
    6960    {
    70         rc = DevIRQSet((WORD16) *pISR[ ulIrq ],
     61        rc = DevIRQSet((WORD16) *pISR[ulSlotNo],
    7162                       (WORD16)ulIrq,
    7263                       1 );   // first try shared shared
    7364    }
     65
    7466    if (rc != 0) {                    // If error ...
    75         rc = DevIRQSet((WORD16) *pISR[ ulIrq ],
     67        rc = DevIRQSet((WORD16) *pISR[ulSlotNo],
    7668                       (WORD16)ulIrq,
    7769                       0);   // failed, so try exclusive instead
    7870    }
     71
    7972    if (rc != 0) {                    // If error ...
    80         dprintf(("ERROR: RMSetIrq %d %d %x FAILED!!", ulIrq, fShared, pfnIrqHandler));
     73        dprintf(("ERROR: RMSetIrq %d %d %x FAILED!!", ulIrq, fShared, ulSlotNo));
    8174        DebugInt3();
    8275        return FALSE;
    8376    }
    84     //Always called with the same handler
    85     if(pfnAlsaIRQHandler && (pfnAlsaIRQHandler != pfnIrqHandler)) {
    86         DebugInt3();
    87         return FALSE;
    88     }
    89     pfnAlsaIRQHandler = pfnIrqHandler;
     77
    9078    return TRUE;
    9179}
    9280//******************************************************************************
    9381//******************************************************************************
    94 BOOL RMFreeIrq(ULONG ulIrq)
     82BOOL ALSA_FreeIrq(ULONG ulIrq)
    9583{
    9684    return (DevIRQClear((WORD16)ulIrq) == 0);
     
    9886//******************************************************************************
    9987//******************************************************************************
    100 ULONG ALSA_Interrupt(ULONG irqnr);
     88ULONG ALSA_Interrupt(ULONG ulSlotNo);
    10189#pragma aux ALSA_Interrupt "ALSA_Interrupt" parm [ebx]
    102 ULONG ALSA_Interrupt(ULONG irqnr)
     90ULONG ALSA_Interrupt(ULONG ulSlotNo)
    10391{
    104    if(pfnAlsaIRQHandler == NULL) {
    105        DebugInt3();
    106        return FALSE;
    107    }
    108 #ifdef DEBUG
    109    dprintf2(("irq %d",irqnr));
    110 #endif
    111    if(pfnAlsaIRQHandler(irqnr)) {
    112        cli();
    113        // We've cleared all service requests.  Send EOI and clear
    114        // the carry flag (tells OS/2 kernel that Int was handled).
    115        DevEOI( (WORD16)irqnr );
    116        return TRUE;
     92    ULONG       ulIrqNo;
     93
     94    if( process_interrupt(ulSlotNo, &ulIrqNo) ) {
     95        cli();
     96        // We've cleared all service requests.  Send EOI and clear
     97        // the carry flag (tells OS/2 kernel that Int was handled).
     98        DevEOI( (WORD16)ulIrqNo );
     99        return TRUE;
    117100   }
    118101   // Indicate Interrupt not serviced by setting carry flag before
  • GPL/trunk/drv32/irq.h

    r34 r63  
    2525#define __IRQ_H__
    2626
    27 //#define NUM_IRQLEVELS         16
    28 #define NUM_IRQLEVELS           256 //ACPI
    29 
     27extern "C" FARPTR16 ISR00;
     28extern "C" FARPTR16 ISR01;
     29extern "C" FARPTR16 ISR02;
    3030extern "C" FARPTR16 ISR03;
    3131extern "C" FARPTR16 ISR04;
    3232extern "C" FARPTR16 ISR05;
     33extern "C" FARPTR16 ISR06;
    3334extern "C" FARPTR16 ISR07;
    34 extern "C" FARPTR16 ISR09;
    35 extern "C" FARPTR16 ISR10;
    36 extern "C" FARPTR16 ISR11;
    37 extern "C" FARPTR16 ISR12;
    38 extern "C" FARPTR16 ISR13;
    39 extern "C" FARPTR16 ISR14;
    40 extern "C" FARPTR16 ISR15;
    4135
    4236#endif //__IRQ_H__
  • GPL/trunk/drv32/makefile.os2

    r62 r63  
    3636TARGET   = uniaud32
    3737LNKFILE   = $(OBJDIR)\$(TARGET).lrf
     38DEFFILE   = $(OBJDIR)\$(TARGET).def
    3839MAKEFILE  = makefile.os2
    3940
     
    6061FILE4    = devhlp.obj
    6162FILE5    = idc.obj dispatch.obj
    62 FILE6    = rm.obj irq.obj util.obj
     63FILE6    = rmhelp.obj irq.obj util.obj
    6364FILE7    = impdos.lib
    6465!if "$(KEE)" == "1"
     
    8081
    8182!ifdef USE_WLINK
    82 $(OBJDIR)\$(TARGET).lrf: $(MAKEFILE)
     83$(LNKFILE): $(MAKEFILE)
    8384    @%write $^@ option quiet
    8485    @%write $^@ option verbose
     
    8788    @%write $^@ option alignment=16
    8889    @%write $^@ option map=$(WMAPNAME)
    89     @%write $^@ option description '@$#$(_VENDOR):$(_VERSION)$#@'
     90!if "$(KEE)" == "1"
     91    @%write $^@ option description '@$#$(BLDLVL_VENDOR):$(BLDLVL_REVISION)$#@$#$#1$#$# $(BLDLVL_DATETIME)      $(BLDLVL_MACHINE)::::$(BLDLVL_FILEVER)::@@$(BLDLVL_PRODUCT) (KEE)'
     92!else
     93    @%write $^@ option description '@$#$(BLDLVL_VENDOR):$(BLDLVL_REVISION)$#@$#$#1$#$# $(BLDLVL_DATETIME)      $(BLDLVL_MACHINE)::::$(BLDLVL_FILEVER)::@@$(BLDLVL_PRODUCT) (W4)'
     94!endif
    9095    @%write $^@ name $(OBJDIR)\$(TARGET).sys
    9196    @for %f in ($(FILES)) do @%append $^@ file $(OBJDIR)\%f
     
    9398    @%write $^@ library $(%WATCOM)\lib386\os2\clib3r.lib
    9499!else
    95 $(OBJDIR)\$(TARGET).lrf: $(MAKEFILE)
     100$(LNKFILE): $(MAKEFILE)
    96101    @%write $^@ /OUT:$(OBJDIR)\$(TARGET).sys
    97102    @%write $^@ /MAP:$(OBJDIR)\$(TARGET).map
     
    99104    @for %f in ($(LIBS)) do @%append $^@ %f
    100105    @%write $^@ $(%WATCOM)\lib386\os2\clib3r.lib
     106    @%write $^@ $(DEFFILE)
    101107!endif
    102108
    103 $(OBJDIR)\$(TARGET).def: $(MAKEFILE)
    104     @%write $^@ LIBRARY UNIAUD32
    105     @%write $^@ DESCRIPTION "@$#Netlabs:1.13$#@Universal audio driver for OS/2 (c) Netlabs 2005"
    106     @%write $^@ PROTMODE
     109$(OBJDIR)\$(TARGET).sys: $(LNKFILE) $(FILES) $(LIBS)
     110!if "$(KEE)" == "1"
     111     @%write $(DEFFILE) description '@$#$(BLDLVL_VENDOR):$(BLDLVL_REVISION)$#@$#$#1$#$# $(BLDLVL_DATETIME)      $(BLDLVL_MACHINE)::::$(BLDLVL_FILEVER)::@@$(BLDLVL_PRODUCT) (KEE)'
     112!else
     113     @%write $(DEFFILE) description '@$#$(BLDLVL_VENDOR):$(BLDLVL_REVISION)$#@$#$#1$#$# $(BLDLVL_DATETIME)      $(BLDLVL_MACHINE)::::$(BLDLVL_FILEVER)::@@$(BLDLVL_PRODUCT) (W4)'
     114!endif
    107115
    108 $(OBJDIR)\$(TARGET).sys: $(OBJDIR)\$(TARGET).lrf $(LNKFILE) $(FILES) $(LIBS) $(OBJDIR)\$(TARGET).def
    109      $(LINK) @$(OBJDIR)\$(TARGET).lrf $(OBJDIR)\$(TARGET).DEF
     116     $(LINK) @$(LNKFILE)
     117
    110118     copy $(OBJDIR)\$(TARGET).sys $(ALSA_BIN)
    111119!if "$(KEE)" == "1"
     
    130138     -@rm *.err 2>nul
    131139     @cd $(OBJDIR)
    132      -rm *.obj *.lnk *.sys *.sym *.lst *.map *.wmap *.lib 2>nul
     140     -rm *.obj *.lnk *.lrf *.def *.sys *.sym *.lst *.map *.wmap *.lib 2>nul
    133141     @cd ..\..
  • GPL/trunk/drv32/startup.asm

    r32 r63  
    904904
    905905                ALIGN 2
     906ISR00_16 proc far
     907                push    ebx
     908                mov     ebx, 0
     909                call    far ptr FLAT:Interrupt32
     910                pop     ebx
     911                retf
     912ISR00_16 endp
     913
     914                ALIGN 2
     915ISR01_16 proc far
     916                push    ebx
     917                mov     ebx, 1
     918                call    far ptr FLAT:Interrupt32
     919                pop     ebx
     920                retf
     921ISR01_16 endp
     922
     923                ALIGN 2
     924ISR02_16 proc far
     925                push    ebx
     926                mov     ebx, 2
     927                call    far ptr FLAT:Interrupt32
     928                pop     ebx
     929                retf
     930ISR02_16 endp
     931
     932                ALIGN 2
    906933ISR03_16 proc far
    907934                push    ebx
     
    931958
    932959                ALIGN 2
     960ISR06_16 proc far
     961                push    ebx
     962                mov     ebx, 6
     963                call    far ptr FLAT:Interrupt32
     964                pop     ebx
     965                retf
     966ISR06_16 endp
     967
     968                ALIGN 2
    933969ISR07_16 proc far
    934970                push    ebx
     
    938974                retf
    939975ISR07_16 endp
    940 
    941                 ALIGN 2
    942 ISR09_16 proc far
    943                 push    ebx
    944                 mov     ebx, 9
    945                 call    far ptr FLAT:Interrupt32
    946                 pop     ebx
    947                 retf
    948 ISR09_16 endp
    949 
    950                 ALIGN 2
    951 ISR10_16 proc far
    952                 push    ebx
    953                 mov     ebx, 10
    954                 call    far ptr FLAT:Interrupt32
    955                 pop     ebx
    956                 retf
    957 ISR10_16 endp
    958 
    959                 ALIGN 2
    960 ISR11_16 proc far
    961                 push    ebx
    962                 mov     ebx, 11
    963                 call    far ptr FLAT:Interrupt32
    964                 pop     ebx
    965                 retf
    966 ISR11_16 endp
    967 
    968                 ALIGN 2
    969 ISR12_16 proc far
    970                 push    ebx
    971                 mov     ebx, 12
    972                 call    far ptr FLAT:Interrupt32
    973                 pop     ebx
    974                 retf
    975 ISR12_16 endp
    976 
    977                 ALIGN 2
    978 ISR13_16 proc far
    979                 push    ebx
    980                 mov     ebx, 13
    981                 call    far ptr FLAT:Interrupt32
    982                 pop     ebx
    983                 retf
    984 ISR13_16 endp
    985 
    986                 ALIGN 2
    987 ISR14_16 proc far
    988                 push    ebx
    989                 mov     ebx, 14
    990                 call    far ptr FLAT:Interrupt32
    991                 pop     ebx
    992                 retf
    993 ISR14_16 endp
    994 
    995                 ALIGN 2
    996 ISR15_16 proc far
    997                 push    ebx
    998                 mov     ebx, 15
    999                 call    far ptr FLAT:Interrupt32
    1000                 pop     ebx
    1001                 retf
    1002 ISR15_16 endp
    1003976
    1004977;end of 16 bits code segment
     
    15411514    public  RMHandleToResourceHandleList1632
    15421515    public  _TimerHandler16
     1516    public  _ISR00
     1517    public  _ISR01
     1518    public  _ISR02
    15431519    public  _ISR03
    15441520    public  _ISR04
    15451521    public  _ISR05
     1522    public  _ISR06
    15461523    public  _ISR07
    1547     public  _ISR09
    1548     public  _ISR10
    1549     public  _ISR11
    1550     public  _ISR12
    1551     public  _ISR13
    1552     public  _ISR14
    1553     public  _ISR15
    15541524
    15551525IFDEF FLATSTACK
     
    16281598
    16291599;16:16 addresses of interrupt dispatchers
     1600    _ISR00               dw OFFSET CODE16:ISR00_16
     1601                         dw SEG CODE16:ISR00_16
     1602    _ISR01               dw OFFSET CODE16:ISR01_16
     1603                         dw SEG CODE16:ISR01_16
     1604    _ISR02               dw OFFSET CODE16:ISR02_16
     1605                         dw SEG CODE16:ISR02_16
    16301606    _ISR03               dw OFFSET CODE16:ISR03_16
    16311607                         dw SEG CODE16:ISR03_16
     
    16341610    _ISR05               dw OFFSET CODE16:ISR05_16
    16351611                         dw SEG CODE16:ISR05_16
     1612    _ISR06               dw OFFSET CODE16:ISR06_16
     1613                         dw SEG CODE16:ISR06_16
    16361614    _ISR07               dw OFFSET CODE16:ISR07_16
    16371615                         dw SEG CODE16:ISR07_16
    1638     _ISR09               dw OFFSET CODE16:ISR09_16
    1639                          dw SEG CODE16:ISR09_16
    1640     _ISR10               dw OFFSET CODE16:ISR10_16
    1641                          dw SEG CODE16:ISR10_16
    1642     _ISR11               dw OFFSET CODE16:ISR11_16
    1643                          dw SEG CODE16:ISR11_16
    1644     _ISR12               dw OFFSET CODE16:ISR12_16
    1645                          dw SEG CODE16:ISR12_16
    1646     _ISR13               dw OFFSET CODE16:ISR13_16
    1647                          dw SEG CODE16:ISR13_16
    1648     _ISR14               dw OFFSET CODE16:ISR14_16
    1649                          dw SEG CODE16:ISR14_16
    1650     _ISR15               dw OFFSET CODE16:ISR15_16
    1651                          dw SEG CODE16:ISR15_16
    16521616DATA32 ends
    16531617
  • GPL/trunk/drv32/util.cpp

    r32 r63  
    2222 *
    2323 */
     24#define INCL_NOPMAPI
     25#define INCL_DOSINFOSEG
     26#include <os2.h>
    2427
    25 
    26 #include "rm.hpp"                      // Will include os2.h, etc.
    2728#include <devhelp.h>
    2829#include <devinfo.h>
Note: See TracChangeset for help on using the changeset viewer.