CN110928815A - 一种获取ahci基地址寄存器值的方法 - Google Patents

一种获取ahci基地址寄存器值的方法 Download PDF

Info

Publication number
CN110928815A
CN110928815A CN201911196214.XA CN201911196214A CN110928815A CN 110928815 A CN110928815 A CN 110928815A CN 201911196214 A CN201911196214 A CN 201911196214A CN 110928815 A CN110928815 A CN 110928815A
Authority
CN
China
Prior art keywords
value
key value
current
input
ahci
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201911196214.XA
Other languages
English (en)
Other versions
CN110928815B (zh
Inventor
梁效宁
董超
许超明
林华彦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Efficiency Source Technology Co Ltd
Original Assignee
Sichuan Efficiency Source Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Efficiency Source Technology Co Ltd filed Critical Sichuan Efficiency Source Technology Co Ltd
Priority to CN201911196214.XA priority Critical patent/CN110928815B/zh
Publication of CN110928815A publication Critical patent/CN110928815A/zh
Application granted granted Critical
Publication of CN110928815B publication Critical patent/CN110928815B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Input From Keyboards Or The Like (AREA)
  • Small-Scale Networks (AREA)

Abstract

本发明公开了一种获取AHCI基地址寄存器值的方法,其特征在于包括以下步骤:S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。

Description

一种获取AHCI基地址寄存器值的方法
技术领域
本发明属于数据恢复与硬盘固件安全技术领域,涉及一种获取AHCI基地址寄存器值的方法。
背景技术
在硬盘存储领域上,如何从底层实现对硬盘进行控制及数据恢复,现有技术中还没有涉及到类似的技术方案。随着硬盘技术的不断发展及硬盘使用量的扩大,如何更好的控制、监控硬盘及恢复硬盘数据都变得越发的重要。经研究发现:在硬盘AHCI的工作模式下,只有获取了PCI配置空间中AHCI基地址寄存器(AHCI Base Address Register)的值后,才可以进行控制硬盘、恢复硬盘数据等操作。
发明内容
针对现有技术的不足,本发明提供了一种获取AHCI基地址寄存器值的方法,根据AHCI分类码的偏移地址及各键值,计算输入值并获取CPU输出端口的输出值,从而计算并获取AHCI基地址寄存器值。本发明申请包括以下步骤:
S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;
S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;
S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;
S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;
S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
优选地,所述步骤S200包括以下步骤:
S201:将输入值赋初值为0x80000000;
S202:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S203:输入值=输入值|0x8000,其中的|代表按位或运算符;
S204:输入值=输入值左移0x10位;
S205:当前设备键值=当前设备键值左移0x03位;
S206:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S207:输入值=输入值+(所述AHCI分类码的偏移地址&0xFC),其中的+代表加法运算符,&代表按位与运算符;
S208:向CPU输入端口输入当前输入值。
优选地,所述步骤S500包括以下步骤:
S501:读取所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值;
S502:将输入值赋初值为0x80000000;
S503:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S504:输入值=输入值|0x8000,其中的|代表按位或运算符;
S505:输入值=输入值左移0x10位;
S506:当前设备键值=当前设备键值左移0x03位;
S507:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S508:输入值=输入值+(基地址寄存器的偏移地址&0xFC),其中的+代表按加法运算符,&代表按位与运算符;
S509:向CPU输入端口输入当前输入值,获取CPU输出端口的当前输出值作为所述AHCI基地址寄存器值。
优选地,所述AHCI分类码为0x106。
优选地,所述AHCI分类码的偏移地址为0x08。
优选地,所述CPU输入端口的端口号为0xCF8,所述CPU输出端口的端口号为0xCFC。
优选地,所述基地址寄存器的偏移地址为0x24。
本发明具有以下有益效果是:解决了现有技术中尚无一种获取AHCI基地址寄存器值的方法的技术问题。
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明的一个实施例中计算AHCI分类码的具体流程图;
图3为本发明的一个实施例中计算并获取AHCI基地址寄存器值的具体流程图。
具体实施方式
图1示出了本发明所提供的方法的总流程图。如图1所示,包括以下步骤:
S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值。现有技术中,枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值的方法较多,不再赘述。下述为本发明实施例中枚举PCI总线的各个PCI设备:
Bus 02,Device 00,Function 00-VMware Inc.UHCI USB Controller
Bus 02,Device 01,Function 00-Intel Corporation Ethernet Controller
Bus 02,Device 02,Function 00-VMware InC.HD Audio Device
Bus 02,Device 03,Function 00-VMware Inc.EHCl USB Controller
Bus 02,Device 05,Function 00-VMware Inc.AHCl Controller
Bus 03,Device 00,Function 00-LSI Logic 53C810 Devlce Mass StorageController
从上述枚举PCI的总线的各个PCI设备中可以获取AHCI对应的总线(bus)键值为0x2、设备(device)键值为0x5,功能(function)键值为0x00。
S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值。
图2示出了本发明的一个实施例中计算AHCI分类码的具体流程图。如图2所示,包括以下步骤:
S201:将输入值赋初值为0x80000000;
S202:输入值=输入值+当前总线键值,其中的+代表加法运算符;即,输入值=0x80000000+0x2=0x80000002;
S203:输入值=输入值|0x8000,其中的|代表按位或运算符;即,输入值=0x80000002|0x8000=0x80008002;
S204:输入值=输入值左移0x10位;即,输入值=0x80008002<<0x10=0x80020000;
S205:当前设备键值=当前设备键值左移0x03位;即,当前设备键值=(0x5<<0x3);
S206:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;即,输入值=0x80020000+((0x5<<0x3)|0x00)*0x100==0x80022800;
S207:输入值=输入值+(AHCI分类码的偏移地址&0xFC),其中的+代表加法运算符,&代表按位与运算符;即,输入值=0x80022800+(0x8&0xFC)=0x80022808;
S208:向CPU输入端口输入当前输入值0x80022808。
S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;
本发明实施例中,根据当前输入值0x80022808,获取CPU输出端口的当前输出值为AHCI分类码0x106,即,表示当前PCI设备为AHCI控制器,执行步骤S500;
S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;
S500:根据基地址寄存器的偏移地址、步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
图3示出了本发明的一个实施例中计算并获取AHCI基地址寄存器值的具体流程图。如图3所示,包括以下步骤:
S501:读取步骤S200中当前PCI设备的总线键值、设备键值及功能键值;
S502:将输入值赋初值为0x80000000;
S503:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S504:输入值=输入值|0x8000,其中的|代表按位或运算符;
S505:输入值=输入值左移0x10位;
S506:当前设备键值=当前设备键值左移0x03位;
S507:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S508:输入值=输入值+(基地址寄存器的偏移地址&0xFC),其中的+代表按加法运算符,&代表按位与运算符;
步骤S502至S508的运算方法与步骤S201至S207同,不再赘述。
S509:向CPU输入端口输入当前输入值,获取CPU输出端口的当前输出值作为AHCI基地址寄存器值。
通过本发明提供的方法,解决了现有技术中尚无一种获取AHCI基地址寄存器值的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (7)

1.一种获取AHCI基地址寄存器值的方法,其特征在于包括以下步骤:
S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;
S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;
S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;
S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;
S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
2.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述步骤S200包括以下步骤:
S201:将输入值赋初值为0x80000000;
S202:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S203:输入值=输入值|0x8000,其中的|代表按位或运算符;
S204:输入值=输入值左移0x10位;
S205:当前设备键值=当前设备键值左移0x03位;
S206:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S207:输入值=输入值+(所述AHCI分类码的偏移地址&0xFC),其中的+代表加法运算符,&代表按位与运算符;
S208:向CPU输入端口输入当前输入值。
3.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述步骤S500包括以下步骤:
S501:读取所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值;
S502:将输入值赋初值为0x80000000;
S503:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S504:输入值=输入值|0x8000,其中的|代表按位或运算符;
S505:输入值=输入值左移0x10位;
S506:当前设备键值=当前设备键值左移0x03位;
S507:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S508:输入值=输入值+(基地址寄存器的偏移地址&0xFC),其中的+代表按加法运算符,&代表按位与运算符;
S509:向CPU输入端口输入当前输入值,获取CPU输出端口的当前输出值作为所述AHCI基地址寄存器值。
4.根据权利要求1的一种获取AHCI基地址寄存器值的方法,其特征在于,所述AHCI分类码为0x106。
5.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述AHCI分类码的偏移地址为0x08。
6.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述CPU输入端口的端口号为0xCF8,所述CPU输出端口的端口号为0xCFC。
7.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述基地址寄存器的偏移地址为0x24。
CN201911196214.XA 2019-11-29 2019-11-29 一种获取ahci基地址寄存器值的方法 Active CN110928815B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911196214.XA CN110928815B (zh) 2019-11-29 2019-11-29 一种获取ahci基地址寄存器值的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911196214.XA CN110928815B (zh) 2019-11-29 2019-11-29 一种获取ahci基地址寄存器值的方法

Publications (2)

Publication Number Publication Date
CN110928815A true CN110928815A (zh) 2020-03-27
CN110928815B CN110928815B (zh) 2023-05-05

Family

ID=69847674

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911196214.XA Active CN110928815B (zh) 2019-11-29 2019-11-29 一种获取ahci基地址寄存器值的方法

Country Status (1)

Country Link
CN (1) CN110928815B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070005869A1 (en) * 2005-06-29 2007-01-04 Jasper Balraj Index/data register pair for indirect register access
CN101840306A (zh) * 2009-03-18 2010-09-22 研祥智能科技股份有限公司 VxWorks操作系统中实现驱动SATA设备的方法和系统
US20130007332A1 (en) * 2011-06-30 2013-01-03 Chee Hak Teh Controllable transaction synchronization for peripheral devices
US9026687B1 (en) * 2013-12-26 2015-05-05 Lsi Corporation Host based enumeration and configuration for computer expansion bus controllers
CN105468482A (zh) * 2014-08-29 2016-04-06 研祥智能科技股份有限公司 一种硬盘盘位识别和故障诊断方法及其服务器设备
CN106372004A (zh) * 2015-07-24 2017-02-01 爱思开海力士有限公司 用于ssd控制器的可编程协议独立bar存储器

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070005869A1 (en) * 2005-06-29 2007-01-04 Jasper Balraj Index/data register pair for indirect register access
CN101840306A (zh) * 2009-03-18 2010-09-22 研祥智能科技股份有限公司 VxWorks操作系统中实现驱动SATA设备的方法和系统
US20130007332A1 (en) * 2011-06-30 2013-01-03 Chee Hak Teh Controllable transaction synchronization for peripheral devices
US9026687B1 (en) * 2013-12-26 2015-05-05 Lsi Corporation Host based enumeration and configuration for computer expansion bus controllers
CN105468482A (zh) * 2014-08-29 2016-04-06 研祥智能科技股份有限公司 一种硬盘盘位识别和故障诊断方法及其服务器设备
CN106372004A (zh) * 2015-07-24 2017-02-01 爱思开海力士有限公司 用于ssd控制器的可编程协议独立bar存储器

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
崔丹丹等: "NVMe高速存储的FPGA实现" *
徐佳安: "基于UVM的SATA AHCI验证" *

Also Published As

Publication number Publication date
CN110928815B (zh) 2023-05-05

Similar Documents

Publication Publication Date Title
EP2972774A1 (en) Techniques for enabling bit-parallel wide string matching with a simd register
EP3038017A1 (en) Method of generating descriptor for interest point in image and apparatus implementing the same
KR102391385B1 (ko) 내장형 로직 분석기 및 이를 포함하는 집적 회로
JP2009135854A (ja) メモリアクセス制御装置、制御方法及びプログラム
JP5791121B2 (ja) コスト算出装置、コスト算出方法、及びプログラム
CN112347154A (zh) 一种渣皮脱落指数计算方法、终端设备及存储介质
US11740791B2 (en) Data compression system using base values and methods thereof
JP5735150B2 (ja) 正規化カウントを判定するプロセッサ及び方法
JP6345346B2 (ja) 分析装置及び分析方法及び分析プログラム
CN110928815B (zh) 一种获取ahci基地址寄存器值的方法
JP6350296B2 (ja) 処理プログラム、処理装置および処理方法
JP2019125353A (ja) 電子文書中の文字列塊を推測する方法
JP2017163429A (ja) 時系列データ圧縮装置
JP2017151986A (ja) データを抽出する装置及び方法
EP3358460B1 (en) Systems and methods for computing mathematical functions
WO2019205064A1 (zh) 神经网络加速装置与方法
JP2020525963A (ja) メディア特徴の比較方法及び装置
JP6675408B2 (ja) 情報処理システム、情報処理方法、情報処理プログラム、及び記憶媒体
JP2016045721A (ja) データ格納方法、三値内積演算回路、それを備えた半導体装置、及び、三値内積演算処理プログラム
JP6600077B2 (ja) 画像処理装置、画像処理方法、及び画像処理プログラム
JP4865449B2 (ja) 差分生成装置及び差分適用装置及び差分生成プログラム及び差分適用プログラム及び差分生成適用システム及び差分生成適用方法
JP2006330124A (ja) データ処理装置
US8571846B2 (en) Electronic device and method of generating composite electrical signals
JP2018185615A (ja) 電子機器、方法、及びプログラム
JP2009225200A (ja) A/d変換装置およびa/d変換方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant