PCIe में रिक्त स्थान का पता


19

पीसीआई एक्सप्रेस में चार पता स्थान हैं:

  • मेमोरी मैप की गई
  • मैंने / ओ ने मैप किया
  • कॉन्फ़िगरेशन स्थान
  • संदेश

किसी को भी कृपया प्रत्येक पता स्थान का महत्व समझा सकते हैं, और यह संक्षिप्त में उद्देश्य है?

मेरी समझ के अनुसार, इन सभी स्थानों को रैम (अर्थात प्रोसेसर की मेमोरी) में आवंटित किया गया है। कॉन्फ़िगरेशन स्पेस रजिस्टरों के सामान्य सेट (सभी PCIe उपकरणों में मौजूद) के लिए आवंटित किया गया स्थान है। क्या यह स्थान सभी PCIe उपकरणों के बीच आम है? और यह PCIe कार्यात्मक संचालन के लिए कैसे उपयोगी है?

इस स्थान में BAR (आधार पता रजिस्टर) शामिल है। क्या इस रजिस्टर का उपयोग PCIe समापन बिंदु में उपलब्ध पते को निर्दिष्ट करने के लिए किया जाता है?

मैं PCIe के लिए नया हूं, और इसे सीखने की कोशिश कर रहा हूं। मैं बेस स्पेसिफिकेशन की बात कर रहा हूं, लेकिन मुझे लगता है कि यह पीसीआई और पीसीआई के कुछ पूर्व ज्ञान रखने वाले पाठकों के लिए लिखा गया है।

आधार विनिर्देश की समझ को गति देने के लिए उपयोगी कुछ मुफ्त ऑनलाइन संदर्भ भी देखें। मैं समझता हूं कि जब भी कोई पीसीआई डिवाइस रूट कॉम्प्लेक्स के साथ जुड़ा होगा, तो इसे कुछ मेमोरी क्षेत्र के साथ असाइन किया जाएगा।

जवाबों:


31

यह पूछे जाने के बाद से थोड़ी देर हो गई है, लेकिन मुझे अनाथ सवालों से नफरत है :)

सबसे पहले, चलो एक आधुनिक x86 प्लेटफ़ॉर्म को सरल करते हैं और दिखाते हैं कि इसमें 0x00000000 से 0xFFFFFFFF तक पता स्थान के 32-बिट्स हैं। हम सभी विशेष / आरक्षित क्षेत्रों, TOLUD (निचले प्रयोग करने योग्य DRAM, इंटेल पार्लेंस के ऊपर) आदि को अनदेखा करेंगे, हम इस सिस्टम को मेमोरी मैप कहेंगे ।

दूसरा, पीसीआई एक्सप्रेस पीसीआई का विस्तार करता है । एक सॉफ्टवेयर दृष्टिकोण से, वे बहुत, बहुत समान हैं।

मैं आपके तीसरे स्थान पर जाऊंगा - कॉन्फ़िगरेशन स्पेस - पहले। कॉन्फ़िगरेशन स्थान को इंगित करने वाले किसी भी पते को सिस्टम मेमोरी मैप से आवंटित किया जाता है । एक PCI डिवाइस में 256 बाइट कॉन्फ़िगरेशन स्थान था - यह PCI एक्सप्रेस के लिए 4KB तक विस्तारित है। यह 4KB स्पेस सिस्टम मेमोरी मैप से मेमोरी एड्रेस की खपत करता है , लेकिन वास्तविक मान / बिट्स / कंटेंट को आमतौर पर पेरिफेरल डिवाइस पर रजिस्टरों में लागू किया जाता है। उदाहरण के लिए, जब आप वेंडर आईडी या डिवाइस आईडी पढ़ते हैं, तो लक्ष्य परिधीय उपकरण डेटा को वापस कर देगा भले ही उपयोग किया जा रहा मेमोरी एड्रेस सिस्टम मेमोरी मैप से हो।

