ಇಂಟೆಲ್-ಲೋಗೋ

intel OPAE FPGA ಲಿನಕ್ಸ್ ಡಿವೈಸ್ ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್

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

OPAE ಇಂಟೆಲ್ FPGA ಲಿನಕ್ಸ್ ಡಿವೈಸ್ ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್

OPAE Intel FPGA ಡ್ರೈವರ್ ಇಂಟೆಲ್ ಎಫ್‌ಪಿಜಿಎ ಪರಿಹಾರಗಳನ್ನು ಹೊಂದಿರುವ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಳಲ್ಲಿ ಎಫ್‌ಪಿಜಿಎ ವೇಗವರ್ಧಕಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು, ಎಣಿಸಲು, ತೆರೆಯಲು ಮತ್ತು ಪ್ರವೇಶಿಸಲು ಬಳಕೆದಾರ-ಸ್ಥಳ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಇಂಟರ್‌ಫೇಸ್‌ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ ಮತ್ತು ಎಫ್‌ಪಿಜಿಎ ಮರುಸಂರಚನೆ, ಪವರ್ ಮ್ಯಾನೇಜ್‌ಮೆಂಟ್ ಮತ್ತು ವರ್ಚುವಲೈಸೇಶನ್‌ನಂತಹ ಸಿಸ್ಟಮ್-ಲೆವೆಲ್ ಮ್ಯಾನೇಜ್‌ಮೆಂಟ್ ಕಾರ್ಯಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.

ಹಾರ್ಡ್ವೇರ್ ಆರ್ಕಿಟೆಕ್ಚರ್

OS ನ ಬಿಂದುವಿನಿಂದ view, FPGA ಹಾರ್ಡ್‌ವೇರ್ ಸಾಮಾನ್ಯ PCIe ಸಾಧನವಾಗಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. FPGA ಸಾಧನದ ಮೆಮೊರಿಯನ್ನು ಪೂರ್ವನಿರ್ಧರಿತ ಡೇಟಾ ರಚನೆಯನ್ನು (ಸಾಧನ ವೈಶಿಷ್ಟ್ಯ ಪಟ್ಟಿ) ಬಳಸಿಕೊಂಡು ಆಯೋಜಿಸಲಾಗಿದೆ. FPGA ಸಾಧನದಿಂದ ಬೆಂಬಲಿತವಾದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಈ ಡೇಟಾ ರಚನೆಗಳ ಮೂಲಕ ಬಹಿರಂಗಪಡಿಸಲಾಗುತ್ತದೆ, ಕೆಳಗಿನ ಚಿತ್ರದಲ್ಲಿ ಕೆಳಗೆ ವಿವರಿಸಲಾಗಿದೆ:

FPGA PCIe ಸಾಧನ

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

ಚಾಲಕವು PCIe SR-IOV ಅನ್ನು ವರ್ಚುವಲ್ ಕಾರ್ಯಗಳನ್ನು (VFs) ರಚಿಸಲು ಬೆಂಬಲಿಸುತ್ತದೆ, ಇದನ್ನು ವರ್ಚುವಲ್ ಯಂತ್ರಗಳಿಗೆ ಪ್ರತ್ಯೇಕ ವೇಗವರ್ಧಕಗಳನ್ನು ನಿಯೋಜಿಸಲು ಬಳಸಬಹುದು.

ಇಂಟೆಲ್ ಕಾರ್ಪೊರೇಷನ್. ಎಲ್ಲ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ. ಇಂಟೆಲ್, ಇಂಟೆಲ್ ಲೋಗೋ ಮತ್ತು ಇತರ ಇಂಟೆಲ್ ಗುರುತುಗಳು ಇಂಟೆಲ್ ಕಾರ್ಪೊರೇಷನ್ ಅಥವಾ ಅದರ ಅಂಗಸಂಸ್ಥೆಗಳ ಟ್ರೇಡ್‌ಮಾರ್ಕ್‌ಗಳಾಗಿವೆ. Intel ತನ್ನ FPGA ಮತ್ತು ಸೆಮಿಕಂಡಕ್ಟರ್ ಉತ್ಪನ್ನಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಇಂಟೆಲ್‌ನ ಪ್ರಮಾಣಿತ ವಾರಂಟಿಗೆ ಅನುಗುಣವಾಗಿ ಪ್ರಸ್ತುತ ವಿಶೇಷಣಗಳಿಗೆ ಖಾತರಿ ನೀಡುತ್ತದೆ ಆದರೆ ಯಾವುದೇ ಸೂಚನೆಯಿಲ್ಲದೆ ಯಾವುದೇ ಉತ್ಪನ್ನಗಳು ಮತ್ತು ಸೇವೆಗಳಿಗೆ ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡುವ ಹಕ್ಕನ್ನು ಕಾಯ್ದಿರಿಸಿದೆ. ಇಂಟೆಲ್ ಲಿಖಿತವಾಗಿ ಒಪ್ಪಿಗೆ ಸೂಚಿಸಿರುವುದನ್ನು ಹೊರತುಪಡಿಸಿ ಇಲ್ಲಿ ವಿವರಿಸಿದ ಯಾವುದೇ ಮಾಹಿತಿ, ಉತ್ಪನ್ನ ಅಥವಾ ಸೇವೆಯ ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ಜವಾಬ್ದಾರಿ ಅಥವಾ ಹೊಣೆಗಾರಿಕೆಯನ್ನು Intel ಊಹಿಸುವುದಿಲ್ಲ. ಇಂಟೆಲ್ ಗ್ರಾಹಕರು ಯಾವುದೇ ಪ್ರಕಟಿತ ಮಾಹಿತಿಯನ್ನು ಅವಲಂಬಿಸುವ ಮೊದಲು ಮತ್ತು ಉತ್ಪನ್ನಗಳು ಅಥವಾ ಸೇವೆಗಳಿಗೆ ಆರ್ಡರ್ ಮಾಡುವ ಮೊದಲು ಸಾಧನದ ವಿಶೇಷಣಗಳ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಸಲಹೆ ನೀಡಲಾಗುತ್ತದೆ.

ಇತರ ಹೆಸರುಗಳು ಮತ್ತು ಬ್ರ್ಯಾಂಡ್‌ಗಳನ್ನು ಇತರರ ಆಸ್ತಿ ಎಂದು ಹೇಳಬಹುದು.

ವರ್ಚುವಲೈಸ್ಡ್ FPGA PCIe ಸಾಧನ

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

FPGA ಮ್ಯಾನೇಜ್ಮೆಂಟ್ ಎಂಜಿನ್ (FME)
ಎಫ್‌ಪಿಜಿಎ ಮ್ಯಾನೇಜ್‌ಮೆಂಟ್ ಇಂಜಿನ್ ಶಕ್ತಿ ಮತ್ತು ಉಷ್ಣ ನಿರ್ವಹಣೆ, ದೋಷ ವರದಿ, ಮರುಸಂರಚನೆ, ಕಾರ್ಯಕ್ಷಮತೆ ವರದಿ ಮತ್ತು ಇತರ ಮೂಲಸೌಕರ್ಯ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಪ್ರತಿ ಎಫ್‌ಪಿಜಿಎ ಒಂದು ಎಫ್‌ಎಂಇಯನ್ನು ಹೊಂದಿದೆ, ಇದನ್ನು ಯಾವಾಗಲೂ ಭೌತಿಕ ಕಾರ್ಯ (ಪಿಎಫ್) ಮೂಲಕ ಪ್ರವೇಶಿಸಲಾಗುತ್ತದೆ. ಬಳಕೆದಾರ-ಸ್ಪೇಸ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮುಕ್ತ() ಅನ್ನು ಬಳಸಿಕೊಂಡು FME ಗೆ ವಿಶೇಷ ಪ್ರವೇಶವನ್ನು ಪಡೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಅದನ್ನು ಸವಲತ್ತು ಪಡೆದ ಬಳಕೆದಾರರಾಗಿ (ರೂಟ್) ಕ್ಲೋಸ್() ಬಳಸಿ ಬಿಡುಗಡೆ ಮಾಡಬಹುದು.

ಬಂದರು
ಸ್ಟ್ಯಾಟಿಕ್ ಎಫ್‌ಪಿಜಿಎ ಫ್ಯಾಬ್ರಿಕ್ ("ಎಫ್‌ಪಿಜಿಎ ಇಂಟರ್‌ಫೇಸ್ ಮ್ಯಾನೇಜರ್ (ಎಫ್‌ಐಎಂ)") ಮತ್ತು ಆಕ್ಸಿಲರೇಟರ್ ಫಂಕ್ಷನ್ (ಎಎಫ್) ಹೊಂದಿರುವ ಭಾಗಶಃ ಮರುಸಂರಚಿಸುವ ಪ್ರದೇಶದ ನಡುವಿನ ಇಂಟರ್‌ಫೇಸ್ ಅನ್ನು ಪೋರ್ಟ್ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಪೋರ್ಟ್ ಸಾಫ್ಟ್‌ವೇರ್‌ನಿಂದ ವೇಗವರ್ಧಕಕ್ಕೆ ಸಂವಹನವನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ ಮತ್ತು ರೀಸೆಟ್ ಮತ್ತು ಡೀಬಗ್‌ನಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ. PCIe ಸಾಧನವು ಹಲವಾರು ಪೋರ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿರಬಹುದು ಮತ್ತು FME ಸಾಧನದಲ್ಲಿ FPGA_FME_PORT_ASSIGN ioctl ಅನ್ನು ಬಳಸಿಕೊಂಡು ಅದನ್ನು ನಿಯೋಜಿಸುವ ಮೂಲಕ VF ಮೂಲಕ ಪ್ರತಿ ಪೋರ್ಟ್ ಅನ್ನು ಬಹಿರಂಗಪಡಿಸಬಹುದು.

ವೇಗವರ್ಧಕ ಕಾರ್ಯ (AF) ಘಟಕ

  • ವೇಗವರ್ಧಕ ಕಾರ್ಯ (AF) ಯುನಿಟ್ ಅನ್ನು ಪೋರ್ಟ್‌ಗೆ ಲಗತ್ತಿಸಲಾಗಿದೆ ಮತ್ತು ವೇಗವರ್ಧಕ-ನಿರ್ದಿಷ್ಟ ನಿಯಂತ್ರಣ ರೆಜಿಸ್ಟರ್‌ಗಳಿಗೆ ಬಳಸಬೇಕಾದ 256K MMIO ಪ್ರದೇಶವನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ.
  • ಪೋರ್ಟ್ ಸಾಧನದಲ್ಲಿ ಓಪನ್() ಅನ್ನು ಬಳಸುವ ಮೂಲಕ ಪೋರ್ಟ್‌ಗೆ ಲಗತ್ತಿಸಲಾದ AFU ಗೆ ವಿಶೇಷ ಪ್ರವೇಶವನ್ನು ಬಳಕೆದಾರ-ಸ್ಪೇಸ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಪಡೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಅದನ್ನು ಕ್ಲೋಸ್() ಬಳಸಿ ಬಿಡುಗಡೆ ಮಾಡಬಹುದು.
  • ಬಳಕೆದಾರ-ಸ್ಪೇಸ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಎಂಎಂಎಪಿ() ವೇಗವರ್ಧಕ MMIO ಪ್ರದೇಶಗಳನ್ನು ಸಹ ಮಾಡಬಹುದು.

ಭಾಗಶಃ ಪುನರ್ರಚನೆ
ಮೇಲೆ ತಿಳಿಸಿದಂತೆ, ವೇಗವರ್ಧಕ ಕಾರ್ಯವನ್ನು (AF) ಭಾಗಶಃ ಮರುಸಂರಚಿಸುವ ಮೂಲಕ ವೇಗವರ್ಧಕಗಳನ್ನು ಮರುಸಂರಚಿಸಬಹುದು. file. FPGA ಯ ನಿಖರವಾದ FIM ಮತ್ತು ಉದ್ದೇಶಿತ ಸ್ಥಿರ ಪ್ರದೇಶಕ್ಕೆ (ಪೋರ್ಟ್) ವೇಗವರ್ಧಕ ಕಾರ್ಯವನ್ನು (AF) ರಚಿಸಿರಬೇಕು; ಇಲ್ಲದಿದ್ದರೆ, ಮರುಸಂರಚನಾ ಕಾರ್ಯಾಚರಣೆಯು ವಿಫಲಗೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಬಹುಶಃ ಸಿಸ್ಟಮ್ ಅಸ್ಥಿರತೆಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. sysfs ಮೂಲಕ FME ಯಿಂದ ಬಹಿರಂಗಪಡಿಸಿದ ಇಂಟರ್ಫೇಸ್ ID ಯೊಂದಿಗೆ AF ಹೆಡರ್‌ನಲ್ಲಿ ಗುರುತಿಸಲಾದ ಇಂಟರ್ಫೇಸ್ ID ಅನ್ನು ಹೋಲಿಸುವ ಮೂಲಕ ಈ ಹೊಂದಾಣಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸಬಹುದು. IOCTL ಮರುಸಂರಚನೆಯನ್ನು ಕರೆಯುವ ಮೊದಲು ಈ ಪರಿಶೀಲನೆಯನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಬಳಕೆದಾರರ ಸ್ಥಳದಿಂದ ಮಾಡಲಾಗುತ್ತದೆ.

