中断reboot是什么意思

reboot是什么意思  时间:2021-01-14  阅读:()

Q/LSQ/LS0013-2014龙芯CPU开发系统固件与内核接口规范V2.
22014-04-01发布2014-06-01实施龙芯中科技术有限公司批准龙芯中科技术有限公司企业标准文档更新记录文档编号Q/LS0013-2014文档名龙芯CPU开发系统固件与内核接口规范版本号V2.
2创建人研发中心创建日期2014-04-01更新历史序号更新日期版本号更新内容12014.
4.
01V1.
0发布文档初始版本V1.
0版.
22016.
8.
30V1.
1修订版本V1.
11、重新修订了地址规范约束;2、重新修订了SMBIOS规范中CPU型号的约定;32017.
4.
18V1.
2修订版本V1.
21、添加传参新成员cpuname及其格式规范;2、添加新传参功能:表示桥片个数、DMAcache/uncache;3、添加新的结构体描述(efi_reset_system_t);4、添加成员DoSuspend;42017.
5.
27V2.
0修订版本V2.
01、重新修订附录Bbootparam.
h文件;2、修正附录A中的几处错误;52018.
3.
27V2.
1修订版本V2.
11、第4节修改,地址规范相关修改;2、增加附录E,添加3A/3B+7A描述(boardinfo、地址、中断),增加7AGPU使用地址段约束;3、完善4.
2节地址规范约束;4、添加4.
3节DMA规范描述以及C、D、E附录中DMA规范约束表;5、修改一些编写错误;62018.
11.
20V2.
2修订版本V2.
21、第4.
2节,低端内存的高16M地址空间相对UEFI做了约束;32、第7节,对SMBIOS产品信息(Type2)第六字段增加了命名约束,附录A.
6board_devices.
name受同样约束;3、附录A.
4,规范了使用龙芯集显情况vbios的处理;4、附录A.
8,固件传参接口的内存映射表中对应物理地址空间范围增加了DMA地址空间范围;5、附录A.
9,固件传参接口添加of_dtb_addr成员;6、附录A.
12,固件传参接口cpuname修订了新的命名方式;7、修改了一些语法错误.
Q/LS0013-2014I目次1范围12术语与定义13架构关系14地址空间规范24.
1芯片地址空间表.
24.
2地址空间表.
24.
3DMA规范.
45中断配置规范45.
1固件与内核关于中断的划分界面.
45.
1.
1固件与内核关于中断的分工.
45.
1.
2中断的处理方式.
55.
2中断号码的分配及各类芯片内部中断路由约定55.
3与板级硬件设计有关的约定.
56固件与内核接口传参规范56.
1传参数据结构的约定.
56.
2传参的实现.
66.
2.
1概述.
66.
2.
2固件中实现.
66.
2.
3参数的传递.
66.
2.
4内核中实现.
67SMBIOS规范的实现约定68兼容性约定89总结8附录A龙芯CPU开发系统传参数据结构9附录B传参数据结构头文件bootparam.
h.
21附录C3A/B+780E中断及地址空间约定28附录D3A/B+2H中断及地址空间约定31附录E3A/B+7A中断及地址空间约定34Q/LS0013-2014II前言本规范是龙芯中科技术有限公司制定的企业规范,暂无国家相关行业通用规范可参考.

