intel OPAE FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر
OPAE Intel FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر
OPAE Intel FPGA ڊرائيور انٽرفيس مهيا ڪري ٿو صارف-اسپيس ايپليڪيشنن لاءِ ترتيب ڏيڻ، ڳڻڻ، کولڻ، ۽ رسائي لاءِ FPGA تيز ڪندڙ پليٽ فارمن تي Intel FPGA حلن سان ليس ۽ فعال ڪري ٿو سسٽم-سطح مينيجمينٽ افعال جهڙوڪ FPGA ريڪنفيگريشن، پاور مئنيجمينٽ، ۽ ورچوئلائيزيشن.
هارڊويئر آرڪيٽيڪچر
او ايس جي نقطي کان view، FPGA هارڊويئر هڪ باقاعده PCIe ڊوائيس طور ظاهر ٿئي ٿو. FPGA ڊيوائس ميموري کي منظم ڪيو ويو آهي اڳواٽ بيان ڪيل ڊيٽا جي جوڙجڪ (ڊيوائس فيچر لسٽ). FPGA ڊيوائس پاران سهائتا ڪيل خاصيتون انهن ڊيٽا ڍانچي جي ذريعي ظاهر ڪيون ويون آهن، جيئن هيٺ ڏنل شڪل ۾ بيان ڪيو ويو آهي:
FPGA PCIe ڊوائيس
ڊرائيور PCIe SR-IOV کي ورچوئل فنڪشنز (VFs) ٺاهڻ لاءِ سپورٽ ڪري ٿو جيڪو ورچوئل مشينن کي انفرادي تيز ڪندڙ تفويض ڪرڻ لاءِ استعمال ڪري سگهجي ٿو.
Intel Corporation. سڀ حق محفوظ آهن. Intel، Intel لوگو، ۽ ٻيا Intel نشان آھن Intel Corporation يا ان جي ماتحت ادارن جا ٽريڊ مارڪ. Intel وارنٽي ڏئي ٿو ان جي FPGA ۽ سيمڪنڊڪٽر پروڊڪٽس جي ڪارڪردگي کي موجوده وضاحتن مطابق Intel جي معياري وارنٽي جي مطابق پر ڪنهن به وقت بغير اطلاع جي ڪنهن به پروڊڪٽس ۽ خدمتن ۾ تبديليون ڪرڻ جو حق محفوظ رکي ٿو. Intel هتي بيان ڪيل ڪنهن به معلومات، پراڊڪٽ، يا خدمت جي ايپليڪيشن يا استعمال مان پيدا ٿيندڙ ڪابه ذميواري يا ذميواري قبول نه ڪندو آهي سواءِ انٽيل طرفان لکڻ ۾ واضح طور تي اتفاق ڪيو ويو. Intel گراهڪن کي صلاح ڏني وئي آهي ته ڪنهن به شايع ٿيل معلومات تي ڀروسو ڪرڻ کان پهريان ۽ پروڊڪٽس يا خدمتن لاءِ آرڊر ڏيڻ کان پهريان ڊوائيس جي وضاحتن جو جديد نسخو حاصل ڪن.
ٻيا نالا ۽ برانڊ ٻين جي ملڪيت طور دعوي ڪري سگھن ٿا.
مجازي FPGA PCIe ڊوائيس
FPGA مئنيجمينٽ انجڻ (FME)
FPGA مئنيجمينٽ انجڻ پاور ۽ حرارتي انتظام، غلطي جي رپورٽنگ، ٻيهر ترتيب ڏيڻ، ڪارڪردگي جي رپورٽنگ، ۽ ٻين بنيادي ڍانچي جي ڪم کي انجام ڏئي ٿو. هر FPGA هڪ FME آهي، جيڪو هميشه فزيڪل فنڪشن (PF) ذريعي پهچايو ويندو آهي. يوزر اسپيس ايپليڪيشنون اوپن() استعمال ڪندي ايف ايم اي تائين خاص پهچ حاصل ڪري سگھن ٿيون، ۽ ان کي بند ڪري ڇڏين ٿيون () هڪ مراعات يافته صارف (روٽ) جي طور تي.
بندرگاهه
هڪ پورٽ جامد FPGA ڪپڙي جي وچ ۾ انٽرفيس جي نمائندگي ڪري ٿو ("FPGA انٽرفيس مئنيجر (FIM)") ۽ هڪ جزوي طور تي ٻيهر ترتيب ڏيڻ وارو علائقو جنهن ۾ ايڪسيليٽر فنڪشن (AF) شامل آهي. پورٽ سافٽ ويئر کان ايڪسيليٽر تائين ڪميونيڪيشن کي ڪنٽرول ڪري ٿو ۽ خاصيتن کي ظاهر ڪري ٿو جهڙوڪ ري سيٽ ۽ ڊيبگ. هڪ PCIe ڊوائيس ۾ ڪيترائي بندرگاهن هوندا، ۽ هر پورٽ کي VF ذريعي ظاهر ڪري سگهجي ٿو ان کي تفويض ڪندي FPGA_FME_PORT_ASSIGN ioctl استعمال ڪندي FME ڊوائيس تي.
تيز رفتار فنڪشن (AF) يونٽ
- هڪ Accelerator Function (AF) يونٽ هڪ پورٽ سان جڙيل آهي ۽ هڪ 256K MMIO علائقي کي ظاهر ڪري ٿو جنهن کي ايڪسيليٽر مخصوص ڪنٽرول رجسٽر لاءِ استعمال ڪيو وڃي ٿو.
- يوزر اسپيس ايپليڪيشنون پورٽ ڊيوائس تي open() استعمال ڪندي پورٽ سان جڙيل AFU تائين خاص پهچ حاصل ڪري سگھن ٿيون، ۽ Close() استعمال ڪندي ان کي جاري ڪري سگھن ٿيون.
- يوزر اسپيس ايپليڪيشنون پڻ ڪري سگھن ٿيون mmap() accelerator MMIO علائقن.
جزوي بحالي
جيئن مٿي ذڪر ڪيو ويو آهي، تيز ڪندڙ هڪ ايڪليٽر فنڪشن (AF) جي جزوي ٻيهر ترتيب جي ذريعي ٻيهر ترتيب ڏئي سگهجي ٿو. file. Accelerator Function (AF) FPGA جي درست FIM ۽ ٽارگيٽ ٿيل جامد علائقي (پورٽ) لاءِ پيدا ڪيو ويو هوندو؛ ٻي صورت ۾، ٻيهر ترتيب ڏيڻ وارو عمل ناڪام ٿيندو ۽ ممڪن طور تي سسٽم جي عدم استحڪام جو سبب بڻجندو. هي مطابقت AF هيڊر ۾ نوٽ ڪيل انٽرفيس ID جو مقابلو ڪندي چيڪ ڪري سگهجي ٿو انٽرفيس ID جي خلاف جيڪو FME پاران sysfs ذريعي ظاهر ڪيو ويو آهي. هي چيڪ عام طور تي ڪيو ويندو آهي يوزر اسپيس کان اڳ ريڪنفيگريشن IOCTL کي ڪال ڪرڻ کان اڳ.
نوٽ:
في الحال، FPGA تائين رسائي حاصل ڪرڻ وارو ڪو به سافٽ ويئر پروگرام، بشمول هڪ ورچوئل ٿيل ميزبان ۾ هلندڙ، جزوي ٻيهر ترتيب ڏيڻ جي ڪوشش ڪرڻ کان اڳ بند ڪيو وڃي. مرحلا هوندا:
- ڊرائيور کي مهمان کان لوڊ ڪريو
- مهمان کان VF انپلگ ڪريو
- SR-IOV کي بند ڪريو
- جزوي ٻيهر ترتيب ڏيو
- SR-IOV کي فعال ڪريو
- مهمان کي VF پلگ ان ڪريو
- ڊرائيور کي مهمان ۾ لوڊ ڪريو
FPGA ورچوئلائيزيشن
VM ۾ هلندڙ ايپليڪيشنن مان ايڪسيليٽر تائين رسائي کي فعال ڪرڻ لاءِ، لاڳاپيل AFU جي بندرگاهن کي هيٺ ڏنل قدمن کي استعمال ڪندي VF کي تفويض ڪرڻ جي ضرورت آهي:
- PF ڊفالٽ طور تي سڀني AFU بندرگاهن جو مالڪ آهي. ڪنهن به بندرگاهه کي جنهن کي VF ڏانهن ٻيهر تفويض ڪرڻ جي ضرورت آهي ان کي پهريون ڀيرو PF مان آزاد ڪيو وڃي FPGA_FME_PORT_RELEASE ioctl ذريعي FME ڊوائيس تي.
- هڪ دفعو N بندرگاهن کي PF مان آزاد ڪيو ويو آهي، هيٺ ڏنل حڪم SRIOV ۽ VFs کي فعال ڪرڻ لاء استعمال ڪري سگهجي ٿو. هر VF AFU سان صرف هڪ بندرگاهه جو مالڪ آهي. echo N > PCI_DEVICE_PATH/sriov_numvfs
- VFs ذريعي VMs ڏانهن وڃو.
- VF تحت AFU VM ۾ ايپليڪيشنن کان دستياب آهي (وي ايف جي اندر ساڳئي ڊرائيور کي استعمال ڪندي).
نوٽ:
هڪ FME هڪ VF کي تفويض نٿو ڪري سگهجي، اهڙيء طرح PR ۽ ٻيا انتظامي ڪم صرف PF ذريعي موجود آهن.
ڊرائيور تنظيم
PCIe ماڊل ڊيوائس ڊرائيور
ڊرائيور تنظيم
FPGA ڊوائيسز باقاعده PCIe ڊوائيسز وانگر ظاهر ٿيندا آهن؛ اهڙيء طرح، FPGA PCIe ڊوائيس ڊرائيور (intel-FPGA-PCI.ko) هميشه هڪ ڀيرو لوڊ ڪيو ويندو آهي جڏهن هڪ FPGA PCIe PF يا VF معلوم ٿئي ٿو. هي ڊرائيور ڊرائيور فن تعمير ۾ هڪ بنيادي ڪردار ادا ڪري ٿو. اهو:
- هڪ FPGA ڪنٽينر ڊيوائس ٺاهي ٿو جيئن فيچر ڊوائيسز جي والدين جي طور تي.
- ڊوائيس فيچر لسٽ ذريعي هلندو آهي، جيڪو PCIe ڊيوائس بار ميموري ۾ لاڳو ڪيو ويو آهي، فيچر ڊوائيسز ۽ انهن جي ذيلي خصوصيتن کي دريافت ڪرڻ ۽ ڪنٽينر ڊيوائس جي تحت انهن لاءِ پليٽ فارم ڊوائيسز ٺاهي.
- SR-IOV کي سپورٽ ڪري ٿو.
- فيچر ڊيوائس انفراسٽرڪچر متعارف ڪرايو، جيڪو ذيلي فيچرز لاءِ آپريشنز کي ختم ڪري ٿو ۽ فيچر ڊيوائس ڊرائيورن لاءِ عام ڪمن کي بي نقاب ڪري ٿو.
PCIe ماڊل ڊيوائس ڊرائيور افعال
- PCIe دريافت، ڊوائيس جي ڳڻپ، ۽ خصوصيت جي دريافت تي مشتمل آهي.
- والدين ڊيوائس، FPGA مئنيجمينٽ انجڻ (FME)، ۽ پورٽ لاءِ sysfs ڊائريڪٽري ٺاهي ٿي.
- پليٽ فارم ڊرائيور مثال ٺاهي ٿو، لينڪس ڪنييل انهن جي لاڳاپيل پليٽ فارم ماڊل ڊرائيور کي لوڊ ڪرڻ لاء.
FME پليٽ فارم ماڊل ڊيوائس ڊرائيور
- پاور ۽ تھرمل انتظام، نقص رپورٽنگ، ڪارڪردگي رپورٽنگ، ۽ ٻين زيربناء جا ڪم. توهان FME ڊرائيور پاران ظاهر ڪيل sysfs انٽرفيس ذريعي انهن ڪمن تائين رسائي ڪري سگهو ٿا.
- جزوي بحالي. FME ڊرائيور PR ذيلي خصوصيت جي شروعات دوران هڪ FPGA مئنيجر کي رجسٽر ڪري ٿو؛ هڪ دفعو اهو توهان کان هڪ FPGA_FME_PORT_PR ioctl وصول ڪري ٿو، اهو FPGA مئنيجر کان عام انٽرفيس فنڪشن کي طلب ڪري ٿو بٽ اسٽريم جي جزوي ٻيهر ترتيب ڏنل پورٽ کي مڪمل ڪرڻ لاءِ.
- ورچوئلائيزيشن لاءِ پورٽ مينيجمينٽ. FME ڊرائيور ٻه ioctls متعارف ڪرايو، FPGA_FME_PORT_RELEASE، جيڪو PF مان ڏنل پورٽ جاري ڪري ٿو؛ ۽ FPGA_FME_PORT_ASSIGN، جيڪو پورٽ کي واپس PF ڏانهن تفويض ڪري ٿو. هڪ دفعو پورٽ PF مان آزاد ڪيو ويو آهي، اهو PCIe ڊرائيور پاران مهيا ڪيل SR-IOV انٽرفيس ذريعي VF کي تفويض ڪري سگهجي ٿو. وڌيڪ معلومات لاءِ، ڏسو ”FPGA ورچوئلائيزيشن“.
FME پليٽ فارم ماڊل ڊيوائس ڊرائيور افعال
- FME ڪردار ڊوائيس نوڊ ٺاهي ٿو.
- FME sysfs ٺاهي ٿو files ۽ FME sysfs کي لاڳو ڪري ٿو file رسائيندڙ
- FME نجي خصوصيت ذيلي ڊرائيورز کي لاڳو ڪري ٿو.
- FME نجي خصوصيت ذيلي ڊرائيور:
- FME هيڊر
- حرارتي انتظام
- پاور انتظام
- عالمي غلطي
- جزوي بحالي
- گلوبل ڪارڪردگي
پورٽ پليٽ فارم ماڊل ڊيوائس ڊرائيور
FME ڊرائيور وانگر، FPGA پورٽ (۽ AFU) ڊرائيور (intel-fpga-afu. ko) هڪ ڀيرو پورٽ پليٽ فارم ڊيوائس ٺاهي وئي آهي. هن ماڊل جو بنيادي ڪم صارف-اسپيس ايپليڪيشنن لاءِ هڪ انٽرفيس مهيا ڪرڻ آهي انفرادي تيز رفتاري تائين رسائي حاصل ڪرڻ لاءِ، بشمول پورٽ تي بنيادي ري سيٽ ڪنٽرول، AFU MMIO علائقي جي برآمد، DMA بفر ميپنگ سروس، UMsg(1) نوٽيفڪيشن، ۽ ريموٽ ڊيبگ افعال ( مٿي ڏسو).
UMsg صرف انٽيليٽيڊ FPGA سان Intel Xeon® پروسيسر لاءِ Acceleration Stack ذريعي سپورٽ ڪئي وئي آهي.
پورٽ پليٽ فارم ماڊل ڊيوائس ڊرائيور افعال
- پورٽ ڪردار ڊوائيس نوڊ ٺاهي ٿو.
- پورٽ sysfs ٺاهي ٿو files ۽ پورٽ sysfs کي لاڳو ڪري ٿو file رسائيندڙ
- پورٽ پرائيويٽ فيچر ذيلي ڊرائيورز کي لاڳو ڪري ٿو.
- پورٽ نجي خصوصيت ذيلي ڊرائيور:
- پورٽ هيڊر
- AFU
- پورٽ جي غلطي
- يو ايم ايس جي (2)
- سگنل ٽيپ
ايپليڪيشن FPGA ڊيوائس ڳڻپ
هي سيڪشن متعارف ڪرايو ويو آهي ته ڪيئن ايپليڪيشنون FPGA ڊيوائس کي sysfs hierarchy مان /sys/class/fpga جي تحت ڳڻن ٿيون. اڳ ۾ampهيٺ ڏنل، ٻه Intel FPGA ڊوائيسز ميزبان ۾ نصب ٿيل آهن. هر FPGA ڊوائيس ۾ هڪ FME ۽ ٻه بندرگاهن (AFUs) آهن. هر FPGA ڊوائيس لاء، هڪ ڊوائيس ڊاريڪٽري ٺاهي وئي آهي /sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
هر نوڊ ۾ هڪ FME ۽ ٻه بندرگاهن (AFUs) آهن جيئن ٻار ڊوائيسز:
/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
عام طور تي، FME/Port sysfs انٽرفيس جا نالا هن ريت آهن:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
مان مسلسل سڀني ڪنٽينر ڊوائيسز کي نمبر ڏيڻ سان، j مسلسل FME جي نمبرن ۽ k کي مسلسل سڀني بندرگاهن کي نمبر ڏيڻ سان.
ioctl() ۽ mmap() لاءِ استعمال ٿيل ڊوائيس نوڊس ذريعي حوالو ڪري سگھجي ٿو:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
PCIe ڊرائيور جي ڳڻپ
هي سيڪشن هڪ اوور ڏئي ٿوview intel-fpga-pci.ko پاران ڪيل ڊوائيس جي ڳڻپ لاءِ ڪوڊ جي وهڪري جو. مکيه ڊيٽا جي جوڙجڪ ۽ افعال نمايان ٿيل آهن. هن حصي کي بهترين جي تابعداري ڪئي وئي آهي جڏهن viewان سان گڏ سورس ڪوڊ (pcie.c).
انگن اکرن جي جوڙجڪ
enum fpga_id_type {
PARENT_ID،
FME_ID،
PORT_ID،
FPGA_ID_MAX
};
جامد ساخت idr fpga_ids[FPGA_ID_MAX]؛
struct fpga_chardev_info {
const char * نالو؛
dev_t devt ؛
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .نالو = FPGA_FEATURE_DEV_FME },
{ .نالو = FPGA_FEATURE_DEV_PORT },
};
جامد struct ڪلاس *fpga_class؛
جامد ساخت 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،}
};
جامد ساخت pci_driver cci_pci_driver = {
نالو = DRV_NAME،
.id_table = cci_pcie_id_tbl،
.probe = cci_pci_probe،
.remove = cci_pci_هٽايو،
.sriov_configure = cci_pci_sriov_configure
};
struct cci_drvdata {
int device_id؛
ساخت جي ڊوائس *fme_dev؛
struct mutex تالا؛
struct list_head port_dev_list ؛
int release_port_num؛
struct list_head علائقن؛
};
struct build_feature_devs_info {
struct pci_dev *pdev؛
void __iomem *ioaddr؛
void __iomem *ioend؛
int current_bar؛
void __iomem *pfme_hdr؛
ساخت جي ڊوائس *parent_dev؛
struct platform_device *feature_dev؛
};
ڳڻپ جو وهڪرو
- ccidrv_init()
- شروع ڪريو fpga_ids استعمال ڪندي idr_init().
- شروع ڪريو fpga_chrdevs[i].devt استعمال ڪندي alloc_chrdev_region().
- شروع ڪريو fpga_class استعمال ڪندي class_create().
- pci_register_driver (&cci_pci_driver)؛
- cci_pci_probe()
- PCI ڊوائيس کي فعال ڪريو، ان جي علائقن تائين رسائي جي درخواست ڪريو، PCI ماسٽر موڊ سيٽ ڪريو، ۽ DMA ترتيب ڏيو.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- مختص ڪريو هڪ struct build_feature_devs_info، ان کي شروع ڪريو.
.parent_dev هڪ والدين sysfs ڊاريڪٽري (intel-fpga-dev.id) تي مقرر ڪئي وئي آهي جنهن ۾ FME ۽ پورٽ sysfs ڊاريڪٽري شامل آهن.
- مختص ڪريو هڪ struct build_feature_devs_info، ان کي شروع ڪريو.
- parse_feature_list()
- FME، بندرگاهه، ۽ انهن جي خانگي خصوصيتن کي دريافت ڪرڻ لاءِ BAR0 ڊيوائس فيچر لسٽ تي وڃو.
- parse_feature() parse_feature_afus() parse_feature_fme()
- جڏهن هڪ FME سامهون اچي ٿو:
- build_info_create_dev()
- FME لاءِ پليٽ فارم ڊيوائس مختص ڪريو، اسٽور ڪرڻ ۾ build_feature_devs_info.feature_dev.
- feature_dev.id کي idr_alloc(fpga_ids[FME_ID] جي نتيجي ۾ شروع ڪيو ويو آهي،
- feature_dev.parent مقرر ڪيو ويو آهي build_feature_devs_info.parent_dev.
- خصوصيت_dev.resource ۾ ساخت جي وسيلن جو هڪ صف مختص ڪريو.
- مختص ڪريو هڪ struct feature_platform_data، ان کي شروع ڪريو، ۽ هڪ پوائنٽر ذخيرو ڪريو feature_dev.dev.platform_data ۾
- create_feature_instance() build_info_add_sub_feature()
- شروع ڪريو feature_dev.resource[FME_FEATURE_ID_HEADER].
- فيچر_پليٽفارم_ڊيٽا_شامل()
- شروع ڪريو feature_platform_data.features[FME_FEATURE_ID_HEADER]، .fops کانسواءِ سڀ ڪجھ.
- parse_feature() parse_feature_afus() parse_feature_port()
- جڏهن هڪ پورٽ جو سامنا ڪيو ويو آهي:
- build_info_create_dev()
- پورٽ لاءِ پليٽ فارم ڊيوائس مختص ڪريو، اسٽور ڪرڻ ۾ build_feature_devs_info.feature_dev.
- feature_dev.id کي idr_alloc(fpga_ids[PORT_ID] جي نتيجي ۾ شروع ڪيو ويو آهي،
- feature_dev.parent مقرر ڪيو ويو آهي build_feature_devs_info.parent_dev.
- خصوصيت_dev.resource ۾ struct وسيلن جي هڪ صف مختص ڪريو.
- مختص ڪريو هڪ struct feature_platform_data، ان کي شروع ڪريو، ۽ هڪ پوائنٽر ذخيرو ڪريو feature_dev.dev.platform_data ۾
- build_info_commit_dev()
- struct cci_drvdata.port_dev_list ۾ بندرگاهن جي لسٽ ۾ پورٽ لاءِ struct feature_platform_data.node شامل ڪريو
- create_feature_instance() build_info_add_sub_feature()
- شروع ڪريو feature_dev.resource[PORT_FEATURE_ID_HEADER].
- فيچر_پليٽفارم_ڊيٽا_شامل()
- شروع ڪريو feature_platform_data.features[PORT_FEATURE_ID_HEADER]، .fops کانسواءِ سڀ ڪجھ.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- جڏهن هڪ AFU جو سامنا ڪيو ويو آهي:
- create_feature_instance() build_info_add_sub_feature()
- شروع ڪريو feature_dev.resource[PORT_FEATURE_ID_UAFU].
- فيچر_پليٽفارم_ڊيٽا_شامل()
- شروع ڪريو feature_platform_data.features[PORT_FEATURE_ID_UAFU]، .fops کانسواءِ سڀ ڪجھ.
- parse_feature() parse_feature_private() parse_feature_fme_private()
- جڏهن هڪ FME نجي خصوصيت سامهون اچي ٿي:
- create_feature_instance() build_info_add_sub_feature()
- شروع ڪريو feature_dev.resource[id].
- فيچر_پليٽفارم_ڊيٽا_شامل()
- شروع ڪريو feature_platform_data.features[id]، سڀ ڪجھ پر .fops.
- parse_feature() parse_feature_private() parse_feature_port_private()
- جڏهن هڪ پورٽ پرائيويٽ فيچر سامهون اچي ٿو: * create_feature_instance() build_info_add_sub_feature() * Initialize feature_dev.resource[id]. * feature_platform_data_add() initialize feature_platform_data.features[id]، سڀ ڪجھ پر .fops.
- parse_ports_from_fme()
- جيڪڏهن ڊرائيور کي جسماني فنڪشن (PF) تي لوڊ ڪيو ويو آهي، پوء:
- هلو parse_feature_list() وهڪرو هر بندرگاهه تي بيان ڪيل FME هيڊر ۾.
- هيڊر ۾ هر پورٽ داخلا ۾ ذڪر ڪيل بار استعمال ڪريو.
FME پليٽ فارم ڊيوائس جي شروعات
هي سيڪشن هڪ اوور ڏئي ٿوview FME ڊوائيس جي شروعات لاءِ ڪوڊ جي وهڪري جو intel-fpga-fme.ko پاران ڪيل. مکيه ڊيٽا جي جوڙجڪ ۽ افعال نمايان ٿيل آهن. هن حصي کي بهترين جي تابعداري ڪئي وئي آهي جڏهن viewing سان گڏ سورس ڪوڊ (fme-main.c).
FME پليٽ فارم ڊيوائس ڊيٽا جي جوڙجڪ
struct feature_ops {
int (*init)(struct platform_device *pdev، struct خاصيت *خصوصيت)؛
int (*uinit)(struct platform_device *pdev، struct خاصيت *خصوصيت)؛
ڊگھو (*ioctl)(struct platform_device *pdev، struct خاصيت *خصوصيت،
unsigned int cmd, unsigned long arg)؛
int (* test) (struct platform_device * pdev، struct خاصيت * خصوصيت)؛
};
ساخت جي خصوصيت {
const char * نالو؛
int resource_index؛
void __iomem *ioaddr؛
struct feature_ops *ops؛
};
struct feature_platform_data {
struct list_head node ؛
struct mutex تالا؛
غير دستخط ٿيل ڊگهو dev_status؛
struct cdev cdev؛
struct platform_device *dev؛
غير دستخط ٿيل int disable_count؛
باطل * خانگي؛
انٽ نمبر؛
int (*config_port)(struct platform_device *، u32، bool)؛
struct platform_device *(*fpga_for_each_port)(struct platform_device*,
void *، int (*match) (struct platform_device *، void *))؛ ساخت
خاصيتون خاصيتون[0]؛
};
struct perf_object {
انٽر ايڊ ؛
const struct attribute_group **attr_groups؛
ساخت جي ڊوائس *fme_dev؛
struct list_head node ؛
struct list_head ٻارن؛
struct kobject kobj؛
};
struct fpga_fme {
u8 port_id؛
u64 pr_err؛
ساخت جي ڊوائس *dev_err؛
struct perf_object *perf_dev؛
struct feature_platform_data *pdata؛
};
FME پليٽ فارم ڊيوائس شروعاتي وهڪري
FME شروعاتي وهڪري
- fme_probe() fme_dev_init()
- شروع ڪريو هڪ struct fpga_fme ۽ ان کي ذخيرو ڪريو feature_platform_data.private فيلڊ ۾.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- هر آبادي واري خصوصيت لاءِ فيچر_پليٽفارم_ڊيٽا.فيچر ۾ هڪ struct feature_ops محفوظ ڪريو.
- ٽيسٽ فنڪشن کي ڪال ڪريو، جيڪڏهن ڪو به، ساخت مان.
- init فنڪشن کي struct مان ڪال ڪريو.
- fme_probe() fpga_register_dev_ops()
- ٺاھيو FME ڪردار ڊيوائس نوڊ، ھڪڙي جوڙجڪ کي رجسٽر ڪرڻ file_آپريشن.
پورٽ پليٽ فارم ڊيوائس جي شروعات
هي سيڪشن هڪ اوور ڏئي ٿوview intel-fpga-afu.ko پاران ڪيل پورٽ ڊيوائس جي شروعات لاءِ ڪوڊ جي وهڪري جو. مکيه ڊيٽا جي جوڙجڪ ۽ افعال نمايان ٿيل آهن. هي سيڪشن بهترين آهي جڏهن viewing سان گڏ سورس ڪوڊ (afu.c).
پورٽ پليٽ فارم ڊيوائس ڊيٽا جي جوڙجڪ
struct feature_ops {
int (*init)(struct platform_device *pdev، struct خاصيت *خصوصيت)؛
int (*uinit)(struct platform_device *pdev، struct خاصيت *خصوصيت)؛
ڊگھو (*ioctl)(struct platform_device *pdev، struct خاصيت *خصوصيت،
unsigned int cmd, unsigned long arg)؛
int (* test) (struct platform_device * pdev، struct خاصيت * خصوصيت)؛
};
ساخت جي خصوصيت {
const char * نالو؛
int resource_index؛
void __iomem *ioaddr؛
struct feature_ops *ops؛
};
struct feature_platform_data {
struct list_head node ؛
struct mutex تالا؛
غير دستخط ٿيل ڊگهو dev_status؛
struct cdev cdev؛
struct platform_device *dev؛
غير دستخط ٿيل int disable_count؛
باطل * خانگي؛
انٽ نمبر؛
int (*config_port)(struct platform_device *، u32، bool)؛
struct platform_device *(*fpga_for_each_port)(struct platform_device*,
void *، int (*match) (struct platform_device *، void *))؛
ساخت جي خصوصيت خاصيتون[0]؛
};
struct fpga_afu_region {
u32 انڊيڪس؛
u32 جھنڊو؛
u64 سائيز؛
u64 آفسيٽ؛
u64 جسماني؛
struct list_head node ؛
};
struct fpga_afu_dma_region {
u64 user_addr؛
u64 ڊگھائي؛
u64 iova؛
ساخت صفحو ** صفحا؛
struct rb_node node؛
bool in_use؛
};
struct fpga_afu {
u64 علائقو_cur_offset؛
int num_regions؛
u8 num_umsgs؛
struct list_head علائقن؛
struct rb_root dma_regions؛
struct feature_platform_data *pdata؛
};
پورٽ پليٽ فارم ڊيوائس شروعاتي وهڪري
پورٽ جي شروعاتي وهڪري
- afu_probe() afu_dev_init()
- شروع ڪريو هڪ struct fpga_afu ۽ ان کي ذخيرو ڪريو feature_platform_data.private فيلڊ ۾.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- هر آبادي واري خصوصيت لاءِ فيچر_پليٽفارم_ڊيٽا.فيچر ۾ هڪ struct feature_ops محفوظ ڪريو.
- ٽيسٽ فنڪشن کي ڪال ڪريو، جيڪڏهن ڪو به، ساخت مان.
- init فنڪشن کي struct مان ڪال ڪريو.
- afu_probe() fpga_register_dev_ops()
- پورٽ ڪرڪٽر ڊيوائس نوڊ ٺاهيو، هڪ struct رجسٽر ڪرڻ file_آپريشن.
FME IOCTLs
IOCTLs جن کي کليل سڏيو ويندو آهي file وضاحت ڪندڙ /dev/intel-fpga-fme.j FPGA_GET_API_VERSION لاءِ موجوده ورزن کي انٽيجر طور واپس ڪريو، 0 کان شروع ٿي.
FPGA_CHECK_EXTENSION—في الحال سپورٽ نه ڪئي وئي.
FPGA_FME_PORT_RELEASE—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_fme_port_release {
__u32 argsz; // ۾: sizeof (struct fpga_fme_port_release)
__u32 پرچم؛ // ۾: 0 هجڻ گهرجي
__u32 port_id؛ // ۾: پورٽ ID (0 کان) ڇڏڻ لاء.
};
FPGA_FME_PORT_ASSIGN—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_fme_port_assign {
__u32 argsz; // ۾: sizeof (struct fpga_fme_port_assign)
__u32 پرچم؛ // ۾: 0 هجڻ گهرجي
__u32 port_id؛ // ۾: پورٽ ID (0 کان) تفويض ڪرڻ لاء. (ضرور هوندو
اڳ ۾ جاري ڪيل FPGA_FME_PORT_RELEASE)
};
FPGA_FME_PORT_PR—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_fme_port_pr {
__u32 argsz; // ۾: sizeof (struct fpga_fme_port_pr)
__u32 پرچم؛ // ۾: 0 هجڻ گهرجي
__u32 port_id؛ // ۾: پورٽ ID (0 کان)
__u32 بفر_سائز؛ // ۾: بائيٽ ۾ بٽ اسٽريم بفر جو سائز. 4 بائيٽ هجڻ گهرجي
ترتيب ڏنل.
__u64 بفر_ايڊريس؛ // ۾: بٽ اسٽريم بفر جو عمل پتو
__u64 حيثيت؛ // ٻاهر: غلطي جي صورتحال (bitmask)
};
پورٽ IOCTLs
IOCTLs جن کي کليل سڏيو ويندو آهي file وضاحت ڪندڙ /dev/intel-fpga-port.k FPGA_GET_API_VERSION لاءِ موجوده ورزن کي انٽيجر طور واپس ڪريو، 0 کان شروع ٿئي ٿو.
FPGA_PORT_GET_INFO—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_port_info {
__u32 argsz; // ۾: sizeof (struct fpga_port_info)
__u32 پرچم؛ // ٻاهر: واپسي 0
__u32 نمبر_علائقي؛ // ٻاهر: MMIO علائقن جو تعداد، 2 (1 AFU لاءِ ۽ 1 لاءِ
ايس ٽي پي)
__u32 num_umsgs؛ // ٻاھر: UMsg جو تعداد هارڊويئر جي مدد سان
};
FPGA_PORT_GET_REGION_INFO—arg ھڪڙو اشارو آھي ھڪڙي ڏانھن:
struct fpga_port_region_info {
__u32 argsz; // ۾: sizeof (struct fpga_port_region_info)
__u32 پرچم؛ // ٻاهر: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 انڊيڪس؛ // ۾: FPGA_PORT_INDEX_UAFU يا FPGA_PORT_INDEX_STP
__u32 padding؛ // ۾: 0 هجڻ گهرجي
__u64 سائيز؛ // ٻاهر: بائيٽ ۾ MMIO علائقي جو سائز
__u64 آفسیٹ؛ // ٻاهر: ڊيوائس fd جي شروعات کان MMIO علائقي جو آفسيٽ
};
FPGA_PORT_DMA_MAP—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_port_dma_map {
__u32 argsz; // ۾: sizeof(struct fpga_port_dma_map)
__u32 پرچم؛ // ۾: هجڻ گهرجي 0 __u64 user_addr؛ // ۾: عمل مجازي
پتو. صفحي کي ترتيب ڏيڻ لازمي آھي.
__u64 ڊگھائي؛ // ۾: بائيٽ ۾ نقشي جي ڊيگهه. گھڻن صفحن جو هجڻ گھرجي
ماپ.
__u64 iova؛ // ٻاهر: IO مجازي پتو } ;
FPGA_PORT_DMA_UNMAP—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_port_dma_unmap {
__u32 argsz; // ۾: sizeof(struct fpga_port_dma_unmap)
__u32 پرچم؛ // ۾: 0 هجڻ گهرجي
__u64 iova؛ // ۾: IO ورچوئل ايڊريس اڳوڻي طرفان واپس آيو
FPGA_PORT_DMA_MAP } ;
- FPGA_PORT_RESET—arg NULL هجڻ گھرجي.
- FPGA_PORT_UMSG_ENABLE—arg NULL هجڻ گھرجي.
- FPGA_PORT_UMSG_DISABLE—args NULL هجڻ ضروري آهي.
FPGA_PORT_UMSG_SET_MODE—arg هڪ اشارو آهي هڪ ڏانهن:
struct fpga_port_umsg_cfg {
__u32 argsz; // ۾: sizeof(struct fpga_port_umsg_cfg)
__u32 پرچم؛ // ۾: 0 هجڻ گهرجي
__u32 hint_bitmap؛ // ۾: UMsg اشارو موڊ بٽ ميپ. ظاهر ڪري ٿو ته UMsg ڪهڙا آهن
فعال.
};
FPGA_PORT_UMSG_SET_BASE_ADDR-
- هن ioctl کي جاري ڪرڻ کان اڳ UMsg کي بند ڪيو وڃي.
- iova فيلڊ تمام UMsg جي لاءِ ڪافي وڏي بفر لاءِ هجڻ گھرجي (num_umsgs * PAGE_SIZE).
- بفر کي نشان لڳايو ويو آهي "استعمال ۾" ڊرائيور جي بفر مئنيجمينٽ طرفان.
- جيڪڏهن iova NULL آهي، ڪنهن به پوئين علائقي کي "استعمال ۾" طور نشان نه لڳايو ويو آهي.
- arg هڪ اشارو آهي:
struct fpga_port_umsg_base_addr {- u32 argsz؛ // ۾: sizeof(struct fpga_port_umsg_base_addr)
- u32 جھنڊو؛ // ۾: 0 هجڻ گهرجي
- u64 iova؛ // ۾: IO مجازي پتو FPGA_PORT_DMA_MAP کان. }؛
نوٽ:
- پورٽ جي غلطين کي صاف ڪرڻ لاء، توهان کي موجوده غلطين جو صحيح بٽ ماسڪ لکڻو پوندو، مثال طورampلي، ٻلي جون غلطيون> صاف
- UMsg صرف Intel Xeon پروسيسر لاءِ Acceleration Stack ذريعي Integrated FPGA سان سهڪار ڪيو ويو آهي.
ايس آءِ ايس ايف ايس Files
FME هيڊر sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
ports_num | fme_header.capability.num_ports | decimal int | صرف پڙهڻ |
ڪيش_سائيز | fme_header.capability.cache_size | decimal int | صرف پڙهڻ |
نسخو | fme_header.capability.fabric_verid | decimal int | صرف پڙهڻ |
socket_id | fme_header.capability.socket_id | decimal int | صرف پڙهڻ |
bitstream_id | fme_header.bitstream_id | hex uint64_t | صرف پڙهڻ |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | صرف پڙهڻ |
FME حرارتي انتظام sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
حد 1 | thermal.threshold.tmp_thshold1 | decimal int | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
حد 2 | thermal.threshold.tmp_thshold2 | decimal int | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
threshold_trip | thermal.threshold.therm_trip_thshold | decimal int | صرف پڙهڻ |
حد 1_ پهچي ويو | thermal.threshold.thshold1_status | decimal int | صرف پڙهڻ |
حد 2_ پهچي ويو | thermal.threshold.thshold2_status | decimal int | صرف پڙهڻ |
threshold1_policy | حرارتي threshold.thshold_policy | decimal int | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
گرمي پد | thermal.rdsensor_fm1.fpga_temp | decimal int | صرف پڙهڻ |
FME پاور مئنيجمينٽ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
استعمال ٿيل | power.status.pwr_consumed | hex uint64_t | صرف پڙهڻ |
حد 1 | طاقت. حد، حد1 | hex uint64_t | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
حد 2 | طاقت. حد، حد2 | hex uint64_t | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
threshold1_status | power.threshold.threshold1_status | ڊيسيمل غير دستخط ٿيل | صرف پڙهڻ |
threshold2_status | power.threshold.threshold2_status | ڊيسيمل غير دستخط ٿيل | صرف پڙهڻ |
آر ٽي ايل | power.status.fpga_latency_report | ڊيسيمل غير دستخط ٿيل | صرف پڙهڻ |
FME گلوبل ايرر sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
pcie0_errors | gerror.pcie0_err | hex uint64_t | لکڻ پڙهڻ |
pcie1_errors | gerror.pcie1_err | hex uint64_t | لکڻ پڙهڻ |
inject_error | gerror.ras_error_inj | hex uint64_t | لکڻ پڙهڻ |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
غلطيون | gerror.fme_err | hex uint64_t | صرف پڙهڻ |
پهرين_غلطي | gerror.fme_first_err.err_reg_status | hex uint64_t | صرف پڙهڻ |
ايندڙ_غلطي | gerror.fme_next_err.err_reg_status | hex uint64_t | صرف پڙهڻ |
صاف | غلطيون صاف ڪري ٿو، پهريون_غلطي، ايندڙ_غلطي | مختلف uint64_t | صرف لکڻ |
نوٽ:
FME غلطين کي صاف ڪرڻ لاء، توهان کي موجوده غلطين جو صحيح بٽ ماسڪ لکڻ گهرجي، مثال طورampلي ٻلي غلطيون > صاف.
FME جزوي ٻيهر ترتيب ڏيڻ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
interface_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | هيڪس 16 بائيٽ | صرف پڙهڻ |
FME گلوبل پرفارمنس sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
ڪلاڪ | gperf.clk.afu_interf_clock | hex uint64_t | صرف پڙهڻ |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (FPGAs سان Intel Xeon CPU لاءِ Acceleration Stack لاءِ صحيح ناهي)
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
منجمد | gperf.ch_ctl.freeze | decimal int | لکڻ پڙهڻ |
پڙهو_ هٽ | gperf.CACHE_RD_HIT | hex uint64_t | صرف پڙهڻ |
پڙهڻ_مس | gperf.CACHE_RD_MISS | hex uint64_t | صرف پڙهڻ |
لکڻ_هٽ | gperf.CACHE_WR_HIT | hex uint64_t | صرف پڙهڻ |
لکڻ_مس | gperf.CACHE_WR_MISS | hex uint64_t | صرف پڙهڻ |
رکو_ درخواست | gperf.CACHE_HOLD_REQ | hex uint64_t | صرف پڙهڻ |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | صرف پڙهڻ |
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | صرف پڙهڻ |
data_write_port_content | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | صرف پڙهڻ |
tag_write_port_content | جي پي آر ايف. ڪيچ_TAG_ڊبليو آر_پورٽ_مواد | hex uint64_t | صرف پڙهڻ |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (FPGAs سان Intel Xeon CPU لاءِ Acceleration Stack لاءِ صحيح ناهي)
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
منجمد | gperf.vtd_ctl.freeze | decimal int | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAs سان Intel Xeon CPU لاءِ Acceleration Stack لاءِ صحيح ناهي)
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
read_transaction | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | صرف پڙهڻ |
لکڻ_ٽرانزيڪشن | gperf.VTD_AFU0_MEM_WR_TRANS | hex uint64_t | صرف پڙهڻ |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | hex uint64_t | صرف پڙهڻ |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | hex uint64_t | صرف پڙهڻ |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
چالو ڪرڻ | gperf.fab_ctl.(فعال) | decimal int | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
منجمد | gperf.fab_ctl.freeze | decimal int | استعمال ڪندڙ: صرف پڙهڻ لاءِ روٽ: پڙهڻ-لکيو |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | صرف پڙهڻ |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | صرف پڙهڻ |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | صرف پڙهڻ |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | صرف پڙهڻ |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | صرف پڙهڻ |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | صرف پڙهڻ |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | صرف پڙهڻ |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | صرف پڙهڻ |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | صرف پڙهڻ |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | صرف پڙهڻ |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | صرف پڙهڻ |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | صرف پڙهڻ |
پورٽ هيڊر sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
id | port_header.capability.port_number | decimal int | صرف پڙهڻ |
ltr | port_header.control.latency_tolerance | decimal int | صرف پڙهڻ |
پورٽ AFU هيڊر sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
afu_id | afu_header.guid | هيڪس 16 بائيٽ | صرف پڙهڻ |
پورٽ جي غلطي sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
ايس آءِ ايس ايف ايس file | mmio فيلڊ | قسم | پهچ |
غلطيون | pererror.port_error | hex uint64_t | صرف پڙهڻ |
پهرين_غلطي | pererror.port_first_error | hex uint64_t | صرف پڙهڻ |
پهريون_غلط_req | perror.malreq | هيڪس 16 بائيٽ | صرف پڙهڻ |
صاف | غلطي. (سڀ غلطيون) | مختلف uint64_t | صرف لکڻ |
نوٽ:
پورٽ جي غلطين کي صاف ڪرڻ لاء، توهان کي موجوده غلطين جو صحيح بٽ ماسڪ لکڻ گهرجي، مثال طورampلي ٻلي غلطيون > صاف.
نظرثاني جي تاريخ
دستاويزي نسخو | تبديليون |
2017.10.02 | شروعاتي رليز. |
OPAE Intel FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر گائيڊ
دستاويز / وسيلا
![]() |
intel OPAE FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر [pdf] استعمال ڪندڙ ھدايت OPAE FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر، OPAE FPGA، لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر، ڊرائيور آرڪيٽيڪچر، آرڪيٽيڪچر |