ಗಮನಿಸಿ:
ಪ್ರಸ್ತುತ, ಎಫ್‌ಪಿಜಿಎಗೆ ಪ್ರವೇಶಿಸುವ ಯಾವುದೇ ಸಾಫ್ಟ್‌ವೇರ್ ಪ್ರೋಗ್ರಾಂ, ವರ್ಚುವಲೈಸ್ಡ್ ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವುದನ್ನು ಒಳಗೊಂಡಂತೆ, ಭಾಗಶಃ ಮರುಸಂರಚನೆಯನ್ನು ಪ್ರಯತ್ನಿಸುವ ಮೊದಲು ಮುಚ್ಚಬೇಕು. ಹಂತಗಳು ಹೀಗಿರುತ್ತವೆ:

  1. ಅತಿಥಿಯಿಂದ ಚಾಲಕವನ್ನು ಇಳಿಸಿ
  2. ಅತಿಥಿಯಿಂದ VF ಅನ್ನು ಅನ್‌ಪ್ಲಗ್ ಮಾಡಿ
  3. SR-IOV ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ
  4. ಭಾಗಶಃ ಮರುಸಂರಚನೆಯನ್ನು ನಿರ್ವಹಿಸಿ
  5. SR-IOV ಸಕ್ರಿಯಗೊಳಿಸಿ
  6. ಅತಿಥಿಗೆ VF ಅನ್ನು ಪ್ಲಗ್ ಮಾಡಿ
  7. ಅತಿಥಿಯಲ್ಲಿ ಚಾಲಕವನ್ನು ಲೋಡ್ ಮಾಡಿ

FPGA ವರ್ಚುವಲೈಸೇಶನ್
VM ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಂದ ವೇಗವರ್ಧಕವನ್ನು ಪ್ರವೇಶಿಸುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, ಕೆಳಗಿನ ಹಂತಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಆಯಾ AFU ನ ಪೋರ್ಟ್ ಅನ್ನು VF ಗೆ ನಿಯೋಜಿಸಬೇಕಾಗುತ್ತದೆ:

  1. PF ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಎಲ್ಲಾ AFU ಪೋರ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿದೆ. VF ಗೆ ಮರುಹೊಂದಿಸಬೇಕಾದ ಯಾವುದೇ ಪೋರ್ಟ್ ಅನ್ನು ಮೊದಲು FME ಸಾಧನದಲ್ಲಿ FPGA_FME_PORT_RELEASE ioctl ಮೂಲಕ PF ನಿಂದ ಬಿಡುಗಡೆ ಮಾಡಬೇಕು.
  2. PF ನಿಂದ N ಪೋರ್ಟ್‌ಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿದ ನಂತರ, SRIOV ಮತ್ತು VF ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಕೆಳಗಿನ ಆಜ್ಞೆಯನ್ನು ಬಳಸಬಹುದು. ಪ್ರತಿ VF AFU ನೊಂದಿಗೆ ಕೇವಲ ಒಂದು ಪೋರ್ಟ್ ಅನ್ನು ಹೊಂದಿದೆ. echo N > PCI_DEVICE_PATH/sriov_numvfs
  3. VF ಗಳ ಮೂಲಕ VM ಗಳಿಗೆ ರವಾನಿಸಿ.
  4. VF ಅಡಿಯಲ್ಲಿ AFU ಅನ್ನು VM ನಲ್ಲಿನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಂದ ಪ್ರವೇಶಿಸಬಹುದು (VF ಒಳಗೆ ಅದೇ ಚಾಲಕವನ್ನು ಬಳಸುವುದು).

ಗಮನಿಸಿ:
VF ಗೆ FME ಅನ್ನು ನಿಯೋಜಿಸಲಾಗುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ PR ಮತ್ತು ಇತರ ನಿರ್ವಹಣಾ ಕಾರ್ಯಗಳು PF ಮೂಲಕ ಮಾತ್ರ ಲಭ್ಯವಿರುತ್ತವೆ.

ಚಾಲಕ ಸಂಘಟನೆ

PCIe ಮಾಡ್ಯೂಲ್ ಸಾಧನ ಚಾಲಕ

ಚಾಲಕ ಸಂಘಟನೆ

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

FPGA ಸಾಧನಗಳು ಸಾಮಾನ್ಯ PCIe ಸಾಧನಗಳಾಗಿ ಗೋಚರಿಸುತ್ತವೆ; ಹೀಗಾಗಿ, FPGA PCIe PF ಅಥವಾ VF ಪತ್ತೆಯಾದ ನಂತರ FPGA PCIe ಸಾಧನ ಚಾಲಕವನ್ನು (intel-FPGA-PCI.ko) ಯಾವಾಗಲೂ ಮೊದಲು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ. ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್‌ನಲ್ಲಿ ಈ ಡ್ರೈವರ್ ಮೂಲಸೌಕರ್ಯ ಪಾತ್ರವನ್ನು ವಹಿಸುತ್ತದೆ. ಇದು:

  • ವೈಶಿಷ್ಟ್ಯ ಸಾಧನಗಳ ಪೋಷಕರಂತೆ FPGA ಕಂಟೇನರ್ ಸಾಧನವನ್ನು ರಚಿಸುತ್ತದೆ.
  • ವೈಶಿಷ್ಟ್ಯ ಸಾಧನಗಳು ಮತ್ತು ಅವುಗಳ ಉಪ-ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಮತ್ತು ಕಂಟೇನರ್ ಸಾಧನದ ಅಡಿಯಲ್ಲಿ ಅವುಗಳಿಗೆ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಸಾಧನಗಳನ್ನು ರಚಿಸಲು PCIe ಸಾಧನ BAR ಮೆಮೊರಿಯಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿರುವ ಸಾಧನ ವೈಶಿಷ್ಟ್ಯ ಪಟ್ಟಿಯ ಮೂಲಕ ನಡೆಯುತ್ತದೆ.
  • SR-IOV ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ.
  • ವೈಶಿಷ್ಟ್ಯ ಸಾಧನ ಮೂಲಸೌಕರ್ಯವನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ, ಇದು ಉಪ-ವೈಶಿಷ್ಟ್ಯಗಳಿಗಾಗಿ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅಮೂರ್ತಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ವೈಶಿಷ್ಟ್ಯದ ಸಾಧನ ಡ್ರೈವರ್‌ಗಳಿಗೆ ಸಾಮಾನ್ಯ ಕಾರ್ಯಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ.

PCIe ಮಾಡ್ಯೂಲ್ ಸಾಧನ ಚಾಲಕ ಕಾರ್ಯಗಳು

  • PCIe ಅನ್ವೇಷಣೆ, ಸಾಧನ ಎಣಿಕೆ ಮತ್ತು ವೈಶಿಷ್ಟ್ಯದ ಅನ್ವೇಷಣೆಯನ್ನು ಒಳಗೊಂಡಿದೆ.
  • ಮೂಲ ಸಾಧನ, FPGA ಮ್ಯಾನೇಜ್‌ಮೆಂಟ್ ಎಂಜಿನ್ (FME) ಮತ್ತು ಪೋರ್ಟ್‌ಗಾಗಿ sysfs ಡೈರೆಕ್ಟರಿಗಳನ್ನು ರಚಿಸುತ್ತದೆ.
  • ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಡ್ರೈವರ್ ನಿದರ್ಶನಗಳನ್ನು ರಚಿಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಲಿನಕ್ಸ್ ಕರ್ನಲ್ ತಮ್ಮ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಮಾಡ್ಯೂಲ್ ಡ್ರೈವರ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ.

