hwregs.c (80062) | hwregs.c (82367) |
---|---|
1 2/******************************************************************************* 3 * 4 * Module Name: hwregs - Read/write access functions for the various ACPI 5 * control and status registers. | 1 2/******************************************************************************* 3 * 4 * Module Name: hwregs - Read/write access functions for the various ACPI 5 * control and status registers. |
6 * $Revision: 102 $ | 6 * $Revision: 104 $ |
7 * 8 ******************************************************************************/ 9 10/****************************************************************************** 11 * 12 * 1. Copyright Notice 13 * 14 * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. --- 164 unchanged lines hidden (view full) --- 179{ 180 UINT16 GpeLength; 181 UINT16 Index; 182 183 184 FUNCTION_TRACE ("HwClearAcpiStatus"); 185 186 | 7 * 8 ******************************************************************************/ 9 10/****************************************************************************** 11 * 12 * 1. Copyright Notice 13 * 14 * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. --- 164 unchanged lines hidden (view full) --- 179{ 180 UINT16 GpeLength; 181 UINT16 Index; 182 183 184 FUNCTION_TRACE ("HwClearAcpiStatus"); 185 186 |
187 DEBUG_PRINTP (TRACE_IO, ("About to write %04X to %04X\n", | 187 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %04X\n", |
188 ALL_FIXED_STS_BITS, 189 (UINT16) ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1aEvtBlk.Address))); 190 191 192 AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); 193 194 AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, PM1_STS, ALL_FIXED_STS_BITS); 195 --- 128 unchanged lines hidden (view full) --- 324 *Slp_TypA = (UINT8) (ObjDesc->Package.Elements[0])->Integer.Value; 325 326 *Slp_TypB = (UINT8) (ObjDesc->Package.Elements[1])->Integer.Value; 327 } 328 329 330 if (ACPI_FAILURE (Status)) 331 { | 188 ALL_FIXED_STS_BITS, 189 (UINT16) ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1aEvtBlk.Address))); 190 191 192 AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); 193 194 AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, PM1_STS, ALL_FIXED_STS_BITS); 195 --- 128 unchanged lines hidden (view full) --- 324 *Slp_TypA = (UINT8) (ObjDesc->Package.Elements[0])->Integer.Value; 325 326 *Slp_TypB = (UINT8) (ObjDesc->Package.Elements[1])->Integer.Value; 327 } 328 329 330 if (ACPI_FAILURE (Status)) 331 { |
332 DEBUG_PRINTP (ACPI_ERROR, ("Bad Sleep object %p type %X\n", | 332 ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Bad Sleep object %p type %X\n", |
333 ObjDesc, ObjDesc->Common.Type)); 334 } 335 336 AcpiUtRemoveReference (ObjDesc); 337 338 return_ACPI_STATUS (Status); 339} 340 --- 193 unchanged lines hidden (view full) --- 534 535 /* 536 * Read the PM1 Control register. 537 * Note that at this level, the fact that there are actually TWO 538 * registers (A and B) and that B may not exist, are abstracted. 539 */ 540 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, PM1_CONTROL); 541 | 333 ObjDesc, ObjDesc->Common.Type)); 334 } 335 336 AcpiUtRemoveReference (ObjDesc); 337 338 return_ACPI_STATUS (Status); 339} 340 --- 193 unchanged lines hidden (view full) --- 534 535 /* 536 * Read the PM1 Control register. 537 * Note that at this level, the fact that there are actually TWO 538 * registers (A and B) and that B may not exist, are abstracted. 539 */ 540 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, PM1_CONTROL); 541 |
542 DEBUG_PRINT (TRACE_IO, ("PM1 control: Read %X\n", RegisterValue)); | 542 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", RegisterValue)); |
543 544 if (ReadWrite == ACPI_WRITE) 545 { 546 RegisterValue &= ~Mask; 547 Value <<= AcpiHwGetBitShift (Mask); 548 Value &= Mask; 549 RegisterValue |= Value; 550 --- 23 unchanged lines hidden (view full) --- 574 575 default: 576 Mask = 0; 577 break; 578 } 579 580 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, PM2_CONTROL); 581 | 543 544 if (ReadWrite == ACPI_WRITE) 545 { 546 RegisterValue &= ~Mask; 547 Value <<= AcpiHwGetBitShift (Mask); 548 Value &= Mask; 549 RegisterValue |= Value; 550 --- 23 unchanged lines hidden (view full) --- 574 575 default: 576 Mask = 0; 577 break; 578 } 579 580 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, PM2_CONTROL); 581 |
582 DEBUG_PRINT (TRACE_IO, ("PM2 control: Read %X from %p\n", | 582 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %p\n", |
583 RegisterValue, ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm2CntBlk.Address))); 584 585 if (ReadWrite == ACPI_WRITE) 586 { 587 RegisterValue &= ~Mask; 588 Value <<= AcpiHwGetBitShift (Mask); 589 Value &= Mask; 590 RegisterValue |= Value; 591 | 583 RegisterValue, ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm2CntBlk.Address))); 584 585 if (ReadWrite == ACPI_WRITE) 586 { 587 RegisterValue &= ~Mask; 588 Value <<= AcpiHwGetBitShift (Mask); 589 Value &= Mask; 590 RegisterValue |= Value; 591 |
592 DEBUG_PRINT (TRACE_IO, ("About to write %04X to %p\n", RegisterValue, | 592 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %p\n", RegisterValue, |
593 AcpiGbl_FADT->XPm2CntBlk.Address)); 594 595 AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, 596 PM2_CONTROL, (UINT8) (RegisterValue)); 597 } 598 break; 599 600 601 case PM_TIMER: 602 603 Mask = TMR_VAL_MASK; 604 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, 605 PM_TIMER); | 593 AcpiGbl_FADT->XPm2CntBlk.Address)); 594 595 AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, 596 PM2_CONTROL, (UINT8) (RegisterValue)); 597 } 598 break; 599 600 601 case PM_TIMER: 602 603 Mask = TMR_VAL_MASK; 604 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, 605 PM_TIMER); |
606 DEBUG_PRINT (TRACE_IO, ("PM_TIMER: Read %X from %p\n", | 606 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM_TIMER: Read %X from %p\n", |
607 RegisterValue, ACPI_GET_ADDRESS (AcpiGbl_FADT->XPmTmrBlk.Address))); 608 609 break; 610 611 612 case GPE1_EN_BLOCK: 613 case GPE1_STS_BLOCK: 614 case GPE0_EN_BLOCK: --- 25 unchanged lines hidden (view full) --- 640 /* 641 * This sets the bit within EnableBit that needs to be written to 642 * the Register indicated in Mask to a 1, all others are 0 643 */ 644 645 /* Now get the current Enable Bits in the selected Reg */ 646 647 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, RegisterId); | 607 RegisterValue, ACPI_GET_ADDRESS (AcpiGbl_FADT->XPmTmrBlk.Address))); 608 609 break; 610 611 612 case GPE1_EN_BLOCK: 613 case GPE1_STS_BLOCK: 614 case GPE0_EN_BLOCK: --- 25 unchanged lines hidden (view full) --- 640 /* 641 * This sets the bit within EnableBit that needs to be written to 642 * the Register indicated in Mask to a 1, all others are 0 643 */ 644 645 /* Now get the current Enable Bits in the selected Reg */ 646 647 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, RegisterId); |
648 DEBUG_PRINT (TRACE_IO, ("GPE Enable bits: Read %X from %X\n", | 648 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "GPE Enable bits: Read %X from %X\n", |
649 RegisterValue, RegisterId)); 650 651 if (ReadWrite == ACPI_WRITE) 652 { 653 RegisterValue &= ~Mask; 654 Value <<= AcpiHwGetBitShift (Mask); 655 Value &= Mask; 656 RegisterValue |= Value; 657 658 /* This write will put the Action state into the General Purpose */ 659 /* Enable Register indexed by the value in Mask */ 660 | 649 RegisterValue, RegisterId)); 650 651 if (ReadWrite == ACPI_WRITE) 652 { 653 RegisterValue &= ~Mask; 654 Value <<= AcpiHwGetBitShift (Mask); 655 Value &= Mask; 656 RegisterValue |= Value; 657 658 /* This write will put the Action state into the General Purpose */ 659 /* Enable Register indexed by the value in Mask */ 660 |
661 DEBUG_PRINT (TRACE_IO, ("About to write %04X to %04X\n", | 661 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %04X\n", |
662 RegisterValue, RegisterId)); 663 AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId, 664 (UINT8) RegisterValue); 665 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, 666 RegisterId); 667 } 668 break; 669 --- 11 unchanged lines hidden (view full) --- 681 if (ACPI_MTX_LOCK == UseLock) { 682 AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); 683 } 684 685 686 RegisterValue &= Mask; 687 RegisterValue >>= AcpiHwGetBitShift (Mask); 688 | 662 RegisterValue, RegisterId)); 663 AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId, 664 (UINT8) RegisterValue); 665 RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, 666 RegisterId); 667 } 668 break; 669 --- 11 unchanged lines hidden (view full) --- 681 if (ACPI_MTX_LOCK == UseLock) { 682 AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); 683 } 684 685 686 RegisterValue &= Mask; 687 RegisterValue >>= AcpiHwGetBitShift (Mask); 688 |
689 DEBUG_PRINT (TRACE_IO, ("Register I/O: returning %X\n", RegisterValue)); | 689 ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Register I/O: returning %X\n", RegisterValue)); |
690 return_VALUE (RegisterValue); 691} 692 693 694/****************************************************************************** 695 * 696 * FUNCTION: AcpiHwRegisterRead 697 * --- 56 unchanged lines hidden (view full) --- 754 755 756 case PM_TIMER: /* 32-bit access */ 757 758 Value = AcpiHwLowLevelRead (32, &AcpiGbl_FADT->XPmTmrBlk, 0); 759 break; 760 761 | 690 return_VALUE (RegisterValue); 691} 692 693 694/****************************************************************************** 695 * 696 * FUNCTION: AcpiHwRegisterRead 697 * --- 56 unchanged lines hidden (view full) --- 754 755 756 case PM_TIMER: /* 32-bit access */ 757 758 Value = AcpiHwLowLevelRead (32, &AcpiGbl_FADT->XPmTmrBlk, 0); 759 break; 760 761 |
762 /* 763 * For the GPE? Blocks, the lower word of RegisterId contains the 764 * byte offset for which to read, as each part of each block may be 765 * several bytes long. 766 */ |
|
762 case GPE0_STS_BLOCK: /* 8-bit access */ 763 | 767 case GPE0_STS_BLOCK: /* 8-bit access */ 768 |
764 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe0Blk, 0); | 769 BankOffset = REGISTER_BIT_ID(RegisterId); 770 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe0Blk, BankOffset); |
765 break; 766 | 771 break; 772 |
767 | |
768 case GPE0_EN_BLOCK: /* 8-bit access */ 769 | 773 case GPE0_EN_BLOCK: /* 8-bit access */ 774 |
770 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe0BlkLen); 771 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe0Blk, BankOffset); | 775 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe0BlkLen) + REGISTER_BIT_ID(RegisterId); 776 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe0Blk, BankOffset); |
772 break; 773 | 777 break; 778 |
774 | |
775 case GPE1_STS_BLOCK: /* 8-bit access */ 776 | 779 case GPE1_STS_BLOCK: /* 8-bit access */ 780 |
777 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe1Blk, 0); | 781 BankOffset = REGISTER_BIT_ID(RegisterId); 782 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe1Blk, BankOffset); |
778 break; 779 | 783 break; 784 |
780 | |
781 case GPE1_EN_BLOCK: /* 8-bit access */ 782 | 785 case GPE1_EN_BLOCK: /* 8-bit access */ 786 |
783 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe1BlkLen); 784 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe1Blk, BankOffset); | 787 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe1BlkLen) + REGISTER_BIT_ID(RegisterId); 788 Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe1Blk, BankOffset); |
785 break; 786 | 789 break; 790 |
787 | |
788 case SMI_CMD_BLOCK: /* 8bit */ 789 790 AcpiOsReadPort (AcpiGbl_FADT->SmiCmd, &Value, 8); 791 break; 792 | 791 case SMI_CMD_BLOCK: /* 8bit */ 792 793 AcpiOsReadPort (AcpiGbl_FADT->SmiCmd, &Value, 8); 794 break; 795 |
793 | |
794 default: 795 /* Value will be returned as 0 */ 796 break; 797 } 798 799 800 if (ACPI_MTX_LOCK == UseLock) 801 { --- 80 unchanged lines hidden (view full) --- 882 case PM_TIMER: /* 32-bit access */ 883 884 AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT->XPmTmrBlk, 0); 885 break; 886 887 888 case GPE0_STS_BLOCK: /* 8-bit access */ 889 | 796 default: 797 /* Value will be returned as 0 */ 798 break; 799 } 800 801 802 if (ACPI_MTX_LOCK == UseLock) 803 { --- 80 unchanged lines hidden (view full) --- 884 case PM_TIMER: /* 32-bit access */ 885 886 AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT->XPmTmrBlk, 0); 887 break; 888 889 890 case GPE0_STS_BLOCK: /* 8-bit access */ 891 |
890 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe0Blk, 0); | 892 BankOffset = REGISTER_BIT_ID(RegisterId); 893 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe0Blk, BankOffset); |
891 break; 892 893 894 case GPE0_EN_BLOCK: /* 8-bit access */ 895 | 894 break; 895 896 897 case GPE0_EN_BLOCK: /* 8-bit access */ 898 |
896 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe0BlkLen); | 899 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe0BlkLen) + REGISTER_BIT_ID(RegisterId); |
897 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe0Blk, BankOffset); 898 break; 899 900 901 case GPE1_STS_BLOCK: /* 8-bit access */ 902 | 900 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe0Blk, BankOffset); 901 break; 902 903 904 case GPE1_STS_BLOCK: /* 8-bit access */ 905 |
903 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe1Blk, 0); | 906 BankOffset = REGISTER_BIT_ID(RegisterId); 907 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe1Blk, BankOffset); |
904 break; 905 906 907 case GPE1_EN_BLOCK: /* 8-bit access */ 908 | 908 break; 909 910 911 case GPE1_EN_BLOCK: /* 8-bit access */ 912 |
909 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe1BlkLen); | 913 BankOffset = DIV_2 (AcpiGbl_FADT->Gpe1BlkLen) + REGISTER_BIT_ID(RegisterId); |
910 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe1Blk, BankOffset); 911 break; 912 913 914 case SMI_CMD_BLOCK: /* 8bit */ 915 916 /* For 2.0, SMI_CMD is always in IO space */ 917 /* TBD: what about 1.0? 0.71? */ --- 172 unchanged lines hidden --- | 914 AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe1Blk, BankOffset); 915 break; 916 917 918 case SMI_CMD_BLOCK: /* 8bit */ 919 920 /* For 2.0, SMI_CMD is always in IO space */ 921 /* TBD: what about 1.0? 0.71? */ --- 172 unchanged lines hidden --- |