Lines Matching refs:dev

53 static void ddb_irq_disable(struct ddb *dev)  in ddb_irq_disable()  argument
55 ddbwritel(dev, 0, INTERRUPT_ENABLE); in ddb_irq_disable()
56 ddbwritel(dev, 0, MSI1_ENABLE); in ddb_irq_disable()
59 static void ddb_msi_exit(struct ddb *dev) in ddb_msi_exit() argument
62 if (dev->msi) in ddb_msi_exit()
63 pci_free_irq_vectors(dev->pdev); in ddb_msi_exit()
67 static void ddb_irq_exit(struct ddb *dev) in ddb_irq_exit() argument
69 ddb_irq_disable(dev); in ddb_irq_exit()
70 if (dev->msi == 2) in ddb_irq_exit()
71 free_irq(pci_irq_vector(dev->pdev, 1), dev); in ddb_irq_exit()
72 free_irq(pci_irq_vector(dev->pdev, 0), dev); in ddb_irq_exit()
77 struct ddb *dev = (struct ddb *)pci_get_drvdata(pdev); in ddb_remove() local
79 ddb_device_destroy(dev); in ddb_remove()
80 ddb_ports_detach(dev); in ddb_remove()
81 ddb_i2c_release(dev); in ddb_remove()
83 ddb_irq_exit(dev); in ddb_remove()
84 ddb_msi_exit(dev); in ddb_remove()
85 ddb_ports_release(dev); in ddb_remove()
86 ddb_buffers_free(dev); in ddb_remove()
88 ddb_unmap(dev); in ddb_remove()
94 static void ddb_irq_msi(struct ddb *dev, int nr) in ddb_irq_msi() argument
99 stat = pci_alloc_irq_vectors(dev->pdev, 1, nr, in ddb_irq_msi()
102 dev->msi = stat; in ddb_irq_msi()
103 dev_info(dev->dev, "using %d MSI interrupt(s)\n", in ddb_irq_msi()
104 dev->msi); in ddb_irq_msi()
106 dev_info(dev->dev, "MSI not available.\n"); in ddb_irq_msi()
112 static int ddb_irq_init(struct ddb *dev) in ddb_irq_init() argument
117 ddbwritel(dev, 0x00000000, INTERRUPT_ENABLE); in ddb_irq_init()
118 ddbwritel(dev, 0x00000000, MSI1_ENABLE); in ddb_irq_init()
119 ddbwritel(dev, 0x00000000, MSI2_ENABLE); in ddb_irq_init()
120 ddbwritel(dev, 0x00000000, MSI3_ENABLE); in ddb_irq_init()
121 ddbwritel(dev, 0x00000000, MSI4_ENABLE); in ddb_irq_init()
122 ddbwritel(dev, 0x00000000, MSI5_ENABLE); in ddb_irq_init()
123 ddbwritel(dev, 0x00000000, MSI6_ENABLE); in ddb_irq_init()
124 ddbwritel(dev, 0x00000000, MSI7_ENABLE); in ddb_irq_init()
127 ddb_irq_msi(dev, 2); in ddb_irq_init()
129 if (dev->msi) in ddb_irq_init()
131 if (dev->msi == 2) { in ddb_irq_init()
132 stat = request_irq(pci_irq_vector(dev->pdev, 0), in ddb_irq_init()
134 (void *)dev); in ddb_irq_init()
137 stat = request_irq(pci_irq_vector(dev->pdev, 1), in ddb_irq_init()
139 (void *)dev); in ddb_irq_init()
141 free_irq(pci_irq_vector(dev->pdev, 0), dev); in ddb_irq_init()
147 stat = request_irq(pci_irq_vector(dev->pdev, 0), in ddb_irq_init()
149 (void *)dev); in ddb_irq_init()
153 if (dev->msi == 2) { in ddb_irq_init()
154 ddbwritel(dev, 0x0fffff00, INTERRUPT_ENABLE); in ddb_irq_init()
155 ddbwritel(dev, 0x0000000f, MSI1_ENABLE); in ddb_irq_init()
157 ddbwritel(dev, 0x0fffff0f, INTERRUPT_ENABLE); in ddb_irq_init()
158 ddbwritel(dev, 0x00000000, MSI1_ENABLE); in ddb_irq_init()
166 struct ddb *dev; in ddb_probe() local
174 if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) in ddb_probe()
175 if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) in ddb_probe()
178 dev = vzalloc(sizeof(*dev)); in ddb_probe()
179 if (!dev) in ddb_probe()
182 mutex_init(&dev->mutex); in ddb_probe()
183 dev->has_dma = 1; in ddb_probe()
184 dev->pdev = pdev; in ddb_probe()
185 dev->dev = &pdev->dev; in ddb_probe()
186 pci_set_drvdata(pdev, dev); in ddb_probe()
188 dev->link[0].ids.vendor = id->vendor; in ddb_probe()
189 dev->link[0].ids.device = id->device; in ddb_probe()
190 dev->link[0].ids.subvendor = id->subvendor; in ddb_probe()
191 dev->link[0].ids.subdevice = pdev->subsystem_device; in ddb_probe()
192 dev->link[0].ids.devid = (id->device << 16) | id->vendor; in ddb_probe()
194 dev->link[0].dev = dev; in ddb_probe()
195 dev->link[0].info = get_ddb_info(id->vendor, id->device, in ddb_probe()
198 dev_info(&pdev->dev, "detected %s\n", dev->link[0].info->name); in ddb_probe()
200 dev->regs_len = pci_resource_len(dev->pdev, 0); in ddb_probe()
201 dev->regs = ioremap(pci_resource_start(dev->pdev, 0), in ddb_probe()
202 pci_resource_len(dev->pdev, 0)); in ddb_probe()
204 if (!dev->regs) { in ddb_probe()
205 dev_err(&pdev->dev, "not enough memory for register map\n"); in ddb_probe()
209 if (ddbreadl(dev, 0) == 0xffffffff) { in ddb_probe()
210 dev_err(&pdev->dev, "cannot read registers\n"); in ddb_probe()
215 dev->link[0].ids.hwid = ddbreadl(dev, 0); in ddb_probe()
216 dev->link[0].ids.regmapid = ddbreadl(dev, 4); in ddb_probe()
218 dev_info(&pdev->dev, "HW %08x REGMAP %08x\n", in ddb_probe()
219 dev->link[0].ids.hwid, dev->link[0].ids.regmapid); in ddb_probe()
221 ddbwritel(dev, 0, DMA_BASE_READ); in ddb_probe()
222 ddbwritel(dev, 0, DMA_BASE_WRITE); in ddb_probe()
224 stat = ddb_irq_init(dev); in ddb_probe()
228 if (ddb_init(dev) == 0) in ddb_probe()
231 ddb_irq_exit(dev); in ddb_probe()
233 dev_err(&pdev->dev, "fail0\n"); in ddb_probe()
234 ddb_msi_exit(dev); in ddb_probe()
236 dev_err(&pdev->dev, "fail\n"); in ddb_probe()
238 ddb_unmap(dev); in ddb_probe()