intel-logo

intel OPAE FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر

intel-OPAE-FPGA-Linux-ڊيوائس-ڊرائيور-آرڪيٽيڪچر-پراڊڪٽ

OPAE Intel FPGA لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر

OPAE Intel FPGA ڊرائيور انٽرفيس مهيا ڪري ٿو صارف-اسپيس ايپليڪيشنن لاءِ ترتيب ڏيڻ، ڳڻڻ، کولڻ، ۽ رسائي لاءِ FPGA تيز ڪندڙ پليٽ فارمن تي Intel FPGA حلن سان ليس ۽ فعال ڪري ٿو سسٽم-سطح مينيجمينٽ افعال جهڙوڪ FPGA ريڪنفيگريشن، پاور مئنيجمينٽ، ۽ ورچوئلائيزيشن.

هارڊويئر آرڪيٽيڪچر

او ايس جي نقطي کان view، FPGA هارڊويئر هڪ باقاعده PCIe ڊوائيس طور ظاهر ٿئي ٿو. FPGA ڊيوائس ميموري کي منظم ڪيو ويو آهي اڳواٽ بيان ڪيل ڊيٽا جي جوڙجڪ (ڊيوائس فيچر لسٽ). FPGA ڊيوائس پاران سهائتا ڪيل خاصيتون انهن ڊيٽا ڍانچي جي ذريعي ظاهر ڪيون ويون آهن، جيئن هيٺ ڏنل شڪل ۾ بيان ڪيو ويو آهي:

FPGA PCIe ڊوائيس

intel-OPAE-FPGA-Linux-ڊيوائس-ڊرائيور-آرڪيٽيڪچر-تصوير-(1)

ڊرائيور PCIe SR-IOV کي ورچوئل فنڪشنز (VFs) ٺاهڻ لاءِ سپورٽ ڪري ٿو جيڪو ورچوئل مشينن کي انفرادي تيز ڪندڙ تفويض ڪرڻ لاءِ استعمال ڪري سگهجي ٿو.

Intel Corporation. سڀ حق محفوظ آهن. Intel، Intel لوگو، ۽ ٻيا Intel نشان آھن Intel Corporation يا ان جي ماتحت ادارن جا ٽريڊ مارڪ. Intel وارنٽي ڏئي ٿو ان جي FPGA ۽ سيمڪنڊڪٽر پروڊڪٽس جي ڪارڪردگي کي موجوده وضاحتن مطابق Intel جي معياري وارنٽي جي مطابق پر ڪنهن به وقت بغير اطلاع جي ڪنهن به پروڊڪٽس ۽ خدمتن ۾ تبديليون ڪرڻ جو حق محفوظ رکي ٿو. Intel هتي بيان ڪيل ڪنهن به معلومات، پراڊڪٽ، يا خدمت جي ايپليڪيشن يا استعمال مان پيدا ٿيندڙ ڪابه ذميواري يا ذميواري قبول نه ڪندو آهي سواءِ انٽيل طرفان لکڻ ۾ واضح طور تي اتفاق ڪيو ويو. Intel گراهڪن کي صلاح ڏني وئي آهي ته ڪنهن به شايع ٿيل معلومات تي ڀروسو ڪرڻ کان پهريان ۽ پروڊڪٽس يا خدمتن لاءِ آرڊر ڏيڻ کان پهريان ڊوائيس جي وضاحتن جو جديد نسخو حاصل ڪن.

ٻيا نالا ۽ برانڊ ٻين جي ملڪيت طور دعوي ڪري سگھن ٿا.

مجازي FPGA PCIe ڊوائيس

intel-OPAE-FPGA-Linux-ڊيوائس-ڊرائيور-آرڪيٽيڪچر-تصوير-(2)

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 تائين رسائي حاصل ڪرڻ وارو ڪو به سافٽ ويئر پروگرام، بشمول هڪ ورچوئل ٿيل ميزبان ۾ هلندڙ، جزوي ٻيهر ترتيب ڏيڻ جي ڪوشش ڪرڻ کان اڳ بند ڪيو وڃي. مرحلا هوندا:

  1. ڊرائيور کي مهمان کان لوڊ ڪريو
  2. مهمان کان VF انپلگ ڪريو
  3. SR-IOV کي بند ڪريو
  4. جزوي ٻيهر ترتيب ڏيو
  5. SR-IOV کي فعال ڪريو
  6. مهمان کي VF پلگ ان ڪريو
  7. ڊرائيور کي مهمان ۾ لوڊ ڪريو

FPGA ورچوئلائيزيشن
VM ۾ هلندڙ ايپليڪيشنن مان ايڪسيليٽر تائين رسائي کي فعال ڪرڻ لاءِ، لاڳاپيل AFU جي بندرگاهن کي هيٺ ڏنل قدمن کي استعمال ڪندي VF کي تفويض ڪرڻ جي ضرورت آهي:

  1. PF ڊفالٽ طور تي سڀني AFU بندرگاهن جو مالڪ آهي. ڪنهن به بندرگاهه کي جنهن کي VF ڏانهن ٻيهر تفويض ڪرڻ جي ضرورت آهي ان کي پهريون ڀيرو PF مان آزاد ڪيو وڃي FPGA_FME_PORT_RELEASE ioctl ذريعي FME ڊوائيس تي.
  2. هڪ دفعو N بندرگاهن کي PF مان آزاد ڪيو ويو آهي، هيٺ ڏنل حڪم SRIOV ۽ VFs کي فعال ڪرڻ لاء استعمال ڪري سگهجي ٿو. هر VF AFU سان صرف هڪ بندرگاهه جو مالڪ آهي. echo N > PCI_DEVICE_PATH/sriov_numvfs
  3. VFs ذريعي VMs ڏانهن وڃو.
  4. VF تحت AFU VM ۾ ايپليڪيشنن کان دستياب آهي (وي ايف جي اندر ساڳئي ڊرائيور کي استعمال ڪندي).

نوٽ:
هڪ FME هڪ VF کي تفويض نٿو ڪري سگهجي، اهڙيء طرح PR ۽ ٻيا انتظامي ڪم صرف PF ذريعي موجود آهن.

ڊرائيور تنظيم

PCIe ماڊل ڊيوائس ڊرائيور

ڊرائيور تنظيم

intel-OPAE-FPGA-Linux-ڊيوائس-ڊرائيور-آرڪيٽيڪچر-تصوير-(3)

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 ڊاريڪٽري شامل آهن.
  • 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 شروعاتي وهڪريintel-OPAE-FPGA-Linux-ڊيوائس-ڊرائيور-آرڪيٽيڪچر-تصوير-(4)

  • 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؛
};

پورٽ پليٽ فارم ڊيوائس شروعاتي وهڪري

پورٽ جي شروعاتي وهڪريintel-OPAE-FPGA-Linux-ڊيوائس-ڊرائيور-آرڪيٽيڪچر-تصوير-(5)

  • 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، لينڪس ڊيوائس ڊرائيور آرڪيٽيڪچر، ڊرائيور آرڪيٽيڪچر، آرڪيٽيڪچر

حوالو

تبصرو ڇڏي ڏيو

توهان جو اي ميل پتو شايع نه ڪيو ويندو. گهربل فيلڊ نشان لڳل آهن *