Intel OPAE FPGA Ailtireacht Tiománaí Gléas Linux
Ailtireacht Tiománaí Gléas OPAE Intel FPGA Linux
Soláthraíonn tiománaí OPAE Intel FPGA comhéadain d'fheidhmchláir spáis úsáideora chun luasairí FPGA a chumrú, a áireamh, a oscailt agus a rochtain ar ardáin atá feistithe le réitigh Intel FPGA agus cuireann sé ar chumas feidhmeanna bainistíochta ar leibhéal an chórais mar athchumrú FPGA, bainistíocht cumhachta, agus fíorúlú.
Ailtireacht Crua-earraí
Ó thaobh an OS de view, is cosúil go bhfuil crua-earraí FPGA mar fheiste PCIe rialta. Eagraítear cuimhne feiste FPGA ag baint úsáide as struchtúr sonraí réamhshainithe (Liosta Gné Gléas). Nochtar gnéithe a dtacaíonn feiste FPGA leo trí na struchtúir sonraí seo, mar a léirítear thíos san fhigiúr seo a leanas:
Gléas FPGA PCIe
Tacaíonn an tiománaí le PCIe SR-IOV chun Feidhmeanna Fíorúla (VFanna) a chruthú ar féidir iad a úsáid chun luasairí aonair a shannadh do mheaisíní fíorúla.
Intel Corporation. Gach ceart ar cosaint. Is trádmharcanna de chuid Intel Corporation nó a fhochuideachtaí iad Intel, lógó Intel, agus marcanna Intel eile. Barántaíonn Intel feidhmíocht a tháirgí FPGA agus leathsheoltóra de réir sonraíochtaí reatha de réir bharántas caighdeánach Intel ach coimeádann sé an ceart chun athruithe a dhéanamh ar aon táirgí agus seirbhísí ag am ar bith gan fógra. Ní ghlacann Intel aon fhreagracht nó dliteanas a eascraíonn as cur i bhfeidhm nó úsáid aon fhaisnéise, táirge nó seirbhíse a thuairiscítear anseo ach amháin mar a aontaítear go sainráite i scríbhinn ag Intel. Moltar do chustaiméirí Intel an leagan is déanaí de shonraíochtaí feiste a fháil sula dtéann siad ag brath ar aon fhaisnéis foilsithe agus sula ndéanann siad orduithe le haghaidh táirgí nó seirbhísí.
Féadfar ainmneacha agus brandaí eile a éileamh mar mhaoin daoine eile.
Gléas PCIe FPGA fíorúlaithe
Inneall Bainistíochta FPGA (FME)
Déanann Inneall Bainistíochta FPGA bainistíocht cumhachta agus teirmeach, tuairisciú earráide, athchumrú, tuairisciú feidhmíochta, agus feidhmeanna bonneagair eile. Tá FME amháin ag gach FPGA, a bhfuil rochtain air i gcónaí tríd an bhFeidhm Fhisiciúil (PF). Is féidir le feidhmchláir spáis úsáideora rochtain eisiach a fháil ar an FME trí úsáid a bhaint as Open(), agus é a scaoileadh trí úsáid a bhaint as close() mar úsáideoir pribhléideach (fréamh).
Port
Is ionann Calafort agus an comhéadan idir fabraic statach FPGA (“Bainisteoir Comhéadain FPGA (FIM)”) agus réigiún atá in-athchumraithe go páirteach ina bhfuil Feidhm Luasaire (AF). Rialaíonn an Port an chumarsáid ó bhogearraí go dtí an luasaire agus nochtar gnéithe mar athshocrú agus dífhabhtú. D’fhéadfadh go mbeadh roinnt Calafoirt ag feiste PCIe, agus is féidir gach Calafort a nochtadh trí VF trína shannadh ag baint úsáide as an FPGA_FME_PORT_ASSIGN ioctl ar an ngléas FME.
Aonad Feidhme Luasaire (AF).
- Tá Aonad Feidhme Luasaire (AF) ceangailte de Chalafort agus nochtar ann réigiún MMIO 256K le húsáid do chláir rialaithe luasaire-shonracha.
- Is féidir le feidhmchláir spáis úsáideora rochtain eisiach a fháil ar AFU atá ceangailte le Calafort trí úsáid a bhaint as Open() ar an ngléas Calafoirt, agus é a scaoileadh ag baint úsáide as close().
- Is féidir le feidhmchláir spáis úsáideora mmap() a dhéanamh ar réigiúin luasaire MMIO freisin.
Athchumrú Páirteach
Mar a luadh thuas, is féidir luasairí a athchumrú trí Fheidhm Luasaire (AF) a athchumrú i bpáirt file. Ní mór an Fheidhm Luasaire (AF) a bheith ginte don FIM beacht agus don réigiún statach (Calafort) spriocdhírithe den FPGA; ar shlí eile, teipfidh an oibríocht athchumraithe agus b'fhéidir go mbeidh sé ina chúis le héagobhsaíocht an chórais. Is féidir an chomhoiriúnacht seo a sheiceáil tríd an ID comhéadain atá tugtha faoi deara sa cheanntásc AF a chur i gcomparáid le haitheantas an chomhéadain a nocht an FME trí sysfs. De ghnáth déanann spás úsáideora an tseiceáil seo roimh ghlaoch ar an IOCTL athchumraithe.
Nóta:
Faoi láthair, ní mór aon chlár bogearraí a fhaigheann rochtain ar an FPGA, lena n-áirítear iad siúd a ritheann in óstríomhaire fíorúlaithe, a dhúnadh sula ndéantar iarracht ar athchumrú páirteach. Bheadh na céimeanna:
- Díluchtaigh an tiománaí ón aíonna
- Bain an VF as an aoi
- Díchumasaigh SR-IOV
- Déan athchumrú páirteach
- Cumasaigh SR-IOV
- Plug an VF leis an aoi
- Íoslódáil an tiománaí ar an aoi
Fíorúlú FPGA
Chun rochtain a fháil ar luasaire ó fheidhmchláir a ritheann i VM, ní mór an calafort AFU faoi seach a shannadh do VF trí úsáid a bhaint as na céimeanna seo a leanas:
- Is leis an PF gach calafort AFU de réir réamhshocraithe. Ní mór aon phort ar gá é a athshannadh go VF a scaoileadh ón PF ar dtús tríd an ioctl FPGA_FME_PORT_RELEASE ar an ngléas FME.
- Nuair a scaoiltear calafoirt N ón PF, is féidir an t-ordú thíos a úsáid chun SRIOV agus VFs a chumasú. Níl ach calafort amháin ag gach VF le AFU. macalla N > PCI_DEVICE_PATH/sriov_numvfs
- Téigh tríd na VFanna chuig VManna.
- Tá an AFU faoi VF inrochtana ó fheidhmchláir i VM (ag baint úsáide as an tiománaí céanna taobh istigh den VF).
Nóta:
Ní féidir FME a shannadh do VF, mar sin níl PR agus feidhmeanna bainistíochta eile ar fáil ach tríd an PF.
Eagraíocht tiománaí
Tiománaí PCIe Modúl Gléas
Eagraíocht tiománaí
Tá na feistí FPGA le feiceáil mar fheistí PCIe rialta; mar sin, déantar an tiománaí gléas FPGA PCIe (intel-FPGA-PCI.ko) a luchtú ar dtús i gcónaí nuair a aimsítear FPGA PCIe PF nó VF. Tá ról bonneagair ag an tiománaí seo in ailtireacht na dtiománaithe. sé:
- Cruthaíonn gléas coimeádán FPGA mar thuismitheoir na bhfeistí gné.
- Siúil tríd an Liosta Gné Gléas, a chuirtear i bhfeidhm i gcuimhne PCIe BAR gléas, chun feistí gné agus a gcuid fo-gnéithe a fháil amach agus feistí ardáin a chruthú dóibh faoin bhfeiste coimeádán.
- Tacaíonn SR-IOV.
- Tugann sé isteach an bonneagar gné-ghléas, a achoimríonn oibríochtaí le haghaidh fo-ghnéithe agus a nochtar feidhmeanna comónta do thiománaithe gléasanna gné.
Feidhmeanna Tiománaí Gléas Modúl PCIe
- Tá fionnachtain PCIe, áireamh gléas, agus fionnachtain gné ann.
- Cruthaíonn sé eolairí sysfs don mháthairghléas, Inneall Bainistíochta FPGA (FME), agus Port.
- Cruthaíonn na cásanna tiománaí ardáin, rud a fhágann gur féidir leis an eithne Linux a gcuid tiománaithe modúl ardáin faoi seach a luchtú.
Tiománaí Gléas Modúl Ardán FME
- Bainistíocht cumhachta agus teirmeach, tuairisciú earráide, tuairisciú feidhmíochta, agus feidhmeanna bonneagair eile. Is féidir leat na feidhmeanna seo a rochtain trí chomhéadain sysfs a nochtar an tiománaí FME.
- Athchumrú Páirteach. Cláraíonn an tiománaí FME Bainisteoir FPGA le linn thúsú fo-ghné PR; a luaithe a fhaigheann sé FPGA_FME_PORT_PR ioctl uait, agairt sé an fheidhm chomhéadain choitianta ó Bhainisteoir FPGA chun athchumrú páirteach an tsrutha giotáin go dtí an Port tugtha a chríochnú.
- Bainistíocht calafoirt le haghaidh fíorúlaithe. Tugann an tiománaí FME dhá ioctl isteach, FPGA_FME_PORT_RELEASE, a scaoileann an Port tugtha ó PF; agus FPGA_FME_PORT_ASSIGN, a sannann an Calafort ar ais go PF. Nuair a scaoiltear an Calafort ón PF, is féidir é a shannadh don VF trí na comhéadain SR-IOV a sholáthraíonn an tiománaí PCIe. Le haghaidh tuilleadh faisnéise, féach ar “Fíorúlú FPGA”.
Feidhmeanna Tiománaí Gléas Modúl Ardán FME
- Cruthaíonn nód gléis charachtair FME.
- Cruthaíonn sé na córais FME files agus cuireann sé córais FME i bhfeidhm file accessors.
- Cuireann sé na fo-thiománaithe gné phríobháideacha FME i bhfeidhm.
- Fo-thiománaithe gné phríobháideach FME:
- Ceanntásc FME
- Bainistíocht Teirmeach
- Bainistíocht Cumhachta
- Earráid Dhomhanda
- Athchumrú Páirteach
- Feidhmíocht Dhomhanda
Tiománaí Gléas Modúl Ardán Port
Cosúil leis an tiománaí FME, scrúdaítear an tiománaí FPGA Port (agus AFU) (intel-fpga-afu. ko) a luaithe a chruthaítear an gléas ardán Port. Is í príomhfheidhm an mhodúil seo comhéadan a sholáthar d’fheidhmchláir spáis úsáideora chun rochtain a fháil ar na luasairí aonair, lena n-áirítear bunrialtán athshocraithe ar Chalafort, easpórtáil réigiúin AFU MMIO, seirbhís mapála maoláin DMA, fógra UMsg(1), agus feidhmeanna cianda dífhabhtaithe ( Féach thuas).
Ní thacaítear le UMsg ach trí Luasghéarú Stack do Phróiseálaí Intel Xeon® le FPGA Comhtháite.
Feidhmeanna Tiománaí Gléas Modúl Ardán Port
- Cruthaíonn nód gléis charachtair an Phoirt.
- Cruthaíonn an córas Port files agus cuireann sé i bhfeidhm an sysfs Port file accessors.
- Cuireann sé fo-thiománaithe gné phríobháideach an Chalafoirt i bhfeidhm.
- Fo-thiománaithe gné phríobháideach port:
- Ceanntásc an Phoirt
- AFU
- Earráid Phoirt
- UMsg(2)
- Beartaíonn Comhartha
Áireamh Gléas FPGA Feidhmchlár
Tugtar isteach sa chuid seo conas a áiríonn feidhmchláir an gléas FPGA ón ordlathas córais faoi /sys/class/fpga. Sa seanample thíos, tá dhá fheiste Intel FPGA suiteáilte san ósta. Tá FME amháin agus dhá Chalafort (AFUanna) ag gach feiste FPGA. I gcás gach feiste FPGA, cruthaítear eolaire gléasanna faoi / sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Tá FME amháin agus dhá Chalafort (AFUanna) ag gach nód mar fheistí leanaí:
/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
Go ginearálta, ainmnítear na comhéadain FME/Port sysfs mar seo 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 mé ag uimhriú na ngléasanna coimeádáin go léir as a chéile, j ag uimhriú na FMEanna i ndiaidh a chéile agus k ag uimhriú na gCalafort go léir i ndiaidh a chéile.
Is féidir tagairt a dhéanamh do na nóid ghléis a úsáidtear le haghaidh ioctl() agus mmap() trí:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
PCIe Áireamh Tiománaithe
Tugann an chuid seo sárúview den sreabhadh cód le haghaidh áireamh gléas arna dhéanamh ag intel-fpga-pci.ko. Aibhsítear na príomhstruchtúir agus feidhmeanna sonraí. Is fearr an chuid seo a leanúint nuair viewan cód foinse a théann leis (pcie.c).
Struchtúir Sonraí Áirimh
enum fpga_id_cineál {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
struchtúr statach idr fpga_ids[FPGA_ID_MAX];
struchtúr fpga_chardev_info {
const char *ainm;
dev_t devt;
};
struchtúr fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
rang struchtúr statach * fpga_class;
struchtúr 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,}
};
struchtúr 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
};
struchtúr cci_drvdata {
int device_id;
gléas struchtúr *fme_dev;
struct mutex glas;
struct list_head port_dev_list;
int released_port_num;
struct list_head réigiúin;
};
struct build_feature_devs_info {
struchtúr pci_dev *pdev;
neamhní __iomem *ioaddr;
neamhní __iomem *ioend;
in reatha_bar;
neamhní __iomem *pfme_hdr;
gléas struchtúr * parent_dev;
struct platform_device *feature_dev;
};
Sreabhadh Áirimh
- ccidrv_init()
- Tosaigh fpga_ids ag baint úsáide as idr_init().
- Tosaigh fpga_chrdevs[i].devt ag baint úsáide as alloc_chrdev_region().
- Tosaigh fpga_class ag baint úsáide as class_create().
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- Cumasaigh an gléas PCI, iarr rochtain ar a réigiúin, socraigh máistir mód PCI, agus cumraigh DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Leithdháil struct build_feature_devs_info, tosaigh é.
Tá .parent_dev socraithe chuig eolaire sysfs tuismitheora (intel-fpga-dev.id) ina bhfuil na heolairí FME agus Port sysfs.
- Leithdháil struct build_feature_devs_info, tosaigh é.
- parsáil_gné_liosta()
- Siúil Liosta Gné Ghléas BAR0 chun an FME, an Calafort agus a ghnéithe príobháideacha a fháil amach.
- parse_feature() parsáil_feature_afus() parse_feature_fme()
- Nuair a aimsítear FME:
- build_info_create_dev()
- Leithdháil gléas ardáin don FME, á stóráil in build_feature_devs_info.feature_dev.
- tá feature_dev.id tosaithe go dtí an toradh ar idr_alloc(fpga_ids[FME_ID],
- tá feature_dev.parent socraithe chun build_feature_devs_info.parent_dev.
- Leithdháil raon acmhainní struchtúir in feature_dev.resource.
- Leithdháil struct feature_platform_data, tosaigh é, agus stóráil pointeoir i feature_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Tosaigh gné_dev.resource[FME_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Tosaigh feature_platform_data.features[FME_FEATURE_ID_HEADER], gach rud ach .fops.
- parse_feature() parsáil_feature_afus() parse_feature_port()
- Nuair a bhuailtear le Port:
- build_info_create_dev()
- Leithdháil gléas ardáin don Chalafort, á stóráil i build_feature_devs_info.feature_dev.
- tá feature_dev.id tosaithe go dtí an toradh ar idr_alloc(fpga_ids[PORT_ID],
- tá feature_dev.parent socraithe chun build_feature_devs_info.parent_dev.
- Leithdháil raon d'acmhainní struchtúir in feature_dev.resource.
- Leithdháil struct feature_platform_data, tosaigh é, agus stóráil pointeoir i feature_dev.dev.platform_data
- build_info_commit_dev()
- Cuir an struct feature_platform_data.node don Chalafort le liosta na gCalafort sa struct cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Tosaigh gné_dev.resource[PORT_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Tosaigh feature_platform_data.features[PORT_FEATURE_ID_HEADER], gach rud ach .fops.
- parsáil_gné() parsáil_feature_afus() parse_feature_port_uafu()
- Nuair a aimsítear AFU:
- create_feature_instance() build_info_add_sub_feature()
- Tosaigh gné_dev.resource[PORT_FEATURE_ID_UAFU].
- feature_platform_data_add()
- Tosaigh feature_platform_data.features[PORT_FEATURE_ID_UAFU], gach rud ach .fops.
- parsáil_gné() pharsáil_feature_private() parse_feature_fme_private()
- Nuair a aimsítear gné phríobháideach FME:
- create_feature_instance() build_info_add_sub_feature()
- Tosaigh feature_dev.resource[id].
- feature_platform_data_add()
- Tosaigh feature_platform_data.features[id], gach rud ach .fops.
- parse_feature() parsáil_feature_private() parse_feature_port_private()
- Nuair a aimsítear gné phríobháideach Port: * create_feature_instance() build_info_add_sub_feature() * Tosaigh feature_dev.resource[id]. * feature_platform_data_add() Tosaigh feature_platform_data.features[id], gach rud ach .fops.
- parsáil_ports_ó_fme()
- Má tá an tiománaí luchtaithe ar an bhFeidhm Fhisiciúil (PF), ansin:
- Rith an sreabhadh parse_feature_list() ar gach port a thuairiscítear sa cheanntásc FME.
- Bain úsáid as an BAR atá luaite i ngach iontráil Port sa cheanntásc.
Tionscnamh Gléas Ardáin FME
Tugann an chuid seo sárúview den sreabhadh cód le haghaidh tosaigh gléas FME arna dhéanamh ag intel-fpga-fme.ko. Aibhsítear na príomhstruchtúir agus feidhmeanna sonraí. Is fearr an chuid seo a leanúint nuair viewan cód foinse a théann leis (fme-main.c).
Struchtúir Sonraí Gléas Ardáin FME
struct feature_ops {
int (*init)(struct platform_device *pdev, struct gné * gné);
int (*uinit)(struct platform_device *pdev, struct gné * gné);
fada (* ioctl)(struct platform_device *pdev, struct gné * gné,
int cmd gan síniú, arg fhada gan síniú);
int (*test)(struct platform_device *pdev, struct gné * gné);
};
gné struchtúr {
const char *ainm;
int resource_index;
neamhní __iomem *ioaddr;
struct feature_ops * ops;
};
struct gné_platform_sonraí {
nód list_head struchtúr;
struct mutex glas;
dev_status fada gan síniú;
struchtúr cdev cdev;
struct platform_device *dev;
slánuimhir disable_count gan síniú;
ar neamhní *príobháideach;
slánuimhir;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(* fpga_for_each_port)(struct platform_device *,
neamhní *, int (*match)(struct platform_device *, neamhní *)); struchtúr
gnéithe gné[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
gléas struchtúr *fme_dev;
nód list_head struchtúr;
struct list_head leanaí;
struct kobject kobj;
};
struchtúr fpga_fme {
u8 port_id;
u64 pr_err;
gléas struchtúr *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};
Sreabhadh Tosaigh Feiste Ardán FME
Sreabhadh Túsaithe FME
- fme_probe() fme_dev_init()
- Tosaigh struct fpga_fme agus é a stóráil sa réimse feature_platform_data.private.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Sábháil feature_ops struct isteach sa feature_platform_data.features do gach gné daonra.
- Glaoigh ar an bhfeidhm tástála, más ann di, ón struct.
- Glaoigh ar an bhfeidhm init ón struct.
- fme_probe() fpga_register_dev_ops()
- Cruthaigh nód an ghléis charachtair FME, ag clárú struct file_oibríochtaí.
Tionscnamh Gléas Ardán Port
Tugann an chuid seo sárúview den sreabhadh cód le haghaidh tosaithe gléas calafoirt arna dhéanamh ag intel-fpga-afu.ko. Aibhsítear na príomhstruchtúir agus feidhmeanna sonraí. Is fearr an chuid seo a leanúint nuair viewan cód foinse a théann leis (afu.c).
Struchtúir Sonraí Gléas Ardán Port
struct feature_ops {
int (*init)(struct platform_device *pdev, struct gné * gné);
int (*uinit)(struct platform_device *pdev, struct gné * gné);
fada (* ioctl)(struct platform_device *pdev, struct gné * gné,
int cmd gan síniú, arg fhada gan síniú);
int (*test)(struct platform_device *pdev, struct gné * gné);
};
gné struchtúr {
const char *ainm;
int resource_index;
neamhní __iomem *ioaddr;
struct feature_ops * ops;
};
struct gné_platform_sonraí {
nód list_head struchtúr;
struct mutex glas;
dev_status fada gan síniú;
struchtúr cdev cdev;
struct platform_device *dev;
slánuimhir disable_count gan síniú;
ar neamhní *príobháideach;
slánuimhir;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(* fpga_for_each_port)(struct platform_device *,
ar neamhní *, int (*match)(struct platform_device *, ar neamhní *));
struct gnéithe gné[0];
};
struchtúr fpga_afu_region {
innéacs u32;
bratacha u32;
méid u64;
fritháireamh u64;
u64 fisic;
nód list_head struchtúr;
};
struchtúr fpga_afu_dma_region {
u64 úsáideoir_addr;
fad u64;
u64 iova;
struct leathanach **leathanaigh;
nód struct rb_node;
bool in_use;
};
struchtúr fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head réigiúin;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};
Sreabhadh Túsaithe Gléas Ardán Port
Sreabhadh Túsaithe Calafoirt
- afu_probe() afu_dev_init()
- Tosaigh struct fpga_afu agus é a stóráil sa réimse feature_platform_data.private.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Sábháil feature_ops struct isteach sa feature_platform_data.features do gach gné daonra.
- Glaoigh ar an bhfeidhm tástála, más ann di, ón struct.
- Glaoigh ar an bhfeidhm init ón struct.
- afu_probe() fpga_register_dev_ops()
- Cruthaigh nód an ghléis carachtar Port, ag clárú struct file_oibríochtaí.
IOCTLanna FME
IOCTLs a dtugtar ar oscailt file tuairisceoir le haghaidh /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—cuir ar ais an leagan reatha mar shlánuimhir, ag tosú ó 0.
FPGA_CHECK_EXTENSION—ní thacaítear leis faoi láthair.
FPGA_FME_PORT_RELEASE — is pointeoir é arg do:
struchtúr fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
bratacha __u32; //in: caithfidh 0
__u32 port_id; // in: ID port (ó 0) le scaoileadh.
};
FPGA_FME_PORT_ASSIGN — is pointeoir é arg do:
struct fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
bratacha __u32; //in: caithfidh 0
__u32 port_id; // in: ID port (ó 0) a shannadh. (caithfidh go raibh
eisithe roimhe seo ag FPGA_FME_PORT_RELEASE)
};
FPGA_FME_PORT_PR — is pointeoir é arg do:
struchtúr fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
bratacha __u32; //in: caithfidh 0
__u32 port_id; // in: ID port (ó 0)
__u32 maolán_size; // in: méid maolán srutha giotaí i mbearta. Ní mór a bheith 4-beart
ailínithe.
__u64 bufair_seoladh; // in: seoladh próisis an mhaoláin giotáin
stádas __u64; // amach: stádas earráide (bitmask)
};
IOCTLanna calafoirt
IOCTLs a dtugtar ar oscailt file tuairisceoir le haghaidh /dev/intel-fpga-port.k FPGA_GET_API_VERSION—cuir ar ais an leagan reatha mar shlánuimhir, ag tosú ó 0. FPGA_CHECK_EXTENSION - ní thacaítear leis faoi láthair.
FPGA_PORT_GET_INFO — is pointeoir é arg do:
struchtúr fpga_port_info {
__u32 argsz; // in: sizeof (struct fpga_port_info)
bratacha __u32; // amach: filleann 0
__u32 num_réigiúin; // amach: líon na réigiún MMIO, 2 (1 le haghaidh AFU agus 1 le haghaidh
STP)
__u32 num_umsgs; // amach: líon na n-UMsg a fhaigheann tacaíocht ó na crua-earraí
};
FPGA_PORT_GET_REGION_INFO — is pointeoir é arg do:
struct fpga_port_region_info {
__u32 argsz; // in: sizeof(struct fpga_port_region_info)
bratacha __u32; // amach: (masc giotán) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
innéacs __u32; // in: FPGA_PORT_INDEX_UAFU nó FPGA_PORT_INDEX_STP
stuáil __u32; //in: caithfidh 0
méid __u64; // amach: méid an réigiúin MMIO i mbearta
fritháireamh __u64; // amach: fritháireamh an réigiúin MMIO ó thús an ghléis fd
};
FPGA_PORT_DMA_MAP — is pointeoir é arg do:
struchtúr fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
bratacha __u32; // in: ní mór a bheith 0 __u64 user_addr; // in: próiseas fíorúil
seoladh. Ní mór leathanach a ailíniú.
fad __u64; // in: fad na mapála i mbearta. Ní mór gur iolra leathanach é
méid.
__u64 iova; // amach: seoladh fíorúil IO };
FPGA_PORT_DMA_UNMAP — is pointeoir é arg do:
struchtúr fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
bratacha __u32; //in: caithfidh 0
__u64 iova; // in: Seoladh fíorúil IO curtha ar ais ag seoladh roimhe seo
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—ní mór arg a bheith NULL.
- FPGA_PORT_UMSG_ENABLE — arg ní mór é a bheith NULL.
- FPGA_PORT_UMSG_DISABLE—ní mór arganna a bheith NULL.
FPGA_PORT_UMSG_SET_MODE — is pointeoir é arg do:
struchtúr fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
bratacha __u32; //in: caithfidh 0
__u32 leid_bitmap; // in: UMsg léarscáil ghiotán mód leid. Léiríonn cé acu UMsg
cumasaithe.
};
FPGA_PORT_UMSG_SET_BASE_ADDR —
- Ní mór UMsg a bheith díchumasaithe roimh an ioctl seo a eisiúint.
- Caithfidh réimse an iova a bheith do mhaolán mór go leor do gach UMsg (num_umsgs * PAGE_SIZE).
- Tá an maolán marcáilte mar “in úsáid” ag lucht bainistíochta maoláin an tiománaí.
- Má tá an iova ar NULL, tá aon réigiún roimhe seo neamhmharcáilte mar “in úsáid”.
- Is pointeoir é arg do:
struchtúr fpga_port_umsg_base_addr {- u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
- bratacha u32; //in: caithfidh 0
- u64 iova; // in: Seoladh fíorúil IO ó FPGA_PORT_DMA_MAP. };
Nóta:
- Chun na hearráidí calafoirt a ghlanadh, caithfidh tú giotán cruinn na n-earráidí reatha a scríobh, le haghaidh example, earráidí cat > soiléir
- Ní thacaítear le UMsg ach trí Luasghéarú Stack do Phróiseálaí Intel Xeon le FPGA Comhtháite.
sysfs Files
Sysfs ceanntásc FME files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | réimse mmio | cineál | rochtain |
poirt_num | fme_header.capability.num_ports | slánuimhir deachúlach | Inléite amháin |
méid_taisce | fme_header.capability.cache_size | slánuimhir deachúlach | Inléite amháin |
leagan | fme_header.capability.fabric_verid | slánuimhir deachúlach | Inléite amháin |
soicéad_id | fme_header.capability.socket_id | slánuimhir deachúlach | Inléite amháin |
sruth_giotán_id | fme_header.bitstream_id | heics uint64_t | Inléite amháin |
bitstream_meiteashonraí | fme_header.bitstream_md | heics uint64_t | Inléite amháin |
Córas Bainistíochta Teirmeach FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | réimse mmio | cineál | rochtain |
tairseach1 | teirmeach.thairseach.tmp_thshold1 | slánuimhir deachúlach | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
tairseach2 | teirmeach.thairseach.tmp_thshold2 | slánuimhir deachúlach | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
tairseach_turas | teirmeach.thairseach.therm_trip_thshold | slánuimhir deachúlach | Inléite amháin |
tairseach1_sroichte | teirmeach.thairseach.thshold1_stádas | slánuimhir deachúlach | Inléite amháin |
tairseach2_sroichte | teirmeach.thairseach.thshold2_stádas | slánuimhir deachúlach | Inléite amháin |
tairseach1_polasaí | teirmeach. tairseach.thshold_polasaí | slánuimhir deachúlach | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
teocht | teirmeach.rdsensor_fm1.fpga_temp | slánuimhir deachúlach | Inléite amháin |
Córas Bainistíochta Cumhachta FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | réimse mmio | cineál | rochtain |
itear | cumhacht.status.pwr_chaite | heics uint64_t | Inléite amháin |
tairseach1 | chumhachta.tairseach.1 | heics uint64_t | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
tairseach2 | chumhachta.tairseach.2 | heics uint64_t | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
tairseach1_stádas | cumhacht.tairseach.thairseach1_stádas | deachúlach gan síniú | Inléite amháin |
tairseach2_stádas | cumhacht.tairseach.thairseach2_stádas | deachúlach gan síniú | Inléite amháin |
rtl | power.status.fpga_latency_report | deachúlach gan síniú | Inléite amháin |
Sysfs Earráid Dhomhanda FME files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | réimse mmio | cineál | rochtain |
pcie0_earráidí | earráid.pcie0_err | heics uint64_t | Léigh-scríobh |
pcie1_earráidí | earráid.pcie1_err | heics uint64_t | Léigh-scríobh |
instealladh_earráid | gerror.ras_error_inj | heics uint64_t | Léigh-scríobh |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | réimse mmio | cineál | rochtain |
earráidí | gerror.fme_err | heics uint64_t | Inléite amháin |
chéad_earráid | gerror.fme_first_err.err_reg_status | heics uint64_t | Inléite amháin |
seo chugainn_earráid | gerror.fme_next_err.err_reg_status | heics uint64_t | Inléite amháin |
soiléir | Glantar earráidí, first_error, next_error | éagsúla uint64_t | Scríobh-amháin |
Nóta:
Chun na hearráidí FME a ghlanadh, ní mór duit giotán cruinn na n-earráidí reatha a scríobh, i gcás example cat errors > soiléir.
córais Athchumraithe Páirteach FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | réimse mmio | cineál | rochtain |
comhéadan_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | heicsidheachúlach 16-beart | Inléite amháin |
Córas Feidhmíochta Domhanda FME files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | réimse mmio | cineál | rochtain |
clog | gperf.clk.afu_interf_clock | heics uint64_t | Inléite amháin |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Níl sé bailí le haghaidh Stack Luasghéaraithe do CPU Intel Xeon le FPGAanna)
sysfs file | réimse mmio | cineál | rochtain |
reo | gperf.ch_ctl.reoite | slánuimhir deachúlach | Léigh-scríobh |
léamh_buail | gperf.CACHE_RD_HIT | heics uint64_t | Inléite amháin |
léigh_ chailleann | gperf.CACHE_RD_MISS | heics uint64_t | Inléite amháin |
scríobh_buail | gperf.CACHE_WR_HIT | heics uint64_t | Inléite amháin |
scríobh_ chailleann | gperf.CACHE_WR_MISS | heics uint64_t | Inléite amháin |
coinnigh_iarratas | gperf.CACHE_HOLD_REQ | heics uint64_t | Inléite amháin |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | heics uint64_t | Inléite amháin |
sysfs file | réimse mmio | cineál | rochtain |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | heics uint64_t | Inléite amháin |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | heics uint64_t | Inléite amháin |
tag_write_port_contention | gperf.CACHE_TAG_WR_PORT_CONTEN | heics uint64_t | Inléite amháin |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Ní bailí le haghaidh Stack Luasghéaraithe do CPU Intel Xeon le FPGAanna)
sysfs file | réimse mmio | cineál | rochtain |
reo | gperf.vtd_ctl.reoite | slánuimhir deachúlach | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Níl sé bailí le haghaidh Stack Luasghéaraithe do CPU Intel Xeon le FPGAanna)
sysfs file | réimse mmio | cineál | rochtain |
léite_idirbheart | gperf.VTD_AFU0_MEM_RD_TRANS | heics uint64_t | Inléite amháin |
scríobh_idirbheart | gperf.VTD_AFU0_MEM_WR_TRANS | heics uint64_t | Inléite amháin |
tlb_read_buail | gperf.VTD_AFU0_TLB_RD_HIT | heics uint64_t | Inléite amháin |
tlb_write_buail | gperf.VTD_AFU0_TLB_WR_HIT | heics uint64_t | Inléite amháin |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | réimse mmio | cineál | rochtain |
chumasú | gperf.fab_ctl.(cumasaithe) | slánuimhir deachúlach | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
reo | gperf.fab_ctl.reoite | slánuimhir deachúlach | Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh |
pcie0_léamh | gperf.FAB_PCIE0_RD | heics uint64_t | Inléite amháin |
pcie0_scríobh | gperf.FAB_PCIE0_WR | heics uint64_t | Inléite amháin |
pcie1_léamh | gperf.FAB_PCIE1_RD | heics uint64_t | Inléite amháin |
pcie1_scríobh | gperf.FAB_PCIE1_WR | heics uint64_t | Inléite amháin |
upi_léamh | gperf.FAB_UPI_RD | heics uint64_t | Inléite amháin |
upi_scríobh | gperf.FAB_UPI_WR | heics uint64_t | Inléite amháin |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | réimse mmio | cineál | rochtain |
pcie0_léamh | gperf.FAB_PCIE0_RD | heics uint64_t | Inléite amháin |
pcie0_scríobh | gperf.FAB_PCIE0_WR | heics uint64_t | Inléite amháin |
pcie1_léamh | gperf.FAB_PCIE1_RD | heics uint64_t | Inléite amháin |
pcie1_scríobh | gperf.FAB_PCIE1_WR | heics uint64_t | Inléite amháin |
upi_léamh | gperf.FAB_UPI_RD | heics uint64_t | Inléite amháin |
upi_scríobh | gperf.FAB_UPI_WR | heics uint64_t | Inléite amháin |
Sysfs ceanntásc calafoirt files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | réimse mmio | cineál | rochtain |
id | port_header.capability.port_number | slánuimhir deachúlach | Inléite amháin |
ltr | port_header.control.latency_fhulaingt | slánuimhir deachúlach | Inléite amháin |
Sysfs Ceanntásca Port AFU files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | réimse mmio | cineál | rochtain |
afu_id | afu_header.guid | heicsidheachúlach 16-beart | Inléite amháin |
Earráid Phoirt sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | réimse mmio | cineál | rochtain |
earráidí | earráid.port_error | heics uint64_t | Inléite amháin |
chéad_earráid | earráid.port_first_error | heics uint64_t | Inléite amháin |
céad_mífhoirmithe_req | truaill.malreq | heicsidheachúlach 16-beart | Inléite amháin |
soiléir | earráid. (gach earráid) | éagsúla uint64_t | Scríobh-amháin |
Nóta:
Chun na hearráidí Port a ghlanadh, ní mór duit giotán cruinn na n-earráidí reatha a scríobh, le haghaidh example cat errors > soiléir.
Stair Athbhreithnithe
Leagan Doiciméid | Athruithe |
2017.10.02 | Eisiúint Tosaigh. |
Treoir Ailtireachta Tiománaithe Gléas OPAE Intel FPGA Linux
Doiciméid / Acmhainní
![]() |
Intel OPAE FPGA Ailtireacht Tiománaí Gléas Linux [pdfTreoir Úsáideora Ailtireacht Tiománaí Gléas OPAE FPGA Linux, OPAE FPGA, Ailtireacht Tiománaithe Gléas Linux, Ailtireacht Tiománaithe, Ailtireacht |