diff options
author | Nicolas Pitre <nico@cam.org> | 2006-03-20 11:54:27 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-03-21 16:00:53 -0500 |
commit | 09779c6df2dbe95483269d194b327d41fe2cc57e (patch) | |
tree | 9ee7873eb248481bd06f73fdda79c019292c0e26 /drivers/net/smc91x.c | |
parent | ac62ef043504d5c754357325cd514553ddabb046 (diff) |
[PATCH] smc91x: allow for dynamic bus access configs
All accessor's different methods are now selected with C code and unused
ones statically optimized away at compile time instead of being selected
with #if's and #ifdef's. This has many advantages such as allowing the
compiler to validate the syntax of the whole code, making it cleaner and
easier to understand, and ultimately allowing people to define
configuration symbols in terms of variables if they really want to
dynamically support multiple bus configurations at the same time (with
the unavoidable performance cost).
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/smc91x.c')
-rw-r--r-- | drivers/net/smc91x.c | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index 75e9b3b910c..0e9833adf9f 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
@@ -215,15 +215,12 @@ struct smc_local { | |||
215 | 215 | ||
216 | spinlock_t lock; | 216 | spinlock_t lock; |
217 | 217 | ||
218 | #ifdef SMC_CAN_USE_DATACS | ||
219 | u32 __iomem *datacs; | ||
220 | #endif | ||
221 | |||
222 | #ifdef SMC_USE_PXA_DMA | 218 | #ifdef SMC_USE_PXA_DMA |
223 | /* DMA needs the physical address of the chip */ | 219 | /* DMA needs the physical address of the chip */ |
224 | u_long physaddr; | 220 | u_long physaddr; |
225 | #endif | 221 | #endif |
226 | void __iomem *base; | 222 | void __iomem *base; |
223 | void __iomem *datacs; | ||
227 | }; | 224 | }; |
228 | 225 | ||
229 | #if SMC_DEBUG > 0 | 226 | #if SMC_DEBUG > 0 |
@@ -2104,9 +2101,8 @@ static int smc_enable_device(struct platform_device *pdev) | |||
2104 | * Set the appropriate byte/word mode. | 2101 | * Set the appropriate byte/word mode. |
2105 | */ | 2102 | */ |
2106 | ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8; | 2103 | ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8; |
2107 | #ifndef SMC_CAN_USE_16BIT | 2104 | if (!SMC_CAN_USE_16BIT) |
2108 | ecsr |= ECSR_IOIS8; | 2105 | ecsr |= ECSR_IOIS8; |
2109 | #endif | ||
2110 | writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT)); | 2106 | writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT)); |
2111 | local_irq_restore(flags); | 2107 | local_irq_restore(flags); |
2112 | 2108 | ||
@@ -2143,40 +2139,39 @@ static void smc_release_attrib(struct platform_device *pdev) | |||
2143 | release_mem_region(res->start, ATTRIB_SIZE); | 2139 | release_mem_region(res->start, ATTRIB_SIZE); |
2144 | } | 2140 | } |
2145 | 2141 | ||
2146 | #ifdef SMC_CAN_USE_DATACS | 2142 | static inline void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) |
2147 | static void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) | ||
2148 | { | 2143 | { |
2149 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); | 2144 | if (SMC_CAN_USE_DATACS) { |
2150 | struct smc_local *lp = netdev_priv(ndev); | 2145 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); |
2146 | struct smc_local *lp = netdev_priv(ndev); | ||
2151 | 2147 | ||
2152 | if (!res) | 2148 | if (!res) |
2153 | return; | 2149 | return; |
2154 | 2150 | ||
2155 | if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) { | 2151 | if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) { |
2156 | printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME); | 2152 | printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME); |
2157 | return; | 2153 | return; |
2158 | } | 2154 | } |
2159 | 2155 | ||
2160 | lp->datacs = ioremap(res->start, SMC_DATA_EXTENT); | 2156 | lp->datacs = ioremap(res->start, SMC_DATA_EXTENT); |
2157 | } | ||
2161 | } | 2158 | } |
2162 | 2159 | ||
2163 | static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) | 2160 | static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) |
2164 | { | 2161 | { |
2165 | struct smc_local *lp = netdev_priv(ndev); | 2162 | if (SMC_CAN_USE_DATACS) { |
2166 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); | 2163 | struct smc_local *lp = netdev_priv(ndev); |
2164 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); | ||
2167 | 2165 | ||
2168 | if (lp->datacs) | 2166 | if (lp->datacs) |
2169 | iounmap(lp->datacs); | 2167 | iounmap(lp->datacs); |
2170 | 2168 | ||
2171 | lp->datacs = NULL; | 2169 | lp->datacs = NULL; |
2172 | 2170 | ||
2173 | if (res) | 2171 | if (res) |
2174 | release_mem_region(res->start, SMC_DATA_EXTENT); | 2172 | release_mem_region(res->start, SMC_DATA_EXTENT); |
2173 | } | ||
2175 | } | 2174 | } |
2176 | #else | ||
2177 | static void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) {} | ||
2178 | static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) {} | ||
2179 | #endif | ||
2180 | 2175 | ||
2181 | /* | 2176 | /* |
2182 | * smc_init(void) | 2177 | * smc_init(void) |