|
@@ -1018,7 +1018,7 @@ static int intelxl_context_rx ( struct intelxl_nic *intelxl,
|
1018
|
1018
|
base_count = INTELXL_CTX_RX_BASE_COUNT ( address, INTELXL_RX_NUM_DESC );
|
1019
|
1019
|
ctx.rx.base_count = cpu_to_le64 ( base_count );
|
1020
|
1020
|
ctx.rx.len = cpu_to_le16 ( INTELXL_CTX_RX_LEN ( intelxl->mfs ) );
|
1021
|
|
- ctx.rx.flags = INTELXL_CTX_RX_FL_CRCSTRIP;
|
|
1021
|
+ ctx.rx.flags = ( INTELXL_CTX_RX_FL_DSIZE | INTELXL_CTX_RX_FL_CRCSTRIP );
|
1022
|
1022
|
ctx.rx.mfs = cpu_to_le16 ( INTELXL_CTX_RX_MFS ( intelxl->mfs ) );
|
1023
|
1023
|
|
1024
|
1024
|
/* Program context */
|
|
@@ -1101,20 +1101,20 @@ static int intelxl_create_ring ( struct intelxl_nic *intelxl,
|
1101
|
1101
|
int rc;
|
1102
|
1102
|
|
1103
|
1103
|
/* Allocate descriptor ring */
|
1104
|
|
- ring->desc = malloc_dma ( ring->len, INTELXL_ALIGN );
|
1105
|
|
- if ( ! ring->desc ) {
|
|
1104
|
+ ring->desc.raw = malloc_dma ( ring->len, INTELXL_ALIGN );
|
|
1105
|
+ if ( ! ring->desc.raw ) {
|
1106
|
1106
|
rc = -ENOMEM;
|
1107
|
1107
|
goto err_alloc;
|
1108
|
1108
|
}
|
1109
|
1109
|
|
1110
|
1110
|
/* Initialise descriptor ring */
|
1111
|
|
- memset ( ring->desc, 0, ring->len );
|
|
1111
|
+ memset ( ring->desc.raw, 0, ring->len );
|
1112
|
1112
|
|
1113
|
1113
|
/* Reset tail pointer */
|
1114
|
1114
|
writel ( 0, ( ring_regs + INTELXL_QXX_TAIL ) );
|
1115
|
1115
|
|
1116
|
1116
|
/* Program queue context */
|
1117
|
|
- address = virt_to_bus ( ring->desc );
|
|
1117
|
+ address = virt_to_bus ( ring->desc.raw );
|
1118
|
1118
|
if ( ( rc = ring->context ( intelxl, address ) ) != 0 )
|
1119
|
1119
|
goto err_context;
|
1120
|
1120
|
|
|
@@ -1135,7 +1135,7 @@ static int intelxl_create_ring ( struct intelxl_nic *intelxl,
|
1135
|
1135
|
intelxl_disable_ring ( intelxl, ring );
|
1136
|
1136
|
err_enable:
|
1137
|
1137
|
err_context:
|
1138
|
|
- free_dma ( ring->desc, ring->len );
|
|
1138
|
+ free_dma ( ring->desc.raw, ring->len );
|
1139
|
1139
|
err_alloc:
|
1140
|
1140
|
return rc;
|
1141
|
1141
|
}
|
|
@@ -1157,8 +1157,8 @@ static void intelxl_destroy_ring ( struct intelxl_nic *intelxl,
|
1157
|
1157
|
}
|
1158
|
1158
|
|
1159
|
1159
|
/* Free descriptor ring */
|
1160
|
|
- free_dma ( ring->desc, ring->len );
|
1161
|
|
- ring->desc = NULL;
|
|
1160
|
+ free_dma ( ring->desc.raw, ring->len );
|
|
1161
|
+ ring->desc.raw = NULL;
|
1162
|
1162
|
}
|
1163
|
1163
|
|
1164
|
1164
|
/**
|
|
@@ -1186,7 +1186,7 @@ static void intelxl_refill_rx ( struct intelxl_nic *intelxl ) {
|
1186
|
1186
|
|
1187
|
1187
|
/* Get next receive descriptor */
|
1188
|
1188
|
rx_idx = ( intelxl->rx.prod++ % INTELXL_RX_NUM_DESC );
|
1189
|
|
- rx = &intelxl->rx.desc[rx_idx].rx;
|
|
1189
|
+ rx = &intelxl->rx.desc.rx[rx_idx].data;
|
1190
|
1190
|
|
1191
|
1191
|
/* Populate receive descriptor */
|
1192
|
1192
|
address = virt_to_bus ( iobuf->data );
|
|
@@ -1351,7 +1351,7 @@ static int intelxl_transmit ( struct net_device *netdev,
|
1351
|
1351
|
}
|
1352
|
1352
|
tx_idx = ( intelxl->tx.prod++ % INTELXL_TX_NUM_DESC );
|
1353
|
1353
|
tx_tail = ( intelxl->tx.prod % INTELXL_TX_NUM_DESC );
|
1354
|
|
- tx = &intelxl->tx.desc[tx_idx].tx;
|
|
1354
|
+ tx = &intelxl->tx.desc.tx[tx_idx].data;
|
1355
|
1355
|
|
1356
|
1356
|
/* Populate transmit descriptor */
|
1357
|
1357
|
address = virt_to_bus ( iobuf->data );
|
|
@@ -1387,7 +1387,7 @@ static void intelxl_poll_tx ( struct net_device *netdev ) {
|
1387
|
1387
|
|
1388
|
1388
|
/* Get next transmit descriptor */
|
1389
|
1389
|
tx_idx = ( intelxl->tx.cons % INTELXL_TX_NUM_DESC );
|
1390
|
|
- tx_wb = &intelxl->tx.desc[tx_idx].tx_wb;
|
|
1390
|
+ tx_wb = &intelxl->tx.desc.tx[tx_idx].wb;
|
1391
|
1391
|
|
1392
|
1392
|
/* Stop if descriptor is still in use */
|
1393
|
1393
|
if ( ! ( tx_wb->flags & INTELXL_TX_WB_FL_DD ) )
|
|
@@ -1419,7 +1419,7 @@ static void intelxl_poll_rx ( struct net_device *netdev ) {
|
1419
|
1419
|
|
1420
|
1420
|
/* Get next receive descriptor */
|
1421
|
1421
|
rx_idx = ( intelxl->rx.cons % INTELXL_RX_NUM_DESC );
|
1422
|
|
- rx_wb = &intelxl->rx.desc[rx_idx].rx_wb;
|
|
1422
|
+ rx_wb = &intelxl->rx.desc.rx[rx_idx].wb;
|
1423
|
1423
|
|
1424
|
1424
|
/* Stop if descriptor is still in use */
|
1425
|
1425
|
if ( ! ( rx_wb->flags & cpu_to_le32 ( INTELXL_RX_WB_FL_DD ) ) )
|
|
@@ -1544,8 +1544,10 @@ static int intelxl_probe ( struct pci_device *pci ) {
|
1544
|
1544
|
intelxl_init_admin ( &intelxl->event, INTELXL_ADMIN_EVT,
|
1545
|
1545
|
&intelxl_admin_offsets );
|
1546
|
1546
|
intelxl_init_ring ( &intelxl->tx, INTELXL_TX_NUM_DESC,
|
|
1547
|
+ sizeof ( intelxl->tx.desc.tx[0] ),
|
1547
|
1548
|
intelxl_context_tx );
|
1548
|
1549
|
intelxl_init_ring ( &intelxl->rx, INTELXL_RX_NUM_DESC,
|
|
1550
|
+ sizeof ( intelxl->rx.desc.rx[0] ),
|
1549
|
1551
|
intelxl_context_rx );
|
1550
|
1552
|
|
1551
|
1553
|
/* Fix up PCI device */
|