⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwregs.c

📁 是关于linux2.5.1的完全源码
💻 C
📖 第 1 页 / 共 2 页
字号:
			register_value, ACPI_HIDWORD (acpi_gbl_FADT->Xpm2_cnt_blk.address),			ACPI_LODWORD (acpi_gbl_FADT->Xpm2_cnt_blk.address)));		ACPI_REGISTER_INSERT_VALUE (register_value, bit_reg_info->bit_position, bit_reg_info->access_bit_mask, value);		ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n",			register_value,			ACPI_HIDWORD (acpi_gbl_FADT->Xpm2_cnt_blk.address),			ACPI_LODWORD (acpi_gbl_FADT->Xpm2_cnt_blk.address)));		acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,				   ACPI_REGISTER_PM2_CONTROL, (u8) (register_value));		break;	default:		break;	}	if (flags & ACPI_MTX_LOCK) {		(void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);	}	/* Normalize the value that was read */	register_value = ((register_value & bit_reg_info->access_bit_mask) >> bit_reg_info->bit_position);	ACPI_DEBUG_PRINT ((ACPI_DB_IO, "ACPI Register_write actual %X\n", register_value));	return_VALUE (register_value);}/****************************************************************************** * * FUNCTION:    Acpi_hw_register_read * * PARAMETERS:  Use_lock               - Mutex hw access. *              Register_id            - Register_iD + Offset. * * RETURN:      Value read or written. * * DESCRIPTION: Acpi register read function.  Registers are read at the *              given offset. * ******************************************************************************/u32acpi_hw_register_read (	u8                      use_lock,	u32                     register_id){	u32                     value = 0;	u32                     bank_offset;	ACPI_FUNCTION_TRACE ("Hw_register_read");	if (ACPI_MTX_LOCK == use_lock) {		if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE))) {			return_VALUE (0);		}	}	switch (register_id) {	case ACPI_REGISTER_PM1_STATUS:           /* 16-bit access */		value =  acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_evt_blk, 0);		value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_evt_blk, 0);		break;	case ACPI_REGISTER_PM1_ENABLE:           /* 16-bit access*/		bank_offset = ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len);		value =  acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_evt_blk, bank_offset);		value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_evt_blk, bank_offset);		break;	case ACPI_REGISTER_PM1_CONTROL:          /* 16-bit access */		value =  acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);		value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);		break;	case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */		value =  acpi_hw_low_level_read (8, &acpi_gbl_FADT->Xpm2_cnt_blk, 0);		break;	case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */		value =  acpi_hw_low_level_read (32, &acpi_gbl_FADT->Xpm_tmr_blk, 0);		break;	case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */		acpi_os_read_port (acpi_gbl_FADT->smi_cmd, &value, 8);		break;	default:		/* Value will be returned as 0 */		break;	}	if (ACPI_MTX_LOCK == use_lock) {		(void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);	}	return_VALUE (value);}/****************************************************************************** * * FUNCTION:    Acpi_hw_register_write * * PARAMETERS:  Use_lock               - Mutex hw access. *              Register_id            - Register_iD + Offset. * * RETURN:      Value read or written. * * DESCRIPTION: Acpi register Write function.  Registers are written at the *              given offset. * ******************************************************************************/voidacpi_hw_register_write (	u8                      use_lock,	u32                     register_id,	u32                     value){	u32                     bank_offset;	ACPI_FUNCTION_TRACE ("Hw_register_write");	if (ACPI_MTX_LOCK == use_lock) {		if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE))) {			return_VOID;		}	}	switch (register_id) {	case ACPI_REGISTER_PM1_STATUS:           /* 16-bit access */		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_evt_blk, 0);		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_evt_blk, 0);		break;	case ACPI_REGISTER_PM1_ENABLE:           /* 16-bit access*/		bank_offset = ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len);		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_evt_blk, bank_offset);		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_evt_blk, bank_offset);		break;	case ACPI_REGISTER_PM1_CONTROL:          /* 16-bit access */		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);		break;	case ACPI_REGISTER_PM1A_CONTROL:         /* 16-bit access */		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);		break;	case ACPI_REGISTER_PM1B_CONTROL:         /* 16-bit access */		acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);		break;	case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */		acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->Xpm2_cnt_blk, 0);		break;	case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */		acpi_hw_low_level_write (32, value, &acpi_gbl_FADT->Xpm_tmr_blk, 0);		break;	case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */		/* SMI_CMD is currently always in IO space */		acpi_os_write_port (acpi_gbl_FADT->smi_cmd, value, 8);		break;	default:		value = 0;		break;	}	if (ACPI_MTX_LOCK == use_lock) {		(void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);	}	return_VOID;}/****************************************************************************** * * FUNCTION:    Acpi_hw_low_level_read * * PARAMETERS:  Register            - GAS register structure *              Offset              - Offset from the base address in the GAS *              Width               - 8, 16, or 32 * * RETURN:      Value read * * DESCRIPTION: Read from either memory, IO, or PCI config space. * ******************************************************************************/u32acpi_hw_low_level_read (	u32                     width,	acpi_generic_address    *reg,	u32                     offset){	u32                     value = 0;	ACPI_PHYSICAL_ADDRESS   mem_address;	ACPI_IO_ADDRESS         io_address;	acpi_pci_id             pci_id;	u16                     pci_register;	ACPI_FUNCTION_ENTRY ();	/*	 * Must have a valid pointer to a GAS structure, and	 * a non-zero address within	 */	if ((!reg) ||		(!ACPI_VALID_ADDRESS (reg->address))) {		return 0;	}	/*	 * Three address spaces supported:	 * Memory, Io, or PCI config.	 */	switch (reg->address_space_id) {	case ACPI_ADR_SPACE_SYSTEM_MEMORY:		mem_address = (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);		acpi_os_read_memory (mem_address, &value, width);		break;	case ACPI_ADR_SPACE_SYSTEM_IO:		io_address = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);		acpi_os_read_port (io_address, &value, width);		break;	case ACPI_ADR_SPACE_PCI_CONFIG:		pci_id.segment = 0;		pci_id.bus     = 0;		pci_id.device  = ACPI_PCI_DEVICE (ACPI_GET_ADDRESS (reg->address));		pci_id.function = ACPI_PCI_FUNCTION (ACPI_GET_ADDRESS (reg->address));		pci_register   = (u16) (ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (reg->address)) + offset);		acpi_os_read_pci_configuration (&pci_id, pci_register, &value, width);		break;	}	return value;}/****************************************************************************** * * FUNCTION:    Acpi_hw_low_level_write * * PARAMETERS:  Width               - 8, 16, or 32 *              Value               - To be written *              Register            - GAS register structure *              Offset              - Offset from the base address in the GAS * * * RETURN:      Value read * * DESCRIPTION: Read from either memory, IO, or PCI config space. * ******************************************************************************/voidacpi_hw_low_level_write (	u32                     width,	u32                     value,	acpi_generic_address    *reg,	u32                     offset){	ACPI_PHYSICAL_ADDRESS   mem_address;	ACPI_IO_ADDRESS         io_address;	acpi_pci_id             pci_id;	u16                     pci_register;	ACPI_FUNCTION_ENTRY ();	/*	 * Must have a valid pointer to a GAS structure, and	 * a non-zero address within	 */	if ((!reg) ||		(!ACPI_VALID_ADDRESS (reg->address))) {		return;	}	/*	 * Three address spaces supported:	 * Memory, Io, or PCI config.	 */	switch (reg->address_space_id) {	case ACPI_ADR_SPACE_SYSTEM_MEMORY:		mem_address = (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);		acpi_os_write_memory (mem_address, value, width);		break;	case ACPI_ADR_SPACE_SYSTEM_IO:		io_address = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);		acpi_os_write_port (io_address, value, width);		break;	case ACPI_ADR_SPACE_PCI_CONFIG:		pci_id.segment = 0;		pci_id.bus     = 0;		pci_id.device  = ACPI_PCI_DEVICE (ACPI_GET_ADDRESS (reg->address));		pci_id.function = ACPI_PCI_FUNCTION (ACPI_GET_ADDRESS (reg->address));		pci_register   = (u16) (ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (reg->address)) + offset);		acpi_os_write_pci_configuration (&pci_id, pci_register, value, width);		break;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -