انٹیل OPAE FPGA لینکس ڈیوائس ڈرائیور آرکیٹیکچر
OPAE Intel FPGA لینکس ڈیوائس ڈرائیور آرکیٹیکچر
OPAE Intel FPGA ڈرائیور انٹیل FPGA سلوشنز سے لیس پلیٹ فارمز پر FPGA ایکسلریٹر کو ترتیب دینے، شمار کرنے، کھولنے اور ان تک رسائی کے لیے صارف کی جگہ کی ایپلی کیشنز کے لیے انٹرفیس فراہم کرتا ہے اور FPGA ری کنفیگریشن، پاور مینجمنٹ، اور ورچوئلائزیشن جیسے سسٹم کی سطح کے انتظامی افعال کو قابل بناتا ہے۔
ہارڈ ویئر فن تعمیر
OS کے نقطہ نظر سے view، FPGA ہارڈویئر ایک باقاعدہ PCIe ڈیوائس کے طور پر ظاہر ہوتا ہے۔ FPGA ڈیوائس میموری کو پہلے سے طے شدہ ڈیٹا اسٹرکچر (ڈیوائس فیچر لسٹ) کا استعمال کرتے ہوئے منظم کیا جاتا ہے۔ FPGA ڈیوائس کے ذریعے تعاون یافتہ خصوصیات ان ڈیٹا ڈھانچے کے ذریعے سامنے آتی ہیں، جیسا کہ ذیل میں تصویر میں دکھایا گیا ہے:
FPGA PCIe ڈیوائس
ڈرائیور PCIe SR-IOV کو ورچوئل فنکشنز (VFs) بنانے کے لیے سپورٹ کرتا ہے جسے ورچوئل مشینوں کو انفرادی ایکسلریٹر تفویض کرنے کے لیے استعمال کیا جا سکتا ہے۔
انٹیل کارپوریشن۔ جملہ حقوق محفوظ ہیں. Intel، Intel لوگو، اور Intel کے دیگر نشانات Intel Corporation یا اس کے ذیلی اداروں کے ٹریڈ مارک ہیں۔ Intel اپنی FPGA اور سیمی کنڈکٹر مصنوعات کی کارکردگی کو Intel کی معیاری وارنٹی کے مطابق موجودہ تصریحات کی ضمانت دیتا ہے لیکن بغیر اطلاع کے کسی بھی وقت کسی بھی مصنوعات اور خدمات میں تبدیلیاں کرنے کا حق محفوظ رکھتا ہے۔ Intel یہاں بیان کردہ کسی بھی معلومات، پروڈکٹ، یا سروس کے اطلاق یا استعمال سے پیدا ہونے والی کوئی ذمہ داری یا ذمہ داری قبول نہیں کرتا ہے سوائے اس کے کہ Intel کی طرف سے تحریری طور پر اس پر اتفاق کیا گیا ہو۔ Intel صارفین کو مشورہ دیا جاتا ہے کہ وہ کسی بھی شائع شدہ معلومات پر بھروسہ کرنے سے پہلے اور مصنوعات یا خدمات کے آرڈر دینے سے پہلے ڈیوائس کی تفصیلات کا تازہ ترین ورژن حاصل کریں۔
دوسرے ناموں اور برانڈز پر دوسروں کی ملکیت کے طور پر دعوی کیا جا سکتا ہے۔
ورچوئلائزڈ FPGA PCIe ڈیوائس
FPGA مینجمنٹ انجن (FME)
ایف پی جی اے مینجمنٹ انجن پاور اور تھرمل مینجمنٹ، ایرر رپورٹنگ، ری کنفیگریشن، پرفارمنس رپورٹنگ، اور انفراسٹرکچر کے دیگر کام انجام دیتا ہے۔ ہر FPGA میں ایک FME ہوتا ہے، جس تک ہمیشہ فزیکل فنکشن (PF) کے ذریعے رسائی حاصل کی جاتی ہے۔ یوزر اسپیس ایپلی کیشنز اوپن() کا استعمال کرتے ہوئے ایف ایم ای تک خصوصی رسائی حاصل کر سکتی ہیں، اور اسے کلوز() کا استعمال کرتے ہوئے بطور مراعات یافتہ صارف (روٹ) جاری کر سکتی ہیں۔
بندرگاہ
ایک بندرگاہ جامد FPGA تانے بانے ("FPGA انٹرفیس مینیجر (FIM)") اور ایک ایکسلریٹر فنکشن (AF) پر مشتمل جزوی طور پر دوبارہ قابل ترتیب خطہ کے درمیان انٹرفیس کی نمائندگی کرتا ہے۔ پورٹ سافٹ ویئر سے ایکسلریٹر تک مواصلات کو کنٹرول کرتا ہے اور ری سیٹ اور ڈیبگ جیسی خصوصیات کو ظاہر کرتا ہے۔ ایک PCIe ڈیوائس میں کئی پورٹس ہو سکتے ہیں، اور FME ڈیوائس پر FPGA_FME_PORT_ASSIGN ioctl کا استعمال کرتے ہوئے اسے تفویض کر کے VF کے ذریعے ہر پورٹ کو ظاہر کیا جا سکتا ہے۔
ایکسلریٹر فنکشن (AF) یونٹ
- ایک ایکسلریٹر فنکشن (AF) یونٹ بندرگاہ سے منسلک ہوتا ہے اور ایکسلریٹر کے مخصوص کنٹرول رجسٹروں کے لیے استعمال ہونے والے 256K MMIO خطے کو ظاہر کرتا ہے۔
- یوزر اسپیس ایپلی کیشنز پورٹ ڈیوائس پر اوپن() کا استعمال کرکے پورٹ سے منسلک AFU تک خصوصی رسائی حاصل کر سکتی ہیں، اور کلوز() کا استعمال کر کے اسے جاری کر سکتی ہیں۔
- یوزر اسپیس ایپلی کیشنز mmap() ایکسلریٹر MMIO ریجنز کو بھی کر سکتے ہیں۔
جزوی ری کنفیگریشن
جیسا کہ اوپر بتایا گیا ہے، ایکسلریٹر فنکشن (AF) کی جزوی ری کنفیگریشن کے ذریعے ایکسلریٹر کو دوبارہ تشکیل دیا جا سکتا ہے۔ file. ایکسلریٹر فنکشن (AF) FPGA کے عین مطابق FIM اور ٹارگٹڈ سٹیٹک ریجن (پورٹ) کے لیے تیار کیا گیا ہو گا۔ بصورت دیگر، ری کنفیگریشن آپریشن ناکام ہو جائے گا اور ممکنہ طور پر سسٹم میں عدم استحکام پیدا ہو گا۔ اس مطابقت کو AF ہیڈر میں درج انٹرفیس ID کا sysfs کے ذریعے FME کے سامنے آنے والے انٹرفیس ID سے موازنہ کر کے چیک کیا جا سکتا ہے۔ یہ چیک عام طور پر ری کنفیگریشن IOCTL کو کال کرنے سے پہلے صارف کی جگہ کے ذریعے کیا جاتا ہے۔
نوٹ:
فی الحال، FPGA تک رسائی حاصل کرنے والا کوئی بھی سافٹ ویئر پروگرام، بشمول ایک ورچوئلائزڈ ہوسٹ میں چلنے والے، جزوی ری کنفیگریشن کی کوشش کرنے سے پہلے بند ہونا ضروری ہے۔ اقدامات یہ ہوں گے:
- ڈرائیور کو مہمان سے اتاریں۔
- مہمان سے VF کو ان پلگ کریں۔
- SR-IOV کو غیر فعال کریں۔
- جزوی ری کنفیگریشن انجام دیں۔
- SR-IOV کو فعال کریں۔
- VF کو مہمان سے لگائیں۔
- ڈرائیور کو مہمان میں لوڈ کریں۔
ایف پی جی اے ورچوئلائزیشن
VM میں چلنے والی ایپلیکیشنز سے ایکسلریٹر تک رسائی کو فعال کرنے کے لیے، متعلقہ AFU کی پورٹ کو درج ذیل مراحل کا استعمال کرتے ہوئے VF کو تفویض کرنے کی ضرورت ہے:
- PF ڈیفالٹ کے طور پر تمام AFU بندرگاہوں کا مالک ہے۔ کوئی بھی پورٹ جسے VF کو دوبارہ تفویض کرنے کی ضرورت ہے اسے پہلے PF سے FME ڈیوائس پر FPGA_FME_PORT_RELEASE ioctl کے ذریعے جاری کیا جانا چاہیے۔
- ایک بار جب N بندرگاہیں PF سے جاری ہو جاتی ہیں، نیچے دی گئی کمانڈ کو SRIOV اور VFs کو فعال کرنے کے لیے استعمال کیا جا سکتا ہے۔ ہر VF AFU کے ساتھ صرف ایک بندرگاہ کا مالک ہے۔ echo N > PCI_DEVICE_PATH/sriov_numvfs
- VFs سے VMs تک پہنچیں۔
- VF کے تحت AFU VM میں ایپلی کیشنز سے قابل رسائی ہے (VF کے اندر ایک ہی ڈرائیور کا استعمال کرتے ہوئے)۔
نوٹ:
ایک FME VF کو تفویض نہیں کیا جا سکتا، اس طرح PR اور دیگر انتظامی افعال صرف PF کے ذریعے دستیاب ہیں۔
ڈرائیور تنظیم
PCIe ماڈیول ڈیوائس ڈرائیور
ڈرائیور تنظیم
FPGA آلات باقاعدہ PCIe آلات کے طور پر ظاہر ہوتے ہیں۔ اس طرح، FPGA PCIe ڈیوائس ڈرائیور (intel-FPGA-PCI.ko) FPGA PCIe PF یا VF کا پتہ چلنے کے بعد ہمیشہ پہلے لوڈ ہوتا ہے۔ یہ ڈرائیور ڈرائیور کے فن تعمیر میں بنیادی ڈھانچہ کا کردار ادا کرتا ہے۔ یہ:
- فیچر ڈیوائسز کے پیرنٹ کے طور پر ایک FPGA کنٹینر ڈیوائس بناتا ہے۔
- ڈیوائس فیچر لسٹ کے ذریعے چلتا ہے، جو PCIe ڈیوائس BAR میموری میں لاگو ہوتا ہے، فیچر ڈیوائسز اور ان کی ذیلی خصوصیات کو دریافت کرنے اور کنٹینر ڈیوائس کے تحت ان کے لیے پلیٹ فارم ڈیوائسز بنانے کے لیے۔
- 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 ڈرائیور کی طرح، FPGA پورٹ (اور AFU) ڈرائیور (intel-fpga-afu. ko) کی جانچ پڑتال کی جاتی ہے جب پورٹ پلیٹ فارم ڈیوائس بن جاتی ہے۔ اس ماڈیول کا بنیادی کام یوزر اسپیس ایپلی کیشنز کو انفرادی ایکسلریٹر تک رسائی کے لیے ایک انٹرفیس فراہم کرنا ہے، بشمول پورٹ پر بنیادی ری سیٹ کنٹرول، AFU MMIO ریجن ایکسپورٹ، DMA بفر میپنگ سروس، UMsg(1) نوٹیفکیشن، اور ریموٹ ڈیبگ فنکشنز ( اوپر ملاحظہ کریں).
UMsg صرف انٹیگریٹڈ FPGA کے ساتھ Intel Xeon® پروسیسر کے لیے Acceleration Stack کے ذریعے تعاون یافتہ ہے۔
پورٹ پلیٹ فارم ماڈیول ڈیوائس ڈرائیور کے افعال
- پورٹ کریکٹر ڈیوائس نوڈ بناتا ہے۔
- پورٹ sysfs بناتا ہے۔ files اور پورٹ sysfs کو لاگو کرتا ہے۔ file رسائی کرنے والے
- پورٹ پرائیویٹ فیچر سب ڈرائیورز کو نافذ کرتا ہے۔
- پورٹ پرائیویٹ فیچر سب ڈرائیورز:
- پورٹ ہیڈر
- اے ایف یو
- پورٹ کی خرابی۔
- UMsg(2)
- سگنل نل
درخواست FPGA ڈیوائس کی گنتی
یہ سیکشن متعارف کرایا گیا ہے کہ کس طرح ایپلیکیشنز /sys/class/fpga کے تحت sysfs درجہ بندی سے 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]؛
ساخت fpga_chardev_info {
const char *نام؛
dev_t devt;
};
ساخت fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME }،
{ .name = FPGA_FEATURE_DEV_PORT }،
};
جامد ڈھانچہ کلاس *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 = {
.name = DRV_NAME،
.id_table = cci_pcie_id_tbl،
.probe = cci_pci_probe،
.remove = cci_pci_ہٹائیں،
.sriov_configure = cci_pci_sriov_configure
};
ساخت cci_drvdata {
int device_id؛
ساخت کا آلہ *fme_dev؛
ساخت mutex تالا؛
struct list_head port_dev_list؛
جاری کردہ_پورٹ_نوم؛ int
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()
- idr_init() کا استعمال کرتے ہوئے fpga_ids شروع کریں۔
- alloc_chrdev_region() کا استعمال کرتے ہوئے fpga_chrdevs[i].devt شروع کریں۔
- class_create() کا استعمال کرتے ہوئے fpga_class شروع کریں۔
- 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 اور Port 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 پر سیٹ ہے۔
- feature_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 پر سیٹ ہے۔
- feature_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() feature_platform_data.features[id] کو شروع کریں، .fops کے علاوہ سب کچھ۔
- parse_ports_from_fme()
- اگر ڈرائیور فزیکل فنکشن (PF) پر لوڈ ہے، تو:
- FME ہیڈر میں بیان کردہ ہر پورٹ پر parse_feature_list() بہاؤ چلائیں۔
- ہیڈر میں ہر پورٹ اندراج میں مذکور بار استعمال کریں۔
FME پلیٹ فارم ڈیوائس کا آغاز
یہ سیکشن ایک اوور دیتا ہے۔view intel-fpga-fme.ko کے ذریعے انجام دیے گئے FME ڈیوائس کے آغاز کے لیے کوڈ کے بہاؤ کا۔ ڈیٹا کے بنیادی ڈھانچے اور افعال کو نمایاں کیا گیا ہے۔ اس سیکشن کی بہترین پیروی کی جاتی ہے جب viewساتھ والے سورس کوڈ (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 خصوصیت *خصوصیت،
غیر دستخط شدہ int cmd، غیر دستخط شدہ long arg)؛
int (*ٹیسٹ)(struct platform_device *pdev، struct خصوصیت *خصوصیت)؛
};
ساخت کی خصوصیت {
const char *نام؛
int resource_index;
void __iomem *ioaddr؛
struct feature_ops *ops؛
};
ساخت خصوصیت_پلیٹ فارم_ڈیٹا {
struct list_head نوڈ؛
ساخت mutex تالا؛
غیر دستخط شدہ طویل dev_status؛
struct cdev cdev;
struct platform_device *dev؛
غیر دستخط شدہ int disable_count؛
باطل *نجی؛
int num
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]؛
};
ساخت perf_object {
INT ID؛
const struct attribute_group **attr_groups؛
ساخت کا آلہ *fme_dev؛
struct list_head نوڈ؛
struct list_head بچوں؛
struct kobject kobj;
};
ساخت fpga_fme {
u8 port_id؛
u64 pr_err;
ساخت کا آلہ *dev_err؛
struct perf_object *perf_dev؛
ڈھانچہ فیچر_پلیٹفارم_ڈیٹا *پی ڈیٹا؛
};
FME پلیٹ فارم ڈیوائس انیشیلائزیشن فلو
ایف ایم ای انیشیلائزیشن فلو
- fme_probe() fme_dev_init()
- ایک ڈھانچہ fpga_fme شروع کریں اور اسے feature_platform_data.private فیلڈ میں اسٹور کریں۔
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- ہر آبادی والی خصوصیت کے لیے فیچر_پلیٹفارم_ڈیٹا. فیچرز میں ایک ڈھانچہ فیچر_اوپس کو محفوظ کریں۔
- ٹیسٹ فنکشن کو کال کریں، اگر کوئی ہے تو، ساخت سے۔
- init فنکشن کو struct سے کال کریں۔
- fme_probe() fpga_register_dev_ops()
- FME کریکٹر ڈیوائس نوڈ بنائیں، ایک ڈھانچہ رجسٹر کریں۔ file_آپریشنز
پورٹ پلیٹ فارم ڈیوائس کا آغاز
یہ سیکشن ایک اوور دیتا ہے۔view intel-fpga-afu.ko کے ذریعے انجام دیے گئے پورٹ ڈیوائس کے آغاز کے لیے کوڈ کے بہاؤ کا۔ ڈیٹا کے بنیادی ڈھانچے اور افعال کو نمایاں کیا گیا ہے۔ اس سیکشن کی بہترین پیروی کی جاتی ہے جب viewساتھ والا سورس کوڈ (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 خصوصیت *خصوصیت،
غیر دستخط شدہ int cmd، غیر دستخط شدہ long arg)؛
int (*ٹیسٹ)(struct platform_device *pdev، struct خصوصیت *خصوصیت)؛
};
ساخت کی خصوصیت {
const char *نام؛
int resource_index;
void __iomem *ioaddr؛
struct feature_ops *ops؛
};
ساخت خصوصیت_پلیٹ فارم_ڈیٹا {
struct list_head نوڈ؛
ساخت mutex تالا؛
غیر دستخط شدہ طویل dev_status؛
struct cdev cdev;
struct platform_device *dev؛
غیر دستخط شدہ int disable_count؛
باطل *نجی؛
int num
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]؛
};
ساخت fpga_afu_region {
u32 انڈیکس؛
u32 جھنڈے؛
u64 سائز؛
u64 آفسیٹ؛
u64 طبیعیات؛
struct list_head نوڈ؛
};
ساخت fpga_afu_dma_region {
u64 user_addr؛
u64 لمبائی؛
u64 iova؛
ساخت کا صفحہ ** صفحات؛
ساخت rb_node نوڈ؛
bool in_use؛
};
ساخت fpga_afu {
u64 ریجن_کر_آفسیٹ؛
int num_regions؛
u8 num_umsgs;
struct list_head علاقوں؛
ساخت rb_root dma_regions؛
ڈھانچہ فیچر_پلیٹفارم_ڈیٹا *پی ڈیٹا؛
};
پورٹ پلیٹ فارم ڈیوائس انیشیلائزیشن فلو
پورٹ انیشیلائزیشن فلو
- afu_probe() afu_dev_init()
- ایک ڈھانچہ fpga_afu شروع کریں اور اسے feature_platform_data.private فیلڈ میں اسٹور کریں۔
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- ہر آبادی والی خصوصیت کے لیے فیچر_پلیٹفارم_ڈیٹا. فیچرز میں ایک ڈھانچہ فیچر_اوپس کو محفوظ کریں۔
- ٹیسٹ فنکشن کو کال کریں، اگر کوئی ہے تو، ساخت سے۔
- init فنکشن کو struct سے کال کریں۔
- afu_probe() fpga_register_dev_ops()
- ایک ڈھانچہ رجسٹر کرتے ہوئے، پورٹ کریکٹر ڈیوائس نوڈ بنائیں file_آپریشنز
FME IOCTLs
IOCTLs جنہیں اوپن پر بلایا جاتا ہے۔ file /dev/intel-fpga-fme.j FPGA_GET_API_VERSION کے لیے وضاحت کنندہ— 0 سے شروع ہونے والے موجودہ ورژن کو ایک عدد کے بطور لوٹائیں۔
FPGA_CHECK_EXTENSION—فی الحال تعاون یافتہ نہیں ہے۔
FPGA_FME_PORT_RELEASE—arg ایک اشارہ کرنے والا ہے:
ساخت fpga_fme_port_release {
__u32 argsz; // میں: sizeof(struct fpga_fme_port_release)
__u32 جھنڈے؛ // میں: 0 ہونا چاہیے۔
__u32 port_id؛ // میں: پورٹ ID (0 سے) ریلیز کرنے کے لیے۔
};
FPGA_FME_PORT_ASSIGN—آرگ ایک اشارہ کرنے والا ہے:
ساخت 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—آرگ ایک اشارہ کرنے والا ہے:
ساخت fpga_fme_port_pr {
__u32 argsz; // میں: sizeof(struct fpga_fme_port_pr)
__u32 جھنڈے؛ // میں: 0 ہونا چاہیے۔
__u32 port_id؛ // میں: پورٹ ID (0 سے)
__u32 بفر_سائز؛ // میں: بائٹس میں بٹ اسٹریم بفر کا سائز۔ 4 بائٹ ہونا چاہیے۔
منسلک
__u64 بفر_ایڈریس؛ // میں: بٹ اسٹریم بفر کا پروسیس ایڈریس
__u64 حیثیت؛ // باہر: خرابی کی حیثیت (بٹ ماسک)
};
پورٹ IOCTLs
IOCTLs جنہیں اوپن پر بلایا جاتا ہے۔ file وضاحت کنندہ برائے /dev/intel-fpga-port.k FPGA_GET_API_VERSION— 0 سے شروع ہونے والے، موجودہ ورژن کو ایک عدد عدد کے طور پر لوٹائیں۔ FPGA_CHECK_EXTENSION—فی الحال تعاون یافتہ نہیں ہے۔
FPGA_PORT_GET_INFO—آرگ ایک اشارہ کرنے والا ہے:
ساخت 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—آرگ ایک پوائنٹر ہے ایک:
ساخت fpga_port_region_info {
__u32 argsz; // in: sizeof(struct fpga_port_region_info)
__u32 جھنڈے؛ // آؤٹ: (بٹ ماسک) { FPGA_REGION_READ, FPGA_REGION_WRITE،
FPGA_REGION_MMAP }
__u32 انڈیکس؛ // میں: FPGA_PORT_INDEX_UAFU یا FPGA_PORT_INDEX_STP
__u32 پیڈنگ؛ // میں: 0 ہونا چاہیے۔
__u64 سائز؛ // باہر: بائٹس میں MMIO خطے کا سائز
__u64 آفسیٹ؛ // آؤٹ: ڈیوائس fd کے آغاز سے MMIO ریجن کا آفسیٹ
};
FPGA_PORT_DMA_MAP—آرگ ایک پوائنٹر ہے ایک:
ساخت fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32 جھنڈے؛ // میں: 0 __u64 user_addr ہونا چاہیے؛ // میں: عمل مجازی
پتہ صفحہ کی ترتیب میں ہونا ضروری ہے۔
__u64 لمبائی؛ // میں: بائٹس میں نقشہ سازی کی لمبائی۔ صفحہ کا متعدد ہونا ضروری ہے۔
سائز
__u64 iova; // باہر: IO ورچوئل ایڈریس };
FPGA_PORT_DMA_UNMAP—آرگ ایک پوائنٹر ہے ایک:
ساخت fpga_port_dma_unmap {
__u32 argsz; // میں: sizeof(struct fpga_port_dma_unmap)
__u32 جھنڈے؛ // میں: 0 ہونا چاہیے۔
__u64 iova; // میں: IO ورچوئل ایڈریس پچھلے کے ذریعہ واپس کیا گیا۔
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—آرگ NULL ہونا چاہیے۔
- FPGA_PORT_UMSG_ENABLE—آرگ NULL ہونا چاہیے۔
- FPGA_PORT_UMSG_DISABLE—آرگز NULL ہونا چاہیے۔
FPGA_PORT_UMSG_SET_MODE—آرگ ایک پوائنٹر ہے ایک:
ساخت 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 a کی طرف اشارہ ہے:
ساخت 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 صرف انٹیگریٹڈ FPGA کے ساتھ Intel Xeon پروسیسر کے لیے Acceleration Stack کے ذریعے تعاون یافتہ ہے۔
sysfs Files
FME ہیڈر sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | mmio فیلڈ | قسم | رسائی |
ports_num | fme_header.capability.num_ports | اعشاریہ int | صرف پڑھنے کے لیے |
cache_size | fme_header.capability.cache_size | اعشاریہ int | صرف پڑھنے کے لیے |
ورژن | fme_header.capability.fabric_verid | اعشاریہ int | صرف پڑھنے کے لیے |
socket_id | fme_header.capability.socket_id | اعشاریہ int | صرف پڑھنے کے لیے |
bitstream_id | fme_header.bitstream_id | hex uint64_t | صرف پڑھنے کے لیے |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | صرف پڑھنے کے لیے |
ایف ایم ای تھرمل مینجمنٹ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | mmio فیلڈ | قسم | رسائی |
حد 1 | thermal.threshold.tmp_thshold1 | اعشاریہ int | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
حد 2 | thermal.threshold.tmp_thshold2 | اعشاریہ int | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
threshold_trip | thermal.threshold.therm_trip_thshold | اعشاریہ int | صرف پڑھنے کے لیے |
حد 1_تک پہنچ گئی۔ | thermal.threshold.thshold1_status | اعشاریہ int | صرف پڑھنے کے لیے |
حد 2_تک پہنچ گئی۔ | thermal.threshold.thshold2_status | اعشاریہ int | صرف پڑھنے کے لیے |
threshold1_policy | تھرمل. threshold.thshold_policy | اعشاریہ int | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
درجہ حرارت | thermal.rdsensor_fm1.fpga_temp | اعشاریہ int | صرف پڑھنے کے لیے |
ایف ایم ای پاور مینجمنٹ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | mmio فیلڈ | قسم | رسائی |
کھایا | power.status.pwr_consumed | hex uint64_t | صرف پڑھنے کے لیے |
حد 1 | power.threshold.threshold1 | hex uint64_t | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
حد 2 | power.threshold.threshold2 | hex uint64_t | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
threshold1_status | power.threshold.threshold1_status | اعشاریہ غیر دستخط شدہ | صرف پڑھنے کے لیے |
threshold2_status | power.threshold.threshold2_status | اعشاریہ غیر دستخط شدہ | صرف پڑھنے کے لیے |
rtl | power.status.fpga_latency_report | اعشاریہ غیر دستخط شدہ | صرف پڑھنے کے لیے |
FME گلوبل ایرر sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | mmio فیلڈ | قسم | رسائی |
pcie0_غلطیاں | gerror.pcie0_err | hex uint64_t | پڑھ لکھ |
pcie1_غلطیاں | 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/
sysfs 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/
sysfs file | mmio فیلڈ | قسم | رسائی |
انٹرفیس_آئی ڈی | 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
sysfs file | mmio فیلڈ | قسم | رسائی |
گھڑی | gperf.clk.afu_interf_clock | hex uint64_t | صرف پڑھنے کے لیے |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (FPGAs کے ساتھ Intel Xeon CPU کے لیے ایکسلریشن اسٹیک کے لیے درست نہیں)
sysfs file | mmio فیلڈ | قسم | رسائی |
منجمد | gperf.ch_ctl.freeze | اعشاریہ int | پڑھ لکھ |
پڑھیں_ہٹ | gperf.CACHE_RD_HIT | hex uint64_t | صرف پڑھنے کے لیے |
read_miss | 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 | صرف پڑھنے کے لیے |
sysfs file | mmio فیلڈ | قسم | رسائی |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | صرف پڑھنے کے لیے |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | صرف پڑھنے کے لیے |
tag_write_port_contention | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | صرف پڑھنے کے لیے |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (FPGAs کے ساتھ Intel Xeon CPU کے لیے ایکسلریشن اسٹیک کے لیے درست نہیں)
sysfs file | mmio فیلڈ | قسم | رسائی |
منجمد | gperf.vtd_ctl.freeze | اعشاریہ int | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAs کے ساتھ Intel Xeon CPU کے لیے ایکسلریشن اسٹیک کے لیے درست نہیں)
sysfs file | mmio فیلڈ | قسم | رسائی |
پڑھیں_لین دین | 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/
sysfs file | mmio فیلڈ | قسم | رسائی |
فعال کریں | gperf.fab_ctl.(فعال) | اعشاریہ int | صارف: صرف پڑھنے کے لیے جڑ: پڑھنے کے لیے لکھیں۔ |
منجمد | gperf.fab_ctl.freeze | اعشاریہ 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/
sysfs 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/
sysfs file | mmio فیلڈ | قسم | رسائی |
id | port_header.capability.port_number | اعشاریہ int | صرف پڑھنے کے لیے |
لٹر | port_header.control.latency_tolerance | اعشاریہ int | صرف پڑھنے کے لیے |
پورٹ AFU ہیڈر sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | mmio فیلڈ | قسم | رسائی |
afu_id | afu_header.guid | ہیکس 16 بائٹ | صرف پڑھنے کے لیے |
پورٹ ایرر sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | mmio فیلڈ | قسم | رسائی |
غلطیاں | pererror.port_error | hex uint64_t | صرف پڑھنے کے لیے |
پہلی_غلطی | pererror.port_first_error | hex uint64_t | صرف پڑھنے کے لیے |
first_malformed_req | perror.malreq | ہیکس 16 بائٹ | صرف پڑھنے کے لیے |
صاف | غلطی۔ (تمام غلطیاں) | مختلف uint64_t | صرف لکھیں۔ |
نوٹ:
پورٹ کی غلطیوں کو صاف کرنے کے لیے، آپ کو موجودہ غلطیوں کا عین مطابق بٹ ماسک لکھنا چاہیے، سابق کے لیےampبلی کی غلطیاں> صاف کریں۔
نظرثانی کی تاریخ
دستاویز کا ورژن | تبدیلیاں |
2017.10.02 | ابتدائی ریلیز۔ |
OPAE Intel FPGA Linux ڈیوائس ڈرائیور آرکیٹیکچر گائیڈ
دستاویزات / وسائل
![]() |
انٹیل OPAE FPGA لینکس ڈیوائس ڈرائیور آرکیٹیکچر [پی ڈی ایف] یوزر گائیڈ اوپی اے ایف پی جی اے لینکس ڈیوائس ڈرائیور آرکیٹیکچر، او پی اے ای ایف پی جی اے، لینکس ڈیوائس ڈرائیور آرکیٹیکچر، ڈرائیور آرکیٹیکچر، آرکیٹیکچر |