本规范涉及到固件与内核之间的传参、中断分配及地址空间划分等方面,主要介绍龙芯板卡固件与内核之间的接口定义,地址空间分配,中断在内核和固件之间的划分、中断号的分配及相关硬件布线约定,最后提到了SMBIOS中需要实现的类型约定.
接口定义涉及到固件与内核间信息传递的数据结构定义,固件使用何种方式传递这些数据结构及内核如何解析等方面.
本规范的起草单位:龙芯中科技术有限公司、中电科技(北京)有限公司、江苏中科梦兰电子科技有限公司、中标软件有限公司.
本规范的主要起草人:孟小甫、司志莹、王焕东、成修治、陈华才、陈小春、何瞾君、刘绍宗、苏孟豪、乔崇、夏启超、李雪峰、张爽爽、周学智.
本规范审核人:王剑,高翔,黄沛,邱吉,李文刚,王玉钱,袁俊卿.
本规范批准人:胡伟武.
Q/LS0013-20141龙芯CPU开发系统固件与内核接口规范1范围本规范规定了龙芯CPU开发系统的地址空间、中断配置、固件与内核接口传参实现及SMBIOS实现约定的要求.
本规范适用于龙芯2号和3号系列CPU开发系统.
建议其它系统厂商遵循此规范开发相关产品.
本规范由通用规范和详细规范组成.
正文及附录A、B为通用规范,通用规范描述一般性的约定.
附录C、附录D为详细规范,详细规范针对不同开发系统进行具体约定.
当通用规范与详细规范不一致时,以详细规范为准.
2术语与定义本规范所用术语定义如下:a)固件:Firmware,写入ROM、EPROM等非易失存储器中的程序,负责控制和协调集成电路.
b)BIOS:基本输入输出系统,BasicInputOutputSystem,一组固化到主板上一个ROM芯片上的程序,它保存着计算机基本输入输出程序、系统设置信息、开机后自检程序和系统自启动程序.
BIOS与硬件系统集成在一起,也被称为固件,本规范中固件和BIOS不做区分.
c)UEFI:统一的可扩展固定接口,UnifiedExtensibleFirmwareInterface,是Intel为全新类型的PC固件的体系结构、接口和服务提出的建议标准.
主要目的是提供在OS加载之前在所有平台上一致、正确指定的启动服务,被看做是有近20多年历史的PCBIOS的继任者.
d)PMON:MIPS架构机器上使用的一种兼有BIOS和bootloader部分功能的开放源码软件.
e)SMBIOS(SystemManagementBIOS):是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范.
DMI(DesktopManagementInterface)是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行.
SMBIOS和DMI是由行业指导机构DesktopManagementTaskForce(DMTF)起草的开放性的技术标准.
f)HT(HyperTransport):是一种为主板上的集成电路互连而设计的端到端总线技术,目的是加快芯片间的数据传输速度.
HT通常指CPU到主板芯片(或北桥)之间的连接总线,即HT总线.
类似于Intel平台中的前端总线(FSB),HT按技术规格分有HT1.
0、HT2.
0、HT3.
0、HT3.
1.
g)PCI(PeripheralComponentInterconnect):是连接电子计算机主板和外部设备的总线标准,用于定义局部总线的标准.
此标准允许在计算机内安装多达10个遵从PCI标准的扩展卡.
3架构关系龙芯PC产品的固件与内核接口在系统各软件之间所处的层次关系如图1所示:操作系统固件与内核接口PMON开源固件(如Uboot)商业固件(如昆仑固件)Q/LS0013-20142图1接口与内核和固件之间的关系4地址空间规范4.
1芯片地址空间表龙芯处理器可以通过芯片内的PCI接口连接外部桥片,也可以使用HT端口连接桥片.
由于HT端口速度更快、位长更宽,现在多使用HT1端口连接桥片的模式.
不同芯片的地址空间配置约定如各自的附录所示.
4.
2地址空间表地址空间设计的规则约定如下:a)0x0000_0000~0x0FFF_FFFF的低256MB空间为低端内存空间.
其中0x0000000~0x001FFFFF为兼容老版本固件保留的2M地址空间;0x0F00_0000~0x0FFF_FFFF是为固件保留的16M地址空间,用于与内核的信息交互,如固件传参、关机和重启功能、Smbios、Vbios等.
龙芯UEFI的16M地址空间要做特殊规划,防止上述数据分配到16M以下空间.
参考实现如下:0x0FFF_FFFFTOP-0x0FFF_E01E|SmbiosTable|0x0FFF_E000|.
||.
||.
|0x0F03_A000|BootParams|0x0F03_0400|ExceptionCode|0x0F03_0000|Smbios|0x0F02_00C0|S3|0x0F02_00A0|Vbios|0x0F00_00A0|Shutdown|0x0F00_0050|Reboot|0x0F00_0000b)0x1000_0000~0x1FFF_FFFF为PCI等IO设备空间及部分芯片配置寄存器空间;c)0x3000_0000~0x3FFF_FFFF为窗口配置寄存器的空间范围;d)0x4000_0000~0x7FFF_FFFF为PCI设备memory空间范围;e)0x2000_0000~0x2FFF_FFFF和0x8000_0000~高端内存基址-0x0000_0001为保留空洞;f)高端内存基址缺省值为0x9000_0000,各系统如有特殊需要可从emap结构传递修改的值;Q/LS0013-20143g)高端内存基址约束如下对齐要求:2^n+0x10000000,31video_bios_addr=0xc3f00000;init_efi(&(bp->efi));returnbp;}structefi_memory_map_loongson*init_memory_map(){}中给每一项具体赋值.
6.
2.
3参数的传递在固件中初始化好所有的结构体或服务,最终封装到boot_params的结构体中,将该结构体指针bp赋值给a2寄存器.
在main.
c中调用boot_params的指针,并将指针赋值给a2寄存器.
6.
2.
4内核中实现在内核中,内核的实现主要是对该结构的解析工作,目前是在env.
c中直接解析.
首先定义和固件完全一样的结构体,在head.
S中把a2寄存器读出,赋值给fw_arg2,依次读出固件传过的信息,并对相应的结构体变量赋值即可;如:structboot_params*bp;bp=(structboot_params)fw_arg2;emap=bp+bp->memory_offset;等等逐次赋值解析,则相应的信息均可被内核使用.
注意:内核与固件的结构体必须完全一致,任何类型改动,都会导致内核无法启动.

7SMBIOS规范的实现约定SMBIOS是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范.

