]> git.pld-linux.org Git - packages/kernel.git/blame - linux-2.4.13-acenic-rollback.patch
- fixed name
[packages/kernel.git] / linux-2.4.13-acenic-rollback.patch
CommitLineData
a86a76f0
JR
1diff -u --recursive --new-file v2.4.12/linux/drivers/net/acenic.c linux/drivers/net/acenic.c
2--- v2.4.12/linux/drivers/net/acenic.c Thu Oct 11 08:02:26 2001
3+++ linux/drivers/net/acenic.c Fri Oct 12 15:35:53 2001
4@@ -165,10 +165,6 @@
5 #define SMP_CACHE_BYTES L1_CACHE_BYTES
6 #endif
7
8-#if (BITS_PER_LONG == 64) || defined(CONFIG_HIGHMEM)
9-#define ACE_64BIT_PTR 1
10-#endif
11-
12 #ifndef SET_MODULE_OWNER
13 #define SET_MODULE_OWNER(dev) {do{} while(0);}
14 #define ACE_MOD_INC_USE_COUNT MOD_INC_USE_COUNT
15@@ -203,9 +199,15 @@
16 *dma_handle = virt_to_bus(virt_ptr);
17 return virt_ptr;
18 }
19+
20 #define pci_free_consistent(cookie, size, ptr, dma_ptr) kfree(ptr)
21-#define pci_map_single(cookie, address, size, dir) virt_to_bus(address)
22-#define pci_unmap_single(cookie, address, size, dir)
23+#define pci_map_page(cookie, page, off, size, dir) \
24+ virt_to_bus(page_address(page)+(off))
25+#define pci_unmap_page(cookie, address, size, dir)
26+#define pci_set_dma_mask(dev, mask) \
27+ (((u64)(mask) & 0xffffffff00000000) == 0 ? 0 : -EIO)
28+#define pci_dma_supported(dev, mask) \
29+ (((u64)(mask) & 0xffffffff00000000) == 0 ? 1 : 0)
30 #endif
31
32 #if (LINUX_VERSION_CODE < 0x02032b)
33@@ -263,10 +265,6 @@
34 #define ace_if_down(dev) {do{} while(0);}
35 #endif
36
37-#ifndef pci_set_dma_mask
38-#define pci_set_dma_mask(dev, mask) dev->dma_mask = mask;
39-#endif
40-
41 #if (LINUX_VERSION_CODE >= 0x02031b)
42 #define NEW_NETINIT
43 #define ACE_PROBE_ARG void
44@@ -598,7 +596,7 @@
45 dev->irq = pdev->irq;
46 dev->open = &ace_open;
47 dev->hard_start_xmit = &ace_start_xmit;
48- dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_HIGHDMA;
49+ dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
50 if (1) {
51 static void ace_watchdog(struct net_device *dev);
52 dev->tx_timeout = &ace_watchdog;
53@@ -740,6 +738,8 @@
54 kfree(dev);
55 continue;
56 }
57+ if (ap->pci_using_dac)
58+ dev->features |= NETIF_F_HIGHDMA;
59
60 boards_found++;
61 }
62@@ -816,9 +816,9 @@
63 dma_addr_t mapping;
64
65 mapping = ap->skb->rx_std_skbuff[i].mapping;
66- pci_unmap_single(ap->pdev, mapping,
67- ACE_STD_BUFSIZE - (2 + 16),
68- PCI_DMA_FROMDEVICE);
69+ pci_unmap_page(ap->pdev, mapping,
70+ ACE_STD_BUFSIZE - (2 + 16),
71+ PCI_DMA_FROMDEVICE);
72
73 ap->rx_std_ring[i].size = 0;
74 ap->skb->rx_std_skbuff[i].skb = NULL;
75@@ -833,9 +833,9 @@
76 dma_addr_t mapping;
77
78 mapping = ap->skb->rx_mini_skbuff[i].mapping;
79- pci_unmap_single(ap->pdev, mapping,
80- ACE_MINI_BUFSIZE - (2 + 16),
81- PCI_DMA_FROMDEVICE);
82+ pci_unmap_page(ap->pdev, mapping,
83+ ACE_MINI_BUFSIZE - (2 + 16),
84+ PCI_DMA_FROMDEVICE);
85
86 ap->rx_mini_ring[i].size = 0;
87 ap->skb->rx_mini_skbuff[i].skb = NULL;
88@@ -849,9 +849,9 @@
89 dma_addr_t mapping;
90
91 mapping = ap->skb->rx_jumbo_skbuff[i].mapping;
92- pci_unmap_single(ap->pdev, mapping,
93- ACE_JUMBO_BUFSIZE - (2 + 16),
94- PCI_DMA_FROMDEVICE);
95+ pci_unmap_page(ap->pdev, mapping,
96+ ACE_JUMBO_BUFSIZE - (2 + 16),
97+ PCI_DMA_FROMDEVICE);
98
99 ap->rx_jumbo_ring[i].size = 0;
100 ap->skb->rx_jumbo_skbuff[i].skb = NULL;
101@@ -1210,12 +1210,6 @@
102 ap->pci_latency);
103
104 /*
105- * Make sure to enable the 64 bit DMA mask if we're in a 64bit slot
106- */
107- if (!(pci_state & PCI_32BIT))
108- pci_set_dma_mask(ap->pdev, (dma_addr_t)~0ULL);
109-
110- /*
111 * Set the max DMA transfer size. Seems that for most systems
112 * the performance is better when no MAX parameter is
113 * set. However for systems enabling PCI write and invalidate,
114@@ -1309,12 +1303,24 @@
115 #endif
116
117 /*
118+ * Configure DMA attributes.
119+ */
120+ if (!pci_set_dma_mask(ap->pdev, (u64) 0xffffffffffffffff)) {
121+ ap->pci_using_dac = 1;
122+ } else if (!pci_set_dma_mask(ap->pdev, (u64) 0xffffffff)) {
123+ ap->pci_using_dac = 0;
124+ } else {
125+ ecode = -ENODEV;
126+ goto init_error;
127+ }
128+
129+ /*
130 * Initialize the generic info block and the command+event rings
131 * and the control blocks for the transmit and receive rings
132 * as they need to be setup once and for all.
133 */
134 if (!(info = pci_alloc_consistent(ap->pdev, sizeof(struct ace_info),
135- &ap->info_dma))) {
136+ &ap->info_dma))) {
137 ecode = -EAGAIN;
138 goto init_error;
139 }
140@@ -1355,12 +1361,8 @@
141 ace_load_firmware(dev);
142 ap->fw_running = 0;
143
144- tmp_ptr = (unsigned long) ap->info_dma;
145-#ifdef ACE_64BIT_PTR
146+ tmp_ptr = (u64) ap->info_dma;
147 writel(tmp_ptr >> 32, &regs->InfoPtrHi);
148-#else
149- writel(0, &regs->InfoPtrHi);
150-#endif
151 writel(tmp_ptr & 0xffffffff, &regs->InfoPtrLo);
152
153 memset(ap->evt_ring, 0, EVT_RING_ENTRIES * sizeof(struct event));
154@@ -1796,9 +1798,12 @@
155 * Make sure IP header starts on a fresh cache line.
156 */
157 skb_reserve(skb, 2 + 16);
158- mapping = pci_map_single(ap->pdev, skb->data,
159- ACE_STD_BUFSIZE - (2 + 16),
160- PCI_DMA_FROMDEVICE);
161+ mapping = pci_map_page(ap->pdev,
162+ virt_to_page(skb->data),
163+ ((unsigned long) skb->data &
164+ ~PAGE_MASK),
165+ ACE_STD_BUFSIZE - (2 + 16),
166+ PCI_DMA_FROMDEVICE);
167 ap->skb->rx_std_skbuff[idx].skb = skb;
168 ap->skb->rx_std_skbuff[idx].mapping = mapping;
169
170@@ -1860,9 +1865,12 @@
171 * Make sure the IP header ends up on a fresh cache line
172 */
173 skb_reserve(skb, 2 + 16);
174- mapping = pci_map_single(ap->pdev, skb->data,
175- ACE_MINI_BUFSIZE - (2 + 16),
176- PCI_DMA_FROMDEVICE);
177+ mapping = pci_map_page(ap->pdev,
178+ virt_to_page(skb->data),
179+ ((unsigned long) skb->data &
180+ ~PAGE_MASK),
181+ ACE_MINI_BUFSIZE - (2 + 16),
182+ PCI_DMA_FROMDEVICE);
183 ap->skb->rx_mini_skbuff[idx].skb = skb;
184 ap->skb->rx_mini_skbuff[idx].mapping = mapping;
185
186@@ -1919,9 +1927,12 @@
187 * Make sure the IP header ends up on a fresh cache line
188 */
189 skb_reserve(skb, 2 + 16);
190- mapping = pci_map_single(ap->pdev, skb->data,
191- ACE_JUMBO_BUFSIZE - (2 + 16),
192- PCI_DMA_FROMDEVICE);
193+ mapping = pci_map_page(ap->pdev,
194+ virt_to_page(skb->data),
195+ ((unsigned long) skb->data &
196+ ~PAGE_MASK),
197+ ACE_JUMBO_BUFSIZE - (2 + 16),
198+ PCI_DMA_FROMDEVICE);
199 ap->skb->rx_jumbo_skbuff[idx].skb = skb;
200 ap->skb->rx_jumbo_skbuff[idx].mapping = mapping;
201
202@@ -2129,8 +2140,8 @@
203
204 skb = rip->skb;
205 rip->skb = NULL;
206- pci_unmap_single(ap->pdev, rip->mapping, mapsize,
207- PCI_DMA_FROMDEVICE);
208+ pci_unmap_page(ap->pdev, rip->mapping, mapsize,
209+ PCI_DMA_FROMDEVICE);
210 skb_put(skb, retdesc->size);
211
212 /*
213@@ -2198,8 +2209,8 @@
214 mapping = info->mapping;
215
216 if (mapping) {
217- pci_unmap_single(ap->pdev, mapping, info->maplen,
218- PCI_DMA_TODEVICE);
219+ pci_unmap_page(ap->pdev, mapping, info->maplen,
220+ PCI_DMA_TODEVICE);
221 info->mapping = 0;
222 }
223
224@@ -2488,11 +2499,10 @@
225
226 if (mapping) {
227 memset(ap->tx_ring+i, 0, sizeof(struct tx_desc));
228- pci_unmap_single(ap->pdev, mapping, info->maplen,
229- PCI_DMA_TODEVICE);
230+ pci_unmap_page(ap->pdev, mapping, info->maplen,
231+ PCI_DMA_TODEVICE);
232 info->mapping = 0;
233 }
234-
235 if (skb) {
236 dev_kfree_skb(skb);
237 info->skb = NULL;
238@@ -2512,75 +2522,35 @@
239 return 0;
240 }
241
242-
243-/*
244- * Following below should be (in more clean form!) in arch/ARCH/kernel/pci_*.
245- * For now, let it stay here.
246- */
247-#if defined(CONFIG_HIGHMEM) && MAX_SKB_FRAGS
248-
249-#if defined(CONFIG_X86)
250-#define DMAADDR_OFFSET 0
251-typedef unsigned long long dmaaddr_high_t;
252-#elif defined(CONFIG_PPC)
253-#define DMAADDR_OFFSET PCI_DRAM_OFFSET
254-typedef unsigned long dmaaddr_high_t;
255-#endif
256-
257-
258-static inline dmaaddr_high_t
259-pci_map_single_high(struct pci_dev *hwdev, struct page *page,
260- int offset, size_t size, int dir)
261-{
262- dmaaddr_high_t phys;
263-
264- phys = (page-mem_map) * (dmaaddr_high_t) PAGE_SIZE + offset;
265-
266- return (phys + DMAADDR_OFFSET);
267-}
268-
269-#else
270-
271-typedef unsigned long dmaaddr_high_t;
272-
273-static inline dmaaddr_high_t
274-pci_map_single_high(struct pci_dev *hwdev, struct page *page,
275- int offset, size_t size, int dir)
276-{
277- return pci_map_single(hwdev, page_address(page) + offset, size, dir);
278-}
279-
280-#endif
281-
282-
283-static inline dmaaddr_high_t
284+static inline dma_addr_t
285 ace_map_tx_skb(struct ace_private *ap, struct sk_buff *skb,
286 struct sk_buff *tail, u32 idx)
287 {
288 unsigned long addr;
289 struct tx_ring_info *info;
290
291- addr = pci_map_single(ap->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
292+ addr = pci_map_page(ap->pdev,
293+ virt_to_page(skb->data),
294+ ((unsigned long) skb->data &
295+ ~PAGE_MASK),
296+ skb->len, PCI_DMA_TODEVICE);
297
298 info = ap->skb->tx_skbuff + idx;
299 info->skb = tail;
300 info->mapping = addr;
301 info->maplen = skb->len;
302-
303 return addr;
304 }
305
306
307 static inline void
308-ace_load_tx_bd(struct tx_desc *desc, dmaaddr_high_t addr, u32 flagsize)
309+ace_load_tx_bd(struct tx_desc *desc, u64 addr, u32 flagsize)
310 {
311 #if !USE_TX_COAL_NOW
312 flagsize &= ~BD_FLG_COAL_NOW;
313 #endif
314
315-#ifdef ACE_64BIT_PTR
316 desc->addr.addrhi = addr >> 32;
317-#endif
318 desc->addr.addrlo = addr;
319 desc->flagsize = flagsize;
320 }
321@@ -2642,16 +2612,16 @@
322 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
323 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
324 struct tx_ring_info *info;
325- dmaaddr_high_t phys;
326+ dma_addr_t phys;
327
328 len += frag->size;
329 info = ap->skb->tx_skbuff + idx;
330 desc = ap->tx_ring + idx;
331
332- phys = pci_map_single_high(ap->pdev, frag->page,
333- frag->page_offset,
334- frag->size,
335- PCI_DMA_TODEVICE);
336+ phys = pci_map_page(ap->pdev, frag->page,
337+ frag->page_offset,
338+ frag->size,
339+ PCI_DMA_TODEVICE);
340
341 flagsize = (frag->size << 16);
342 if (skb->ip_summed == CHECKSUM_HW)
343@@ -2673,7 +2643,6 @@
344 }
345 info->mapping = phys;
346 info->maplen = frag->size;
347-
348 ace_load_tx_bd(desc, phys, flagsize);
349 }
350 }
351@@ -2995,7 +2964,7 @@
352
353 while (size > 0) {
354 tsize = min_t(u32, ((~dest & (ACE_WINDOW_SIZE - 1)) + 1),
355- min_t(u32, size, ACE_WINDOW_SIZE));
356+ min_t(u32, size, ACE_WINDOW_SIZE));
357 tdest = (unsigned long)&regs->Window +
358 (dest & (ACE_WINDOW_SIZE - 1));
359 writel(dest & ~(ACE_WINDOW_SIZE - 1), &regs->WinBase);
360@@ -3026,7 +2995,7 @@
361
362 while (size > 0) {
363 tsize = min_t(u32, ((~dest & (ACE_WINDOW_SIZE - 1)) + 1),
364- min_t(u32, size, ACE_WINDOW_SIZE));
365+ min_t(u32, size, ACE_WINDOW_SIZE));
366 tdest = (unsigned long)&regs->Window +
367 (dest & (ACE_WINDOW_SIZE - 1));
368 writel(dest & ~(ACE_WINDOW_SIZE - 1), &regs->WinBase);
369diff -u --recursive --new-file v2.4.12/linux/drivers/net/acenic.h linux/drivers/net/acenic.h
370--- v2.4.12/linux/drivers/net/acenic.h Thu Oct 11 08:02:26 2001
371+++ linux/drivers/net/acenic.h Fri Oct 12 15:35:53 2001
372@@ -582,7 +582,6 @@
373 aceaddr stats2_ptr;
374 };
375
376-
377 struct ring_info {
378 struct sk_buff *skb;
379 dma_addr_t mapping;
380@@ -684,6 +683,7 @@
381 u32 last_tx, last_std_rx, last_mini_rx;
382 #endif
383 struct net_device_stats stats;
384+ int pci_using_dac;
385 };
386
387
388@@ -705,31 +705,11 @@
389
390 static inline void set_aceaddr(aceaddr *aa, dma_addr_t addr)
391 {
392- unsigned long baddr = (unsigned long) addr;
393-#ifdef ACE_64BIT_PTR
394+ u64 baddr = (u64) addr;
395 aa->addrlo = baddr & 0xffffffff;
396 aa->addrhi = baddr >> 32;
397-#else
398- /* Don't bother setting zero every time */
399- aa->addrlo = baddr;
400-#endif
401 mb();
402 }
403-
404-
405-#if 0
406-static inline void *get_aceaddr(aceaddr *aa)
407-{
408- unsigned long addr;
409- mb();
410-#ifdef ACE_64BIT_PTR
411- addr = (u64)aa->addrhi << 32 | aa->addrlo;
412-#else
413- addr = aa->addrlo;
414-#endif
415- return (void *)addr;
416-}
417-#endif
418
419
420 static inline void ace_set_txprd(struct ace_regs *regs,
This page took 0.079303 seconds and 4 git commands to generate.