Lines Matching defs:fm

21 static void tifm_7xx1_dummy_eject(struct tifm_adapter *fm,
26 static void tifm_7xx1_eject(struct tifm_adapter *fm, struct tifm_dev *sock)
30 spin_lock_irqsave(&fm->lock, flags);
31 fm->socket_change_set |= 1 << sock->socket_id;
32 tifm_queue_work(&fm->media_switcher);
33 spin_unlock_irqrestore(&fm->lock, flags);
38 struct tifm_adapter *fm = dev_id;
42 spin_lock(&fm->lock);
43 irq_status = readl(fm->addr + FM_INTERRUPT_STATUS);
45 spin_unlock(&fm->lock);
50 writel(TIFM_IRQ_ENABLE, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
52 for (cnt = 0; cnt < fm->num_sockets; cnt++) {
53 sock = fm->sockets[cnt];
62 fm->socket_change_set |= irq_status
63 & ((1 << fm->num_sockets) - 1);
65 writel(irq_status, fm->addr + FM_INTERRUPT_STATUS);
67 if (fm->finish_me)
68 complete_all(fm->finish_me);
69 else if (!fm->socket_change_set)
70 writel(TIFM_IRQ_ENABLE, fm->addr + FM_SET_INTERRUPT_ENABLE);
72 tifm_queue_work(&fm->media_switcher);
74 spin_unlock(&fm->lock);
137 struct tifm_adapter *fm = container_of(work, struct tifm_adapter,
145 spin_lock_irqsave(&fm->lock, flags);
146 socket_change_set = fm->socket_change_set;
147 fm->socket_change_set = 0;
149 dev_dbg(fm->dev.parent, "checking media set %x\n",
153 spin_unlock_irqrestore(&fm->lock, flags);
157 for (cnt = 0; cnt < fm->num_sockets; cnt++) {
160 sock = fm->sockets[cnt];
164 dev_name(&fm->dev), fm->id, cnt);
165 fm->sockets[cnt] = NULL;
167 spin_unlock_irqrestore(&fm->lock, flags);
169 spin_lock_irqsave(&fm->lock, flags);
174 spin_unlock_irqrestore(&fm->lock, flags);
177 tifm_7xx1_sock_addr(fm->addr, cnt));
180 sock = tifm_alloc_device(fm, cnt, media_id);
182 sock->addr = tifm_7xx1_sock_addr(fm->addr, cnt);
185 spin_lock_irqsave(&fm->lock, flags);
186 if (!fm->sockets[cnt]) {
187 fm->sockets[cnt] = sock;
190 spin_unlock_irqrestore(&fm->lock, flags);
195 spin_lock_irqsave(&fm->lock, flags);
200 fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
204 fm->addr + FM_SET_INTERRUPT_ENABLE);
206 writel(TIFM_IRQ_ENABLE, fm->addr + FM_SET_INTERRUPT_ENABLE);
207 spin_unlock_irqrestore(&fm->lock, flags);
213 struct tifm_adapter *fm = pci_get_drvdata(dev);
218 for (cnt = 0; cnt < fm->num_sockets; cnt++) {
219 if (fm->sockets[cnt])
220 tifm_7xx1_sock_power_off(fm->sockets[cnt]->addr);
230 struct tifm_adapter *fm = pci_get_drvdata(dev);
239 if (WARN_ON(fm->num_sockets > ARRAY_SIZE(new_ids)))
246 for (rc = 0; rc < fm->num_sockets; rc++)
248 tifm_7xx1_sock_addr(fm->addr, rc));
249 spin_lock_irqsave(&fm->lock, flags);
250 for (rc = 0; rc < fm->num_sockets; rc++) {
251 if (fm->sockets[rc]) {
252 if (fm->sockets[rc]->type == new_ids[rc])
259 writel(TIFM_IRQ_ENABLE | TIFM_IRQ_SOCKMASK((1 << fm->num_sockets) - 1),
260 fm->addr + FM_SET_INTERRUPT_ENABLE);
264 fm->socket_change_set = 0;
266 fm->finish_me = &finish_resume;
267 spin_unlock_irqrestore(&fm->lock, flags);
272 fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
275 fm->addr + FM_SET_INTERRUPT_ENABLE);
276 spin_lock_irqsave(&fm->lock, flags);
277 fm->finish_me = NULL;
278 fm->socket_change_set ^= good_sockets & fm->socket_change_set;
281 fm->socket_change_set |= bad_sockets;
282 if (fm->socket_change_set)
283 tifm_queue_work(&fm->media_switcher);
285 spin_unlock_irqrestore(&fm->lock, flags);
287 fm->addr + FM_SET_INTERRUPT_ENABLE);
292 static int tifm_7xx1_dummy_has_ms_pif(struct tifm_adapter *fm,
298 static int tifm_7xx1_has_ms_pif(struct tifm_adapter *fm, struct tifm_dev *sock)
300 if (((fm->num_sockets == 4) && (sock->socket_id == 2))
301 || ((fm->num_sockets == 2) && (sock->socket_id == 0)))
310 struct tifm_adapter *fm;
332 fm = tifm_alloc_adapter(dev->device == PCI_DEVICE_ID_TI_XX21_XX11_FM
334 if (!fm) {
339 INIT_WORK(&fm->media_switcher, tifm_7xx1_switch_media);
340 fm->eject = tifm_7xx1_eject;
341 fm->has_ms_pif = tifm_7xx1_has_ms_pif;
342 pci_set_drvdata(dev, fm);
344 fm->addr = pci_ioremap_bar(dev, 0);
345 if (!fm->addr) {
350 rc = request_irq(dev->irq, tifm_7xx1_isr, IRQF_SHARED, DRIVER_NAME, fm);
354 rc = tifm_add_adapter(fm);
358 writel(TIFM_IRQ_ENABLE | TIFM_IRQ_SOCKMASK((1 << fm->num_sockets) - 1),
359 fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
360 writel(TIFM_IRQ_ENABLE | TIFM_IRQ_SOCKMASK((1 << fm->num_sockets) - 1),
361 fm->addr + FM_SET_INTERRUPT_ENABLE);
365 free_irq(dev->irq, fm);
367 iounmap(fm->addr);
369 tifm_free_adapter(fm);
381 struct tifm_adapter *fm = pci_get_drvdata(dev);
384 fm->eject = tifm_7xx1_dummy_eject;
385 fm->has_ms_pif = tifm_7xx1_dummy_has_ms_pif;
386 writel(TIFM_IRQ_SETALL, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
387 free_irq(dev->irq, fm);
389 tifm_remove_adapter(fm);
391 for (cnt = 0; cnt < fm->num_sockets; cnt++)
392 tifm_7xx1_sock_power_off(tifm_7xx1_sock_addr(fm->addr, cnt));
394 iounmap(fm->addr);
399 tifm_free_adapter(fm);