انٹیل لوگو

انٹیل OPAE FPGA لینکس ڈیوائس ڈرائیور آرکیٹیکچر

intel-OPAE-FPGA-Linux-Device-Driver-architecture-product

OPAE Intel FPGA لینکس ڈیوائس ڈرائیور آرکیٹیکچر

OPAE Intel FPGA ڈرائیور انٹیل FPGA سلوشنز سے لیس پلیٹ فارمز پر FPGA ایکسلریٹر کو ترتیب دینے، شمار کرنے، کھولنے اور ان تک رسائی کے لیے صارف کی جگہ کی ایپلی کیشنز کے لیے انٹرفیس فراہم کرتا ہے اور FPGA ری کنفیگریشن، پاور مینجمنٹ، اور ورچوئلائزیشن جیسے سسٹم کی سطح کے انتظامی افعال کو قابل بناتا ہے۔

ہارڈ ویئر فن تعمیر

OS کے نقطہ نظر سے view، FPGA ہارڈویئر ایک باقاعدہ PCIe ڈیوائس کے طور پر ظاہر ہوتا ہے۔ FPGA ڈیوائس میموری کو پہلے سے طے شدہ ڈیٹا اسٹرکچر (ڈیوائس فیچر لسٹ) کا استعمال کرتے ہوئے منظم کیا جاتا ہے۔ FPGA ڈیوائس کے ذریعے تعاون یافتہ خصوصیات ان ڈیٹا ڈھانچے کے ذریعے سامنے آتی ہیں، جیسا کہ ذیل میں تصویر میں دکھایا گیا ہے:

FPGA PCIe ڈیوائس

intel-OPAE-FPGA-Linux-Device-Driver-architecture-fig- (1)

ڈرائیور PCIe SR-IOV کو ورچوئل فنکشنز (VFs) بنانے کے لیے سپورٹ کرتا ہے جسے ورچوئل مشینوں کو انفرادی ایکسلریٹر تفویض کرنے کے لیے استعمال کیا جا سکتا ہے۔

انٹیل کارپوریشن۔ جملہ حقوق محفوظ ہیں. Intel، Intel لوگو، اور Intel کے دیگر نشانات Intel Corporation یا اس کے ذیلی اداروں کے ٹریڈ مارک ہیں۔ Intel اپنی FPGA اور سیمی کنڈکٹر مصنوعات کی کارکردگی کو Intel کی معیاری وارنٹی کے مطابق موجودہ تصریحات کی ضمانت دیتا ہے لیکن بغیر اطلاع کے کسی بھی وقت کسی بھی مصنوعات اور خدمات میں تبدیلیاں کرنے کا حق محفوظ رکھتا ہے۔ Intel یہاں بیان کردہ کسی بھی معلومات، پروڈکٹ، یا سروس کے اطلاق یا استعمال سے پیدا ہونے والی کوئی ذمہ داری یا ذمہ داری قبول نہیں کرتا ہے سوائے اس کے کہ Intel کی طرف سے تحریری طور پر اس پر اتفاق کیا گیا ہو۔ Intel صارفین کو مشورہ دیا جاتا ہے کہ وہ کسی بھی شائع شدہ معلومات پر بھروسہ کرنے سے پہلے اور مصنوعات یا خدمات کے آرڈر دینے سے پہلے ڈیوائس کی تفصیلات کا تازہ ترین ورژن حاصل کریں۔

دوسرے ناموں اور برانڈز پر دوسروں کی ملکیت کے طور پر دعوی کیا جا سکتا ہے۔

ورچوئلائزڈ FPGA PCIe ڈیوائس

intel-OPAE-FPGA-Linux-Device-Driver-architecture-fig- (2)

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 تک رسائی حاصل کرنے والا کوئی بھی سافٹ ویئر پروگرام، بشمول ایک ورچوئلائزڈ ہوسٹ میں چلنے والے، جزوی ری کنفیگریشن کی کوشش کرنے سے پہلے بند ہونا ضروری ہے۔ اقدامات یہ ہوں گے:

  1. ڈرائیور کو مہمان سے اتاریں۔
  2. مہمان سے VF کو ان پلگ کریں۔
  3. SR-IOV کو غیر فعال کریں۔
  4. جزوی ری کنفیگریشن انجام دیں۔
  5. SR-IOV کو فعال کریں۔
  6. VF کو مہمان سے لگائیں۔
  7. ڈرائیور کو مہمان میں لوڈ کریں۔

ایف پی جی اے ورچوئلائزیشن
VM میں چلنے والی ایپلیکیشنز سے ایکسلریٹر تک رسائی کو فعال کرنے کے لیے، متعلقہ AFU کی پورٹ کو درج ذیل مراحل کا استعمال کرتے ہوئے VF کو تفویض کرنے کی ضرورت ہے:

  1. PF ڈیفالٹ کے طور پر تمام AFU بندرگاہوں کا مالک ہے۔ کوئی بھی پورٹ جسے VF کو دوبارہ تفویض کرنے کی ضرورت ہے اسے پہلے PF سے FME ڈیوائس پر FPGA_FME_PORT_RELEASE ioctl کے ذریعے جاری کیا جانا چاہیے۔
  2. ایک بار جب N بندرگاہیں PF سے جاری ہو جاتی ہیں، نیچے دی گئی کمانڈ کو SRIOV اور VFs کو فعال کرنے کے لیے استعمال کیا جا سکتا ہے۔ ہر VF AFU کے ساتھ صرف ایک بندرگاہ کا مالک ہے۔ echo N > PCI_DEVICE_PATH/sriov_numvfs
  3. VFs سے VMs تک پہنچیں۔
  4. VF کے تحت AFU VM میں ایپلی کیشنز سے قابل رسائی ہے (VF کے اندر ایک ہی ڈرائیور کا استعمال کرتے ہوئے)۔

نوٹ:
ایک FME VF کو تفویض نہیں کیا جا سکتا، اس طرح PR اور دیگر انتظامی افعال صرف PF کے ذریعے دستیاب ہیں۔

ڈرائیور تنظیم

PCIe ماڈیول ڈیوائس ڈرائیور

ڈرائیور تنظیم

intel-OPAE-FPGA-Linux-Device-Driver-architecture-fig- (3)

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 ڈائریکٹریز شامل ہیں۔
  • 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 پلیٹ فارم ڈیوائس انیشیلائزیشن فلو

ایف ایم ای انیشیلائزیشن فلوintel-OPAE-FPGA-Linux-Device-Driver-architecture-fig- (4)

  • 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؛
ڈھانچہ فیچر_پلیٹفارم_ڈیٹا *پی ڈیٹا؛
};

پورٹ پلیٹ فارم ڈیوائس انیشیلائزیشن فلو

پورٹ انیشیلائزیشن فلوintel-OPAE-FPGA-Linux-Device-Driver-architecture-fig- (5)

  • 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 لینکس ڈیوائس ڈرائیور آرکیٹیکچر [پی ڈی ایف] یوزر گائیڈ
اوپی اے ایف پی جی اے لینکس ڈیوائس ڈرائیور آرکیٹیکچر، او پی اے ای ایف پی جی اے، لینکس ڈیوائس ڈرائیور آرکیٹیکچر، ڈرائیور آرکیٹیکچر، آرکیٹیکچر

حوالہ جات

ایک تبصرہ چھوڑیں۔

آپ کا ای میل پتہ شائع نہیں کیا جائے گا۔ مطلوبہ فیلڈز نشان زد ہیں۔ *