DMI(DesktopManagementInterfacece,DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行.
SMBIOS和DMI是由行业指导机构DesktopManagementTaskForce(DMTF)起草的开放性的技术标准,其中,DMI设计适用于任何的平台和操作系统.
DMI充当了管理工具和系统层之间接口的角色.
它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解.

DMI的主要组成部分是ManagementInformationFormat(MIF)数据库.
这个数据库包括了所有有关电脑系统和配件的信息.
通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信Q/LS0013-20147息.
目前建议必须实现的SMBIOS类别如下:兼容SMBIOS2.
3规范版本,必须实现包含以下8个数据表结构:a)BIOS信息(Type0)b)系统信息(Type1)c)产品信息(Type2)d)处理器信息(Type4)e)物理存储阵列(Type16)f)存储设备(Type17)g)温度传感器(Type28)h)表格结束指示(Type127)其中:Type0BIOS信息中的固件版本(BIOSVersion)约定格式见表5:表5BIOS信息约定格式说明及举例举例说明厂商代号连字符固件名称连字符版本连字符发布日期PMON3Loongson-PMON-V3.
0.
1-20120808Type2的产品(Product)信息格式约定见表6:表6产品信息约定格式说明及举例举例说明厂商代号连字符CPU型号连字符桥片连字符CPU路数连字符板卡版本号连字符板卡标识2HSOC开发板Loongson-LS2H-SOC-1w-V1.
01-DEV3A780E双路开发板Loongson-LS3A-RS780E-2w-V1.
03-ATX_EVB龙梦3A780E双路带BMC控制服务器板Lemote-LS3A-RS780E-2wBMC-V1.
00-server3A7A单路开发板Loongson-LS3A-7A-1w-V1.
00-ATX_EVB表6注:a)CPU路数的后缀"w"是小写以便和后面跟的诸如BMC(BaseboardManagementController,远程管理控制器)或TCM(TrustCryptographyModule,可信密码模块)区分.
b)CPU型号约定如下:3A系列:LS3A1000、LS3A2000、LS3A3000、LS3A40003B系列:LS3B1000、LS3B1500、LS3B20002G系列:LS2G1000、LS2G15002H系列:LS2H2、LS2H3c)板卡标识字段,其命名规则约定如下:Q/LS0013-20148产品类型/结构类型_产品型号/编码产品类型/结构类型:笔记本电脑使用NB或notebook;主板接口类型使用CPCI/VPX/ATX/MATX/ITX/等等.
举例:NB_A1001或notebook_a1001,CPCI_1000,MATX_A1601,ATX_EVB等等.
8兼容性约定1)内核加载虚地址从0x8020_0000开始.
2)Linux系统中固件与内核接口参数的首指针存储在/proc/loongspec文件中,格式如下:以"LOONGSPEC="开头,后跟以0x开头的16进制地址.
如LOONGSPEC=0xaffff30.
9总结本传参规范的提出和制定旨在规范龙芯的固件和内核接口,重点规定了地址空间、中断分配、传参数据结构、SMBIOS实现约定等方面,使得内核具有更广泛的适应性及兼容性,能有效解决内核对具体板卡设备的依赖性,有利于龙芯系列产品基础软件的规范和统一.
Q/LS0013-20149附录A龙芯CPU开发系统传参数据结构A.
1固件与内核接口定义本节规定了固件在加载内核阶段的接口定义,定义了接口信息结构体、预留了UEFI可扩展信息.
信息结构体定义如下:#defineu64phys_t#defineu64unsignedlonglong#defineu32unsignedint#defineu16unsignedshort#defineu8unsignedchar注:为避免固件32位,内核64位的问题,在代码实现时,建议把指针替换成u64,并在使用处注明u64代表什么结构体或定义,在本规范中不给出直接替换,否则会混淆结构含义,且对UEFI/内核或PMON64/内核64不具备兼容性.
传参主要结构体,如表5所示:表A.
1传参结构一览表结构体描述structboot_params启动参数结构体,必选srtuctefiEfi入口结构体,必选structsmbios_tablesSMBIOS相关信息描述,必选structloongson_param其他结构体相对的偏移地址structinterface_info接口信息,描述规范本身的信息structloongson_efi_memory_map龙芯内存地址空间信息,必选structsystem_loongson龙芯system的信息,如单路还是双路,是否用numa等structefi_cpuinfo_loongson与龙芯CPU相关的信息,如频率,型号等,必选structirq_source_routing_table中断信息,包含中断控制器,中断号等等structboard_device板载设备的描述结构structuart_device串口相关的设备结构structsensor_device温度、风扇传感器相关的设备结构structloongson_special_attribute龙芯特殊应用的预留接口注:各板卡可根据需要选择必须实现的结构体,但如果选用,需按照本章约定的结构体进行传参,不能自行重新设计结构体,为保证兼容性,如果需要扩充本规范没有的结构体,可加在结构体boot_params的最后添加,并在各自的附录中给以说明.
A.
2boot_paramsstructboot_params{structscreen_infoscreen_info;/*infoaboutscreen,reserved*/structsys_desc_tablesys_desc_table;/*tablesinbios,reserved*/structefi_loongsonefi;/*efistruct*/structefi_reset_system_treset_system;/*informationofreset*/};固件最终是将boot_params的结构体指针bp传递给内核,这样有一个统一的接口结构体,screen_info,sys_desc_table,efi_info等可以暂时保留.
必须定义:strcutefi_loongsonefi.
Q/LS0013-201410表A.
2.
1boot_params结构体描述成员意义screen_info屏幕信息,包括打印到屏幕上的坐标sys_desc_table与系统相关的描述符表efiefi_loongson结构reset_system系统重启、关机信息其中efi_reset_system_t结构体:structefi_reset_system_t{u64ResetCold;u64ResetWarm;u64ResetType;u64Shutdown;u64DoSuspend;/*NULLifnotsupport*/};表A.
2.
2efi_reset_system_t结构体描述成员意义ResetCold冷启动ResetWarm热启动ResetType重启类型(保留)Shutdown关机DoSuspend挂起/休眠注:各成员的定义据具体情况而定,例如笔记本电脑结构中的Shutdown、ResetWarm以及DoSuspend必须定义,ResetCold、ResetType可保留.
A.
3efistructefi_loongson{efi_system_table_tsystab;/*EFIsystemtable*/u64mps;/*MPStable*/u64acpi;/*ACPItable(IA64ext0.
71)*/u64acpi20;/*ACPItable(ACPI2.
0)*/structsmbios_tablessmbios;/*SMbiostable*/u64sal_systab;/*SALsystemtable*/u64boot_info;/*bootinfotable*//*havenonthisstructforPMONefi_get_time_t*get_time;efi_set_time_t*set_time;efi_get_wakeup_time_t*get_wakeup_time;efi_set_wakeup_time_t*set_wakeup_time;Q/LS0013-201411efi_get_variable_t*get_variable;efi_get_next_variable_t*get_next_variable;efi_set_variable_t*set_variable;efi_get_next_high_mono_count_t*get_next_high_mono_count;efi_reset_system_t*reset_system;efi_set_virtual_address_map_t*set_virtual_address_map;*/};该结构体中包含了与efi服务相关的很多信息,图system_table,acpi,smbios,time服务等,这些信息在当前PMON的基础上无法实现,是作为UEFI的传参结构体预留扩展预留的,目前主要使用的信息定义在smbios中.
该结构体是标准的UEFI的结构定义.
大部分保留,仅适用smbios.
必须定义:strcutsmbios_tablessmbios;表A.
3efi结构体描述成员意义mps电源管理相关信息;acpiAcpi的接口;acpi20Acpi补充信息;smbios描述与厂商相关的信息,如CPU,memory,irq等;sal_systableSAL_Table的信息;boot_info与启动相关的参数信息;get_time获得当前的时间;set_time设定当前的时间;get_wakeup_time取得唤醒时间;set_wakeup_time设定唤醒时间;get_variable获得可变参数;get_next_variable获得下一项可变参数;set_variable设定变量;get_next_high_mono_countreset_system调用重启,开关机函数;set_virtual_address_map虚存空间地址图;A.
4smbios_tablesstructsmbios_tables{u16vers;/*versionofsmbios*/u64vga_bios;/*vga_biosaddress*/structloongson_paramlp;};Smbios_tables可遵循SMBIOS规范,SMBIOS是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范,可以给出序列号、电脑厂商信息、固件、操作系统、主板、内存、扩展槽及扩展接口的详细.
SMBIOS给出版本信息,vga_bios基地址,及龙芯平台相关的结构体信息.
其中vers是标识本结构体的版本号,vga_bios保存vga_bios的基地址,loongson_param则是与龙芯体系相关的结构体;vga_bios告诉内核vga_bios的基地址,在龙芯上使用x86模拟的显卡(如RS780E集显),或者使用龙芯桥片集显(如7A1000集显),该地址必须也是龙芯板卡的特性之一,如果当前使用的是自带vbios的独立显卡,vga_bios的值默认设定为0,而不能是个未赋值的随机数.
必须定义:原则上,这结构体的每一项都必须定义,任何一个如果不定义或者定义出错,内核就Q/LS0013-201412无法启动.
如vga_bios,不定义图形界面启动不起来.
注意:使用龙芯桥片(如7A1000)集显的情况下,固件必须为集显准备vbios并存储在内存特定区域中,把vbios内存地址通过vga_bios传递给内核.
A.
5loongson_paramstructloongson_params{u64memory_offset;/*efi_memory_map_loongsonstructoffset*/u64cpu_offset;/*efi_cpuinfo_loongsonstructoffset*/u64system_offset;/*system_infostructoffset*/u64irq_offset;/*irq_source_routing_tablestructoffset*/u64interface_offset;/*interface_infostructoffset*/u64special_offset;/*loongson_special_attributestructoffset*/u64boarddev_table_offset;/*board_deviceoffset*/};该结构保存所有结构体相对loong_param结构体地址的偏移,memory_offset是内存结构体的偏移,cpu_offset是CPU结构体的偏移,system_offset是系统结构体的偏移,irq_offset是龙芯中断控制器相关的偏移,special_offset是龙芯特殊特性结构体的偏移,board_offset是龙芯板载设备结构体偏移.
该结构体中只存放各个结构体的偏移,因此不能在填充其他变量.
表A.
4为和龙芯传参相关信息一览表.
表A.
4loongson_params结构体描述成员意义interface_info接口信息,描述规范本身的信息;efi_memory_map_loongson龙芯内存地址空间信息;system_info龙芯system的信息,如单路还是双路,是否用numa等;efi_cpuinfo_loongson与龙芯CPU相关的信息,如频率,型号等;irq_source_info中断信息,包含中断控制器,中断号等等;special_attr龙芯的其他特殊属性;boarddev_table板载设备的描述结构;A.
6board_devicesstructboard_devices{u8name[64];/*holdthedevicename*/u32num_resources;/*numberofdevice_resource*/structresource_loongsonresource[MAX_RESOUCR_NUMBER];/*foreachdevice`sresource*//*archspecificadditions*/structarchdev_archdataarchdata;};表A.
5board_devices结构体描述成员意义name设备名称;num_resource设备资源个数;resource_loongsonresource[MAX_RESOUCR_NUMBER]设备资源信息;Q/LS0013-201413archdev_archdataarchdata设备相关的数据信息;#defineMAX_RESOUCR_NUMBER128structresource_loongson{u64start;/*resourcestartaddress*/u64end;/*resourceendaddress*/u8name[32];u32flags;};structarchdev_archdata{};注:如果固件中实现了SMbios规范的type2boardinformation,使用此结构体的name进行传递,传递板卡名称的约定见本规范第7节表6.
A.
7interface_infostructinterface_info{u16vers;/*versionofthespecificition*/u16size;/*sizeofthisinterface*/u8flag;/*useorunuse*/u8description[64];/*descriptionforeachchange*/}__attribute__((packed));本结构提供接口的版本信息,vers表示本规范的版本信息,可以用来却别不同版本下不同的功能,重大改动版本使用v0,v1,v2表示,小改动版本使用v0.
1,v1.
1,v1.
2等表示;flag标识当前内核或固件有没有使用本规范.
这个作为接口升级和变更标记,同时区别可以规范前后固件和内核的情况,使得内核的处理和使用有一定的兼容性.
description[64]简要描述版本更迭重大变化.