FME ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಮಾಡ್ಯೂಲ್ ಸಾಧನ ಚಾಲಕ

  • ಪವರ್ ಮತ್ತು ಥರ್ಮಲ್ ಮ್ಯಾನೇಜ್ಮೆಂಟ್, ದೋಷ ವರದಿ, ಕಾರ್ಯಕ್ಷಮತೆ ವರದಿ, ಮತ್ತು ಇತರ ಮೂಲಸೌಕರ್ಯ ಕಾರ್ಯಗಳು. FME ಡ್ರೈವರ್‌ನಿಂದ ತೆರೆದುಕೊಳ್ಳಲಾದ sysfs ಇಂಟರ್‌ಫೇಸ್‌ಗಳ ಮೂಲಕ ನೀವು ಈ ಕಾರ್ಯಗಳನ್ನು ಪ್ರವೇಶಿಸಬಹುದು.
  • ಭಾಗಶಃ ಪುನರ್ರಚನೆ. PR ಉಪ-ವೈಶಿಷ್ಟ್ಯದ ಪ್ರಾರಂಭದ ಸಮಯದಲ್ಲಿ FME ಚಾಲಕವು 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 ಬೆಂಬಲಿತವಾಗಿದೆ.

ಪೋರ್ಟ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಮಾಡ್ಯೂಲ್ ಸಾಧನ ಚಾಲಕ ಕಾರ್ಯಗಳು

  • ಪೋರ್ಟ್ ಅಕ್ಷರ ಸಾಧನ ನೋಡ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.
  • ಪೋರ್ಟ್ sysfs ಅನ್ನು ರಚಿಸುತ್ತದೆ files ಮತ್ತು ಪೋರ್ಟ್ sysfs ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ file ಪರಿಕರಗಳು.
  • ಪೋರ್ಟ್ ಖಾಸಗಿ ವೈಶಿಷ್ಟ್ಯದ ಉಪ-ಚಾಲಕಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ.
  • ಪೋರ್ಟ್ ಖಾಸಗಿ ವೈಶಿಷ್ಟ್ಯದ ಉಪ-ಚಾಲಕರು:
    • ಪೋರ್ಟ್ ಹೆಡರ್
    • AFU
    • ಪೋರ್ಟ್ ದೋಷ
    • 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 ಮತ್ತು ಎರಡು ಪೋರ್ಟ್‌ಗಳನ್ನು (AFU) ಮಕ್ಕಳ ಸಾಧನಗಳಾಗಿ ಹೊಂದಿದೆ:
/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
};
ಸ್ಟ್ಯಾಟಿಕ್ ಸ್ಟ್ರಕ್ಟ್ ಐಡಿಆರ್ fpga_ids[FPGA_ID_MAX];
struct fpga_chardev_info {
ಕಾನ್ಸ್ಟ್ ಚಾರ್ * ಹೆಸರು;
dev_t devt;
};
struct 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 = {
.ಹೆಸರು = DRV_NAME,
.id_table = cci_pcie_id_tbl,
.ಪ್ರೋಬ್ = cci_pci_probe,
.ತೆಗೆದುಹಾಕು = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
ರಚನೆ cci_drvdata {
int device_id;
struct ಸಾಧನ *fme_dev;
ಸ್ಟ್ರಕ್ಟ್ ಮ್ಯೂಟೆಕ್ಸ್ ಲಾಕ್;
struct list_head port_dev_list;
int released_port_num;
struct list_head ಪ್ರದೇಶಗಳು;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
ಶೂನ್ಯ __iomem *ioaddr;
ಶೂನ್ಯ __iomem *ioend;
ಇಂಟ್ ಕರೆಂಟ್_ಬಾರ್;
ಶೂನ್ಯ __iomem *pfme_hdr;
struct ಸಾಧನ *parent_dev;
struct platform_device *feature_dev;
};

ಎಣಿಕೆಯ ಹರಿವು

  • ccidrv_init()
    • idr_init() ಬಳಸಿಕೊಂಡು fpga_idಗಳನ್ನು ಆರಂಭಿಸಿ.
    • 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 ಅನ್ನು FME ಮತ್ತು Port sysfs ಡೈರೆಕ್ಟರಿಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಪೋಷಕ sysfs ಡೈರೆಕ್ಟರಿಗೆ (intel-fpga-dev.id) ಹೊಂದಿಸಲಾಗಿದೆ.
  • ಪಾರ್ಸ್_ಫೀಚರ್_ಲಿಸ್ಟ್()
    • 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 ಸಂಪನ್ಮೂಲಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ನಿಯೋಜಿಸಿ.
  • 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_add()
    • 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_add()
    • 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_add()
    • 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_add()
    • Feature_platform_data.features[id], .fops ಅನ್ನು ಹೊರತುಪಡಿಸಿ ಎಲ್ಲವನ್ನೂ ಆರಂಭಿಸಿ.
  • parse_feature() parse_feature_private() parse_feature_port_private()
  • ಪೋರ್ಟ್ ಖಾಸಗಿ ವೈಶಿಷ್ಟ್ಯವು ಎದುರಾದಾಗ: * create_feature_instance() build_info_add_sub_feature() * feature_dev.resource[id] ಅನ್ನು ಆರಂಭಿಸಿ. * feature_platform_data_add() feature_platform_data.features[id] ಆರಂಭಿಸಿ, .fops ಹೊರತುಪಡಿಸಿ ಎಲ್ಲವೂ.
  • parse_ports_from_fme()
    • ಚಾಲಕವನ್ನು ಭೌತಿಕ ಕಾರ್ಯದಲ್ಲಿ (PF) ಲೋಡ್ ಮಾಡಿದರೆ, ನಂತರ:
  • FME ಹೆಡರ್‌ನಲ್ಲಿ ವಿವರಿಸಲಾದ ಪ್ರತಿ ಪೋರ್ಟ್‌ನಲ್ಲಿ ಪಾರ್ಸ್_ಫೀಚರ್_ಲಿಸ್ಟ್() ಹರಿವನ್ನು ರನ್ ಮಾಡಿ.
  • ಹೆಡರ್‌ನಲ್ಲಿನ ಪ್ರತಿ ಪೋರ್ಟ್ ನಮೂದುಗಳಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ BAR ಅನ್ನು ಬಳಸಿ.

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 ವೈಶಿಷ್ಟ್ಯ * ವೈಶಿಷ್ಟ್ಯ,
ಸಹಿ ಮಾಡದ ಇಂಟ್ cmd, ಸಹಿ ಮಾಡದ ಲಾಂಗ್ ಆರ್ಗ್);
int (*test)(struct platform_device *pdev, struct ವೈಶಿಷ್ಟ್ಯ * ವೈಶಿಷ್ಟ್ಯ);
};
ರಚನೆ ವೈಶಿಷ್ಟ್ಯ {
ಕಾನ್ಸ್ಟ್ ಚಾರ್ * ಹೆಸರು;
int resource_index;
ಶೂನ್ಯ __iomem *ioaddr;
struct feature_ops *ops;
};
ರಚನೆ ವೈಶಿಷ್ಟ್ಯ_ಪ್ಲಾಟ್‌ಫಾರ್ಮ್_ಡೇಟಾ {
struct list_head ನೋಡ್;
ಸ್ಟ್ರಕ್ಟ್ ಮ್ಯೂಟೆಕ್ಸ್ ಲಾಕ್;
ಸಹಿ ಮಾಡದ ದೀರ್ಘ dev_status;
struct cdev cdev;
struct platform_device *dev;
ಸಹಿ ಮಾಡದ ಇಂಟ್ disable_count;
ಅನೂರ್ಜಿತ * ಖಾಸಗಿ;
ಇಂಟ್ ಸಂಖ್ಯೆ;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
ನಿರರ್ಥಕ *, ಇಂಟ್ (* ಹೊಂದಿಕೆ) (ಸ್ಟ್ರಕ್ಟ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್_ಡಿವೈಸ್ *, ಅನೂರ್ಜಿತ *)); ರಚನೆ
ವೈಶಿಷ್ಟ್ಯದ ವೈಶಿಷ್ಟ್ಯಗಳು[0];
};
struct perf_object {
ಇಂಟ್ ಐಡಿ;
const struct attribute_group **attr_groups;
struct ಸಾಧನ *fme_dev;
struct list_head ನೋಡ್;
struct list_head ಮಕ್ಕಳು;
struct kobject kobj;
};
struct fpga_fme {
u8 ಪೋರ್ಟ್_ಐಡಿ;
u64 pr_err;
struct ಸಾಧನ *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};

