Intel OPAE FPGA Linux Ailtireachd Dràibhear Inneal
Ailtireachd draibhear inneal OPAE Intel FPGA Linux
Bidh draibhear OPAE Intel FPGA a’ toirt seachad eadar-aghaidh airson tagraidhean àite-cleachdaidh gus luathadairean FPGA a rèiteachadh, a àireamhachadh, fhosgladh agus faighinn a-steach air àrd-ùrlaran uidheamaichte le fuasglaidhean Intel FPGA agus a ’comasachadh gnìomhan riaghlaidh ìre siostam leithid ath-dhealbhadh FPGA, riaghladh cumhachd, agus mas-fhìor.
Ailtireachd bathar-cruaidh
Bho thaobh an OS de view, tha bathar-cruaidh FPGA a’ nochdadh mar inneal PCIe àbhaisteach. Tha cuimhne inneal FPGA air a chuir air dòigh a’ cleachdadh structar dàta ro-mhìnichte (Liosta Feart Inneal). Tha feartan le taic bho inneal FPGA air am faicinn tro na structaran dàta sin, mar a chithear gu h-ìosal san fhigear a leanas:
Inneal FPGA PCIe
Bidh an draibhear a’ toirt taic do PCIe SR-IOV gus Gnìomhan Brìgheil (VFn) a chruthachadh a dh’ fhaodar a chleachdadh gus luathadairean fa leth a shònrachadh gu innealan brìgheil.
Intel Corporation. Còraichean uile glèidhte. Tha Intel, suaicheantas Intel, agus comharran Intel eile nan comharran-malairt aig Intel Corporation no na fo-chompanaidhean aige. Tha Intel airidh air coileanadh a thoraidhean FPGA agus semiconductor a rèir mion-chomharrachadh gnàthach a rèir barantas àbhaisteach Intel ach tha e a’ gleidheadh na còrach atharrachaidhean a dhèanamh air toraidhean is seirbheisean sam bith aig àm sam bith gun rabhadh. Chan eil Intel a’ gabhail uallach no uallach sam bith ag èirigh bho bhith a’ cleachdadh no a’ cleachdadh fiosrachadh, toradh no seirbheis sam bith a tha air a mhìneachadh an seo ach a-mhàin mar a chaidh aontachadh gu soilleir ann an sgrìobhadh le Intel. Thathas a’ moladh do luchd-ceannach Intel an dreach as ùire de shònrachaidhean inneal fhaighinn mus cuir iad earbsa ann am fiosrachadh foillsichte sam bith agus mus cuir iad òrdughan airson toraidhean no seirbheisean.
Faodar ainmean is suaicheantasan eile a thagradh mar sheilbh chàich.
Inneal FPGA PCIe mas-fhìor
Einnsean riaghlaidh FPGA (FME)
Bidh Einnsean Riaghlaidh FPGA a’ coileanadh riaghladh cumhachd is teirmeach, aithris mhearachdan, ath-dhealbhadh, aithris dèanadais, agus gnìomhan bun-structair eile. Tha aon FME aig gach FPGA, a gheibhear an-còmhnaidh tron ghnìomh corporra (PF). Faodaidh tagraidhean àite-cleachdaidh faighinn a-steach don FME le bhith a’ cleachdadh fosgailte (), agus a leigeil ma sgaoil le bhith a’ cleachdadh dlùth () mar neach-cleachdaidh sochair (freumh).
Port
Tha Port a’ riochdachadh an eadar-aghaidh eadar aodach FPGA statach (am “Manaidsear Eadar-aghaidh FPGA (FIM)”) agus sgìre a tha air ath-dhealbhadh gu ìre anns a bheil Gnìomh Luathaiche (AF). Bidh am Port a’ cumail smachd air a’ chonaltradh bho bhathar-bog chun luathadair agus a’ nochdadh feartan leithid ath-shuidheachadh agus deasbaid. Faodaidh grunn phuirt a bhith aig inneal PCIe, agus faodar gach Port a nochdadh tro VF le bhith ga shònrachadh a’ cleachdadh an FPGA_FME_PORT_ASSIGN ioctl air an inneal FME.
Aonad gnìomh luathadair (AF).
- Tha Aonad Gnìomh Luathaiche (AF) ceangailte ri Port agus a’ nochdadh sgìre 256K MMIO airson a chleachdadh airson clàran smachd luathadair-sònraichte.
- Faodaidh tagraidhean àite-cleachdaidh faighinn a-steach gu AFU ceangailte ri Port le bhith a’ cleachdadh Open() air an inneal Port, agus a leigeil ma sgaoil le bhith a’ cleachdadh dlùth ().
- Faodaidh tagraidhean àite-cleachdaidh cuideachd mmap () roinnean luathachaidh MMIO.
Ath-dhealbhadh Pàirteach
Mar a chaidh ainmeachadh gu h-àrd, faodar luathaichean ath-dhealbhadh tro ath-dhealbhadh pàirt de Ghnìomh Luathaiche (AF) file. Feumaidh an gnìomh luathachaidh (AF) a bhith air a chruthachadh airson an dearbh FIM agus sgìre statach cuimsichte (Port) den FPGA; air dhòigh eile, fàillidh an obair ath-rèiteachaidh agus dh’ fhaodadh sin neo-sheasmhachd an t-siostaim adhbhrachadh. Faodar an co-chòrdalachd seo a sgrùdadh le bhith a’ dèanamh coimeas eadar an ID eadar-aghaidh a chaidh a chomharrachadh ann am bann-cinn AF agus an ID eadar-aghaidh a nochd an FME tro sysfs. Mar as trice bidh an sgrùdadh seo air a dhèanamh le àite luchd-cleachdaidh mus cuir thu fios chun ath-dhealbhadh IOCTL.
Thoir an aire:
An-dràsta, feumar prògram bathar-bog sam bith a gheibh cothrom air an FPGA, a’ gabhail a-steach an fheadhainn a tha a’ ruith ann an aoigheachd mas-fhìor, a dhùnadh mus feuch thu ri pàirt ath-dhealbhadh. Bhiodh na ceumannan:
- Thoir air falbh an dràibhear bhon aoigh
- Unplug an VF bhon aoigh
- Cuir à comas SR-IOV
- Dèan ath-dhealbhadh pàirt
- Dèan comas air SR-IOV
- Plug an VF chun an aoigh
- Luchdaich an draibhear san aoigh
Mas-fhìorachadh FPGA
Gus cothrom fhaighinn air luathadair bho thagraidhean a tha a’ ruith ann an VM, feumar am port AFU fa leth a shònrachadh do VF a’ cleachdadh nan ceumannan a leanas:
- Tha sealbh aig an PF air a h-uile port AFU gu bunaiteach. Feumaidh port sam bith a dh’ fheumar a bhith air ath-shònrachadh gu VF a bhith air a leigeil ma sgaoil bhon PF tron FPGA_FME_PORT_RELEASE ioctl air an inneal FME.
- Cho luath ‘s a thèid puirt N a leigeil ma sgaoil bhon PF, faodar an àithne gu h-ìosal a chleachdadh gus SRIOV agus VFs a chomasachadh. Chan eil ach aon phort aig gach VF le AFU. mac-talla N> PCI_DEVICE_PATH/sriov_numvfs
- Gabh tro na VFn gu VMs.
- Tha an AFU fo VF ruigsinneach bho thagraidhean ann an VM (a’ cleachdadh an aon dhràibhear taobh a-staigh an VF).
Thoir an aire:
Chan urrainnear FME a shònrachadh do VF, mar sin chan fhaighear gnìomhan PR agus gnìomhan riaghlaidh eile ach tron PF.
Buidheann driver
Dràibhear inneal modal PCIe
Buidheann driver
Bidh na h-innealan FPGA a’ nochdadh mar innealan PCIe cunbhalach; mar sin, bidh an draibhear inneal FPGA PCIe (intel-FPGA-PCI.ko) an-còmhnaidh air a luchdachadh an toiseach aon uair ‘s gun lorgar FPGA PCIe PF no VF. Tha àite bun-structair aig an draibhear seo ann an ailtireachd an draibhear. Tha:
- A 'cruthachadh inneal container FPGA mar phàrant de na h-innealan feart.
- A’ coiseachd tron Liosta Feart Innealan, a tha air a chuir an gnìomh ann an cuimhne BAR inneal PCIe, gus innealan feart agus na fo-fheartan aca a lorg agus innealan àrd-ùrlar a chruthachadh dhaibh fon inneal container.
- A’ toirt taic do SR-IOV.
- A’ toirt a-steach bun-structar inneal feart, a bhios a’ toirt geàrr-chunntas air gnìomhachd airson fo-fheartan agus a’ nochdadh gnìomhan cumanta gu draibhearan innealan sònraichte.
Gnìomhan draibhear inneal modal PCIe
- A’ toirt a-steach lorg PCIe, àireamhachd innealan, agus lorg feart.
- Cruthaich clàran sysfs airson an inneal phàrant, Einnsean Riaghlaidh FPGA (FME), agus Port.
- A’ cruthachadh na h-eisimpleirean de dhràibhearan àrd-ùrlair, a’ toirt air an kernel Linux na draibhearan modal àrd-ùrlair aca a luchdachadh.
Dràibhear inneal modal àrd-ùrlar FME
- Riaghladh cumhachd is teirmeach, aithris mhearachdan, aithris dèanadais, agus gnìomhan bun-structair eile. Gheibh thu cothrom air na gnìomhan sin tro eadar-aghaidh sysfs fosgailte leis an draibhear FME.
- Ath-dhealbhadh Pàirteach. Bidh an draibhear FME a’ clàradh Manaidsear FPGA aig àm tòiseachaidh fo-fheart PR; aon uair ‘s gum faigh e FPGA_FME_PORT_PR ioctl bhuat, bidh e a’ toirt a-steach gnìomh eadar-aghaidh cumanta bho Mhanaidsear FPGA gus crìoch a chuir air ath-dhealbhadh pàirt den bitstream chun phort a chaidh a thoirt seachad.
- Stiùireadh port airson virtualization. Bidh an draibhear FME a’ toirt a-steach dà ioctls, FPGA_FME_PORT_RELEASE, a sgaoileas am Port a chaidh a thoirt seachad bho PF; agus FPGA_FME_PORT_ASSIGN, a shònraicheas am Port air ais gu PF. Aon uair ‘s gu bheil am Port air a leigeil ma sgaoil bhon PF, faodar a shònrachadh don VF tro eadar-aghaidh SR-IOV a bheir an draibhear PCIe seachad. Airson tuilleadh fiosrachaidh, thoir sùil air “FPGA Virtualization”.
Gnìomhan draibhear inneal modal àrd-ùrlar FME
- A’ cruthachadh nód inneal caractar FME.
- A’ cruthachadh sysfs FME files agus a’ cur an sàs an sysfs FME file accessors.
- A’ cur an gnìomh fo-dràibhearan feart prìobhaideach FME.
- Fo-dràibhearan feart prìobhaideach FME:
- Ceann-cinnidh FME
- Riaghladh Teirmeach
- Stiùireadh cumhachd
- Mearachd chruinneil
- Ath-dhealbhadh Pàirteach
- Coileanadh Cruinneil
Dràibhear inneal modal àrd-ùrlar port
Coltach ris an draibhear FME, thèid an draibhear FPGA Port (agus AFU) (intel-fpga-afu. ko) a sgrùdadh aon uair ‘s gu bheil an inneal àrd-ùrlar Port air a chruthachadh. Is e prìomh obair a’ mhodail seo eadar-aghaidh a thoirt seachad airson tagraidhean àite-cleachdaidh gus faighinn gu na luathadairean fa leth, a ’toirt a-steach smachd ath-shuidheachadh bunaiteach air Port, às-mhalairt sgìre AFU MMIO, seirbheis mapaidh bufair DMA, fios UMsg (1), agus gnìomhan deasbaid iomallach ( faic gu h-àrd).
Chan eil UMsg a’ faighinn taic ach tro Acceleration Stack airson Intel Xeon® Processor le FPGA Amalaichte.
Gnìomhan draibhear inneal modal àrd-ùrlar port
- A’ cruthachadh nód inneal caractar Port.
- A 'cruthachadh sysfs Port files agus a’ cur an gnìomh sysfs Port file accessors.
- A’ cur an gnìomh fo-dràibhearan feart prìobhaideach Port.
- Fo-dràibhearan feart prìobhaideach port:
- Ceann-puirt
- AFU
- Mearachd port
- UMsg(2)
- Tap comharra
Àireamhachd inneal FPGA Iarrtas
Tha an earrann seo a’ toirt a-steach mar a bhios tagraidhean ag àireamhachadh inneal FPGA bhon rangachd sysfs fo / sys/class/fpga. Anns an t-seannampgu h-ìosal, tha dà inneal Intel FPGA air an stàladh san òstair. Tha aon FME agus dà phort (AFUn) aig gach inneal FPGA. Airson gach inneal FPGA, thèid eòlaire inneal a chruthachadh fo / sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Tha aon FME agus dà phort (AFU) aig gach nód mar innealan cloinne:
/sys/class/fpga/intel-fpga-dev.0/intel-fpga-fme.0
/sys/class/fpga/intel-fpga-dev.0/intel-fpga-port.0
/sys/class/fpga/intel-fpga-dev.0/intel-fpga-port.1
/sys/class/fpga/intel-fpga-dev.1/intel-fpga-fme.1
/sys/class/fpga/intel-fpga-dev.1/intel-fpga-port.2
/sys/class/fpga/intel-fpga-dev.1/intel-fpga-port.3
San fharsaingeachd, tha eadar-aghaidh FME / Port sysfs air an ainmeachadh mar a leanas:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
agus mi an dèidh a chèile ag àireamh a h-uile inneal soithich, j ag àireamh an FME an dèidh a chèile agus k ag àireamhachadh a h-uile Port.
Faodar iomradh a thoirt air na nodan inneal a thathar a’ cleachdadh airson ioctl() agus mmap() tro:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
Àireamhachd PCIe Driver
Tha an earrann seo a ’toirt seachad cusview den t-sruth còd airson àireamhachd innealan air a dhèanamh le intel-fpga-pci.ko. Tha na prìomh structaran dàta agus gnìomhan air an comharrachadh. Is fheàrr an earrann seo a leantainn nuair a viewleis a’ chòd stòr na chois (pcie.c).
Structaran Dàta Àireamhachd
enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
structar statach idr fpga_ids[FPGA_ID_MAX];
structar fpga_chardev_info {
const char * ainm;
dev_t devt;
};
structar fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
clas structar statach * fpga_class;
structar statach pci_device_id cci_pcie_id_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_MCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_MCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_SKX_P),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_SKX_P),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_DCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_DCP),},
{0,}
};
structar statach pci_driver cci_pci_driver = {
.name = DRV_NAME,
.id_table = cci_pcie_id_tbl,
.probe = cci_pci_probe,
.remove = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
structar cci_drvdata {
in inneal_id;
inneal structar * fme_dev;
struct mutex glas;
structar list_head port_dev_list;
int released_port_num;
structar list_head roinnean;
};
structar build_feature_devs_info {
structar pci_dev *pdev;
falamh __iomem *ioaddr;
falamh __iomem *ioend;
anns an t-sruth_bar;
falamh __iomem *pfme_hdr;
inneal structar * parent_dev;
structar platform_device *feature_dev;
};
Sruth àireamhachd
- ccidrv_init()
- Tòisich fpga_ids a’ cleachdadh idr_init().
- Tòisich fpga_chrdevs[i].devt a’ cleachdadh alloc_chrdev_region().
- Tòisich fpga_class a’ cleachdadh class_create().
- pci_register_driver (&cci_pci_driver);
- cci_pci_probe()
- Dèan comas air an inneal PCI, iarr ruigsinneachd air na roinnean aige, suidhich prìomh mhodh PCI, agus rèitich DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Sònraich struct build_feature_devs_info, tòisich e.
Tha .parent_dev suidhichte ann an eòlaire sysfs phàrant (intel-fpga-dev.id) anns a bheil eòlairean FME agus Port sysfs.
- Sònraich struct build_feature_devs_info, tòisich e.
- parse_feature_list()
- Coisich air Liosta Feartan Innealan BAR0 gus faighinn a-mach am FME, am Port, agus na feartan prìobhaideach aca.
- parse_feature() parse_feature_afus() parse_feature_fme()
- Nuair a thachras FME:
- build_info_create_dev()
- Riaraich inneal àrd-ùrlair airson an FME, a 'stòradh a-steach build_feature_devs_info.feature_dev.
- tha feature_dev.id air a thòiseachadh gu toradh idr_alloc(fpga_ids[FME_ID],
- tha feature_dev.parent deiseil airson build_feature_devs_info.parent_dev.
- Roinn raon de ghoireasan structarail ann am feature_dev.resource.
- Roinn struct feature_platform_data, tòisich e, agus stòraich puing ann am feart_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Tòisich feart_dev.resource[FME_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Tòisich feart_platform_data.features[FME_FEATURE_ID_HEADER], a h-uile càil ach .fops.
- parse_feature() parse_feature_afus() parse_feature_port()
- Nuair a thachras port:
- build_info_create_dev()
- Riaraich inneal àrd-ùrlar airson a 'Phort, a' stòradh ann an build_feature_devs_info.feature_dev.
- tha feature_dev.id air a thòiseachadh gu toradh idr_alloc(fpga_ids[PORT_ID],
- tha feature_dev.parent deiseil airson build_feature_devs_info.parent_dev.
- Roinn raon de ghoireas structarail ann am feature_dev.resource.
- Roinn struct feature_platform_data, tòisich e, agus stòraich puing ann am feart_dev.dev.platform_data
- build_info_commit_dev()
- Cuir am feart struct_platform_data.node airson a’ phort ris an liosta de phuirt ann an struct cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Tòisich feart_dev.resource[PORT_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Tòisich feart_platform_data.features[PORT_FEATURE_ID_HEADER], a h-uile càil ach .fops.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- Nuair a thachras tu air AFU:
- create_feature_instance() build_info_add_sub_feature()
- Tòisich feart_dev.resource[PORT_FEATURE_ID_UAFU].
- feature_platform_data_add()
- Tòiseachadh feature_platform_data.features[PORT_FEATURE_ID_UAFU], a h-uile càil ach .fops.
- parse_feature() parse_feature_private() parse_feature_fme_private()
- Nuair a lorgar feart prìobhaideach FME:
- create_feature_instance() build_info_add_sub_feature()
- Tòisich feart_dev.resource[id].
- feature_platform_data_add()
- Tòiseachadh feature_platform_data.features[id], a h-uile càil ach .fops.
- parse_feature() parse_feature_private() parse_feature_port_private()
- Nuair a thachras tu ri feart prìobhaideach Port: * create_feature_instance() build_info_add_sub_feature() * Tòisich feature_dev.resource[id]. * feature_platform_data_add() Tòisich feature_platform_data.features[id], a h-uile càil ach .fops.
- parse_ports_from_fme()
- Ma tha an draibhear air a luchdachadh air a’ ghnìomh corporra (PF), an uairsin:
- Ruith an sruth parse_feature_list() air gach port a tha air a mhìneachadh ann am bann-cinn FME.
- Cleachd am BAR air a bheil iomradh anns gach inntrigeadh Port anns a’ cheann-cinn.
Tòiseachadh inneal àrd-ùrlar FME
Tha an earrann seo a ’toirt seachad cusview den t-sruthadh còd airson tòiseachadh inneal FME air a dhèanamh le intel-fpga-fme.ko. Tha na prìomh structaran dàta agus gnìomhan air an comharrachadh. Is fheàrr an earrann seo a leantainn nuair a viewanns a’ chòd stòr na chois (fme-main.c).
Structaran Dàta Inneal Àrd-ùrlar FME
structar feart_ops {
int (* init)(struct platform_device * pdev, feart structar * feart);
int (* uinit)(struct platform_device * pdev, feart structar * feart);
fada (* ioctl)(struct platform_device * pdev, feart structar * feart,
int cmd gun ainm, arg fada gun ainm);
int (* deuchainn) (struct platform_device * pdev, feart structar * feart);
};
feart structar {
const char * ainm;
int resource_index;
falamh __iomem *ioaddr;
structar feart_ops * ops;
};
structar feart_platform_data {
structar list_head nód;
struct mutex glas;
dev_status fada gun ainm;
structar cdev cdev;
structar platform_device * dev;
gun ainm-sgrìobhte int disable_count;
falamh *prìobhaideach;
int àireamh;
int (* config_port)(struct platform_device *, u32, bool);
structar platform_device * (* fpga_for_each_port)(struct platform_device *,
falamh *, int (* maids) (struct platform_device *, falamh *)); structar
feartan feart[0];
};
structar perf_object {
int id;
const struct attribute_group **attr_groups;
inneal structar * fme_dev;
structar list_head nód;
struct list_head clann;
struct kobject kobj;
};
structar fpga_fme {
u8 port_id;
u64 pr_err;
inneal structar * dev_err;
structar perf_object *perf_dev;
structar feart_platform_data *pdata;
};
Sruth tòiseachaidh inneal àrd-ùrlar FME
Sruth tòiseachaidh FME
- fme_probe() fme_dev_init()
- Tòisich struct fpga_fme agus stòraich e san raon feature_platform_data.private.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Sàbhail struct feature_ops a-steach don feature_platform_data.features airson gach feart sluaigh.
- Cuir fòn gu gnìomh deuchainn, ma tha gin ann, bhon structar.
- Cuir fòn gu gnìomh init bhon structar.
- fme_probe() fpga_register_dev_ops()
- Cruthaich an inneal caractar FME nód, a 'clàradh struct file_ obrachaidhean.
Tòiseachadh inneal àrd-ùrlar port
Tha an earrann seo a ’toirt seachad cusview den t-sruthadh còd airson tòiseachadh inneal puirt air a dhèanamh le intel-fpga-afu.ko. Tha na prìomh structaran dàta agus gnìomhan air an comharrachadh. Is fheàrr an earrann seo a leantainn nuair a viewanns a’ chòd stòr a tha na chois (afu.c).
Structaran Dàta Inneal Àrd-ùrlar Port
structar feart_ops {
int (* init)(struct platform_device * pdev, feart structar * feart);
int (* uinit)(struct platform_device * pdev, feart structar * feart);
fada (* ioctl)(struct platform_device * pdev, feart structar * feart,
int cmd gun ainm, arg fada gun ainm);
int (* deuchainn) (struct platform_device * pdev, feart structar * feart);
};
feart structar {
const char * ainm;
int resource_index;
falamh __iomem *ioaddr;
structar feart_ops * ops;
};
structar feart_platform_data {
structar list_head nód;
struct mutex glas;
dev_status fada gun ainm;
structar cdev cdev;
structar platform_device * dev;
gun ainm-sgrìobhte int disable_count;
falamh *prìobhaideach;
int àireamh;
int (* config_port)(struct platform_device *, u32, bool);
structar platform_device * (* fpga_for_each_port)(struct platform_device *,
falamh *, int (* maids) (struct platform_device *, falamh *));
feartan feart structar [0];
};
structar fpga_afu_region {
clàr-amais u32;
u32 brataichean;
meud u64;
u64 dheth ;
u64 fis;
structar list_head nód;
};
structar fpga_afu_dma_region {
u64 cleachdaiche_addr;
u64 fad;
u64 uibhe;
duilleag structar ** duilleagan;
structar rb_node nód;
bool in_use;
};
structar fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
structar list_head roinnean;
structar rb_root dma_regions;
structar feart_platform_data *pdata;
};
Sruth tòiseachaidh inneal àrd-ùrlar port
Sruth tòiseachaidh port
- afu_probe() afu_dev_init()
- Tòisich struct fpga_afu agus stòraich e san raon feature_platform_data.private.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Sàbhail struct feature_ops a-steach don feature_platform_data.features airson gach feart sluaigh.
- Cuir fòn gu gnìomh deuchainn, ma tha gin ann, bhon structar.
- Cuir fòn gu gnìomh init bhon structar.
- afu_probe() fpga_register_dev_ops()
- Cruthaich nód inneal caractar Port, a’ clàradh struct file_ obrachaidhean.
IOCTLan FME
IOCTLs a tha air an gairm air fosgailte file tuairisgeul airson /dev/intel-fpga-fme.j FPGA_GET_API_VERSION - till an dreach làithreach mar shlànaighear, a’ tòiseachadh bho 0.
FPGA_CHECK_EXTENSION — chan eil taic ann an-dràsta.
FPGA_FME_PORT_RELEASE — tha arg na chomharradh air:
structar fpga_fme_port_release {
__u32 argsz; // ann an: sizeof (structar fpga_fme_port_release)
__u32 brataichean; // a-steach: feumaidh 0 a bhith ann
__u32 port_id; // ann an: ID port (bho 0) ri leigeil ma sgaoil.
};
FPGA_FME_PORT_ASSIGN — tha arg na chomharradh air:
structar fpga_fme_port_assign {
__u32 argsz; // ann an: sizeof (structar fpga_fme_port_assign)
__u32 brataichean; // a-steach: feumaidh 0 a bhith ann
__u32 port_id; // ann an: ID port (bho 0) airson a shònrachadh. (feumaidh gun robh
air fhoillseachadh roimhe le FPGA_FME_PORT_RELEASE)
};
FPGA_FME_PORT_PR — tha arg na chomharradh air:
structar fpga_fme_port_pr {
__u32 argsz; // ann an: sizeof (structar fpga_fme_port_pr)
__u32 brataichean; // a-steach: feumaidh 0 a bhith ann
__u32 port_id; // ann an: ID port (bho 0)
__u32 bufair_size; // ann an: meud bufair bitstream ann am bytes. Feumaidh a bhith 4-byte
co-thaobhadh.
__u64 bufair_seòladh; // ann an: seòladh pròiseas bufair bitstream
inbhe __u64; // a-mach: inbhe mearachd (bitmask)
};
Port IOCTLs
IOCTLs a tha air an gairm air fosgailte file tuairisgeul airson /dev/intel-fpga-port.k FPGA_GET_API_VERSION—till an tionndadh làithreach mar shlànaighear, a' tòiseachadh bho 0. FPGA_CHECK_EXTENSION — chan eil taic ann an-dràsta.
FPGA_PORT_GET_INFO — tha arg na chomharradh air:
structar fpga_port_info {
__u32 argsz; // ann an: sizeof (structar fpga_port_info)
__u32 brataichean; // a-mach: tilleadh 0
__u32 àireamh_regions; // a-mach: àireamh de roinnean MMIO, 2 (1 airson AFU agus 1 airson
STP)
__u32 àireamh_umsgs; // a-mach: an àireamh de UMsg le taic bhon bhathar-cruaidh
};
FPGA_PORT_GET_REGION_INFO — tha arg na chomharradh air:
structar fpga_port_region_info {
__u32 argsz; // ann an: sizeof (structar fpga_port_region_info)
__u32 brataichean; // a-mach: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
clàr-amais __u32; // ann an: FPGA_PORT_INDEX_UAFU no FPGA_PORT_INDEX_STP
__u32 padding; // a-steach: feumaidh 0 a bhith ann
meud __u64; // a-mach: meud sgìre MMIO ann am bytes
__u64 dheth ; // a-mach: cuir dheth roinn MMIO bho thoiseach an uidheim fd
};
FPGA_PORT_DMA_MAP — tha arg na chomharradh air:
structar fpga_port_dma_map {
__u32 argsz; // ann an: sizeof (structar fpga_port_dma_map)
__u32 brataichean; // a-steach: feumaidh a bhith 0 __u64 user_addr; // ann an: pròiseas mas-fhìor
seòladh. Feumaidh a bhith co-thaobhadh duilleag.
__u64 fad; // ann an: fad mapadh ann am bytes. Feumaidh a bhith ioma-dhuilleag
meud.
__u64 uibhe; // a-mach: seòladh mas-fhìor IO };
FPGA_PORT_DMA_UNMAP — tha arg na chomharradh air:
structar fpga_port_dma_unmap {
__u32 argsz; // ann an: sizeof (structar fpga_port_dma_unmap)
__u32 brataichean; // a-steach: feumaidh 0 a bhith ann
__u64 uibhe; // ann an: seòladh brìgheil IO air a thilleadh le fear roimhe
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET — feumaidh arg a bhith NULL.
- FPGA_PORT_UMSG_ENABLE — feumaidh seo a bhith NULL.
- FPGA_PORT_UMSG_DISABLE — feumaidh args a bhith NULL.
FPGA_PORT_UMSG_SET_MODE — tha arg na chomharradh air:
structar fpga_port_umsg_cfg {
__u32 argsz; // ann an: sizeof (structar fpga_port_umsg_cfg)
__u32 brataichean; // a-steach: feumaidh 0 a bhith ann
__u32 hint_bitmap; // ann an: mapa bit modh leid UMsg. A’ comharrachadh dè na UMsg a th’ ann
air a chomasachadh.
};
FPGA_PORT_UMSG_SET_BASE_ADDR —
- Feumaidh UMsg a bhith à comas mus cuir thu a-mach an ioctl seo.
- Feumaidh an raon iova a bhith airson bufair mòr gu leòr airson a h-uile UMsg (num_umsgs * PAGE_SIZE).
- Tha am bufair air a chomharrachadh mar “ga chleachdadh” le stiùireadh bufair an draibhear.
- Ma tha iova NULL, tha roinn sam bith roimhe seo gun chomharradh mar “ann an cleachdadh”.
- tha arg na chomharradh air:
structar fpga_port_umsg_base_addr {- u32 argsz; // ann an: sizeof (structar fpga_port_umsg_base_addr)
- u32 brataichean; // a-steach: feumaidh 0 a bhith ann
- u64 uibhe; // ann an: seòladh brìgheil IO bho FPGA_PORT_DMA_MAP. };
Thoir an aire:
- Gus na mearachdan puirt a ghlanadh, feumaidh tu an dearbh bitmask de na mearachdan gnàthach a sgrìobhadh, airson example, mearachdan cat > soilleir
- Chan eil UMsg a’ faighinn taic ach tro Acceleration Stack airson Intel Xeon Processor le FPGA Amalaichte.
sysfs Files
sysfs header FME files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
puirt_num | fme_header.capability.num_ports | int deicheach | Leughadh a-mhàin |
tasgadan_meud | fme_header.capability.cache_size | int deicheach | Leughadh a-mhàin |
dreach | fme_header.capability.fabric_verid | int deicheach | Leughadh a-mhàin |
socaid_id | fme_header.capability.socket_id | int deicheach | Leughadh a-mhàin |
bitstream_id | fme_header.bitstream_id | heics uint64_t | Leughadh a-mhàin |
bitstream_meata-dàta | fme_header.bitstream_md | heics uint64_t | Leughadh a-mhàin |
sysfs Stiùireadh Teirmeach FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
stairsnich1 | teirmeach.threshold.tmp_thshold1 | int deicheach | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
stairsnich2 | teirmeach.threshold.tmp_thshold2 | int deicheach | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
stairsneach_turas | teirmeach.threshold.therm_trip_thshold | int deicheach | Leughadh a-mhàin |
stairsnich1_air a ruighinn | teirmeach.threshold.thshold1_status | int deicheach | Leughadh a-mhàin |
stairsnich2_air a ruighinn | teirmeach.threshold.thshold2_status | int deicheach | Leughadh a-mhàin |
stairsnich1_poileasaidh | teirmeach. stairsnich.thshold_poileasaidh | int deicheach | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
teòthachd | thermal.rdsensor_fm1.fpga_temp | int deicheach | Leughadh a-mhàin |
sysfs Stiùireadh Cumhachd FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
ga chaitheamh | cumhachd.status.pwr_consumed | heics uint64_t | Leughadh a-mhàin |
stairsnich1 | cumhachd.stairsneach.stairsnich1 | heics uint64_t | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
stairsnich2 | cumhachd.stairsneach.stairsnich2 | heics uint64_t | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
stairsnich1_inbhe | cumhachd.threshold.threshold1_status | deicheach gun ainm | Leughadh a-mhàin |
stairsnich2_inbhe | cumhachd.threshold.threshold2_status | deicheach gun ainm | Leughadh a-mhàin |
rtl | power.status.fpga_latency_report | deicheach gun ainm | Leughadh a-mhàin |
sysfs Mearachd Cruinne FME files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
pcie0_mearachdan | mearachd.pcie0_err | heics uint64_t | Leugh-sgrìobhadh |
pcie1_mearachdan | mearachd.pcie1_err | heics uint64_t | Leugh-sgrìobhadh |
inject_error | gerror.ras_error_inj | heics uint64_t | Leugh-sgrìobhadh |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
mearachdan | mearachd.fme_err | heics uint64_t | Leughadh a-mhàin |
ciad_mearachd | gerror.fme_first_err.err_reg_status | heics uint64_t | Leughadh a-mhàin |
ath-mhearachd | gerror.fme_next_err.err_reg_status | heics uint64_t | Leughadh a-mhàin |
soilleir | Fuadach mhearachdan, first_error, next_error | diofar uint64_t | Sgrìobhadh a-mhàin |
Thoir an aire:
Gus na mearachdan FME a ghlanadh, feumaidh tu an dearbh bitmask de na mearachdan gnàthach a sgrìobhadh, airson example mearachdan cat > soilleir.
sysfs Ath-dhealbhadh Pàirteach FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
eadar-aghaidh_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | hex 16-byte | Leughadh a-mhàin |
sysfs Coileanadh Cruinne FME files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
uaireadair | gperf.clk.afu_interf_clock | heics uint64_t | Leughadh a-mhàin |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Gun a bhith dligheach airson Luathachadh Stack airson Intel Xeon CPU le FPGAn)
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
reothadh | gperf.ch_ctl.reothadh | int deicheach | Leugh-sgrìobhadh |
leugh_buail | gperf.CACHE_RD_HIT | heics uint64_t | Leughadh a-mhàin |
leugh_ ionndrainn | gperf.CACHE_RD_MISS | heics uint64_t | Leughadh a-mhàin |
sgrìobh_buail | gperf.CACHE_WR_HIT | heics uint64_t | Leughadh a-mhàin |
sgrìobh_call | gperf.CACHE_WR_MISS | heics uint64_t | Leughadh a-mhàin |
cùm_iarrtas | gperf.CACHE_HOLD_REQ | heics uint64_t | Leughadh a-mhàin |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | heics uint64_t | Leughadh a-mhàin |
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | heics uint64_t | Leughadh a-mhàin |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | heics uint64_t | Leughadh a-mhàin |
tag_write_port_contention | gperf.CACHE_TAG_WR_PORT_CONTEN | heics uint64_t | Leughadh a-mhàin |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Gun dligheach airson Luathachadh Stack airson Intel Xeon CPU le FPGAn)
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
reothadh | gperf.vtd_ctl.freeze | int deicheach | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Gun a bhith dligheach airson Luathachadh Stack airson Intel Xeon CPU le FPGAn)
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
leughadh_ malairt | gperf.VTD_AFU0_MEM_RD_TRANS | heics uint64_t | Leughadh a-mhàin |
sgrìobhadh_ malairt | gperf.VTD_AFU0_MEM_WR_TRANS | heics uint64_t | Leughadh a-mhàin |
tlb_read_buail | gperf.VTD_AFU0_TLB_RD_HIT | heics uint64_t | Leughadh a-mhàin |
tlb_write_buail | gperf.VTD_AFU0_TLB_WR_HIT | heics uint64_t | Leughadh a-mhàin |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
comas a thoirt | gperf.fab_ctl.(comas) | int deicheach | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
reothadh | gperf.fab_ctl.reothadh | int deicheach | Cleachdaiche: Leughadh a-mhàin Root: Leugh-sgrìobh |
pcie0_leugh | gperf.FAB_PCIE0_RD | heics uint64_t | Leughadh a-mhàin |
pcie0_sgrìobh | gperf.FAB_PCIE0_WR | heics uint64_t | Leughadh a-mhàin |
pcie1_leugh | gperf.FAB_PCIE1_RD | heics uint64_t | Leughadh a-mhàin |
pcie1_sgrìobh | gperf.FAB_PCIE1_WR | heics uint64_t | Leughadh a-mhàin |
upi_leugh | gperf.FAB_UPI_RD | heics uint64_t | Leughadh a-mhàin |
sgrìobhadh_ | gperf.FAB_UPI_WR | heics uint64_t | Leughadh a-mhàin |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
pcie0_leugh | gperf.FAB_PCIE0_RD | heics uint64_t | Leughadh a-mhàin |
pcie0_sgrìobh | gperf.FAB_PCIE0_WR | heics uint64_t | Leughadh a-mhàin |
pcie1_leugh | gperf.FAB_PCIE1_RD | heics uint64_t | Leughadh a-mhàin |
pcie1_sgrìobh | gperf.FAB_PCIE1_WR | heics uint64_t | Leughadh a-mhàin |
upi_leugh | gperf.FAB_UPI_RD | heics uint64_t | Leughadh a-mhàin |
sgrìobhadh_ | gperf.FAB_UPI_WR | heics uint64_t | Leughadh a-mhàin |
sysfs port header files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
id | port_header.capability.port_number | int deicheach | Leughadh a-mhàin |
ltr | port_header.control.latency_fulangas | int deicheach | Leughadh a-mhàin |
sysfs Header Port AFU files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
afu_id | afu_header.guid | hex 16-byte | Leughadh a-mhàin |
Mearachd port sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | mmio achadh | seòrsa | ruigsinneachd |
mearachdan | mearachd.port_error | heics uint64_t | Leughadh a-mhàin |
ciad_mearachd | mearachd.port_first_error | heics uint64_t | Leughadh a-mhàin |
ciad_malformed_req | uamhas.malreq | hex 16-byte | Leughadh a-mhàin |
soilleir | mearachd. (a h-uile mearachd) | diofar uint64_t | Sgrìobhadh a-mhàin |
Thoir an aire:
Gus na mearachdan Port a ghlanadh, feumaidh tu an dearbh bitmask de na mearachdan gnàthach a sgrìobhadh, airson example mearachdan cat > soilleir.
Eachdraidh Ath-sgrùdaidh
Tionndadh Sgrìobhainn | Atharrachaidhean |
2017.10.02 | Sgaoileadh tùsail. |
Iùl ailtireachd draibhear inneal OPAE Intel FPGA Linux
Sgrìobhainnean/Goireasan
![]() |
Intel OPAE FPGA Linux Ailtireachd Dràibhear Inneal [pdfStiùireadh Cleachdaiche Ailtireachd Dràibhear Inneal OPAE FPGA Linux, OPAE FPGA, Ailtireachd Dràibhear Inneal Linux, Ailtireachd Dràibhear, Ailtireachd |