Tag Archives: napi

Linux kernel 2.6.24 Porting 雜記.

最近將某個 Device Porting 從 2.6.16 Porting 上 2.6.24, 記錄一下碰到的問題.

1. Network Driver

當有這樣的訊息時
# ifconfig eth0 up
SIOCSIFFLAGS : invalid agument

我碰到的狀況是, MAC Address 必需要在 probe 時先行 initial 完成.
若是沒有完成, ifconfig 就會出現這樣的錯誤訊息, 原因仍然不明.
我的做法就是加一行
memcpy(dev->dev_addr , addr, 6); 這樣就可以了.

2.6.24 的 NAPI Interface 改過了, 上比對一下 2.6.23 和 2.6.24 的 Code 就可以知道改了什麼地方.
netif_poll_* 的 interface 改名了以外, NAPI hook 的 _poll function 在傳入參數和結構上有小小的修正

2.6.24 修改了 NAPI 的呼叫法, 對我這邊比較複雜的 Switch Driver 也應該修正一下.

2. PCI
pci_find_device 要改用 pci_get_device. 這個 function 還很早就改名了,
只是在 porting 這一版的時候, 多了一個選項
[ ] Enable deprecated pci_find_* API.
如果不想開就不用改了.

3. CPU
2.6.24 CPU proc.info 結構和2.6.16 有一點點不一樣, 如果直接放上 2.6.24 則 CPU Info 會錯誤,
這時要修改 mm/CPU-proc.S , 附上部份的 patch, 增加一個 word 大小, 這樣就可以顯示正常了.

PMD_BIT4 | \
PMD_SECT_AP_WRITE | \
PMD_SECT_AP_READ
+ .long PMD_TYPE_SECT | \
+ PMD_SECT_AP_WRITE | \
+ PMD_SECT_AP_READ

4. Interrupt.
原來 SA_INTERRUPT/SA_SHIRQ 都改叫 IRQF_SHARED, 事實上, 這一組定義己經完全換掉了
詳情請見 include\linux\Interrupt.h

5. DMA
pci_free_consistent 被 dma_free_coherent 取代
pci_alloc_consistent(..); 被 dma_alloc_coherent(.., GFP_KERNEL); 取代, 後面要多加一個參數.
consistent_sync 被 dma_cache_maint 取代.
算是小改….