FME ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಸಾಧನದ ಪ್ರಾರಂಭದ ಹರಿವು

FME ಇನಿಶಿಯಲೈಸೇಶನ್ ಫ್ಲೋintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (4)

  • fme_probe() fme_dev_init()
    • struct fpga_fme ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಅದನ್ನು feature_platform_data.private ಕ್ಷೇತ್ರದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • ಪ್ರತಿ ಜನಸಂಖ್ಯೆಯ ವೈಶಿಷ್ಟ್ಯಕ್ಕಾಗಿ ವೈಶಿಷ್ಟ್ಯ_ಪ್ಲಾಟ್‌ಫಾರ್ಮ್_ಡೇಟಾ.ಫೀಚರ್‌ಗಳಲ್ಲಿ ಸ್ಟ್ರಕ್ಟ್ ವೈಶಿಷ್ಟ್ಯ_ಓಪ್‌ಗಳನ್ನು ಉಳಿಸಿ.
    • ಸ್ಟ್ರಕ್ಟ್‌ನಿಂದ ಪರೀಕ್ಷಾ ಕಾರ್ಯವನ್ನು ಯಾವುದಾದರೂ ಇದ್ದರೆ ಕರೆ ಮಾಡಿ.
    • struct ನಿಂದ init ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡಿ.
  • 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 ವೈಶಿಷ್ಟ್ಯ * ವೈಶಿಷ್ಟ್ಯ,
ಸಹಿ ಮಾಡದ ಇಂಟ್ cmd, ಸಹಿ ಮಾಡದ ಲಾಂಗ್ ಆರ್ಗ್);
int (*test)(struct platform_device *pdev, struct ವೈಶಿಷ್ಟ್ಯ * ವೈಶಿಷ್ಟ್ಯ);
};
ರಚನೆ ವೈಶಿಷ್ಟ್ಯ {
ಕಾನ್ಸ್ಟ್ ಚಾರ್ * ಹೆಸರು;
int resource_index;
ಶೂನ್ಯ __iomem *ioaddr;
struct feature_ops *ops;
};
ರಚನೆ ವೈಶಿಷ್ಟ್ಯ_ಪ್ಲಾಟ್‌ಫಾರ್ಮ್_ಡೇಟಾ {
struct list_head ನೋಡ್;
ಸ್ಟ್ರಕ್ಟ್ ಮ್ಯೂಟೆಕ್ಸ್ ಲಾಕ್;
ಸಹಿ ಮಾಡದ ದೀರ್ಘ dev_status;
struct cdev cdev;
struct platform_device *dev;
ಸಹಿ ಮಾಡದ ಇಂಟ್ disable_count;
ಅನೂರ್ಜಿತ * ಖಾಸಗಿ;
ಇಂಟ್ ಸಂಖ್ಯೆ;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
ನಿರರ್ಥಕ *, ಇಂಟ್ (* ಹೊಂದಿಕೆ) (ಸ್ಟ್ರಕ್ಟ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್_ಡಿವೈಸ್ *, ಅನೂರ್ಜಿತ *));
ಸ್ಟ್ರಕ್ಟ್ ವೈಶಿಷ್ಟ್ಯದ ವೈಶಿಷ್ಟ್ಯಗಳು[0];
};
ರಚನೆ fpga_afu_region {
u32 ಸೂಚ್ಯಂಕ;
u32 ಧ್ವಜಗಳು;
u64 ಗಾತ್ರ;
u64 ಆಫ್ಸೆಟ್;
u64 ಭೌತಶಾಸ್ತ್ರ;
struct list_head ನೋಡ್;
};
ರಚನೆ fpga_afu_dma_region {
u64 user_addr;
u64 ಉದ್ದ;
u64 ಅಯೋವಾ;
struct ಪುಟ ** ಪುಟಗಳು;
struct rb_node ನೋಡ್;
bool in_use;
};
struct fpga_afu {
u64 region_cur_offset;
ಇಂಟ್ ಸಂಖ್ಯೆ_ಪ್ರದೇಶಗಳು;
u8 num_umsgs;
struct list_head ಪ್ರದೇಶಗಳು;
rb_root dma_regions ರಚನೆ;
struct feature_platform_data *pdata;
};

ಪೋರ್ಟ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಸಾಧನದ ಪ್ರಾರಂಭದ ಹರಿವು

ಪೋರ್ಟ್ ಇನಿಶಿಯಲೈಸೇಶನ್ ಫ್ಲೋintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (5)

  • afu_probe() afu_dev_init()
    • struct fpga_afu ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಅದನ್ನು feature_platform_data.private ಕ್ಷೇತ್ರದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • ಪ್ರತಿ ಜನಸಂಖ್ಯೆಯ ವೈಶಿಷ್ಟ್ಯಕ್ಕಾಗಿ ವೈಶಿಷ್ಟ್ಯ_ಪ್ಲಾಟ್‌ಫಾರ್ಮ್_ಡೇಟಾ.ಫೀಚರ್‌ಗಳಲ್ಲಿ ಸ್ಟ್ರಕ್ಟ್ ವೈಶಿಷ್ಟ್ಯ_ಓಪ್‌ಗಳನ್ನು ಉಳಿಸಿ.
    • ಸ್ಟ್ರಕ್ಟ್‌ನಿಂದ ಪರೀಕ್ಷಾ ಕಾರ್ಯವನ್ನು ಯಾವುದಾದರೂ ಇದ್ದರೆ ಕರೆ ಮಾಡಿ.
    • struct ನಿಂದ init ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡಿ.
  • afu_probe() fpga_register_dev_ops()
    • ಪೋರ್ಟ್ ಅಕ್ಷರ ಸಾಧನ ನೋಡ್ ಅನ್ನು ರಚಿಸಿ, ಸ್ಟ್ರಕ್ಟ್ ಅನ್ನು ನೋಂದಾಯಿಸಿ file_ಕಾರ್ಯಾಚರಣೆಗಳು.

