author | Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM> |
Fri, 19 Feb 2010 18:04:10 -0800 | |
changeset 11723 | b7b5ccb8e5c5 |
parent 11374 | b345d20da176 |
child 12043 | 16dcac5c84f7 |
permissions | -rw-r--r-- |
11374
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
1 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
2 |
* CDDL HEADER START |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
3 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
4 |
* The contents of this file are subject to the terms of the |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
5 |
* Common Development and Distribution License (the "License"). |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
6 |
* You may not use this file except in compliance with the License. |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
7 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
8 |
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
9 |
* or http://www.opensolaris.org/os/licensing. |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
10 |
* See the License for the specific language governing permissions |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
11 |
* and limitations under the License. |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
12 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
13 |
* When distributing Covered Code, include this CDDL HEADER in each |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
14 |
* file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
15 |
* If applicable, add the following below this CDDL HEADER, with the |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
16 |
* fields enclosed by brackets "[]" replaced with your own identifying |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
17 |
* information: Portions Copyright [yyyy] [name of copyright owner] |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
18 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
19 |
* CDDL HEADER END |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
20 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
21 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
22 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
23 |
* Copyright 2009 Emulex. All rights reserved. |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
24 |
* Use is subject to license terms. |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
25 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
26 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
27 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
28 |
* Source file containing the implementation of Driver buffer management |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
29 |
* and related helper functions |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
30 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
31 |
#include <oce_impl.h> |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
32 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
33 |
static ddi_dma_attr_t oce_dma_buf_attr = { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
34 |
DMA_ATTR_V0, /* version number */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
35 |
0x0000000000000000ull, /* low address */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
36 |
0xFFFFFFFFFFFFFFFFull, /* high address */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
37 |
0x00000000FFFFFFFFull, /* dma counter max */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
38 |
OCE_DMA_ALIGNMENT, /* alignment */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
39 |
0x00000FFF, /* burst sizes */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
40 |
0x00000001, /* minimum transfer size */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
41 |
0x00000000FFFFFFFFull, /* maximum transfer size */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
42 |
0xFFFFFFFFFFFFFFFFull, /* maximum segment size */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
43 |
1, /* scatter/gather list length */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
44 |
0x00000001, /* granularity */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
45 |
0 /* DMA flags */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
46 |
}; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
47 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
48 |
static ddi_device_acc_attr_t oce_dma_buf_accattr = { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
49 |
DDI_DEVICE_ATTR_V0, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
50 |
DDI_NEVERSWAP_ACC, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
51 |
DDI_STRICTORDER_ACC, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
52 |
}; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
53 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
54 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
55 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
56 |
* function to allocate a dma buffer for mapping memory va-pa |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
57 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
58 |
* dev - software handle to device |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
59 |
* size - size of the memory to map |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
60 |
* flags - DDI_DMA_CONSISTENT/DDI_DMA_STREAMING |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
61 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
62 |
* return pointer to a oce_dma_buf_t structure handling the map |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
63 |
* NULL => failure |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
64 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
65 |
oce_dma_buf_t * |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
66 |
oce_alloc_dma_buffer(struct oce_dev *dev, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
67 |
uint32_t size, uint32_t flags) |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
68 |
{ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
69 |
oce_dma_buf_t *dbuf; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
70 |
ddi_dma_cookie_t cookie; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
71 |
uint32_t count; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
72 |
size_t actual_len; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
73 |
int ret = 0; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
74 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
75 |
ASSERT(size > 0); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
76 |
|
11723
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
77 |
dbuf = kmem_zalloc(sizeof (oce_dma_buf_t), KM_NOSLEEP); |
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
78 |
if (dbuf == NULL) { |
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
79 |
return (NULL); |
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
80 |
} |
11374
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
81 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
82 |
/* allocate dma handle */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
83 |
ret = ddi_dma_alloc_handle(dev->dip, &oce_dma_buf_attr, |
11723
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
84 |
DDI_DMA_DONTWAIT, NULL, &dbuf->dma_handle); |
11374
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
85 |
if (ret != DDI_SUCCESS) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
86 |
oce_log(dev, CE_WARN, MOD_CONFIG, "%s", |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
87 |
"Failed to allocate DMA handle"); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
88 |
goto alloc_fail; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
89 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
90 |
/* allocate the DMA-able memory */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
91 |
ret = ddi_dma_mem_alloc(dbuf->dma_handle, size, &oce_dma_buf_accattr, |
11723
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
92 |
flags, DDI_DMA_DONTWAIT, NULL, &dbuf->base, |
11374
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
93 |
&actual_len, &dbuf->acc_handle); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
94 |
if (ret != DDI_SUCCESS) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
95 |
oce_log(dev, CE_WARN, MOD_CONFIG, "%s", |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
96 |
"Failed to allocate DMA memory"); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
97 |
goto alloc_fail; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
98 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
99 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
100 |
/* bind handle */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
101 |
ret = ddi_dma_addr_bind_handle(dbuf->dma_handle, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
102 |
(struct as *)0, dbuf->base, actual_len, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
103 |
DDI_DMA_RDWR | flags, |
11723
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
104 |
DDI_DMA_DONTWAIT, NULL, &cookie, &count); |
11374
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
105 |
if (ret != DDI_DMA_MAPPED) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
106 |
oce_log(dev, CE_WARN, MOD_CONFIG, "%s", |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
107 |
"Failed to bind dma handle"); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
108 |
goto alloc_fail; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
109 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
110 |
bzero(dbuf->base, actual_len); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
111 |
dbuf->addr = cookie.dmac_laddress; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
112 |
dbuf->size = actual_len; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
113 |
/* usable length */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
114 |
dbuf->len = size; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
115 |
dbuf->num_pages = OCE_NUM_PAGES(size); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
116 |
return (dbuf); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
117 |
alloc_fail: |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
118 |
oce_free_dma_buffer(dev, dbuf); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
119 |
return (NULL); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
120 |
} /* oce_dma_alloc_buffer */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
121 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
122 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
123 |
* function to delete a dma buffer |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
124 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
125 |
* dev - software handle to device |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
126 |
* dbuf - dma obj to delete |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
127 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
128 |
* return none |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
129 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
130 |
void |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
131 |
oce_free_dma_buffer(struct oce_dev *dev, oce_dma_buf_t *dbuf) |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
132 |
{ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
133 |
_NOTE(ARGUNUSED(dev)); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
134 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
135 |
if (dbuf == NULL) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
136 |
return; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
137 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
138 |
if (dbuf->dma_handle != NULL) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
139 |
(void) ddi_dma_unbind_handle(dbuf->dma_handle); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
140 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
141 |
if (dbuf->acc_handle != NULL) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
142 |
ddi_dma_mem_free(&dbuf->acc_handle); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
143 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
144 |
if (dbuf->dma_handle != NULL) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
145 |
ddi_dma_free_handle(&dbuf->dma_handle); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
146 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
147 |
kmem_free(dbuf, sizeof (oce_dma_buf_t)); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
148 |
} /* oce_free_dma_buffer */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
149 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
150 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
151 |
* function to create a ring buffer |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
152 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
153 |
* dev - software handle to the device |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
154 |
* num_items - number of items in the ring |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
155 |
* item_size - size of an individual item in the ring |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
156 |
* flags - DDI_DMA_CONSISTENT/DDI_DMA_STREAMING for ring memory |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
157 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
158 |
* return pointer to a ring_buffer structure, NULL on failure |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
159 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
160 |
oce_ring_buffer_t * |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
161 |
create_ring_buffer(struct oce_dev *dev, |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
162 |
uint32_t num_items, uint32_t item_size, uint32_t flags) |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
163 |
{ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
164 |
oce_ring_buffer_t *ring; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
165 |
uint32_t size; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
166 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
167 |
/* allocate the ring buffer */ |
11723
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
168 |
ring = kmem_zalloc(sizeof (oce_ring_buffer_t), KM_NOSLEEP); |
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
169 |
if (ring == NULL) { |
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
170 |
return (NULL); |
b7b5ccb8e5c5
6907671 oce driver should make MAC_PROP_ADV_10GFDX_CAP property as MAC_PROP_PERM_RW
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
11374
diff
changeset
|
171 |
} |
11374
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
172 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
173 |
/* get the dbuf defining the ring */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
174 |
size = num_items * item_size; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
175 |
ring->dbuf = oce_alloc_dma_buffer(dev, size, flags); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
176 |
if (ring->dbuf == NULL) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
177 |
oce_log(dev, CE_WARN, MOD_CONFIG, "%s", |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
178 |
"Ring buffer allocation failed"); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
179 |
goto dbuf_fail; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
180 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
181 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
182 |
/* fill the rest of the ring */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
183 |
ring->num_items = num_items; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
184 |
ring->item_size = item_size; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
185 |
ring->num_used = 0; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
186 |
return (ring); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
187 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
188 |
dbuf_fail: |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
189 |
kmem_free(ring, sizeof (oce_ring_buffer_t)); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
190 |
return (NULL); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
191 |
} /* create_ring_buffer */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
192 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
193 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
194 |
* function to destroy a ring buffer |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
195 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
196 |
* dev - software handle to teh device |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
197 |
* ring - the ring buffer to delete |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
198 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
199 |
* return none |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
200 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
201 |
void |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
202 |
destroy_ring_buffer(struct oce_dev *dev, oce_ring_buffer_t *ring) |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
203 |
{ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
204 |
ASSERT(dev != NULL); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
205 |
ASSERT(ring != NULL); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
206 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
207 |
/* free the dbuf associated with the ring */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
208 |
oce_free_dma_buffer(dev, ring->dbuf); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
209 |
ring->dbuf = NULL; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
210 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
211 |
/* free the ring itself */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
212 |
kmem_free(ring, sizeof (oce_ring_buffer_t)); |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
213 |
} /* destroy_ring_buffer */ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
214 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
215 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
216 |
/* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
217 |
* function to enable the fma flags |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
218 |
* fm_caps - FM capability flags |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
219 |
* |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
220 |
* return none |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
221 |
*/ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
222 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
223 |
void |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
224 |
oce_set_dma_fma_flags(int fm_caps) |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
225 |
{ |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
226 |
if (fm_caps == DDI_FM_NOT_CAPABLE) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
227 |
return; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
228 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
229 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
230 |
if (DDI_FM_ACC_ERR_CAP(fm_caps)) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
231 |
oce_dma_buf_accattr.devacc_attr_access = DDI_FLAGERR_ACC; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
232 |
} else { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
233 |
oce_dma_buf_accattr.devacc_attr_access = DDI_DEFAULT_ACC; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
234 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
235 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
236 |
if (DDI_FM_DMA_ERR_CAP(fm_caps)) { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
237 |
oce_dma_buf_attr.dma_attr_flags |= DDI_DMA_FLAGERR; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
238 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
239 |
} else { |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
240 |
oce_dma_buf_attr.dma_attr_flags &= ~DDI_DMA_FLAGERR; |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
241 |
|
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
242 |
} |
b345d20da176
PSARC/2009/526 oce - Emulex PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff
changeset
|
243 |
} /* oce_set_dma_fma_flags */ |