Lines Matching full:a
26 extern int diva_card_read_xlog(diva_os_xdi_adapter_t * a);
36 static int diva_bri_cleanup_adapter(diva_os_xdi_adapter_t * a);
37 static dword diva_bri_get_serial_number(diva_os_xdi_adapter_t * a);
38 static int diva_bri_cmd_card_proc(struct _diva_os_xdi_adapter *a,
40 static int diva_bri_reregister_io(diva_os_xdi_adapter_t * a);
47 static int diva_bri_stop_adapter(diva_os_xdi_adapter_t * a);
49 static void diva_bri_set_addresses(diva_os_xdi_adapter_t * a) in diva_bri_set_addresses() argument
51 a->resources.pci.mem_type_id[MEM_TYPE_RAM] = 0; in diva_bri_set_addresses()
52 a->resources.pci.mem_type_id[MEM_TYPE_CFG] = 1; in diva_bri_set_addresses()
53 a->resources.pci.mem_type_id[MEM_TYPE_ADDRESS] = 2; in diva_bri_set_addresses()
54 a->resources.pci.mem_type_id[MEM_TYPE_RESET] = 1; in diva_bri_set_addresses()
55 a->resources.pci.mem_type_id[MEM_TYPE_PORT] = 2; in diva_bri_set_addresses()
56 a->resources.pci.mem_type_id[MEM_TYPE_CTLREG] = 2; in diva_bri_set_addresses()
58 a->xdi_adapter.ram = a->resources.pci.addr[0]; in diva_bri_set_addresses()
59 a->xdi_adapter.cfg = a->resources.pci.addr[1]; in diva_bri_set_addresses()
60 a->xdi_adapter.Address = a->resources.pci.addr[2]; in diva_bri_set_addresses()
62 a->xdi_adapter.reset = a->xdi_adapter.cfg; in diva_bri_set_addresses()
63 a->xdi_adapter.port = a->xdi_adapter.Address; in diva_bri_set_addresses()
65 a->xdi_adapter.ctlReg = a->xdi_adapter.port + M_PCI_RESET; in diva_bri_set_addresses()
67 a->xdi_adapter.reset += 0x4C; /* PLX 9050 !! */ in diva_bri_set_addresses()
75 int diva_bri_init_card(diva_os_xdi_adapter_t * a) in diva_bri_init_card() argument
87 a->xdi_adapter.Properties = CardProperties[a->CardOrdinal]; in diva_bri_init_card()
88 DBG_LOG(("Load %s", a->xdi_adapter.Properties.Name)) in diva_bri_init_card()
94 a->resources.pci.bar[bar] = in diva_bri_init_card()
95 divasa_get_pci_bar(a->resources.pci.bus, in diva_bri_init_card()
96 a->resources.pci.func, bar, in diva_bri_init_card()
97 a->resources.pci.hdev); in diva_bri_init_card()
98 if (!a->resources.pci.bar[bar]) { in diva_bri_init_card()
99 DBG_ERR(("A: can't get BAR[%d]", bar)) in diva_bri_init_card()
104 a->resources.pci.irq = in diva_bri_init_card()
105 (byte) divasa_get_pci_irq(a->resources.pci.bus, in diva_bri_init_card()
106 a->resources.pci.func, in diva_bri_init_card()
107 a->resources.pci.hdev); in diva_bri_init_card()
108 if (!a->resources.pci.irq) { in diva_bri_init_card()
109 DBG_ERR(("A: invalid irq")); in diva_bri_init_card()
117 Bus = a->resources.pci.bus; in diva_bri_init_card()
118 Slot = a->resources.pci.func; in diva_bri_init_card()
119 hdev = a->resources.pci.hdev; in diva_bri_init_card()
147 if (!(a->resources.pci.addr[0] = in diva_bri_init_card()
148 divasa_remap_pci_bar(a, 0, a->resources.pci.bar[0], in diva_bri_init_card()
150 DBG_ERR(("A: BRI, can't map BAR[0]")) in diva_bri_init_card()
151 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
155 sprintf(&a->port_name[0], "BRI %02x:%02x", in diva_bri_init_card()
156 a->resources.pci.bus, a->resources.pci.func); in diva_bri_init_card()
158 if (diva_os_register_io_port(a, 1, a->resources.pci.bar[1], in diva_bri_init_card()
159 bri_bar_length[1], &a->port_name[0], 1)) { in diva_bri_init_card()
160 DBG_ERR(("A: BRI, can't register BAR[1]")) in diva_bri_init_card()
161 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
164 a->resources.pci.addr[1] = (void *) (unsigned long) a->resources.pci.bar[1]; in diva_bri_init_card()
165 a->resources.pci.length[1] = bri_bar_length[1]; in diva_bri_init_card()
167 if (diva_os_register_io_port(a, 1, a->resources.pci.bar[2], in diva_bri_init_card()
168 bar2_length, &a->port_name[0], 2)) { in diva_bri_init_card()
169 DBG_ERR(("A: BRI, can't register BAR[2]")) in diva_bri_init_card()
170 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
173 a->resources.pci.addr[2] = (void *) (unsigned long) a->resources.pci.bar[2]; in diva_bri_init_card()
174 a->resources.pci.length[2] = bar2_length; in diva_bri_init_card()
179 diva_bri_set_addresses(a); in diva_bri_init_card()
184 a->xdi_adapter.serialNo = diva_bri_get_serial_number(a); in diva_bri_init_card()
189 if (diva_bri_reregister_io(a)) { in diva_bri_init_card()
190 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
198 (&a->xdi_adapter.isr_spin_lock, "isr")) { in diva_bri_init_card()
199 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
203 (&a->xdi_adapter.data_spin_lock, "data")) { in diva_bri_init_card()
204 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
208 strcpy(a->xdi_adapter.req_soft_isr.dpc_thread_name, "kdivasbrid"); in diva_bri_init_card()
210 if (diva_os_initialize_soft_isr(&a->xdi_adapter.req_soft_isr, in diva_bri_init_card()
211 DIDpcRoutine, &a->xdi_adapter)) { in diva_bri_init_card()
212 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
218 a->xdi_adapter.isr_soft_isr.object = a->xdi_adapter.req_soft_isr.object; in diva_bri_init_card()
223 a->xdi_adapter.Channels = CardProperties[a->CardOrdinal].Channels; in diva_bri_init_card()
224 a->xdi_adapter.e_max = CardProperties[a->CardOrdinal].E_info; in diva_bri_init_card()
225 a->xdi_adapter.e_tbl = diva_os_malloc(0, a->xdi_adapter.e_max * sizeof(E_INFO)); in diva_bri_init_card()
226 if (!a->xdi_adapter.e_tbl) { in diva_bri_init_card()
227 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
230 memset(a->xdi_adapter.e_tbl, 0x00, a->xdi_adapter.e_max * sizeof(E_INFO)); in diva_bri_init_card()
235 a->xdi_adapter.a.io = &a->xdi_adapter; in diva_bri_init_card()
236 a->xdi_adapter.DIRequest = request; in diva_bri_init_card()
237 a->interface.cleanup_adapter_proc = diva_bri_cleanup_adapter; in diva_bri_init_card()
238 a->interface.cmd_proc = diva_bri_cmd_card_proc; in diva_bri_init_card()
240 p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); in diva_bri_init_card()
242 DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); in diva_bri_init_card()
244 prepare_maestra_functions(&a->xdi_adapter); in diva_bri_init_card()
246 a->dsp_mask = 0x00000003; in diva_bri_init_card()
251 a->xdi_adapter.irq_info.irq_nr = a->resources.pci.irq; in diva_bri_init_card()
252 sprintf(a->xdi_adapter.irq_info.irq_name, "DIVA BRI %ld", in diva_bri_init_card()
253 (long) a->xdi_adapter.serialNo); in diva_bri_init_card()
254 if (diva_os_register_irq(a, a->xdi_adapter.irq_info.irq_nr, in diva_bri_init_card()
255 a->xdi_adapter.irq_info.irq_name)) { in diva_bri_init_card()
256 diva_bri_cleanup_adapter(a); in diva_bri_init_card()
259 a->xdi_adapter.irq_info.registered = 1; in diva_bri_init_card()
261 diva_log_info("%s IRQ:%d SerNo:%d", a->xdi_adapter.Properties.Name, in diva_bri_init_card()
262 a->resources.pci.irq, a->xdi_adapter.serialNo); in diva_bri_init_card()
268 static int diva_bri_cleanup_adapter(diva_os_xdi_adapter_t * a) in diva_bri_cleanup_adapter() argument
272 if (a->xdi_adapter.Initialized) { in diva_bri_cleanup_adapter()
273 diva_bri_stop_adapter(a); in diva_bri_cleanup_adapter()
279 if (a->xdi_adapter.irq_info.registered) { in diva_bri_cleanup_adapter()
280 diva_os_remove_irq(a, a->xdi_adapter.irq_info.irq_nr); in diva_bri_cleanup_adapter()
282 a->xdi_adapter.irq_info.registered = 0; in diva_bri_cleanup_adapter()
284 if (a->resources.pci.addr[0] && a->resources.pci.bar[0]) { in diva_bri_cleanup_adapter()
285 divasa_unmap_pci_bar(a->resources.pci.addr[0]); in diva_bri_cleanup_adapter()
286 a->resources.pci.addr[0] = NULL; in diva_bri_cleanup_adapter()
287 a->resources.pci.bar[0] = 0; in diva_bri_cleanup_adapter()
291 if (a->resources.pci.addr[i] && a->resources.pci.bar[i]) { in diva_bri_cleanup_adapter()
292 diva_os_register_io_port(a, 0, in diva_bri_cleanup_adapter()
293 a->resources.pci.bar[i], in diva_bri_cleanup_adapter()
294 a->resources.pci. in diva_bri_cleanup_adapter()
296 &a->port_name[0], i); in diva_bri_cleanup_adapter()
297 a->resources.pci.addr[i] = NULL; in diva_bri_cleanup_adapter()
298 a->resources.pci.bar[i] = 0; in diva_bri_cleanup_adapter()
305 diva_os_cancel_soft_isr(&a->xdi_adapter.req_soft_isr); in diva_bri_cleanup_adapter()
306 diva_os_cancel_soft_isr(&a->xdi_adapter.isr_soft_isr); in diva_bri_cleanup_adapter()
308 diva_os_remove_soft_isr(&a->xdi_adapter.req_soft_isr); in diva_bri_cleanup_adapter()
309 a->xdi_adapter.isr_soft_isr.object = NULL; in diva_bri_cleanup_adapter()
311 diva_os_destroy_spin_lock(&a->xdi_adapter.isr_spin_lock, "rm"); in diva_bri_cleanup_adapter()
312 diva_os_destroy_spin_lock(&a->xdi_adapter.data_spin_lock, "rm"); in diva_bri_cleanup_adapter()
317 if (a->xdi_adapter.e_tbl) { in diva_bri_cleanup_adapter()
318 diva_os_free(0, a->xdi_adapter.e_tbl); in diva_bri_cleanup_adapter()
319 a->xdi_adapter.e_tbl = NULL; in diva_bri_cleanup_adapter()
332 static dword diva_bri_get_serial_number(diva_os_xdi_adapter_t * a) in diva_bri_get_serial_number() argument
339 confIO = DIVA_OS_MEM_ATTACH_CFG(&a->xdi_adapter); in diva_bri_get_serial_number()
343 DIVA_OS_MEM_DETACH_CFG(&a->xdi_adapter, confIO); in diva_bri_get_serial_number()
348 confMem = (word __iomem *)DIVA_OS_MEM_ATTACH_RAM(&a->xdi_adapter); in diva_bri_get_serial_number()
352 DIVA_OS_MEM_DETACH_RAM(&a->xdi_adapter, confMem); in diva_bri_get_serial_number()
364 static int diva_bri_reregister_io(diva_os_xdi_adapter_t * a) in diva_bri_reregister_io() argument
369 diva_os_register_io_port(a, 0, a->resources.pci.bar[i], in diva_bri_reregister_io()
370 a->resources.pci.length[i], in diva_bri_reregister_io()
371 &a->port_name[0], i); in diva_bri_reregister_io()
372 a->resources.pci.addr[i] = NULL; in diva_bri_reregister_io()
375 sprintf(a->port_name, "DIVA BRI %ld", in diva_bri_reregister_io()
376 (long) a->xdi_adapter.serialNo); in diva_bri_reregister_io()
379 if (diva_os_register_io_port(a, 1, a->resources.pci.bar[i], in diva_bri_reregister_io()
380 a->resources.pci.length[i], in diva_bri_reregister_io()
381 &a->port_name[0], i)) { in diva_bri_reregister_io()
382 DBG_ERR(("A: failed to reregister BAR[%d]", i)) in diva_bri_reregister_io()
385 a->resources.pci.addr[i] = in diva_bri_reregister_io()
386 (void *) (unsigned long) a->resources.pci.bar[i]; in diva_bri_reregister_io()
396 diva_bri_cmd_card_proc(struct _diva_os_xdi_adapter *a, in diva_bri_cmd_card_proc() argument
401 if (cmd->adapter != a->controller) { in diva_bri_cmd_card_proc()
402 DBG_ERR(("A: pri_cmd, invalid controller=%d != %d", in diva_bri_cmd_card_proc()
403 cmd->adapter, a->controller)) in diva_bri_cmd_card_proc()
409 a->xdi_mbox.data_length = sizeof(dword); in diva_bri_cmd_card_proc()
410 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
411 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
412 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
413 *(dword *) a->xdi_mbox.data = in diva_bri_cmd_card_proc()
414 (dword) a->CardOrdinal; in diva_bri_cmd_card_proc()
415 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
421 a->xdi_mbox.data_length = sizeof(dword); in diva_bri_cmd_card_proc()
422 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
423 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
424 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
425 *(dword *) a->xdi_mbox.data = in diva_bri_cmd_card_proc()
426 (dword) a->xdi_adapter.serialNo; in diva_bri_cmd_card_proc()
427 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
433 a->xdi_mbox.data_length = sizeof(dword) * 9; in diva_bri_cmd_card_proc()
434 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
435 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
436 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
438 dword *data = (dword *) a->xdi_mbox.data; in diva_bri_cmd_card_proc()
441 *data++ = a->resources.pci.bar[i]; in diva_bri_cmd_card_proc()
443 *data++ = (dword) a->resources.pci.irq; in diva_bri_cmd_card_proc()
444 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
450 a->xdi_mbox.data_length = sizeof(dword); in diva_bri_cmd_card_proc()
451 a->xdi_mbox.data = in diva_bri_cmd_card_proc()
452 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_bri_cmd_card_proc()
453 if (a->xdi_mbox.data) { in diva_bri_cmd_card_proc()
454 dword *data = (dword *) a->xdi_mbox.data; in diva_bri_cmd_card_proc()
455 if (!a->xdi_adapter.port) { in diva_bri_cmd_card_proc()
457 } else if (a->xdi_adapter.trapped) { in diva_bri_cmd_card_proc()
459 } else if (a->xdi_adapter.Initialized) { in diva_bri_cmd_card_proc()
464 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_bri_cmd_card_proc()
470 ret = diva_bri_reset_adapter(&a->xdi_adapter); in diva_bri_cmd_card_proc()
474 ret = diva_bri_write_sdram_block(&a->xdi_adapter, in diva_bri_cmd_card_proc()
483 ret = diva_bri_start_adapter(&a->xdi_adapter, in diva_bri_cmd_card_proc()
491 a->xdi_adapter.features = in diva_bri_cmd_card_proc()
493 a->xdi_adapter.a.protocol_capabilities = in diva_bri_cmd_card_proc()
494 a->xdi_adapter.features; in diva_bri_cmd_card_proc()
497 a->xdi_adapter.features)) ret = 0; in diva_bri_cmd_card_proc()
501 ret = diva_bri_stop_adapter(a); in diva_bri_cmd_card_proc()
505 ret = diva_card_read_xlog(a); in diva_bri_cmd_card_proc()
510 ("A: A(%d) invalid cmd=%d", a->controller, in diva_bri_cmd_card_proc()
526 DBG_ERR(("A: A(%d) can't reset BRI adapter - please stop first", in diva_bri_reset_adapter()
583 memset(&IoAdapter->a.IdTable[0], 0x00, in diva_bri_reset_adapter()
584 sizeof(IoAdapter->a.IdTable)); in diva_bri_reset_adapter()
585 memset(&IoAdapter->a.IdTypeTable[0], 0x00, in diva_bri_reset_adapter()
586 sizeof(IoAdapter->a.IdTypeTable)); in diva_bri_reset_adapter()
587 memset(&IoAdapter->a.FlowControlIdTable[0], 0x00, in diva_bri_reset_adapter()
588 sizeof(IoAdapter->a.FlowControlIdTable)); in diva_bri_reset_adapter()
589 memset(&IoAdapter->a.FlowControlSkipTable[0], 0x00, in diva_bri_reset_adapter()
590 sizeof(IoAdapter->a.FlowControlSkipTable)); in diva_bri_reset_adapter()
591 memset(&IoAdapter->a.misc_flags_table[0], 0x00, in diva_bri_reset_adapter()
592 sizeof(IoAdapter->a.misc_flags_table)); in diva_bri_reset_adapter()
593 memset(&IoAdapter->a.rx_stream[0], 0x00, in diva_bri_reset_adapter()
594 sizeof(IoAdapter->a.rx_stream)); in diva_bri_reset_adapter()
595 memset(&IoAdapter->a.tx_stream[0], 0x00, in diva_bri_reset_adapter()
596 sizeof(IoAdapter->a.tx_stream)); in diva_bri_reset_adapter()
597 memset(&IoAdapter->a.tx_pos[0], 0x00, sizeof(IoAdapter->a.tx_pos)); in diva_bri_reset_adapter()
598 memset(&IoAdapter->a.rx_pos[0], 0x00, sizeof(IoAdapter->a.rx_pos)); in diva_bri_reset_adapter()
639 ADAPTER *a = &IoAdapter->a; in diva_bri_start_adapter() local
643 ("A: A(%d) bri_start_adapter, adapter already running", in diva_bri_start_adapter()
647 DBG_ERR(("A: A(%d) bri_start_adapter, adapter not mapped", in diva_bri_start_adapter()
651 sprintf(IoAdapter->Name, "A(%d)", (int) IoAdapter->ANum); in diva_bri_start_adapter()
652 DBG_LOG(("A(%d) start BRI", IoAdapter->ANum)) in diva_bri_start_adapter()
703 DBG_FTL(("A: A(%d) %s: Adapter selftest failed 0x%04X", in diva_bri_start_adapter()
716 a->ReadyInt = 1; in diva_bri_start_adapter()
724 a->ram_out(a, &PR_RAM->ReadyInt, 1); in diva_bri_start_adapter()
730 ("A: A(%d) interrupt test failed", in diva_bri_start_adapter()
739 DBG_LOG(("A(%d) BRI adapter successfully started", IoAdapter->ANum)) in diva_bri_start_adapter()
748 static void diva_bri_clear_interrupts(diva_os_xdi_adapter_t * a) in diva_bri_clear_interrupts() argument
750 PISDN_ADAPTER IoAdapter = &a->xdi_adapter; in diva_bri_clear_interrupts()
757 IoAdapter->tst_irq(&IoAdapter->a); in diva_bri_clear_interrupts()
758 IoAdapter->clr_irq(&IoAdapter->a); in diva_bri_clear_interrupts()
759 IoAdapter->tst_irq(&IoAdapter->a); in diva_bri_clear_interrupts()
771 static int diva_bri_stop_adapter(diva_os_xdi_adapter_t * a) in diva_bri_stop_adapter() argument
773 PISDN_ADAPTER IoAdapter = &a->xdi_adapter; in diva_bri_stop_adapter()
780 DBG_ERR(("A: A(%d) can't stop BRI adapter - not running", in diva_bri_stop_adapter()
794 a->clear_interrupts_proc = diva_bri_clear_interrupts; in diva_bri_stop_adapter()
795 IoAdapter->a.ReadyInt = 1; in diva_bri_stop_adapter()
796 IoAdapter->a.ram_inc(&IoAdapter->a, &PR_RAM->ReadyInt); in diva_bri_stop_adapter()
799 } while (i-- && a->clear_interrupts_proc); in diva_bri_stop_adapter()
800 if (a->clear_interrupts_proc) { in diva_bri_stop_adapter()
801 diva_bri_clear_interrupts(a); in diva_bri_stop_adapter()
802 a->clear_interrupts_proc = NULL; in diva_bri_stop_adapter()
803 DBG_ERR(("A: A(%d) no final interrupt from BRI adapter", in diva_bri_stop_adapter()
806 IoAdapter->a.ReadyInt = 0; in diva_bri_stop_adapter()