必须定义:vers,flag.
表A.
6interface_info结构体描述成员意义versInterface_info的版本信息,标识规范的版本更迭;size结构的大小,所占内存大小;flag标识当前有没有使用规范;description对规范的简单描述,及每次规范升级的关键内容描述等.
注:如果固件中实现了SMBIOS规范的type0BIOSInformation,使用此结构体的description进行传递,传递固件名称的约定见本规范第7节表5.
A.
8efi_memory_map_loongson针对龙芯平台,定义了如下内存类型:#defineSYSTEM_RAM_LOW1#defineSYSTEM_RAM_HIGH2#defineMEM_RESERVED3#definePCI_IO4#definePCI_MEM5Q/LS0013-201414#defineLOONGSON_CFG_REG6#defineVIDEO_ROM7#defineADAPTER_ROM8#defineACPI_TABLE9#defineSMBIOS_TABLE10#defineUMA_VIDEO_RAM11#defineVUMA_VIDEO_RAM12#defineSYSTEM_RAM_DMA_LOW13#defineSYSTEM_RAM_DMA_HIGH14#defineMAX_MEMORY_TYPE15structefi_memory_map_loongson{u16vers;/*versionofefi_memory_map*/u32nr_map;/*numberofmemory_maps*/u32mem_freq;/*memoryfrequence*/structmem_map{u32node_id;/*recordethenode_id*/u32mem_type;/*recordethememorytype*/u64mem_start;/*memorymapstartaddress*/u32mem_size;/*foreachmemory_mapsize,notthetotalsize*/}map[LOONGSON3_BOOT_MEM_MAP_MAX];}__attribute__((packed));龙芯内存是统一编址的,整个内存是一张表,在本结构中,vers表示当前memory_map的版本号,nr_map是传递过来的内存表的个数,内核扫描传过来的全部的内存表,然后根据下面结构体中node_id,mem_type等两项判断传递过来的内存表是什么表,挂在哪个节点上.
从而得到每个内存表的起始地址,大小等等信息,SMBIOS使用此结构体向内存发布.
从vers=2开始,DMA的地址空间范围由固件依据板卡划定传递给内核,DMA规范参考4.
3节.
map数组顺序约束:1.
物理地址先于DMA地址2.
物理地址顺序与DMA地址顺序一一对应表A.
7efi_memory_map_loongson结构体描述成员意义versEfi_memory_map_loongson的版本信息;nr_map内存表的个数,记录从固件传递过来的所有表的个数;mem_freq内存的频率,ddr频率;structmem_map表示每张表的信息的结构体;node_id:当前内存表挂在那个节点上;mem_type:当前内存表的类型;mem_start:当前表的起始地址;mem_size:当前表的大小;固件中此结构体必须定义和赋值,内存地址信息必须通过此结构体传递给内核.