FME IOCTL ಗಳು
IOCTL ಗಳು ತೆರೆದ ಮೇಲೆ ಕರೆಯಲ್ಪಡುತ್ತವೆ 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; // in: sizeof(struct fpga_fme_port_release)
__u32 ಧ್ವಜಗಳು; // in: 0 ಆಗಿರಬೇಕು
__u32 ಪೋರ್ಟ್_ಐಡಿ; // ಇನ್: ಪೋರ್ಟ್ ಐಡಿ (0 ರಿಂದ) ಬಿಡುಗಡೆ ಮಾಡಲು.
};

FPGA_FME_PORT_ASSIGN—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:

struct fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 ಧ್ವಜಗಳು; // in: 0 ಆಗಿರಬೇಕು
__u32 ಪೋರ್ಟ್_ಐಡಿ; // ರಲ್ಲಿ: ಪೋರ್ಟ್ ಐಡಿ (0 ರಿಂದ) ನಿಯೋಜಿಸಲು. (ಇದ್ದಿರಬೇಕು
ಹಿಂದೆ FPGA_FME_PORT_RELEASE ಮೂಲಕ ಬಿಡುಗಡೆ ಮಾಡಲಾಗಿದೆ)
};

FPGA_FME_PORT_PR—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:

ರಚನೆ fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
__u32 ಧ್ವಜಗಳು; // in: 0 ಆಗಿರಬೇಕು
__u32 ಪೋರ್ಟ್_ಐಡಿ; // ಇನ್: ಪೋರ್ಟ್ ಐಡಿ (0 ರಿಂದ)
__u32 ಬಫರ್_ಗಾತ್ರ; // in: ಬೈಟ್‌ಗಳಲ್ಲಿ ಬಿಟ್‌ಸ್ಟ್ರೀಮ್ ಬಫರ್‌ನ ಗಾತ್ರ. 4-ಬೈಟ್ ಆಗಿರಬೇಕು
ಜೋಡಿಸಲಾಗಿದೆ.
__u64 ಬಫರ್_ವಿಳಾಸ; // in: ಬಿಟ್‌ಸ್ಟ್ರೀಮ್ ಬಫರ್‌ನ ಪ್ರಕ್ರಿಯೆ ವಿಳಾಸ
__u64 ಸ್ಥಿತಿ; // ಔಟ್: ದೋಷ ಸ್ಥಿತಿ (ಬಿಟ್‌ಮಾಸ್ಕ್)
};

ಪೋರ್ಟ್ IOCTL ಗಳು
IOCTL ಗಳು ತೆರೆದ ಮೇಲೆ ಕರೆಯಲ್ಪಡುತ್ತವೆ file /dev/intel-fpga-port.k FPGA_GET_API_VERSION ಗಾಗಿ ಡಿಸ್ಕ್ರಿಪ್ಟರ್-ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯನ್ನು ಪೂರ್ಣಾಂಕವಾಗಿ ಹಿಂತಿರುಗಿಸಿ, 0 ರಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. FPGA_CHECK_EXTENSION-ಪ್ರಸ್ತುತ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ.

FPGA_PORT_GET_INFO—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:

ರಚನೆ fpga_port_info {
__u32 argsz; // in: sizeof(struct fpga_port_info)
__u32 ಧ್ವಜಗಳು; // ಔಟ್: 0 ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ
__u32 ಸಂಖ್ಯೆ_ಪ್ರದೇಶಗಳು; // ಔಟ್: MMIO ಪ್ರದೇಶಗಳ ಸಂಖ್ಯೆ, 2 (AFU ಗೆ 1 ಮತ್ತು 1 ಗೆ
STP)
__u32 num_umsgs; // ಔಟ್: ಹಾರ್ಡ್‌ವೇರ್‌ನಿಂದ ಬೆಂಬಲಿತವಾದ UMsg ಗಳ ಸಂಖ್ಯೆ
};

FPGA_PORT_GET_REGION_INFO—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:

ರಚನೆ 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 ಪ್ಯಾಡಿಂಗ್; // in: 0 ಆಗಿರಬೇಕು
__u64 ಗಾತ್ರ; // ಔಟ್: ಬೈಟ್‌ಗಳಲ್ಲಿ MMIO ಪ್ರದೇಶದ ಗಾತ್ರ
__u64 ಆಫ್ಸೆಟ್; // ಔಟ್: ಸಾಧನ fd ಪ್ರಾರಂಭದಿಂದ MMIO ಪ್ರದೇಶದ ಆಫ್‌ಸೆಟ್
};

FPGA_PORT_DMA_MAP—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:
ರಚನೆ fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32 ಧ್ವಜಗಳು; // in: 0 __u64 user_addr ಆಗಿರಬೇಕು; // ಇನ್: ವರ್ಚುವಲ್ ಪ್ರಕ್ರಿಯೆ
ವಿಳಾಸ. ಪುಟವನ್ನು ಜೋಡಿಸಬೇಕು.
__u64 ಉದ್ದ; // in: ಬೈಟ್‌ಗಳಲ್ಲಿ ಮ್ಯಾಪಿಂಗ್‌ನ ಉದ್ದ. ಪುಟದ ಬಹುಸಂಖ್ಯೆಯಾಗಿರಬೇಕು
ಗಾತ್ರ.
__u64 ಅಯೋವಾ; // ಔಟ್: IO ವರ್ಚುವಲ್ ವಿಳಾಸ };

FPGA_PORT_DMA_UNMAP—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:
ರಚನೆ fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32 ಧ್ವಜಗಳು; // in: 0 ಆಗಿರಬೇಕು
__u64 ಅಯೋವಾ; // in: IO ವರ್ಚುವಲ್ ವಿಳಾಸವನ್ನು ಹಿಂದಿನಿಂದ ಹಿಂತಿರುಗಿಸಲಾಗಿದೆ
FPGA_PORT_DMA_MAP };

  • FPGA_PORT_RESET—arg NULL ಆಗಿರಬೇಕು.
  • FPGA_PORT_UMSG_ENABLE—arg NULL ಆಗಿರಬೇಕು.
  • FPGA_PORT_UMSG_DISABLE-ಆರ್ಗ್‌ಗಳು ಶೂನ್ಯವಾಗಿರಬೇಕು.

FPGA_PORT_UMSG_SET_MODE—arg ಒಂದು ಪಾಯಿಂಟರ್ ಆಗಿದೆ:

ರಚನೆ fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
__u32 ಧ್ವಜಗಳು; // in: 0 ಆಗಿರಬೇಕು
__u32 ಸುಳಿವು_ಬಿಟ್‌ಮ್ಯಾಪ್; // in: UMsg ಸುಳಿವು ಮೋಡ್ ಬಿಟ್‌ಮ್ಯಾಪ್. ಯಾವ UMsg ಗಳು ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ
ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.
};

