staging: et131x: Tidy up PCI device table definition
PATCH 1/4 staging: et131x: Tidy up PCI device table definition
Used the convenience macros DEFINE_PCI_DEVICE_TABLE and PCI_VDEVICE to tidy up the device table definition.
Also remove the corresponding TODO item from the README.
--- drivers/staging/et131x/README | 1 - drivers/staging/et131x/et131x.c | 12 ++++-------- 2 files changed, 4 insertions(+), 9 deletions(-)
drivers/staging/et131x/README +0 -1
@@ -10,7 +10,6 @@ driver as they did not build properly at the time. TODO: - Use of kmem_cache seems a bit unusual - It's too late stopping the tx queue when there is no room for the current packet. The condition should be detected for the next packet. - - PCI_VDEVICE ? Please send patches to: Greg Kroah-Hartman <[email protected]>
drivers/staging/et131x/et131x.c +4 -8
@@ -169,8 +169,7 @@ MODULE_DESCRIPTION("10/100/1000 Base-T Ethernet Driver "#define ET1310_PCI_REPLAY 0xC2#define ET1310_PCI_L0L1LATENCY 0xCF -/* PCI Vendor/Product IDs */ -#define ET131X_PCI_VENDOR_ID 0x11C1/* Agere Systems */ +/* PCI Product IDs */ #define ET131X_PCI_DEVICE_ID_GIG 0xED00/* ET1310 1000 Base-T 8 */ #define ET131X_PCI_DEVICE_ID_FAST 0xED01/* ET1310 100 Base-T */
@@ -4647,14 +4646,11 @@ static SIMPLE_DEV_PM_OPS(et131x_pm_ops, et131x_suspend, et131x_resume);#define ET131X_PM_OPS NULL#endif -static struct pci_device_id et131x_pci_table[]__devinitdata = { - {ET131X_PCI_VENDOR_ID ,ET131X_PCI_DEVICE_ID_GIG ,PCI_ANY_ID , -PCI_ANY_ID ,0 ,0 ,0UL }, - {ET131X_PCI_VENDOR_ID ,ET131X_PCI_DEVICE_ID_FAST ,PCI_ANY_ID , -PCI_ANY_ID ,0 ,0 ,0UL }, +static DEFINE_PCI_DEVICE_TABLE (et131x_pci_table) = { + {PCI_VDEVICE (ATT ,ET131X_PCI_DEVICE_ID_GIG ),0UL }, + {PCI_VDEVICE (ATT ,ET131X_PCI_DEVICE_ID_FAST ),0UL }, {0 ,} }; -MODULE_DEVICE_TABLE (pci, et131x_pci_table);static struct pci_driver et131x_driver = {
Signature · 1 line
1.7.6.4
PATCH 2/4 staging: et131x: on transmit, stop the queue if the next packet will fail
* Currently the tx queue is only stopped when the current packet fails. Check if the next packet will fail, and stop the queue if so.
* Removed associated item from TODO list in the README.
* Also minor fixup as adapter was being declared as null and immediately set to a value.
--- drivers/staging/et131x/README | 1 - drivers/staging/et131x/et131x.c | 13 ++++++------- 2 files changed, 6 insertions(+), 8 deletions(-)
drivers/staging/et131x/README +0 -1
@@ -9,7 +9,6 @@ driver as they did not build properly at the time. TODO: - Use of kmem_cache seems a bit unusual - - It's too late stopping the tx queue when there is no room for the current packet. The condition should be detected for the next packet. Please send patches to: Greg Kroah-Hartman <[email protected]>
drivers/staging/et131x/et131x.c +6 -7
@@ -3448,9 +3448,7 @@ static int send_packet(struct sk_buff *skb, struct et131x_adapter *adapter)int et131x_send_packets (struct sk_buff *skb,struct net_device *netdev) {int status =0 ; -struct et131x_adapter *adapter =NULL ; - - adapter =netdev_priv (netdev); +struct et131x_adapter *adapter =netdev_priv (netdev);/* Send these packets *
@@ -5347,6 +5345,11 @@ static void et131x_multicast(struct net_device *netdev)static int et131x_tx (struct sk_buff *skb,struct net_device *netdev) {int status =0 ; +struct et131x_adapter *adapter =netdev_priv (netdev); + +/* stop the queue if it's getting full */ +if (adapter->tx_ring.used >=NUM_TCB -1 && !netif_queue_stopped (netdev)) +netif_stop_queue (netdev);/* Save the timestamp for the TX timeout watchdog */ netdev->trans_start = jiffies;
@@ -5357,10 +5360,6 @@ static int et131x_tx(struct sk_buff *skb, struct net_device *netdev)/* Check status and manage the netif queue if necessary */ if (status !=0 ) {if (status == -ENOMEM ) { -/* Put the queue to sleep until resources are -* available -*/ -netif_stop_queue (netdev); status =NETDEV_TX_BUSY ; }else { status =NETDEV_TX_OK ;
Signature · 1 line
1.7.6.4
PATCH 3/4 staging: et131x: Convert rest of pci memory management to dma api
In reply to Mark EinonReplaced pci map/unmap and set_mask calls with their dma equivalents. Also updated comments to reflect this.
--- drivers/staging/et131x/et131x.c | 56 +++++++++++++++++++------------------- 1 files changed, 28 insertions(+), 28 deletions(-)
drivers/staging/et131x/et131x.c +28 -28
@@ -1976,7 +1976,7 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)/* Save physical address * -* NOTE: pci_alloc_consistent(), used above to alloc DMA regions, +* NOTE: dma_alloc_coherent(), used above to alloc DMA regions, * ALWAYS returns SAC (32-bit) addresses. If DAC (64-bit) addresses * are ever returned, make sure the high part is retrieved here * before storing the adjusted address.
@@ -2007,7 +2007,7 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)/* Save physical address * -* NOTE: pci_alloc_consistent(), used above to alloc DMA regions, +* NOTE: dma_alloc_coherent(), used above to alloc DMA regions, * ALWAYS returns SAC (32-bit) addresses. If DAC (64-bit) addresses * are ever returned, make sure the high part is retrieved here before * storing the adjusted address.
@@ -2152,7 +2152,7 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter) (unsigned long) rx_ring->ps_ring_physaddr);/* -* NOTE : pci_alloc_consistent(), used above to alloc DMA regions, +* NOTE : dma_alloc_coherent(), used above to alloc DMA regions, * ALWAYS returns SAC (32-bit) addresses. If DAC (64-bit) addresses * are ever returned, make sure the high part is retrieved here before * storing the adjusted address.
@@ -2172,7 +2172,7 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)printk (KERN_INFO "PRS %lx\n" , (unsigned long )rx_ring->rx_status_bus);/* Recv -* pci_pool_create initializes a lookaside list. After successful +* kmem_cache_create initializes a lookaside list. After successful * creation, nonpaged fixed-size blocks can be allocated from and * freed to the lookaside list. * RFDs will be allocated from this pool.
@@ -2408,7 +2408,7 @@ void et131x_config_rx_dma_regs(struct et131x_adapter *adapter)/* Load the completion writeback physical address * -* NOTE : pci_alloc_consistent(), used above to alloc DMA regions, +* NOTE : dma_alloc_coherent(), used above to alloc DMA regions, * ALWAYS returns SAC (32-bit) addresses. If DAC (64-bit) addresses * are ever returned, make sure the high part is retrieved here * before storing the adjusted address.
@@ -3005,7 +3005,7 @@ int et131x_tx_dma_memory_alloc(struct et131x_adapter *adapter)/* Save physical address * -* NOTE: pci_alloc_consistent(), used above to alloc DMA regions, +* NOTE: dma_alloc_coherent(), used above to alloc DMA regions, * ALWAYS returns SAC (32-bit) addresses. If DAC (64-bit) addresses * are ever returned, make sure the high part is retrieved here before * storing the adjusted address.
@@ -3202,59 +3202,59 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb) skb->len - skb->data_len;/* NOTE: Here, the dma_addr_t returned from -* pci_map_single() is implicitly cast as a +* dma_map_single() is implicitly cast as a * u32. Although dma_addr_t can be * 64-bit, the address returned by -* pci_map_single() is always 32-bit +* dma_map_single() is always 32-bit * addressable (as defined by the pci/dma * subsystem) */ desc[frag++].addr_lo = -pci_map_single (adapter->pdev, +dma_map_single (&adapter->pdev->dev, skb->data, skb->len - skb->data_len, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); }else { desc[frag].addr_hi =0 ; desc[frag].len_vlan = (skb->len - skb->data_len) /2 ;/* NOTE: Here, the dma_addr_t returned from -* pci_map_single() is implicitly cast as a +* dma_map_single() is implicitly cast as a * u32. Although dma_addr_t can be * 64-bit, the address returned by -* pci_map_single() is always 32-bit +* dma_map_single() is always 32-bit * addressable (as defined by the pci/dma * subsystem) */ desc[frag++].addr_lo = -pci_map_single (adapter->pdev, +dma_map_single (&adapter->pdev->dev, skb->data, ((skb->len - skb->data_len) /2 ), -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); desc[frag].addr_hi =0 ; desc[frag].len_vlan = (skb->len - skb->data_len) /2 ;/* NOTE: Here, the dma_addr_t returned from -* pci_map_single() is implicitly cast as a +* dma_map_single() is implicitly cast as a * u32. Although dma_addr_t can be * 64-bit, the address returned by -* pci_map_single() is always 32-bit +* dma_map_single() is always 32-bit * addressable (as defined by the pci/dma * subsystem) */ desc[frag++].addr_lo = -pci_map_single (adapter->pdev, +dma_map_single (&adapter->pdev->dev, skb->data + ((skb->len - skb->data_len) /2 ), ((skb->len - skb->data_len) /2 ), -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); } }else { desc[frag].addr_hi =0 ;
@@ -3262,17 +3262,17 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb) frags[i -1 ].size;/* NOTE: Here, the dma_addr_t returned from -* pci_map_page() is implicitly cast as a u32. +* dma_map_page() is implicitly cast as a u32. * Although dma_addr_t can be 64-bit, the address -* returned by pci_map_page() is always 32-bit +* returned by dma_map_page() is always 32-bit * addressable (as defined by the pci/dma subsystem) */ desc[frag++].addr_lo = -pci_map_page (adapter->pdev, +dma_map_page (&adapter->pdev->dev, frags[i -1 ].page, frags[i -1 ].page_offset, frags[i -1 ].size, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); } }
@@ -3522,9 +3522,9 @@ static inline void free_send_packet(struct et131x_adapter *adapter, (adapter->tx_ring.tx_desc_ring +INDEX10 (tcb->index_start)); -pci_unmap_single (adapter->pdev, +dma_unmap_single (&adapter->pdev->dev, desc->addr_lo, - desc->len_vlan,PCI_DMA_TODEVICE ); + desc->len_vlan,DMA_TO_DEVICE );add_10bit (&tcb->index_start,1 ); if (INDEX10(tcb->index_start) >=
@@ -4428,15 +4428,15 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev, }/* Check the DMA addressing support of this device */ -if (!pci_set_dma_mask (pdev,DMA_BIT_MASK (64 ))) { - result =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (64 )); +if (!dma_set_mask (&pdev->dev,DMA_BIT_MASK (64 ))) { + result =dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (64 ));if (result) {dev_err (&pdev->dev,"Unable to obtain 64 bit DMA for consistent allocations\n" ); goto err_release_res; } - }else if (!pci_set_dma_mask (pdev,DMA_BIT_MASK (32 ))) { - result =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (32 )); + }else if (!dma_set_mask (&pdev->dev,DMA_BIT_MASK (32 ))) { + result =dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (32 ));if (result) {dev_err (&pdev->dev,"Unable to obtain 32 bit DMA for consistent allocations\n" );
Signature · 1 line
1.7.6.4
Re: [PATCH 3/4] staging: et131x: Convert rest of pci memory management to dma api
Mark Einon <[email protected]> :
Quoted 13 lines
Replaced pci map/unmap and
set_maskcalls with their dma equivalents. Also updated comments to reflect this.Signed-off-by Mark Einon <[email protected]>--- drivers/staging/et131x/et131x.c | 56 +++++++++++++++++++------------------- 1 files changed, 28 insertions(+), 28 deletions(-)drivers/staging/et131x/et131x.c +0
-0@@ -3202,59 +3202,59 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
[...]
drivers/staging/et131x/et131x.c static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb) · line 3218
Quoted 9 lines
drivers/staging/et131x/et131x.c +2
-2desc[frag++].addr_lo = -pci_map_single (adapter->pdev, +dma_map_single (&adapter->pdev->dev, skb->data, skb->len - skb->data_len, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); }else {
- Some dma_mapping_error() would be welcome.
- (nit) If you keep repeating &adapter->pdev->dev, you may consider adding some local variable
- could you rework the Tx path as well so that despite the cascade of method the code does not end fighting for the right end of the screen ? et131x_tx is almost empty. It could make some sense to merge it with its callee (and rename it et131x_start_xmit ?).
- nic_send_packet
for (i = 0; i < nr_frags; i++) {
[...comment..]
if (i == 0) {Lovely...
[big block]
} else {
[small block]
}... really, really lovely.
}
[...]
Quoted 11 lines
drivers/staging/et131x/et131x.c +2
-2/* NOTE: Here, the dma_addr_t returned from -* pci_map_single() is implicitly cast as a +* dma_map_single() is implicitly cast as a * u32. Although dma_addr_t can be * 64-bit, the address returned by -* pci_map_single() is always 32-bit +* dma_map_single() is always 32-bit * addressable (as defined by the pci/dma * subsystem) */ desc[frag++].addr_lo =
[...]
Quoted 1 line
desc[frag].addr_hi = 0;
- The NOTE seems a bit outdated. Afaiks the driver tries to set a 64 bits wide DMA mask. Both addr_lo and addr_hi should be set with the returned mapping and/or even replaced with a single 64 bits addr field in tx_desc.
- Speaking of it, tx_desc probably lacks some __leXY annotations.
- (nic_send_packet)
{
u32 i;
struct tx_desc desc[24]; /* 24 x 16 byte */384 bytes. :o/
Signature · 1 line
Ueimor
PATCH 4/4 staging: et131x: Remove unused defines
In reply to Mark EinonSome defines are no longer referenced in the code, so removed them.
--- drivers/staging/et131x/et131x.c | 11 ----------- 1 files changed, 0 insertions(+), 11 deletions(-)
drivers/staging/et131x/et131x.c +0 -11
@@ -145,21 +145,14 @@ MODULE_DESCRIPTION("10/100/1000 Base-T Ethernet Driver "/* MP_ADAPTER flags */ #define fMP_ADAPTER_RECV_LOOKASIDE 0x00000004#define fMP_ADAPTER_INTERRUPT_IN_USE 0x00000008 -#define fMP_ADAPTER_SECONDARY 0x00000010/* MP_SHARED flags */ -#define fMP_ADAPTER_SHUTDOWN 0x00100000#define fMP_ADAPTER_LOWER_POWER 0x00200000#define fMP_ADAPTER_NON_RECOVER_ERROR 0x00800000 -#define fMP_ADAPTER_RESET_IN_PROGRESS 0x01000000 -#define fMP_ADAPTER_NO_CABLE 0x02000000#define fMP_ADAPTER_HARDWARE_ERROR 0x04000000 -#define fMP_ADAPTER_REMOVE_IN_PROGRESS 0x08000000 -#define fMP_ADAPTER_HALT_IN_PROGRESS 0x10000000#define fMP_ADAPTER_FAIL_SEND_MASK 0x3ff00000 -#define fMP_ADAPTER_NOT_READY_MASK 0x3ff00000/* Some offsets in PCI config space that are actually used. */ #define ET1310_PCI_MAX_PYLD 0x4C
@@ -205,7 +198,6 @@ MODULE_DESCRIPTION("10/100/1000 Base-T Ethernet Driver "#define NUM_PACKETS_HANDLED 256 -#define ALCATEL_BAD_STATUS 0xe47f0000#define ALCATEL_MULTICAST_PKT 0x01000000#define ALCATEL_BROADCAST_PKT 0x02000000
@@ -452,8 +444,6 @@ struct tx_ring {* Once the desired performance has been achieved, the optimal registry values * should be re-populated to these #defines: */ -#define NUM_TRAFFIC_CLASSES 1 -#define TX_ERROR_PERIOD 1000#define LO_MARK_PERCENT_FOR_PSR 15
@@ -4715,7 +4705,6 @@ void et131x_disable_interrupts(struct et131x_adapter *adapter)writel (INT_MASK_DISABLE , &adapter->regs->global.int_mask); } -/** * et131x_isr - The Interrupt Service Routine for the driver. * @irq: the IRQ on which the interrupt was received.
Signature · 1 line
1.7.6.4