A.
9sytem_loongsonQ/LS0013-201415structsystem_loongson{u16vers;//versionofsystem_loongsonu32ccnuma_smp;//0:smp;1:numa;u32sing_double_channel;//1:single;2:doubleu32nr_uarts;//numberofuartsstructuart_deviceuarts[MAX_UARTS];u32nr_sensors;//numberofsensorsstructsensor_devicesensors[MAX_SENSORS];u8has_ec;u8ec_name[64];u64ec_base_addr;u8has_tcm;u8tcm_name[64];u64tcm_base_addr;u64workarounds;u64of_dtb_addr}__attribute__((packed));这个结构体主要包含龙芯特性,如:系统是否用ccnuma,当前是单路还是双路等等,也可以添加其他的特性.
ccnmua用来判断,启动numa-os还是smp;single_double则选择单路还是双路;在多核芯片中必须定义:ccnuma_smp,不定义影响性能;vers=2开始,向内核传递fdt信息;表A.
8system_loongson结构体描述成员意义vers龙芯系统版本信息;ccnuma_smp0:代表smp,1:代表numa;sing_double_channel1:代表单路,2:代表双路;nr_uarts串口数量uart_deviceuarts[MAX_UARTS]串口设备数组nr_sensors传感器数量sensor_devicesensors[MAX_SENSORS]传感器设备数组has_ec是否存在ECec_name[64]用于创建platform_device的EC名字ec_base_addrEC寄存器基地址h_tcm是否存在TCMtcm_name[64]用于创建platform_device的TCM名字tcm_base_addrTCM寄存器基地址workarounds根据有缺陷的机型做workarounds,有厂家自定义,一般在workarounds.
h里定义of_dtb_addrDTB地址,0代表固件无FDT信息A.
10uart_deviceQ/LS0013-201416#defineMAX_UARTS64structuart_device{u32iotype;/*seeinclude/linux/serial_core.
h*/u32uartclk;u32int_offset;u64uart_base;}__attribute__((packed));该结构体为描述串口相关信息MAX_UARTS为最大串口数量,本结构体是可选结构体,该结构体的访问通过system_loongson结构体寻址得到,而不是通过smbios结构体直接访问.
表A.
9uart_device结构体描述成员意义iotype标示IO类型是MMIO还是PortIO;参照内核下的Iotype;uartclk串口的时钟频率;int_offset串口IRQ号的偏移量,MMIO相对于56,PortIO是相对于0;uart_base串口寄存器的基地址.
A.
11sensor_device#defineMAX_SENSORS64#defineSENSOR_TEMPER0x00000001#defineSENSOR_VOLTAGE0x00000002#defineSENSOR_FAN0x00000004structsensor_device{u8name[16];/*aformalname*/u8label[64];/*aflexibledescription*/u32type;/*SENSOR_**/u32id;/*instanceidofasensor-class*/u32fan_policy;/*seearch/mips/include/asm/mach-loongson/loongson_hwmon.
h*/u32fan_percent;/*onlyforconstantspeedpolicy*/u64base_addr;/*baseaddressofdeviceregisters*/}__attribute__((packed));该结构体包括温度、电压传感器和风扇的描述,MAX_SENSORS是最大传感器数量,本结构体为可选结构体.
该结构体的访问通过system_loongson结构体寻址得到,而不是通过smbios结构体直接访问.
表A.
10sensor_device结构体描述成员意义name[16]用于创建platform_device的名字;label[64]自定义的一个描述名;type传感器类型;id区分同等设备的不同实例;fan_policy三种策略,定速CONSTANT_SPEED_POLICY、变速STEP_SPEED_POLICY和内核辅助KERNEL_HELPER(EC控制);Q/LS0013-201417fan_percent定速策略专用,用于风扇转速的百分比;base_addr传感器寄存地址的基地址.
A.
12efi_cpuinfo_loongsontypedefenumloongson_cpu_type{Legacy_2F=0x0,Legacy_2E=0x1,Legacy_3A=0x2,Legacy_3B=0x3,Legacy_1A=0x4,Legacy_1B=0x5,Legacy_2G=0x6,Legacy_2H=0x7,Loongson_1A=0x100,Loongson_1B=0x101,Loongson_2E=0x200,Loongson_2F=0x201,Loongson_2G=0x202,Loongson_2H=0x203,Loongson_3A=0x300,Loongson_3B=0x301};structefi_cpuinfo_loongson{/**CapabilityandfeaturedescriptorstructureforMIPSCPU*/u16vers;//versionofefi_cpiinfog_loongsonu32processor_id;/*PRID,e.
g.
6305,6306*/enumloongson_cpu_typecputype;//3a-3b-2f-2e-1a-1bu32total_node;/*physicalcorenumber*/u16cpu_startup_core_id;/*Coreid*/u16reserved_cores_mask;/*ReservedCoremask*/u32cpu_clock_freq;/*cpu_clock*/u32nr_cpus;/*numberofcpus*/u8cpuname[64];/*cpuname*/}__attribute__((packed));Processor_id是从PRID寄存器里读取的值,以16进制表示,cputype传递是龙芯哪个型号的,total_node保存当前CPU中包含几个节点,cpu_startup_core_id保存启动核的id,cpu_clock_freq是当前CPU的频率,与CPU相关的信息在传递过程中要非常小心,如果弄错一点,内核绝对无法启动.

Q/LS0013-201418必须定义:cpu_type,cpu_clock_freq,nr_cpu_loongson,total_node,等.
表A.
11efi_cpuinfo_loongson结构体描述成员意义versCPU结构的版本号;processor_id标识处理器的型号,具体的批次,如3a3,3b2等;cputypeCPU的类型,如1A,1B,2E,2F,3A,3B等;total_node总结点数;cpu_startup_core_idCPU启动核的id号,用其10进制值表示;reserved_cores_mask可工作的处理器核掩码,核序和字节的位序相同,即0~15位分别对应0~15号核的状态;0表该核可用,1表不可用;cpu_clock_freqCPU频率;nr_cpu_loongsonCPU物理核数;cpunameCPU名称其中cpuname约束如下:1)结构约束.
cpuname分为两部分,括号外为核心代号,括号内为商品名称;2)内容约束.
核心代号和商品名称的起始字符串必须为Loongson.
举例:3A1000:"Loongson-3AR1(Loongson-3A1000)";3A2000:"Loongson-3AR2(Loongson-3A2000)";3A3000:"Loongson-3AR3(Loongson-3A3000)";3A4000:"Loongson-3AR4(Loongson-3A4000)";3B1000:"Loongson-3BR1(Loongson-3B1000)";3B1500:"Loongson-3BR2(Loongson-3B1500)";3B2000:"Loongson-3AR2(Loongson-3B2000)";3B3000:"Loongson-3AR3(Loongson-3B3000)";3B4000:"Loongson-3BR3(Loongson-3B4000)";vers=2之后,cpuname约束如下:结构约束:Loongson-版本号(小版本号)(-工业等级).
举例:3A1000:"Loongson-3A1000";3A2000:"Loongson-3A2000";3A3000:"Loongson-3A3000";3A3000D:"Loongson-3A3000D";3A3000F工业级:"Loongson-3A3000F-I"or"Loongson-3A3000F-i";3A4000:"Loongson-3A4000";3B1000:"Loongson-3B1000";3B1500:"Loongson-3B1500";3B2000:"Loongson-3B2000";3B3000:"Loongson-3B3000";3B4000:"Loongson-3B4000";A.
13irq_source_routing_tableQ/LS0013-201419该结构体描述龙芯上中断控制的信息.
structirq_source_routing_table{u16vers;/*versionofirq_source_routing_table*/u16size;/*bridgenumber*/u16rtr_bus;/*busnumber*/u16rtr_devfn;/*Wheretheinterruptrouterlies*/u32vendor;u32device;u32PIC_type;/*VendoranddeviceIDofinterruptrouterPIC*/u64ht_int_bit;//3a:1structefi{}->structsmbios{}->|->structefi_memory_map;|->structefi_cpuinfo_longson;|->structirq_source_routing_table;|->structsystem_loongson;|->structuart_device;|->structsensor_device;|->structinterface_info;|->structboard_device;所有的结构体均定义在bootparam.
h中,所需要保证的是固件和内核中的bootparam.
h完全一致,否则可能导致内核解析不正确,其中uart_device和sensor_device的访问是通过结构体system_loongson,而不是通过结构smbios的偏移访问.
Q/LS0013-201421附录B传参数据结构头文件bootparam.
hB.
1说明此头文件在内核和固件中须保持一致,其结构体的描述参见附录A.
B.
2bootparam.
h1#ifndef__ASM_MACH_LOONGSON_BOOT_PARAM_H_2#define__ASM_MACH_LOONGSON_BOOT_PARAM_H_3#include45#defineSPEC_VERS0x26#defineSYSTEM_RAM_LOW17#defineSYSTEM_RAM_HIGH28#defineMEM_RESERVED39#definePCI_IO410#definePCI_MEM511#defineLOONGSON_CFG_REG612#defineVIDEO_ROM713#defineADAPTER_ROM814#defineACPI_TABLE915#defineSMBIOS_TABLE1016#defineUMA_VIDEO_RAM1117#defineVUMA_VIDEO_RAM1218#defineMAX_MEMORY_TYPE131920#defineVRAM_TYPE_SP021#defineVRAM_TYPE_UMA12223#defineDMA64_SUPPORT0x22425#defineLOONGSON3_BOOT_MEM_MAP_MAX12826structefi_memory_map_loongson{27u16vers;/*versionofefi_memory_map*/28u32nr_map;/*numberofmemory_maps*/29u32mem_freq;/*memoryfrequence*/30structmem_map{31u32node_id;/*node_idwhichmemoryattachedto*/32u32mem_type;/*systemmemory,pcimemory,pciio,etc.
*/33u64mem_start;/*memorymapstartaddress*/34u32mem_size;/*eachmemory_mapsize,notthetotalsize*/Q/LS0013-20142235}map[LOONGSON3_BOOT_MEM_MAP_MAX];36}__attribute__((packed));3738enumloongson_cpu_type39{40Legacy_2F=0x0,41Legacy_2E=0x1,42Legacy_3A=0x2,43Legacy_3B=0x3,44Legacy_1A=0x4,45Legacy_1B=0x5,46Legacy_2G=0x6,47Legacy_2H=0x7,48Loongson_1A=0x100,49Loongson_1B=0x101,50Loongson_2E=0x200,51Loongson_2F=0x201,52Loongson_2G=0x202,53Loongson_2H=0x203,54Loongson_3A=0x300,55Loongson_3B=0x30156};5758/*59*CapabilityandfeaturedescriptorstructureforMIPSCPU60*/61structefi_cpuinfo_loongson{62u16vers;/*versionofefi_cpuinfo_loongson*/63u32processor_id;/*PRID,e.
g.
6305,6306*/64enumloongson_cpu_typecputype;/*3A,3B,etc.
*/65u32total_node;/*numoftotalnumanodes*/66u16cpu_startup_core_id;/*Coreid*/67u16reserved_cores_mask;68u32cpu_clock_freq;/*cpu_clock*/69u32nr_cpus;70u8cpuname[64];/*cpuname*/7172}__attribute__((packed));73Q/LS0013-20142374#defineMAX_UARTS6475structuart_device{76u32iotype;/*seeinclude/linux/serial_core.
h*/77u32uartclk;78u32int_offset;79u64uart_base;80}__attribute__((packed));8182#defineMAX_SENSORS6483#defineSENSOR_TEMPER0x0000000184#defineSENSOR_VOLTAGE0x0000000285#defineSENSOR_FAN0x0000000486structsensor_device{87charname[32];/*aformalname*/88charlabel[64];/*aflexibledescription*/89u32type;/*SENSOR_**/90u32id;/*instanceidofasensor-class*/91u32fan_policy;/*seearch/mips/include/asm/mach-loongson/loongson_hwmon.
h*/92u32fan_percent;/*onlyforconstantspeedpolicy*/93u64base_addr;/*baseaddressofdeviceregisters*/94}__attribute__((packed));9596structsystem_loongson{97u16vers;/*versionofsystem_loongson*/98u32ccnuma_smp;/*0:nonuma;1:hasnuma*/99u32sing_double_channel;/*1:single;2:double*/100u32nr_uarts;101structuart_deviceuarts[MAX_UARTS];102u32nr_sensors;103structsensor_devicesensors[MAX_SENSORS];104charhas_ec;105charec_name[32];106u64ec_base_addr;107charhas_tcm;108chartcm_name[32];109u64tcm_base_addr;110u64workarounds;/*seeworkarounds.
h*/111}__attribute__((packed));Q/LS0013-201424112113structirq_source_routing_table{114u16vers;115u16size;116u16rtr_bus;116u16rtr_bus;117u16rtr_devfn;118u32vendor;119u32device;120u32PIC_type;/*conformuseHTorPCItoroutetoCPU-PIC*/121u64ht_int_bit;/*3A:1<<24;3B:1<<16*/122u64ht_enable;/*irqsusedinthisPIC*/123u32node_id;/*nodeid:0x0-0;0x1-1;0x10-2;0x11-3*/124u64pci_mem_start_addr;125u64pci_mem_end_addr;126u64pci_io_start_addr;127u64pci_io_end_addr;128u64pci_config_addr;129u16dma_mask_bits;130u16dma_noncoherent;/*0:cacheDMA;1:uncacheDMA*/131}__attribute__((packed));132133structinterface_info{134u16vers;/*versionofthespecificition*/135u16size;136u8flag;137chardescription[64];138}__attribute__((packed));139140#defineMAX_RESOURCE_NUMBER128141structresource_loongson{142u64start;/*resourcestartaddress*/143u64end;/*resourceendaddress*/144charname[64];145u32flags;146};147148structarchdev_data{};/*archspecificadditions*/149Q/LS0013-201425150structboard_devices{151charname[64];/*holdthedevicename*/152u32num_resources;/*numberofdevice_resource*/153structresource_loongsonresource[MAX_RESOURCE_NUMBER];/*foreachdevice'sresource*/154/*archspecificadditions*/155structarchdev_dataarchdata;156};157158structloongson_special_attribute{159u16vers;/*versionofthisspecial*/160charspecial_name[64];/*special_atribute_name*/161u32loongson_special_type;/*typeofspecialdevice*/162structresource_loongsonresource[MAX_RESOURCE_NUMBER];/*foreachdevice'sresource*/163};164165structloongson_params{166u64memory_offset;/*efi_memory_map_loongsonstructoffset*/167u64cpu_offset;/*efi_cpuinfo_loongsonstructoffset*/168u64system_offset;/*system_loongsonstructoffset*/169u64irq_offset;/*irq_source_routing_tablestructoffset*/170u64interface_offset;/*interface_infostructoffset*/171u64special_offset;/*loongson_special_attributestructoffset*/172u64boarddev_table_offset;/*board_devicesoffset*/173};174175structsmbios_tables{176u16vers;/*versionofsmbios*/177u64vga_bios;/*vga_biosaddress*/178structloongson_paramslp;179};180181structefi_reset_system_t{182u64ResetCold;183u64ResetWarm;184u64ResetType;185u64Shutdown;186u64DoSuspend;/*NULLifnotsupport*/Q/LS0013-201426187};188189structefi_loongson{190u64mps;/*MPStable*/191u64acpi;/*ACPItable(IA64ext0.
71)*/192u64acpi20;/*ACPItable(ACPI2.
0)*/193structsmbios_tablessmbios;/*SMBIOStable*/194u64sal_systab;/*SALsystemtable*/195u64boot_info;/*bootinfotable*/196};197198structboot_params{199structefi_loongsonefi;200structefi_reset_system_treset_system;201};202203externu32nr_cpus_loongson;204externu32nr_nodes_loongson;205externintcores_per_node;206externintcores_per_package;207externenumloongson_cpu_typecputype;208externu16loongson_boot_cpu_id;209externu16loongson_reserved_cpus_mask;210externstructefi_memory_map_loongson*emap;211externu64ht_control_base;212externu64pci_mem_start_addr,pci_mem_end_addr;213externu64loongson_pciio_base;214externu64vgabios_addr;215externu64low_physmem_start;216externu64high_physmem_start;217externu32vram_type;218externu64uma_vram_addr;219externu64uma_vram_size;220221externu32loongson_nr_uarts;222externstructuart_deviceloongson_uarts[MAX_UARTS];223externu32loongson_ec_sci_irq;224externcharloongson_ecname[32];225externu32loongson_nr_sensors;Q/LS0013-201427226externstructsensor_deviceloongson_sensors[MAX_SENSORS];227#endifQ/LS0013-201428附录C3A/B+780E中断及地址空间约定C.
13A/B+780E中断系统描述3A/B+780E板上,所有的外设中断都是路由到0号核(即CPU0),其中片上的UART控制器的中断直接进入IntController的UART/LPC脚,最后路由到CPU0的IP3,而片外的780E桥片上的中断则是通过HT1控制器进入到IntController的HT1-0脚,最后路由到CPU0的IP2,其示意图如下.
图C.
13A/B+780E中断路由示意图C.
23A/B+780E中断号分配约定0-15号保留分配给连接诸如8259的传统设备的中断.
原则上,龙芯芯片HT总线接口和芯片PCI总线接口不会同时使用,因此,8259中断控制寄存器只可能唯一出现在HT或者PCI总线上.
由于历史原因,8259中断控制寄存器也不是所有的中断号都可以使用,如表C.
1所示的中断号就被保留.
此外,剩下的中断号有些会被桥片保留,具体的需要查询桥片的中断控制器相关说明.