FPGA_PORT_UMSG_SET_BASE_ADDR—

  • ಈ ioctl ಅನ್ನು ನೀಡುವ ಮೊದಲು UMsg ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕು.
  • ಎಲ್ಲಾ UMsg ಗಳಿಗೆ (num_umsgs * PAGE_SIZE) ಸಾಕಷ್ಟು ದೊಡ್ಡದಾದ ಬಫರ್‌ಗಾಗಿ iova ಕ್ಷೇತ್ರವು ಇರಬೇಕು.
    • ಚಾಲಕನ ಬಫರ್ ನಿರ್ವಹಣೆಯಿಂದ ಬಫರ್ ಅನ್ನು "ಬಳಕೆಯಲ್ಲಿದೆ" ಎಂದು ಗುರುತಿಸಲಾಗಿದೆ.
    • iova NULL ಆಗಿದ್ದರೆ, ಯಾವುದೇ ಹಿಂದಿನ ಪ್ರದೇಶವನ್ನು "ಬಳಕೆಯಲ್ಲಿದೆ" ಎಂದು ಗುರುತಿಸಲಾಗುವುದಿಲ್ಲ.
  • arg ಒಂದು ಸೂಚಕವಾಗಿದೆ:
    ರಚನೆ fpga_port_umsg_base_addr {
    • u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
    • u32 ಧ್ವಜಗಳು; // in: 0 ಆಗಿರಬೇಕು
    • u64 ಅಯೋವಾ; // in: FPGA_PORT_DMA_MAP ನಿಂದ IO ವರ್ಚುವಲ್ ವಿಳಾಸ. };

ಗಮನಿಸಿ:

  • ಪೋರ್ಟ್ ದೋಷಗಳನ್ನು ತೆರವುಗೊಳಿಸಲು, ನೀವು ಪ್ರಸ್ತುತ ದೋಷಗಳ ನಿಖರವಾದ ಬಿಟ್‌ಮಾಸ್ಕ್ ಅನ್ನು ಬರೆಯಬೇಕು, ಉದಾಹರಣೆಗೆample, ಬೆಕ್ಕು ದೋಷಗಳು> ಸ್ಪಷ್ಟ
  • ಇಂಟಿಗ್ರೇಟೆಡ್ ಎಫ್‌ಪಿಜಿಎ ಜೊತೆಗೆ ಇಂಟೆಲ್ ಕ್ಸಿಯಾನ್ ಪ್ರೊಸೆಸರ್‌ಗಾಗಿ ಆಕ್ಸಿಲರೇಶನ್ ಸ್ಟಾಕ್ ಮೂಲಕ ಮಾತ್ರ UMsg ಬೆಂಬಲಿತವಾಗಿದೆ.

ಸಿಐಎಸ್ಎಫ್ಎಸ್ Files

FME ಹೆಡರ್ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಬಂದರುಗಳು_ಸಂಖ್ಯೆ fme_header.capability.num_ports ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಕ್ಯಾಶ್_ಸೈಜ್ fme_header.capability.cache_size ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಆವೃತ್ತಿ fme_header.capability.fabric_verid ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಸಾಕೆಟ್_ಐಡಿ fme_header.capability.socket_id ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಬಿಟ್ಸ್ಟ್ರೀಮ್_ಐಡಿ fme_header.bitstream_id ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಬಿಟ್‌ಸ್ಟ್ರೀಮ್_ಮೆಟಾಡೇಟಾ fme_header.bitstream_md ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ

FME ಥರ್ಮಲ್ ಮ್ಯಾನೇಜ್ಮೆಂಟ್ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಮಿತಿ1 thermal.threshold.tmp_thshold1 ದಶಮಾಂಶ ಇಂಟ್ ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
ಮಿತಿ2 thermal.threshold.tmp_thshold2 ದಶಮಾಂಶ ಇಂಟ್ ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
ಥ್ರೆಶೋಲ್ಡ್_ಟ್ರಿಪ್ thermal.threshold.therm_trip_thshold ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಮಿತಿ1_ತಲುಪಿದೆ thermal.threshold.thshold1_status ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಮಿತಿ2_ತಲುಪಿದೆ thermal.threshold.thshold2_status ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಮಿತಿ1_ನೀತಿ ಉಷ್ಣ. threshold.thshold_policy ದಶಮಾಂಶ ಇಂಟ್ ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
ತಾಪಮಾನ thermal.rdsensor_fm1.fpga_temp ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ

FME ಪವರ್ ಮ್ಯಾನೇಜ್ಮೆಂಟ್ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಸೇವಿಸಿದ power.status.pwr_consumed ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಮಿತಿ1 ಶಕ್ತಿ.ಮಿತಿ.ಮಿತಿ1 ಹೆಕ್ಸ್ uint64_t ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
ಮಿತಿ2 ಶಕ್ತಿ.ಮಿತಿ.ಮಿತಿ2 ಹೆಕ್ಸ್ uint64_t ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
ಮಿತಿ1_ಸ್ಥಿತಿ power.threshold.threshold1_status ದಶಮಾಂಶ ಸಹಿ ಮಾಡಿಲ್ಲ ಓದಲು-ಮಾತ್ರ
ಮಿತಿ2_ಸ್ಥಿತಿ power.threshold.threshold2_status ದಶಮಾಂಶ ಸಹಿ ಮಾಡಿಲ್ಲ ಓದಲು-ಮಾತ್ರ
ಆರ್ಟಿಎಲ್ power.status.fpga_latency_report ದಶಮಾಂಶ ಸಹಿ ಮಾಡಿಲ್ಲ ಓದಲು-ಮಾತ್ರ

FME ಜಾಗತಿಕ ದೋಷ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
pcie0_ದೋಷಗಳು gerror.pcie0_err ಹೆಕ್ಸ್ uint64_t ಓದು ಬರೆ
pcie1_ದೋಷಗಳು gerror.pcie1_err ಹೆಕ್ಸ್ uint64_t ಓದು ಬರೆ
ಇಂಜೆಕ್ಟ್_ದೋಷ gerror.ras_error_inj ಹೆಕ್ಸ್ uint64_t ಓದು ಬರೆ

intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ದೋಷಗಳು gerror.fme_err ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಮೊದಲ_ದೋಷ gerror.fme_first_err.err_reg_status ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಮುಂದಿನ_ದೋಷ gerror.fme_next_err.err_reg_status ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಸ್ಪಷ್ಟ ದೋಷಗಳನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ, ಮೊದಲ_ದೋಷ, ಮುಂದಿನ_ದೋಷ ವಿವಿಧ uint64_t ಬರೆಯಲು-ಮಾತ್ರ

ಗಮನಿಸಿ:
FME ದೋಷಗಳನ್ನು ತೆರವುಗೊಳಿಸಲು, ನೀವು ಪ್ರಸ್ತುತ ದೋಷಗಳ ನಿಖರವಾದ ಬಿಟ್ಮಾಸ್ಕ್ ಅನ್ನು ಬರೆಯಬೇಕು, ಉದಾಹರಣೆಗೆample ಬೆಕ್ಕು ದೋಷಗಳು> ಸ್ಪಷ್ಟ.

FME ಭಾಗಶಃ ಪುನರ್ರಚನೆ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ 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

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಗಡಿಯಾರ gperf.clk.afu_interf_clock ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ

intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (FPGAಗಳೊಂದಿಗೆ Intel Xeon CPU ಗಾಗಿ ವೇಗವರ್ಧಕ ಸ್ಟಾಕ್‌ಗೆ ಮಾನ್ಯವಾಗಿಲ್ಲ)

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಫ್ರೀಜ್ gperf.ch_ctl.freeze ದಶಮಾಂಶ ಇಂಟ್ ಓದು ಬರೆ
ಓದಿ_ಹಿಟ್ gperf.CACHE_RD_HIT ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಓದಿ_ತಪ್ಪಿ gperf.CACHE_RD_MISS ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಬರೆಯಿರಿ_ಹಿಟ್ gperf.CACHE_WR_HIT ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಬರೆಯಲು_ತಪ್ಪಿ gperf.CACHE_WR_MISS ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಹಿಡಿದುಕೊಳ್ಳಿ_ವಿನಂತಿ gperf.CACHE_HOLD_REQ ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
tx_req_stall gperf.CACHE_TX_REQ_STALL ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
rx_req_stall gperf.CACHE_RX_REQ_STALL ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಡೇಟಾ_ರೈಟ್_ಪೋರ್ಟ್_ವಿವಾದ gperf.CACHE_DATA_WR_PORT_CONTEN ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
tag_ಬರೆಯಿರಿ_ಪೋರ್ಟ್_ವಿವಾದ gperf.CACHE_TAG_WR_PORT_CONTEN ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (FPGAಗಳೊಂದಿಗೆ Intel Xeon CPU ಗಾಗಿ ವೇಗವರ್ಧಕ ಸ್ಟಾಕ್‌ಗೆ ಮಾನ್ಯವಾಗಿಲ್ಲ)

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಫ್ರೀಜ್ gperf.vtd_ctl.freeze ದಶಮಾಂಶ ಇಂಟ್ ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAಗಳೊಂದಿಗೆ Intel Xeon CPU ಗಾಗಿ ವೇಗವರ್ಧಕ ಸ್ಟಾಕ್‌ಗೆ ಮಾನ್ಯವಾಗಿಲ್ಲ)

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಓದು_ವಹಿವಾಟು gperf.VTD_AFU0_MEM_RD_TRANS ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಬರೆಯುವ_ವ್ಯವಹಾರ gperf.VTD_AFU0_MEM_WR_TRANS ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
tlb_ರೀಡ್_ಹಿಟ್ gperf.VTD_AFU0_TLB_RD_HIT ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
tlb_write_hit gperf.VTD_AFU0_TLB_WR_HIT ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ

intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ಸಕ್ರಿಯಗೊಳಿಸಿ gperf.fab_ctl.(ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ) ದಶಮಾಂಶ ಇಂಟ್ ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
ಫ್ರೀಜ್ gperf.fab_ctl.freeze ದಶಮಾಂಶ ಇಂಟ್ ಬಳಕೆದಾರ: ಓದಲು-ಮಾತ್ರ ರೂಟ್: ಓದಲು-ಬರೆಯಿರಿ
pcie0_ಓದಿ gperf.FAB_PCIE0_RD ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
pcie0_write gperf.FAB_PCIE0_WR ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
pcie1_ಓದಿ gperf.FAB_PCIE1_RD ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
pcie1_write gperf.FAB_PCIE1_WR ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
upi_ರೀಡ್ gperf.FAB_UPI_RD ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
upi_write gperf.FAB_UPI_WR ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ

intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
pcie0_ಓದಿ gperf.FAB_PCIE0_RD ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
pcie0_write gperf.FAB_PCIE0_WR ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
pcie1_ಓದಿ gperf.FAB_PCIE1_RD ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
pcie1_write gperf.FAB_PCIE1_WR ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
upi_ರೀಡ್ gperf.FAB_UPI_RD ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
upi_write gperf.FAB_UPI_WR ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ

ಪೋರ್ಟ್ ಹೆಡರ್ sysfs files
intel-fpga-dev.i/intel-fpga-port.k/

ಸಿಐಎಸ್ಎಫ್ಎಸ್ file mmio ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
id port_header.capability.port_number ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ
ಎಲ್ಟಿಆರ್ port_header.control.latency_tolerance ದಶಮಾಂಶ ಇಂಟ್ ಓದಲು-ಮಾತ್ರ

ಪೋರ್ಟ್ 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 ಕ್ಷೇತ್ರ ರೀತಿಯ ಪ್ರವೇಶ
ದೋಷಗಳು perror.port_error ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಮೊದಲ_ದೋಷ perror.port_first_error ಹೆಕ್ಸ್ uint64_t ಓದಲು-ಮಾತ್ರ
ಮೊದಲ_ಮಾಲ್ಫಾರ್ಮ್ಡ್_ರೀಕ್ ಅಪರಾಧ.ಮಲ್ರೆಕ್ ಹೆಕ್ಸ್ 16-ಬೈಟ್ ಓದಲು-ಮಾತ್ರ
ಸ್ಪಷ್ಟ ದೋಷ.(ಎಲ್ಲಾ ದೋಷಗಳು) ವಿವಿಧ uint64_t ಬರೆಯಲು-ಮಾತ್ರ

ಗಮನಿಸಿ:
ಪೋರ್ಟ್ ದೋಷಗಳನ್ನು ತೆರವುಗೊಳಿಸಲು, ಪ್ರಸ್ತುತ ದೋಷಗಳ ನಿಖರವಾದ ಬಿಟ್‌ಮಾಸ್ಕ್ ಅನ್ನು ನೀವು ಬರೆಯಬೇಕು, ಉದಾಹರಣೆಗೆample ಬೆಕ್ಕು ದೋಷಗಳು> ಸ್ಪಷ್ಟ.

ಪರಿಷ್ಕರಣೆ ಇತಿಹಾಸ

ಡಾಕ್ಯುಮೆಂಟ್ ಆವೃತ್ತಿ ಬದಲಾವಣೆಗಳು
2017.10.02 ಆರಂಭಿಕ ಬಿಡುಗಡೆ.

OPAE ಇಂಟೆಲ್ FPGA ಲಿನಕ್ಸ್ ಡಿವೈಸ್ ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಗೈಡ್

ದಾಖಲೆಗಳು / ಸಂಪನ್ಮೂಲಗಳು

intel OPAE FPGA ಲಿನಕ್ಸ್ ಡಿವೈಸ್ ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್ [ಪಿಡಿಎಫ್] ಬಳಕೆದಾರ ಮಾರ್ಗದರ್ಶಿ
OPAE FPGA ಲಿನಕ್ಸ್ ಡಿವೈಸ್ ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್, OPAE FPGA, ಲಿನಕ್ಸ್ ಡಿವೈಸ್ ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್, ಡ್ರೈವರ್ ಆರ್ಕಿಟೆಕ್ಚರ್, ಆರ್ಕಿಟೆಕ್ಚರ್

ಉಲ್ಲೇಖಗಳು

ಕಾಮೆಂಟ್ ಬಿಡಿ

ನಿಮ್ಮ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಪ್ರಕಟಿಸಲಾಗುವುದಿಲ್ಲ. ಅಗತ್ಯವಿರುವ ಕ್ಷೇತ್ರಗಳನ್ನು ಗುರುತಿಸಲಾಗಿದೆ *