आपने कहा कि ये "RAM में आवंटित" हैं - सच नहीं है, वास्तविक बिट्स / स्टेटफुल तत्व परिधीय डिवाइस में हैं। हालाँकि, उन्हें सिस्टम मेमोरी मैप में मैप किया जाता है। इसके बाद, आपने पूछा कि क्या यह सभी PCIe उपकरणों में रजिस्टरों का एक सामान्य सेट था - हाँ और नहीं। जिस तरह से पीसीआई कॉन्फिगरेशन स्पेस काम करता है, प्रत्येक सेक्शन के अंत में एक पॉइंटर होता है जो इंगित करता है कि क्या पढ़ा जाना "अधिक" है। एक नंगे न्यूनतम है जिसे सभी PCIe उपकरणों को लागू करना है, और फिर अधिक उन्नत उपकरण अधिक कार्यान्वित कर सकते हैं। कार्यात्मक संचालन के लिए यह कितना उपयोगी है, ठीक है, यह अनिवार्य और भारी उपयोग है। :)

अब, BARs (आधार पता रजिस्टर) के बारे में आपका प्रश्न मेमोरी स्पेस और I / O स्पेस में सेगमेंट करने के लिए एक अच्छा स्थान है। कुछ हद तक x86 सेंट्रिक होने के नाते, विनिर्देश प्रकार के अलावा, BAR आकार के विनिर्देशन की अनुमति देता है। यह एक डिवाइस को एक नियमित मेमोरी-मैप्ड BAR, या एक IO स्पेस BAR के लिए अनुरोध करने की अनुमति देता है, जो कि I / O स्पेस के 4K में से कुछ खाता है, जो एक x86 मशीन है। आप देखेंगे कि PowerPC मशीनों पर, I / O स्पेस बार बेकार हैं।

एक BAR मूल रूप से होस्ट को यह बताने के लिए डिवाइस का तरीका है कि उसे कितनी मेमोरी की आवश्यकता है, और किस प्रकार (ऊपर चर्चा की गई है)। अगर मैं 1MB मेमोरी-मैप स्पेस के लिए कहूं, तो BIOS मुझे 0x10000000 से 0x10100000 तक का पता दे सकता है। यह भौतिक रैम का उपभोग नहीं कर रहा है , बस पता स्थान (क्या आप अब देखते हैं कि 32-बिट सिस्टम उच्च-अंत GPU के साथ विस्तार कार्ड के साथ मुद्दों में क्यों चलते हैं जिनमें GB की RAM है?)। अब 0x10000004 को लिखने के लिए एक मेमोरी लिखने / पढ़ने के लिए PCI एक्सप्रेस डिवाइस पर भेजा जाएगा, और यह एक बाइट-वाइड रजिस्टर हो सकता है जो एल ई डी से जुड़ता है। इसलिए अगर मैं 0xFF को फिजिकल मेमोरी एड्रेस 0x10000004 पर लिखता हूं, तो यह 8 एलइडी को चालू करेगा। यह मेमोरी-मैप्ड I / O का मूल आधार है ।

I / O स्पेस समान रूप से व्यवहार करता है, सिवाय इसके कि यह एक अलग मेमोरी स्पेस, x86 I / O स्पेस में संचालित होता है। पता 0x3F8 (COM1) I / O स्पेस और मेमोरी स्पेस दोनों में मौजूद है और दो अलग-अलग चीजें हैं।

आपका अंतिम प्रश्न, संदेश एक नए प्रकार के व्यवधान तंत्र को संदर्भित करते हैं, संदेश लघु के लिए संकेतित रुकावट या एमएसआई। लीगेसी PCI डिवाइस में चार इंटरप्ट पिन, INTA, INTB, INTC, INTD थे। इन्हें आम तौर पर स्लॉट्स के बीच में स्वाइप किया जाता था जैसे कि INTA स्लॉट 0 पर INTA गया, फिर स्लॉट 1 पर INTB, फिर स्लॉट 2 पर INTC, स्लॉट 3 पर INTD, और फिर स्लॉट 4 पर INTA में वापस लौटा। इसका कारण यह है कि अधिकांश PCI उपकरणों ने केवल INTA को लागू किया और इसे स्वाइप करके, तीन उपकरणों का कहना है, प्रत्येक अंतरायन नियंत्रक के लिए अपने स्वयं के रुकावट संकेत के साथ समाप्त होगा। MSI पीसीआई एक्सप्रेस प्रोटोकॉल लेयर का उपयोग करते हुए सिग्नल को बाधित करने का एक तरीका है, और PCIe रूट कॉम्प्लेक्स (होस्ट) सीपीयू को बाधित करने का ध्यान रखता है।