织梦DEDECMS即将授权收费和维权模式 站长应对的几个方法

这两天在站长群里看到不少有使用DEDECMS织梦程序的朋友比较着急,因为前两天有看到来自DEDECMS,我们熟悉的织梦程序官方发布的公告,将会在10月25日开始全面商业用途的使用DEDECMS内容管理程序的会采用授权收费模式,如果我们有在个人或者企业商业用途的,需要联系且得到授权才可以使用,否则后面会通过维权的方式。对于这个事情,我们可能有些站长经历过,比如字体、图片的版权。以及有一些国内的CMS...

创梦网络-江苏宿迁BGP云服务器100G高防资源,全程ceph集群存储,安全可靠,数据有保证,防护真实,现在购买7折促销,续费同价!

官方网站:点击访问创梦网络宿迁BGP高防活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式宿迁BGP4vCPU4G40G+50G20Mbps1个100G不限流量299元/月 209.3元/月点击自助购买成都电信优化线路8vCPU8G40G+50G20Mbps1个100G不限流量399元/月 279.3元/月点击自助购买成都电信优化线路8vCPU16G40G+50G2...

云步云72.5元/月起云服务器,香港安畅/葵湾/将军澳/沙田/大浦CN2机房,2核2G5M

云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...

reboot是什么意思为你推荐
虚拟主机服务什么是虚拟主机?虚拟空间租赁做个自己公司的网站,是租啊还是注册虚拟空间啊?租虚拟空间要钱吗域名注册网注册域名上哪个网站最好免费虚拟主机空间谁知道有没有免费的虚拟主机空间租服务器租服务器是什么意思?国外域名注册选择海外注册域名有什么好处?ip代理地址代理IP是什么免备案虚拟主机哪家免备案虚拟主机好,而且便宜点的?韩国虚拟主机韩国虚拟主机好还是香港的好万网虚拟主机如何购买万网的虚拟主机?
动态域名解析 二级域名查询 万网域名代理 cn域名备案 linuxapache虚拟主机 国内免备案主机 raksmart 便宜域名 Dedicated koss 美国主机代购 tk域名 xen typecho 论坛空间 怎么测试下载速度 softbank邮箱 网游服务器 国外ip加速器 服务器硬件防火墙 更多