Lines Matching +full:reset +full:- +full:n +full:- +full:io
2 * Linux ARCnet driver - "RIM I" (entirely mem-mapped) cards
4 * Written 1994-1999 by Avery Pennarun.
5 * Written 1999-2000 by Martin Mares <[email protected]>.
39 #include <linux/io.h>
63 /* We cannot probe for a RIM I card; one reason is I don't know how to reset
70 pr_info("%s\n", "RIM I (entirely mem-mapped) support"); in arcrimi_probe()
71 pr_info("E-mail me if you actually test the RIM I driver, please!\n"); in arcrimi_probe()
72 pr_info("Given: node %02Xh, shmem %lXh, irq %d\n", in arcrimi_probe()
73 dev->dev_addr[0], dev->mem_start, dev->irq); in arcrimi_probe()
76 if (dev->mem_start <= 0 || dev->irq <= 0) { in arcrimi_probe()
78 pr_err("No autoprobe for RIM I; you must specify the shmem and irq!\n"); in arcrimi_probe()
79 return -ENODEV; in arcrimi_probe()
81 if (dev->dev_addr[0] == 0) { in arcrimi_probe()
83 pr_err("You need to specify your card's station ID!\n"); in arcrimi_probe()
84 return -ENODEV; in arcrimi_probe()
91 if (!request_mem_region(dev->mem_start, MIRROR_SIZE, "arcnet (90xx)")) { in arcrimi_probe()
93 pr_notice("Card memory already allocated\n"); in arcrimi_probe()
94 return -ENODEV; in arcrimi_probe()
102 int res = -1; in check_mirror()
105 return -1; in check_mirror()
131 p = ioremap(dev->mem_start, MIRROR_SIZE); in arcrimi_found()
133 release_mem_region(dev->mem_start, MIRROR_SIZE); in arcrimi_found()
134 arc_printk(D_NORMAL, dev, "Can't ioremap\n"); in arcrimi_found()
135 return -ENODEV; in arcrimi_found()
139 if (request_irq(dev->irq, arcnet_interrupt, 0, "arcnet (RIM I)", dev)) { in arcrimi_found()
141 release_mem_region(dev->mem_start, MIRROR_SIZE); in arcrimi_found()
142 arc_printk(D_NORMAL, dev, "Can't get IRQ %d!\n", dev->irq); in arcrimi_found()
143 return -ENODEV; in arcrimi_found()
146 shmem = dev->mem_start; in arcrimi_found()
153 /* guess the actual size of one "memory mirror" - the number of in arcrimi_found()
159 check_mirror(shmem - MIRROR_SIZE, MIRROR_SIZE) == 0 && in arcrimi_found()
160 check_mirror(shmem - 2 * MIRROR_SIZE, MIRROR_SIZE) == 1) in arcrimi_found()
163 first_mirror = shmem - mirror_size; in arcrimi_found()
165 first_mirror -= mirror_size; in arcrimi_found()
171 last_mirror -= mirror_size; in arcrimi_found()
173 dev->mem_start = first_mirror; in arcrimi_found()
174 dev->mem_end = last_mirror + MIRROR_SIZE - 1; in arcrimi_found()
179 lp->card_name = "RIM I"; in arcrimi_found()
180 lp->hw.command = arcrimi_command; in arcrimi_found()
181 lp->hw.status = arcrimi_status; in arcrimi_found()
182 lp->hw.intmask = arcrimi_setmask; in arcrimi_found()
183 lp->hw.reset = arcrimi_reset; in arcrimi_found()
184 lp->hw.owner = THIS_MODULE; in arcrimi_found()
185 lp->hw.copy_to_card = arcrimi_copy_to_card; in arcrimi_found()
186 lp->hw.copy_from_card = arcrimi_copy_from_card; in arcrimi_found()
188 /* re-reserve the memory region - arcrimi_probe() alloced this reqion in arcrimi_found()
189 * but didn't know the real size. Free that region and then re-get in arcrimi_found()
195 if (!request_mem_region(dev->mem_start, in arcrimi_found()
196 dev->mem_end - dev->mem_start + 1, in arcrimi_found()
198 arc_printk(D_NORMAL, dev, "Card memory already allocated\n"); in arcrimi_found()
202 lp->mem_start = ioremap(dev->mem_start, in arcrimi_found()
203 dev->mem_end - dev->mem_start + 1); in arcrimi_found()
204 if (!lp->mem_start) { in arcrimi_found()
205 arc_printk(D_NORMAL, dev, "Can't remap device memory!\n"); in arcrimi_found()
210 arcnet_set_addr(dev, arcnet_readb(lp->mem_start, in arcrimi_found()
213 …c_printk(D_NORMAL, dev, "ARCnet RIM I: station %02Xh found at IRQ %d, ShMem %lXh (%ld*%d bytes)\n", in arcrimi_found()
214 dev->dev_addr[0], in arcrimi_found()
215 dev->irq, dev->mem_start, in arcrimi_found()
216 (dev->mem_end - dev->mem_start + 1) / mirror_size, in arcrimi_found()
226 iounmap(lp->mem_start); in arcrimi_found()
228 release_mem_region(dev->mem_start, dev->mem_end - dev->mem_start + 1); in arcrimi_found()
230 free_irq(dev->irq, dev); in arcrimi_found()
231 return -EIO; in arcrimi_found()
234 /* Do a hardware reset on the card, and set up necessary registers.
244 void __iomem *ioaddr = lp->mem_start + 0x800; in arcrimi_reset()
246 arc_printk(D_INIT, dev, "Resetting %s (status=%02Xh)\n", in arcrimi_reset()
247 dev->name, arcnet_readb(ioaddr, COM9026_REG_R_STATUS)); in arcrimi_reset()
250 arcnet_writeb(TESTvalue, ioaddr, -0x800); /* fake reset */ in arcrimi_reset()
253 /* clear flags & end reset */ in arcrimi_reset()
257 /* enable extended (512-byte) packets */ in arcrimi_reset()
267 void __iomem *ioaddr = lp->mem_start + 0x800; in arcrimi_setmask()
275 void __iomem *ioaddr = lp->mem_start + 0x800; in arcrimi_status()
283 void __iomem *ioaddr = lp->mem_start + 0x800; in arcrimi_command()
292 void __iomem *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset; in arcrimi_copy_to_card()
301 void __iomem *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset; in arcrimi_copy_from_card()
307 static int io; /* use the insmod io= irq= node= options */ variable
312 module_param(io, int, 0);
326 return -ENOMEM; in arc_rimi_init()
331 dev->mem_start = io; in arc_rimi_init()
332 dev->irq = irq; in arc_rimi_init()
333 if (dev->irq == 2) in arc_rimi_init()
334 dev->irq = 9; in arc_rimi_init()
338 return -EIO; in arc_rimi_init()
351 iounmap(lp->mem_start); in arc_rimi_exit()
352 release_mem_region(dev->mem_start, dev->mem_end - dev->mem_start + 1); in arc_rimi_exit()
353 free_irq(dev->irq, dev); in arc_rimi_exit()
367 pr_err("Too many arguments\n"); in arcrimi_setup()
375 case 1: /* IO address */ in arcrimi_setup()
376 io = ints[1]; in arcrimi_setup()