Lines Matching full:a
27 extern int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
37 static int diva_bri_cleanup_adapter(diva_os_xdi_adapter_t *a);
38 static dword diva_bri_get_serial_number(diva_os_xdi_adapter_t *a);
39 static int diva_bri_cmd_card_proc(struct _diva_os_xdi_adapter *a,
41 static int diva_bri_reregister_io(diva_os_xdi_adapter_t *a);
48 static int diva_bri_stop_adapter(diva_os_xdi_adapter_t *a);
50 static void diva_bri_set_addresses(diva_os_xdi_adapter_t *a) in diva_bri_set_addresses() argument
52 a->resources.pci.mem_type_id[MEM_TYPE_RAM] = 0; in diva_bri_set_addresses()
53 a->resources.pci.mem_type_id[MEM_TYPE_CFG] = 1; in diva_bri_set_addresses()
54 a->resources.pci.mem_type_id[MEM_TYPE_ADDRESS] = 2; in diva_bri_set_addresses()
55 a->resources.pci.mem_type_id[MEM_TYPE_RESET] = 1; in diva_bri_set_addresses()
56 a->resources.pci.mem_type_id[MEM_TYPE_PORT] = 2; in diva_bri_set_addresses()
57 a->resources.pci.mem_type_id[MEM_TYPE_CTLREG] = 2; in diva_bri_set_addresses()
59 a->xdi_adapter.ram = a->resources.pci.addr[0]; in diva_bri_set_addresses()
60 a->xdi_adapter.cfg = a->resources.pci.addr[1]; in diva_bri_set_addresses()
61 a->xdi_adapter.Address = a->resources.pci.addr[2]; in diva_bri_set_addresses()
63 a->xdi_adapter.reset = a->xdi_adapter.cfg; in diva_bri_set_addresses()
64 a->xdi_adapter.port = a->xdi_adapter.Address; in diva_bri_set_addresses()
66 a->xdi_adapter.ctlReg = a->xdi_adapter.port + M_PCI_RESET; in diva_bri_set_addresses()
68 a->xdi_adapter.reset += 0x4C; /* PLX 9050 !! */ in diva_bri_set_addresses()
76 int diva_bri_init_card(diva_os_xdi_adapter_t *a) in diva_bri_init_card() argument
88 a->xdi_adapter.Properties = CardProperties[a->CardOrdinal]; in diva_bri_init_card()
89 DBG_LOG(("Load %s", a->xdi_adapter.Properties.Name)) in diva_bri_init_card()
95 a->resources.pci.bar[bar] = in diva_bri_init_card()
96 divasa_get_pci_bar(a->resources.pci.bus, in diva_bri_init_card()
97 a->resources.pci.func, bar, in diva_bri_init_card()
98 a->resources.pci.hdev); in diva_bri_init_card()
99 if (!a->resources.pci.bar[bar]) { in diva_bri_init_card()
100 DBG_ERR(("A: can't get BAR[%d]", bar)) in diva_bri_init_card()
105 a->resources.pci.irq = in diva_bri_init_card()
106 (byte) divasa_get_pci_irq(a->resources.pci.bus, in diva_bri_init_card()
107 a->resources.pci.func, in diva_bri_init_card()
108 a->resources.pci.hdev); in diva_bri_init_card()
109 if (!a->resources.pci.irq) { in diva_bri_init_card()
110 DBG_ERR(("A: invalid irq")); in diva_bri_init_card()
118 Bus = a->resources.pci.bus; in diva_bri_init_card()
119 Slot = a->resources.pci.func; in diva_bri_init_card()
120 hdev = a->resources.pci.hdev; in diva_bri_init_card()
148 if (!(a->resources.pci.addr[0] = in diva_bri_init_card()
149 divasa_remap_pci_bar(a, 0, a->resources.pci.bar[0], in diva_bri_init_card()
151 DBG_ERR(("A: BRI, can't map BAR[0]")) in diva_bri_init_card()
152 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
156 sprintf(&a->port_name[0], "BRI %02x:%02x", in diva_bri_init_card()
157 a->resources.pci.bus, a->resources.pci.func); in diva_bri_init_card()
159 if (diva_os_register_io_port(a, 1, a->resources.pci.bar[1], in diva_bri_init_card()
160 bri_bar_length[1], &a->port_name[0], 1)) { in diva_bri_init_card()
161 DBG_ERR(("A: BRI, can't register BAR[1]")) in diva_bri_init_card()
162 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
165 a->resources.pci.addr[1] = (void *) (unsigned long) a->resources.pci.bar[1]; in diva_bri_init_card()
166 a->resources.pci.length[1] = bri_bar_length[1]; in diva_bri_init_card()
168 if (diva_os_register_io_port(a, 1, a->resources.pci.bar[2], in diva_bri_init_card()
169 bar2_length, &a->port_name[0], 2)) { in diva_bri_init_card()
170 DBG_ERR(("A: BRI, can't register BAR[2]")) in diva_bri_init_card()
171 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
174 a->resources.pci.addr[2] = (void *) (unsigned long) a->resources.pci.bar[2]; in diva_bri_init_card()
175 a->resources.pci.length[2] = bar2_length; in diva_bri_init_card()
180 diva_bri_set_addresses(a); in diva_bri_init_card()
185 a->xdi_adapter.serialNo = diva_bri_get_serial_number(a); in diva_bri_init_card()
190 if (diva_bri_reregister_io(a)) { in diva_bri_init_card()
191 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
199 (&a->xdi_adapter.isr_spin_lock, "isr")) { in diva_bri_init_card()
200 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
204 (&a->xdi_adapter.data_spin_lock, "data")) { in diva_bri_init_card()
205 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
209 strcpy(a->xdi_adapter.req_soft_isr.dpc_thread_name, "kdivasbrid"); in diva_bri_init_card()
211 if (diva_os_initialize_soft_isr(&a->xdi_adapter.req_soft_isr, in diva_bri_init_card()
212 DIDpcRoutine, &a->xdi_adapter)) { in diva_bri_init_card()
213 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
219 a->xdi_adapter.isr_soft_isr.object = a->xdi_adapter.req_soft_isr.object; in diva_bri_init_card()
224 a->xdi_adapter.Channels = CardProperties[a->CardOrdinal].Channels; in diva_bri_init_card()
225 a->xdi_adapter.e_max = CardProperties[a->CardOrdinal].E_info; in diva_bri_init_card()
226 a->xdi_adapter.e_tbl = diva_os_malloc(0, a->xdi_adapter.e_max * sizeof(E_INFO)); in diva_bri_init_card()
227 if (!a->xdi_adapter.e_tbl) { in diva_bri_init_card()
228 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
231 memset(a->xdi_adapter.e_tbl, 0x00, a->xdi_adapter.e_max * sizeof(E_INFO)); in diva_bri_init_card()
236 a->xdi_adapter.a.io = &a->xdi_adapter; in diva_bri_init_card()
237 a->xdi_adapter.DIRequest = request; in diva_bri_init_card()
238 a->interface.cleanup_adapter_proc = diva_bri_cleanup_adapter; in diva_bri_init_card()
239 a->interface.cmd_proc = diva_bri_cmd_card_proc; in diva_bri_init_card()
241 p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); in diva_bri_init_card()
243 DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); in diva_bri_init_card()
245 prepare_maestra_functions(&a->xdi_adapter); in diva_bri_init_card()
247 a->dsp_mask = 0x00000003; in diva_bri_init_card()
252 a->xdi_adapter.irq_info.irq_nr = a->resources.pci.irq; in diva_bri_init_card()
253 sprintf(a->xdi_adapter.irq_info.irq_name, "DIVA BRI %ld", in diva_bri_init_card()
254 (long) a->xdi_adapter.serialNo); in diva_bri_init_card()
255 if (diva_os_register_irq(a, a->xdi_adapter.irq_info.irq_nr, in diva_bri_init_card()
256 a->xdi_adapter.irq_info.irq_name)) { in diva_bri_init_card()
257 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
260 a->xdi_adapter.irq_info.registered = 1; in diva_bri_init_card()
262 diva_log_info("%s IRQ:%d SerNo:%d", a->xdi_adapter.Properties.Name, in diva_bri_init_card()
263 a->resources.pci.irq, a->xdi_adapter.serialNo); in diva_bri_init_card()
269 static int diva_bri_cleanup_adapter(diva_os_xdi_adapter_t *a) in diva_bri_cleanup_adapter() argument
273 if (a->xdi_adapter.Initialized) { in diva_bri_cleanup_adapter()
274 diva_bri_stop_adapter(a); in diva_bri_cleanup_adapter()
280 if (a->xdi_adapter.irq_info.registered) { in diva_bri_cleanup_adapter()
281 diva_os_remove_irq(a, a->xdi_adapter.irq_info.irq_nr); in diva_bri_cleanup_adapter()
283 a->xdi_adapter.irq_info.registered = 0; in diva_bri_cleanup_adapter()
285 if (a->resources.pci.addr[0] && a->resources.pci.bar[0]) { in diva_bri_cleanup_adapter()
286 divasa_unmap_pci_bar(a->resources.pci.addr[0]); in diva_bri_cleanup_adapter()
287 a->resources.pci.addr[0] = NULL; in diva_bri_cleanup_adapter()
288 a->resources.pci.bar[0] = 0; in diva_bri_cleanup_adapter()
292 if (a->resources.pci.addr[i] && a->resources.pci.bar[i]) { in diva_bri_cleanup_adapter()
293 diva_os_register_io_port(a, 0, in diva_bri_cleanup_adapter()
294 a->resources.pci.bar[i], in diva_bri_cleanup_adapter()
295 a->resources.pci. in diva_bri_cleanup_adapter()
297 &a->port_name[0], i); in diva_bri_cleanup_adapter()
298 a->resources.pci.addr[i] = NULL; in diva_bri_cleanup_adapter()
299 a->resources.pci.bar[i] = 0; in diva_bri_cleanup_adapter()
306 diva_os_cancel_soft_isr(&a->xdi_adapter.req_soft_isr); in diva_bri_cleanup_adapter()
307 diva_os_cancel_soft_isr(&a->xdi_adapter.isr_soft_isr); in diva_bri_cleanup_adapter()
309 diva_os_remove_soft_isr(&a->xdi_adapter.req_soft_isr); in diva_bri_cleanup_adapter()
310 a->xdi_adapter.isr_soft_isr.object = NULL; in diva_bri_cleanup_adapter()
312 diva_os_destroy_spin_lock(&a->xdi_adapter.isr_spin_lock, "rm"); in diva_bri_cleanup_adapter()
313 diva_os_destroy_spin_lock(&a->xdi_adapter.data_spin_lock, "rm"); in diva_bri_cleanup_adapter()
318 if (a->xdi_adapter.e_tbl) { in diva_bri_cleanup_adapter()
319 diva_os_free(0, a->xdi_adapter.e_tbl); in diva_bri_cleanup_adapter()
320 a->xdi_adapter.e_tbl = NULL; in diva_bri_cleanup_adapter()
333 static dword diva_bri_get_serial_number(diva_os_xdi_adapter_t *a) in diva_bri_get_serial_number() argument
340 confIO = DIVA_OS_MEM_ATTACH_CFG(&a->xdi_adapter); in diva_bri_get_serial_number()
344 DIVA_OS_MEM_DETACH_CFG(&a->xdi_adapter, confIO); in diva_bri_get_serial_number()
349 confMem = (word __iomem *)DIVA_OS_MEM_ATTACH_RAM(&a->xdi_adapter); in diva_bri_get_serial_number()
353 DIVA_OS_MEM_DETACH_RAM(&a->xdi_adapter, confMem); in diva_bri_get_serial_number()
365 static int diva_bri_reregister_io(diva_os_xdi_adapter_t *a) in diva_bri_reregister_io() argument
370 diva_os_register_io_port(a, 0, a->resources.pci.bar[i], in diva_bri_reregister_io()
371 a->resources.pci.length[i], in diva_bri_reregister_io()
372 &a->port_name[0], i); in diva_bri_reregister_io()
373 a->resources.pci.addr[i] = NULL; in diva_bri_reregister_io()
376 sprintf(a->port_name, "DIVA BRI %ld", in diva_bri_reregister_io()
377 (long) a->xdi_adapter.serialNo); in diva_bri_reregister_io()
380 if (diva_os_register_io_port(a, 1, a->resources.pci.bar[i], in diva_bri_reregister_io()
381 a->resources.pci.length[i], in diva_bri_reregister_io()
382 &a->port_name[0], i)) { in diva_bri_reregister_io()
383 DBG_ERR(("A: failed to reregister BAR[%d]", i)) in diva_bri_reregister_io()
386 a->resources.pci.addr[i] = in diva_bri_reregister_io()
387 (void *) (unsigned long) a->resources.pci.bar[i]; in diva_bri_reregister_io()
397 diva_bri_cmd_card_proc(struct _diva_os_xdi_adapter *a, in diva_bri_cmd_card_proc() argument
402 if (cmd->adapter != a->controller) { in diva_bri_cmd_card_proc()
403 DBG_ERR(("A: pri_cmd, invalid controller=%d != %d", in diva_bri_cmd_card_proc()
404 cmd->adapter, a->controller)) in diva_bri_cmd_card_proc()
410 a->xdi_mbox.data_length = sizeof(dword); in diva_bri_cmd_card_proc()
411 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
412 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
413 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
414 *(dword *) a->xdi_mbox.data = in diva_bri_cmd_card_proc()
415 (dword) a->CardOrdinal; in diva_bri_cmd_card_proc()
416 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
422 a->xdi_mbox.data_length = sizeof(dword); in diva_bri_cmd_card_proc()
423 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
424 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
425 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
426 *(dword *) a->xdi_mbox.data = in diva_bri_cmd_card_proc()
427 (dword) a->xdi_adapter.serialNo; in diva_bri_cmd_card_proc()
428 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
434 a->xdi_mbox.data_length = sizeof(dword) * 9; in diva_bri_cmd_card_proc()
435 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
436 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
437 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
439 dword *data = (dword *) a->xdi_mbox.data; in diva_bri_cmd_card_proc()
442 *data++ = a->resources.pci.bar[i]; in diva_bri_cmd_card_proc()
444 *data++ = (dword) a->resources.pci.irq; in diva_bri_cmd_card_proc()
445 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
451 a->xdi_mbox.data_length = sizeof(dword); in diva_bri_cmd_card_proc()
452 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
453 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
454 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
455 dword *data = (dword *) a->xdi_mbox.data; in diva_bri_cmd_card_proc()
456 if (!a->xdi_adapter.port) { in diva_bri_cmd_card_proc()
458 } else if (a->xdi_adapter.trapped) { in diva_bri_cmd_card_proc()
460 } else if (a->xdi_adapter.Initialized) { in diva_bri_cmd_card_proc()
465 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
471 ret = diva_bri_reset_adapter(&a->xdi_adapter); in diva_bri_cmd_card_proc()
475 ret = diva_bri_write_sdram_block(&a->xdi_adapter, in diva_bri_cmd_card_proc()
484 ret = diva_bri_start_adapter(&a->xdi_adapter, in diva_bri_cmd_card_proc()
492 a->xdi_adapter.features = in diva_bri_cmd_card_proc()
494 a->xdi_adapter.a.protocol_capabilities = in diva_bri_cmd_card_proc()
495 a->xdi_adapter.features; in diva_bri_cmd_card_proc()
498 a->xdi_adapter.features)) ret = 0; in diva_bri_cmd_card_proc()
502 ret = diva_bri_stop_adapter(a); in diva_bri_cmd_card_proc()
506 ret = diva_card_read_xlog(a); in diva_bri_cmd_card_proc()
511 ("A: A(%d) invalid cmd=%d", a->controller, in diva_bri_cmd_card_proc()
527 DBG_ERR(("A: A(%d) can't reset BRI adapter - please stop first", in diva_bri_reset_adapter()
584 memset(&IoAdapter->a.IdTable[0], 0x00, in diva_bri_reset_adapter()
585 sizeof(IoAdapter->a.IdTable)); in diva_bri_reset_adapter()
586 memset(&IoAdapter->a.IdTypeTable[0], 0x00, in diva_bri_reset_adapter()
587 sizeof(IoAdapter->a.IdTypeTable)); in diva_bri_reset_adapter()
588 memset(&IoAdapter->a.FlowControlIdTable[0], 0x00, in diva_bri_reset_adapter()
589 sizeof(IoAdapter->a.FlowControlIdTable)); in diva_bri_reset_adapter()
590 memset(&IoAdapter->a.FlowControlSkipTable[0], 0x00, in diva_bri_reset_adapter()
591 sizeof(IoAdapter->a.FlowControlSkipTable)); in diva_bri_reset_adapter()
592 memset(&IoAdapter->a.misc_flags_table[0], 0x00, in diva_bri_reset_adapter()
593 sizeof(IoAdapter->a.misc_flags_table)); in diva_bri_reset_adapter()
594 memset(&IoAdapter->a.rx_stream[0], 0x00, in diva_bri_reset_adapter()
595 sizeof(IoAdapter->a.rx_stream)); in diva_bri_reset_adapter()
596 memset(&IoAdapter->a.tx_stream[0], 0x00, in diva_bri_reset_adapter()
597 sizeof(IoAdapter->a.tx_stream)); in diva_bri_reset_adapter()
598 memset(&IoAdapter->a.tx_pos[0], 0x00, sizeof(IoAdapter->a.tx_pos)); in diva_bri_reset_adapter()
599 memset(&IoAdapter->a.rx_pos[0], 0x00, sizeof(IoAdapter->a.rx_pos)); in diva_bri_reset_adapter()
640 ADAPTER *a = &IoAdapter->a; in diva_bri_start_adapter() local
644 ("A: A(%d) bri_start_adapter, adapter already running", in diva_bri_start_adapter()
648 DBG_ERR(("A: A(%d) bri_start_adapter, adapter not mapped", in diva_bri_start_adapter()
652 sprintf(IoAdapter->Name, "A(%d)", (int) IoAdapter->ANum); in diva_bri_start_adapter()
653 DBG_LOG(("A(%d) start BRI", IoAdapter->ANum)) in diva_bri_start_adapter()
704 DBG_FTL(("A: A(%d) %s: Adapter selftest failed 0x%04X", in diva_bri_start_adapter()
717 a->ReadyInt = 1; in diva_bri_start_adapter()
725 a->ram_out(a, &PR_RAM->ReadyInt, 1); in diva_bri_start_adapter()
731 ("A: A(%d) interrupt test failed", in diva_bri_start_adapter()
740 DBG_LOG(("A(%d) BRI adapter successfully started", IoAdapter->ANum)) in diva_bri_start_adapter()
749 static void diva_bri_clear_interrupts(diva_os_xdi_adapter_t *a) in diva_bri_clear_interrupts() argument
751 PISDN_ADAPTER IoAdapter = &a->xdi_adapter; in diva_bri_clear_interrupts()
758 IoAdapter->tst_irq(&IoAdapter->a); in diva_bri_clear_interrupts()
759 IoAdapter->clr_irq(&IoAdapter->a); in diva_bri_clear_interrupts()
760 IoAdapter->tst_irq(&IoAdapter->a); in diva_bri_clear_interrupts()
772 static int diva_bri_stop_adapter(diva_os_xdi_adapter_t *a) in diva_bri_stop_adapter() argument
774 PISDN_ADAPTER IoAdapter = &a->xdi_adapter; in diva_bri_stop_adapter()
781 DBG_ERR(("A: A(%d) can't stop BRI adapter - not running", in diva_bri_stop_adapter()
795 a->clear_interrupts_proc = diva_bri_clear_interrupts; in diva_bri_stop_adapter()
796 IoAdapter->a.ReadyInt = 1; in diva_bri_stop_adapter()
797 IoAdapter->a.ram_inc(&IoAdapter->a, &PR_RAM->ReadyInt); in diva_bri_stop_adapter()
800 } while (i-- && a->clear_interrupts_proc); in diva_bri_stop_adapter()
801 if (a->clear_interrupts_proc) { in diva_bri_stop_adapter()
802 diva_bri_clear_interrupts(a); in diva_bri_stop_adapter()
803 a->clear_interrupts_proc = NULL; in diva_bri_stop_adapter()
804 DBG_ERR(("A: A(%d) no final interrupt from BRI adapter", in diva_bri_stop_adapter()
807 IoAdapter->a.ReadyInt = 0; in diva_bri_stop_adapter()