Ignore:
Timestamp:
Mar 23, 2009, 9:13:00 AM (17 years ago)
Author:
Paul Smedley
Message:

Updates from Pasha to improve IRQ handling and resolve long delays at startup in APIC mode when using ACPI

Location:
GPL/branches/uniaud32-2.0/lib32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/branches/uniaud32-2.0/lib32/debug.c

    r420 r421  
    4141extern int max_buf_size;
    4242
    43 #ifdef DEBUG
    44 short int MAGIC_COMM_PORT =  0x3f8;           // pulled from word ptr 40:0
    45 
    46 
    47 #define UART_DATA               0x00            // UART Data port
    48 #define UART_INT_ENAB           0x01            // UART Interrupt enable
    49 #define UART_INT_ID             0x02            // interrupt ID
    50 #define UART_LINE_CTRL          0x03            // line control registers
    51 #define UART_MODEM_CTRL         0x04            // modem control register
    52 #define UART_LINE_STAT          0x05            // line status register
    53 #define UART_MODEM_STAT         0x06            // modem status regiser
    54 #define UART_DIVISOR_LO         0x00            // divisor latch least sig
    55 #define UART_DIVISOR_HI         0x01h           // divisor latch most sig
    56 
    57 #define DELAY   nop
    58 #else
    59 short int MAGIC_COMM_PORT =  0x0;           // pulled from word ptr 40:0
    60 #endif
    61 
    6243char hextab[]="0123456789ABCDEF";
    6344
     
    565546    return psz - pszC;
    566547}
     548//PS+++ Changes for right debug output
     549#ifdef DEBUG
     550short int MAGIC_COMM_PORT =  0;           // pulled from word ptr 40:0
     551
     552
     553#define UART_DATA               0x00            // UART Data port
     554#define UART_INT_ENAB           0x01            // UART Interrupt enable
     555#define UART_INT_ID             0x02            // interrupt ID
     556#define UART_LINE_CTRL          0x03            // line control registers
     557#define UART_MODEM_CTRL         0x04            // modem control register
     558#define UART_LINE_STAT          0x05            // line status register
     559#define UART_MODEM_STAT         0x06            // modem status regiser
     560#define UART_DIVISOR_LO         0x00            // divisor latch least sig
     561#define UART_DIVISOR_HI         0x01h           // divisor latch most sig
     562
     563#define DELAY   nop
     564#else
     565short int MAGIC_COMM_PORT =  0x0;           // pulled from word ptr 40:0
     566#endif
    567567
    568568void StringOut(char *DbgStr)
     
    579579      */
    580580#ifdef DEBUG
    581    if (MAGIC_COMM_PORT)
     581   if (MAGIC_COMM_PORT)   //PS+++ If have comport - out to it
    582582   {
    583583       for( i= 0; i < len; i++ )
    584           CharOut( DbgStr[i] );
     584           CharOut( DbgStr[i] );
     585
    585586       if (fLineTerminate)
    586587       {
     
    630631#endif
    631632
     633
    632634#ifdef DEBUG                            //--------------------------- CharOut -
    633635void CharOut(char c)
  • GPL/branches/uniaud32-2.0/lib32/pci.c

    r410 r421  
    135135//******************************************************************************
    136136//******************************************************************************
     137#ifdef ACPI
     138struct SaveIRQForSlot
     139{
     140    ULONG  ulSlotNo;
     141    BYTE   LowIRQ;
     142    BYTE   HighIRQ;
     143    BYTE   Pin;   
     144};
     145extern struct SaveIRQForSlot sISRHigh[];
     146extern int  SaveIRQCounter;
     147#endif
     148
    137149static int pci_query_device(unsigned int vendor, unsigned int device,
    138150                            struct pci_dev near *pcidev, int idx)
     
    230242                        // IRQ and PIN
    231243                        pci_read_config_dword(pcidev, PCI_INTERRUPT_LINE, &temp);
     244                        sISRHigh[SaveIRQCounter].Pin  = (temp >> 8) & 0xf;
    232245#ifdef ACPI
    233246                        temp2 = temp3 = 0;
     
    242255                        {
    243256                        // Check APIC IRQ, if we have /SMP /APIC, must be set
    244                         if (temp3)
    245                            temp = (temp & (~0xff)) | (temp3 & 0xff);
     257                        if (temp1)
     258                           temp = (temp & (~0xff)) | (temp1 & 0xff);
    246259                        // Check PIC IRQ
    247                         else if (temp1)
    248                                  temp = (temp & (~0xff)) | (temp1 & 0xff);
     260                        else if (temp3)
     261                                 temp = (temp & (~0xff)) | (temp3 & 0xff);
    249262                        dprintf(("pci_query_device: IRQs ACPI PIC%d APIC%d", temp1, temp3));
     263                        sISRHigh[SaveIRQCounter].LowIRQ  = temp1;
     264                        sISRHigh[SaveIRQCounter].HighIRQ = temp3;
    250265                        }
    251266#endif /* ACPI */
Note: See TracChangeset for help on using the changeset viewer.