Intel 82599 ixgbe & ixgbevf CNA 卡驅動分析03——部分功能程式碼分析
msgbuf[0當PF驅動接收到訊息,就會進行回覆,併發送回MAC地址給VF。 Configuring a MAC Address 訊息ID: IXGBE_VF_SET_MAC_ADDR 當VF驅動想要定義自己的MAC地址時,就會發送該訊息(而不是使用當PF初始化時分配給VF的預設MAC地址)。 例項: 檔案:ixgbex_vf.c 函式:ixgbe_set_rar_vf] = IXGBE_VF_RESET; mbx->ops.write_posted(hw,msgbuf,1,0);
msbuf[0] = IXGBE_VF_SET_MAC_ADDR; memcpy(msg_addr, addr,Setting Multicast Address 訊息ID:IXGBE_VF_SET_MULTICAST 當VF驅動需要設定一個多播地址來過濾達到的包時就會發送該訊息。 例項: 檔案:ixgbe_vf.c 函式:ixgbe_update_mc_addr_list_vf6); ret_val = mbx->ops.write_posted(hw, msbug, 3);
cnt = (mc_addr_count > 30) ? 30 : mc_addr_count; msgbuf[0] = IXGBE_VF_SET_MULTICAST; msgbuf[0] |= cnt << IXGBE_VT_MSGINFO_SHIFT; for( i = 0; i < cnt; i++) { vector = ixgbe_mta_vector(hw, next(hw, &mc_addr_list, &vmdq)); hw_dbg(hw, "Hash value = 0x%03x\n",vector); vector_list[i] = (u16) vector; } mbx->ops.write_posted(hw, msgbuf, IXGBE_VFMAILBOX_SIZE, 0);Setting VLAN Filter 訊息ID:IXGBE_VF_VLAN VF驅動想要設定一個VLAN 標識來過濾到達的包就會發送該訊息 例項: 檔案:ixgbe_vf.c 函式:ixgbe_set_vfta_vf
msgbuf[0] = IXGBE_VF_SET_VLAN; msgbuf[1] = vlan; msgbuf[0] |= vlan_on << IXGBE_VTMSGINFO_SHIFT; mbx-ops.write_posted(hw, msgbuf, 2, 0);PF to VF Mailbox Messages Physical Function Driver 該驅動負責物理資源和針對VF配置的一些處理。 當驅動在探測發現裝置的時候,在驅動初始化執行的眾多工中,有一項就是將自己註冊為一個SR-IOV裝置。 檔案:ixgbe_main.c 函式:__devinit ixgbe_probe_vf err = pci_enable_sriov(adapter->pdev, adapter->num_vfs); 這個函式呼叫將82599註冊為一個SR-IOV裝置,表明支援特定數量的VF。 Default Configuration 在驅動初始化階段進行了很多項預設配置。這些預設配置包括VF的個數,VF流量配置,VFMAC地址分配。 Assignment of Queue's to Pools 82599 PF 驅動 預設支援配置63個VF。每個池內有兩個佇列對與其相關,總共4個佇列 檔案:ixgbe_main.c 函式:ixgbe_up_complete
if ( adapter->flags & IXGBE_FLAG_SRIOV_ENABLED ) { gpie &= ~IXGBE_GPIE_VTMODE_MASK; gpie |= IXGBE_GPIE_VTMODE_64; } IXGBE_WRITE_REG(hw, IXGBE_GPID, gpie);這段程式碼對PCIe 控制寄存(GCR_EXT-0x11050)器進行了配置,預設支援64個VF。 檔案:ixgbe_main.c 函式:ixgbe_up_complete
if ( adapter->flags & IXGBE_FLGA_SRIOV_ENABLED) { gpie &= ~IXGBE_GPIE_VTMODE_MASK; gpie |= IXGBE_GPIE_VTMODE_64; }IXGBE_WRITE_REG(hw, IXGBE_GPIE,gpie); 該程式碼片段配置 VT_Mode (15:14)位元,目的是對中斷暫存器(GPIE-0x00898)進行配置. Enabling VF to VF Bridging VF 到 VF 的橋接在函式ixgbe_configure_rx() 函式中實現,該函式位於ixgbe_main.c 該函式使能了PF DMA 傳輸交換控制暫存器(PFDTXGSWC)的迴環使能位(LBE) 檔案:ixgbe_main.c 函式:ixgbe_configure_rx
#ifdef CONFIG_PCI_IOV if( adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) { IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN); ixgbe_set_vmolr(hw, adapter->num_vfs); } #endif該程式碼片段同時也使能了VF的流量,通過ixgbe_set_vmolr函式的呼叫。 Default Pool 當一些包不會送到某個VF則會送到預設池去處理。這個池資源是為PF準備的。預設池是不分配給VF的池。如果有32個池資源已經進行了配置,第33個池就會配配置為預設池。 檔案:ixgbe_main.c 函式:ixgbe_configure_rx
if(adapter->num_vfs ) { vt_reg_bits &= ~IXGBE_VT_CTL_POOL_MASK; vt_reg_bits |= (adapter->num_vfs << IXGBE_VT_CTL_POOL_SHIFT); } u32 vt_reg; u32 vt_reg_bits; if ( hw->mac.type = ixgbe_mac_82599EB) { vt_reg = IXGBE_VT_CTL; vt_reg_bits = IXGBE_VMD_CTL_VMDQ_EN | IXGBE_VT_CTL_REPLEN if ( adapter->num_vfs ) { vt_reg_bits &= ~IXGBE_VT_CTL_POOL_MASK; vt_reg_bits |= (adapter->num_vfs << IXGBE_VT_CTL_POOL_SHIFT); } } else { vt_reg = IXGBE_VMD_CTL; vt_reg_bits = IXGBE_VMD_CTL_VMDQ_EN; } vmdctl = IXGBE_READ_REG(hw, vt_reg); IXGBE_WRITE_REG(hw, vt_reg, vmdctl | vt_reg_bits);驅動操作PFVTCTL(0x051B0)暫存器來配置預設池。主要操作DEF_PF 位(12:7) Replication Enable Broadcast Accept Mode Accept Packet Matching PFUTA Table 這裡允許VF接收一個域PF 單波表(PFUTA 0x0F400)中某個單波地址入口匹配的包。 檔案:ixgbe_sriov.c 函式:ixgbe_set_vmolr
u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); vmolr |= (IXGBE_VMOLR_AUPE | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_ROPE | IXGBE_VMOLR_BAM); IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);驅動操作PF VM L2 控制暫存器(PFVML2FLT 0x0F000 + 4 *n [n=0..63] )的ROPE域(第26位元)使能作者禁止VF 接收賴在PFUTA表的包。 Accept Packets Matching MTA Table 該功能允許VF接收在多播表陣列(UTA 0xA000)中匹配多播地址入口的包。 預設是接收。 檔案:ixgbe_sriov.c 函式:ixgbe_set_vmolr
u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); vmolr |= (IXGBE_VMOLR_AUPE | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_ROPE | IXGBE_VMOLR_BAM); IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);驅動操作 PF VM L2 控制暫存器(PFVML2FLT 0x0F000 + 4 *n [n = 0..63]的ROMPE域(第25bit)註冊使能或者禁止接收來自MTA 表的包。 Accept Untagged Packets Enable 這種方式允許VF接收一個MAC地址匹配但是VLAN 標識不一定要匹配的包。 預設情況下,未加標識的包的接收功能已經使能。 檔案:ixgbe_sriov.c 函式:ixgbe_set_vmolr
u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); vmolr |= ( IXGBE_VMOLR_AUPE | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_ROPE | IXGBE_VMOLR_BAM); IXGBE_WRTIE_REG(hw, IXGBE_VMOLR(vf),vmolr);驅動操作PF VM L2 控制暫存器(PFVML2FLT 0x0F000 + 4*n [n=0..63])註冊使能或禁止VF接收未加標識的包 Strip VLAN Tag for Incoming Packets 這允許一個VF 剝去一個通過L2 過濾傳過來的包的VLAN 標識 預設情況下,這項功能是開啟的。 檔案:ixgbe_main.c 函式:ixgbe_vlan_rx_register
for( i = 0; i < adpater->num_rx_queues; i++) { j = adpter->rx_ring[i]->reg_idx; ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_RXDCTL(j)); ctrl |= IXGBE_RXDCTL_VME; IXGBE_WRITE_REG(&adapter->hw, IXGBE_RXDCTL(j), ctrl); }驅動操作接收描述符控制暫存器(RXDCTL[n] (0x01208 + 0x40*n, n= 0..63 and 0x0D028 + 0x40*(n-64)), n=64..127; RW)的VLAN 模式使能位(第30bit)註冊使能或禁止剝除到來包的VLAN 標識。 VF MAC 地址賦值 PF 驅動使用random_ether_add()函式(由核心提供【哪個核心,作業系統還是Hypervisor?】)動態的給每一個VF賦予一個MAC地址。下面的程式碼片段是一個展示示例: 檔案:ixgbe_sriov.c 函式:ixgbe_vf_configuration
random_ether_addr(vf_mac_addr); memcpy( adapter->vfinfo[vfn].vf_mac_addresses, vf_mac_addr,6);__devinit ixgbe_probe() 例程為每一個建立的VF呼叫ixgbe_vf_configuration() 一次。VF獲得MAC地址當進行功能級的復位時,VF通過信箱傳送IXGBE_VF_RESET訊息到PF。PF發回VF MAC地址作為回覆。 此外,VF驅動亦可以指定自己的MAC地址使用IXGBE_VF_SET_MAC訊息。
相關推薦
Intel 82599 ixgbe & ixgbevf CNA 卡驅動分析03——部分功能程式碼分析
I/O Operations and Activities 使用SR-IOV 的根本原因就是使得虛擬機器中的一個驅動可以直接訪問PCI進行I/O操作,並能夠在虛擬機器之間共享裝置。Intel VF 驅動了解自己執行在一個虛擬化的環境中擁有優先的PCI資源。 可用的資源包括基本的接收和
Jetson tk1 安裝 Intel 7260ac 無線網絡卡驅動
首先,利用Jetpack將Jetson TK1升級到最新的L4T (version 21.3 +) 如果工作環境能提供有線網路,請將網線插到開發板,在開發板L4T的terminal輸入以下指令來下載並安裝驅動: sudo apt-get install git git clon
ixgbe網絡卡驅動(一)
註冊/登出網絡卡驅動 通過ixgbe_init_module() -> pci_register_driver()註冊ixgbe_driver 通過ixgbe_exit_module() -> pci_unregister_driver()登出i
網卡驅動描述符助手功能淺析
讀取 color script 是把 efi 鏈表 pad 流程 地址 前言網卡驅動裏,CPU和MAC控制器都需要對DMA描述符空間進行讀取或者寫入。DMA描述符空間又會采用到CACHE和零拷貝技術,以往都是驅動自己去申請、關聯內存和刷新(flush和invalidate)
比特幣程式碼分析5 挖礦程式碼分析
本文描述礦工處理執行緒,通過本文學習,可以瞭解礦工挖礦的大致流程。主要包含挖礦費用交易的產生、當前交易池的打包處理,工作量證明等相關內容。流程圖(參考網路)如下所示:。 礦工處理函式1.void ThreadBitcoinMiner(void* parg)2.{ vfThreadRunning[3]
比特幣程式碼分析4 挖礦程式碼分析
本文描述礦工處理執行緒,通過本文學習,可以瞭解礦工挖礦的大致流程。主要包含挖礦費用交易的產生、當前交易池的打包處理,工作量證明等相關內容。流程圖(參考網路)如下所示:。 礦工處理函式1.void ThreadBitcoinMiner(void* parg)2.{ vfThreadRunning[3]
easyrecyclerview 重新整理載入功能程式碼分析(填坑之旅)
想選一個重新整理載入 又可以新增各種header 的列表控制元件,挑來挑去也就easyrecyclerview 最好用了, 可是重新整理載入 卻也有bug 1.重新整理的時候不能載入,載入的時候不能重新整理,解決重新整理的時候不能載入(我的方案
Android Architecture Components 部分原始碼程式碼分析
Android Architecture Components是Google釋出的一套新的架構元件,使App的架構更加健壯 依賴問題 allprojects { repositories { jcenter()
82599網絡卡驅動rx descriptor結構體分析
82599 datasheet: 7.1.6 節 大概位於314頁 對驅動的理解關鍵是對資料結構的理解。 The 82599 posts receive packets into data buffers in system memory. The follo
ubuntu 16.04 中把intel i915顯示卡驅動 更改為開源驅動/開源驅動改回intel驅動
檢視顯示卡驅動及其是否裝好 sudo lshw -c video 檢視顯示卡 lspci | grep VGA 安裝開源驅動 sudo apt-get install xserver-xorg-video-ati 把核心版本從4.4升級到4.5,4.5中似乎修復了
l(轉)Linux DM9000網絡卡驅動程式完全分析
[置頂] Linux DM9000網絡卡驅動程式完全分析 分類: Linux裝置驅動程式第三版學習筆記 2011-02-26 16:11 3513人閱讀 評論(34) 收藏 舉報 說明1:本文分析基於核心原始碼版本為linux-2
網絡卡驅動設計---架構分析加回環網絡卡驅動設計(網絡卡驅動上)
網絡卡驅動架構分析: 1. Linux網路子系統 2. 重要資料結構 總結一下三個重要的資料結構: 2.1. net_device 2.2. net_device_ops 2.3. sk_buff 3. 網絡卡驅動架構分析 CS8900.
網絡卡驅動之02驅動原始碼分析
0 環境 核心:經過xilinx基於zynq平臺定製的4.4.0系核心; 硬體:zynq晶片,其中mac contorller是使用Cadence的IP核,phy晶片使用提marvell的1116R晶
alsa音效卡驅動分析總結 (二)
alsa音效卡驅動分析總結 來自:http://blog.chinaunix.net/uid-20672559-id-3515392.html 現在我們開始分析ASOC: ASoC被分為Machine、Platform和Codec三大部分。其中的Machine驅動負責
linux筆記本安裝雙顯示卡驅動(intel+nvidia)
為了提高linux的顯示卡效能以及降低功耗,特有此文。 本人使用的系統是Fedora 20 Xfce x64,安裝驅動前先確保系統為最新版本。 最好安裝gcc、kernel-devel等軟體包,我不確定後面會不會作為依賴自動安裝。 --- 這個地址就是intel官方提供
ubuntu intel網絡卡驅動安裝(華碩B250F GAMING主機板 )
1 [email protected]:~$ sudo sudo lspci -knn 2 00:00.0 Host bridge [0600]: Intel Corporation Device [8086:591f] (rev 05) 3 Subsystem:
桌上型電腦下GTX 1080 Ti+Intel® Core™ i7-8700K 安裝顯示卡驅動+cuda8.0
按照我的第一篇部落格安裝,到最後安裝完cuda後檢查./deviceQuery 解決辦法這種問題出現在cudn驅動的問題導致的,使得與顯示卡版本不匹配,這時候需要更新顯示卡驅動,重新解決一下。尋找合
【電子產品】ThinkPad S5 Intel(R) Dual Band Wireless-AC 3165 網絡卡驅動莫名其妙掛掉
裝置管理器 檢查網絡卡驅動和網路裝置 裝置管理器 – 網路裝置 Intel(R) Dual Band Wireless-AC 3165 出現黃色感嘆號。 該裝置無法啟動。 (程式碼 10) Intel(R) Dual Band Wireless-AC 3165 屬性
Ubuntu14.04 安裝intel無線網絡卡驅動(含升級核心)
新安裝的14.04 沒有無線網絡卡驅動,我在win10下看到網絡卡型號是 intel的9560, 在intel官網看到9560驅動需要 kernel的 版本 是4.14+ https://www.intel.com/content/www
Linux驅動修煉之道-DM9000A網絡卡驅動框架原始碼分析
網路裝置的初始化: 通過模組的載入函式看出DM9000A的驅動是以平臺驅動的形式註冊進核心的,下邊是模組的載入函式: 1.static int __init 2.dm9000_init(void) 2.{ 3. printk(KERN_INFO "%