यह उत्तर आपको मदद करने में बहुत देर कर सकता है, लेकिन शायद यह भविष्य के कुछ Googler / Binger की मदद करेगा।

अंत में, मैं आपको किसी भी आगे जाने से पहले PCI से एक अच्छा, विस्तृत परिचय प्राप्त करने के लिए Intel से इस पुस्तक को पढ़ने की सलाह देता हूं । एक अन्य संदर्भ लिनक्स डिवाइस ड्राइवर्स, LWN से एक ऑनलाइन ebook होगा


पोस्ट काफी मददगार थी। मैं PCIe के लिए बहुत नया हूँ, एन्यूमरेशन प्रक्रिया होने के लिए (COnfiguration स्पेस एलोकेशन और मैपिंग) क्या हमें ड्राइवर के समर्थन की आवश्यकता है, या इसे Os द्वारा शुरू किया जा सकता है।
कमलेन्द्र

धन्यवाद, खुशी है कि यह मददगार था! आम तौर पर, x86 प्लेटफॉर्म पर, BIOS सॉफ़्टवेयर कॉन्फ़िगरेशन स्थान की जानकारी के आधार पर कुछ मेमोरी मेमोरी आवंटन करता है जो पीसीआई उपकरणों से पार्स करता है। आधुनिक ओएस आमतौर पर इस मेमोरी मैप को स्वीकार करते हैं, जैसे कि, AFAIK, हालांकि वे भी उचित ड्राइवरों को लोड करने के लिए उपकरणों के माध्यम से गुजरेंगे। मुझे याद है कि लिनक्स में कुछ कम निम्न स्तर के सामान को देखकर जो आपको संभावित रूप से बदल सकते हैं जो BIOS ने सौंपा था।
क्रुणाल देसाई

ध्यान दें कि केवल प्री-फैमिली के रूप में चिह्नित की गई मेमोरी प्रति ट्रांजैक्शन में एक DWORD से अधिक ट्रांसफर कर सकती है; अन्य सभी रिक्त स्थान प्रति लेनदेन केवल एक DWORD स्थानांतरित कर सकते हैं । एक फट का आकार अधिकतम MAX_PAYLOAD_SIZE (गणना के दौरान खोजा गया) तक सीमित है।
पीटर स्मिथ

नमस्कार। मैं PCI के लिए नया हूं और आपके उत्तर पर थोड़ा स्पष्टीकरण चाहूंगा। आपने कहा था कि कॉन्फ़िगरेशन स्थान के 256b / 4k बाइट्स को सिस्टम मेमोरी में मैप किया जाता है। अपने स्वयं के ट्यूशन से, मुझे लगा कि कॉन्फ़िगरेशन स्थान तक पहुंच एक पीसीआई नियंत्रक के माध्यम से नियंत्रित की जाती है जो कि सिस्टम मेमोरी में सांख्यिकीय रूप से मैप की जाती है। यह नियंत्रक कुछ रजिस्टरों (उपकरण / फ़ंक्शन पहचान के लिए, पता स्थान में ऑफसेट, परिणाम पता) प्रदान करता है जो कॉन्फ़िगरेशन स्थान में एक छोटे इंटरफ़ेस के रूप में कार्य करता है। इसलिए, प्रभाव में, केवल 5 - 10 बाइट्स सांख्यिकीय रूप से पीसीआई नियंत्रक के लिए आरक्षित हैं। क्या यह सही है ???
सेरिज़ो

इसलिए, जब होस्ट (सीपीयू) 0x10000004 मान 0xFF पर एक रजिस्टर पर लिखता है, तो PCI रूट कॉम्प्लेक्स इस डेटा को प्राप्त करेगा (शायद यह हमेशा 0x10000000 से 0x10100000 तक के किसी भी पते पर डेटा के लिए मतदान कर रहा था और इसे पते पर लिखेगा समापन बिंदु (PCIe डिवाइस) पर 0x04? क्या यह समझ सही है?
अल्फा गोकू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.