Lines Matching refs:a
31 extern int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
40 static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t *a);
41 static int diva_pri_cmd_card_proc(struct _diva_os_xdi_adapter *a,
43 static int pri_get_serial_number(diva_os_xdi_adapter_t *a);
44 static int diva_pri_stop_adapter(diva_os_xdi_adapter_t *a);
45 static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t *a);
60 static void diva_pri_set_addresses(diva_os_xdi_adapter_t *a) in diva_pri_set_addresses() argument
62 a->resources.pci.mem_type_id[MEM_TYPE_ADDRESS] = 0; in diva_pri_set_addresses()
63 a->resources.pci.mem_type_id[MEM_TYPE_CONTROL] = 2; in diva_pri_set_addresses()
64 a->resources.pci.mem_type_id[MEM_TYPE_CONFIG] = 4; in diva_pri_set_addresses()
65 a->resources.pci.mem_type_id[MEM_TYPE_RAM] = 0; in diva_pri_set_addresses()
66 a->resources.pci.mem_type_id[MEM_TYPE_RESET] = 2; in diva_pri_set_addresses()
67 a->resources.pci.mem_type_id[MEM_TYPE_CFG] = 4; in diva_pri_set_addresses()
68 a->resources.pci.mem_type_id[MEM_TYPE_PROM] = 3; in diva_pri_set_addresses()
70 a->xdi_adapter.Address = a->resources.pci.addr[0]; in diva_pri_set_addresses()
71 a->xdi_adapter.Control = a->resources.pci.addr[2]; in diva_pri_set_addresses()
72 a->xdi_adapter.Config = a->resources.pci.addr[4]; in diva_pri_set_addresses()
74 a->xdi_adapter.ram = a->resources.pci.addr[0]; in diva_pri_set_addresses()
75 a->xdi_adapter.ram += MP_SHARED_RAM_OFFSET; in diva_pri_set_addresses()
77 a->xdi_adapter.reset = a->resources.pci.addr[2]; in diva_pri_set_addresses()
78 a->xdi_adapter.reset += MP_RESET; in diva_pri_set_addresses()
80 a->xdi_adapter.cfg = a->resources.pci.addr[4]; in diva_pri_set_addresses()
81 a->xdi_adapter.cfg += MP_IRQ_RESET; in diva_pri_set_addresses()
83 a->xdi_adapter.sdram_bar = a->resources.pci.bar[0]; in diva_pri_set_addresses()
85 a->xdi_adapter.prom = a->resources.pci.addr[3]; in diva_pri_set_addresses()
95 int diva_pri_init_card(diva_os_xdi_adapter_t *a) in diva_pri_init_card() argument
107 pri_rev_2 = pri_is_rev_2_card(a->CardOrdinal); in diva_pri_init_card()
115 a->xdi_adapter.Properties = CardProperties[a->CardOrdinal]; in diva_pri_init_card()
116 DBG_LOG(("Load %s", a->xdi_adapter.Properties.Name)) in diva_pri_init_card()
123 a->resources.pci.bar[bar] = in diva_pri_init_card()
124 divasa_get_pci_bar(a->resources.pci.bus, in diva_pri_init_card()
125 a->resources.pci.func, bar, in diva_pri_init_card()
126 a->resources.pci.hdev); in diva_pri_init_card()
127 if (!a->resources.pci.bar[bar] in diva_pri_init_card()
128 || (a->resources.pci.bar[bar] == 0xFFFFFFF0)) { in diva_pri_init_card()
130 a->resources.pci.bar[bar])) in diva_pri_init_card()
134 a->resources.pci.irq = in diva_pri_init_card()
135 (byte) divasa_get_pci_irq(a->resources.pci.bus, in diva_pri_init_card()
136 a->resources.pci.func, in diva_pri_init_card()
137 a->resources.pci.hdev); in diva_pri_init_card()
138 if (!a->resources.pci.irq) { in diva_pri_init_card()
147 a->resources.pci.addr[bar] = in diva_pri_init_card()
148 divasa_remap_pci_bar(a, bar, a->resources.pci.bar[bar], in diva_pri_init_card()
150 if (!a->resources.pci.addr[bar]) { in diva_pri_init_card()
152 a->controller, bar)) in diva_pri_init_card()
153 diva_pri_cleanup_adapter(a); in diva_pri_init_card()
161 diva_pri_set_addresses(a); in diva_pri_init_card()
166 if (pri_get_serial_number(a)) { in diva_pri_init_card()
168 serNo = a->resources.pci.bar[1] & 0xffff0000; in diva_pri_init_card()
169 serNo |= ((dword) a->resources.pci.bus) << 8; in diva_pri_init_card()
170 serNo += (a->resources.pci.func + a->controller + 1); in diva_pri_init_card()
171 a->xdi_adapter.serialNo = serNo & ~0xFF000000; in diva_pri_init_card()
173 a->controller, a->xdi_adapter.serialNo)) in diva_pri_init_card()
180 if (diva_os_initialize_spin_lock(&a->xdi_adapter.isr_spin_lock, "isr")) { in diva_pri_init_card()
181 diva_pri_cleanup_adapter(a); in diva_pri_init_card()
185 (&a->xdi_adapter.data_spin_lock, "data")) { in diva_pri_init_card()
186 diva_pri_cleanup_adapter(a); in diva_pri_init_card()
190 strcpy(a->xdi_adapter.req_soft_isr.dpc_thread_name, "kdivasprid"); in diva_pri_init_card()
192 if (diva_os_initialize_soft_isr(&a->xdi_adapter.req_soft_isr, in diva_pri_init_card()
193 DIDpcRoutine, &a->xdi_adapter)) { in diva_pri_init_card()
194 diva_pri_cleanup_adapter(a); in diva_pri_init_card()
201 a->xdi_adapter.isr_soft_isr.object = in diva_pri_init_card()
202 a->xdi_adapter.req_soft_isr.object; in diva_pri_init_card()
208 a->xdi_adapter.Channels = CardProperties[a->CardOrdinal].Channels; in diva_pri_init_card()
209 a->xdi_adapter.e_max = CardProperties[a->CardOrdinal].E_info; in diva_pri_init_card()
211 a->xdi_adapter.e_tbl = in diva_pri_init_card()
212 diva_os_malloc(0, a->xdi_adapter.e_max * sizeof(E_INFO)); in diva_pri_init_card()
213 if (!a->xdi_adapter.e_tbl) { in diva_pri_init_card()
214 diva_pri_cleanup_adapter(a); in diva_pri_init_card()
217 memset(a->xdi_adapter.e_tbl, 0x00, a->xdi_adapter.e_max * sizeof(E_INFO)); in diva_pri_init_card()
219 a->xdi_adapter.a.io = &a->xdi_adapter; in diva_pri_init_card()
220 a->xdi_adapter.DIRequest = request; in diva_pri_init_card()
221 a->interface.cleanup_adapter_proc = diva_pri_cleanup_adapter; in diva_pri_init_card()
222 a->interface.cmd_proc = diva_pri_cmd_card_proc; in diva_pri_init_card()
225 prepare_pri2_functions(&a->xdi_adapter); in diva_pri_init_card()
227 prepare_pri_functions(&a->xdi_adapter); in diva_pri_init_card()
230 a->dsp_mask = diva_pri_detect_dsps(a); in diva_pri_init_card()
236 diva_init_dma_map(a->resources.pci.hdev, in diva_pri_init_card()
237 (struct _diva_dma_map_entry **) &a->xdi_adapter.dma_map, 32); in diva_pri_init_card()
243 a->xdi_adapter.irq_info.irq_nr = a->resources.pci.irq; in diva_pri_init_card()
244 sprintf(a->xdi_adapter.irq_info.irq_name, in diva_pri_init_card()
245 "DIVA PRI %ld", (long) a->xdi_adapter.serialNo); in diva_pri_init_card()
247 if (diva_os_register_irq(a, a->xdi_adapter.irq_info.irq_nr, in diva_pri_init_card()
248 a->xdi_adapter.irq_info.irq_name)) { in diva_pri_init_card()
249 diva_pri_cleanup_adapter(a); in diva_pri_init_card()
252 a->xdi_adapter.irq_info.registered = 1; in diva_pri_init_card()
254 diva_log_info("%s IRQ:%d SerNo:%d", a->xdi_adapter.Properties.Name, in diva_pri_init_card()
255 a->resources.pci.irq, a->xdi_adapter.serialNo); in diva_pri_init_card()
260 static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t *a) in diva_pri_cleanup_adapter() argument
267 if (a->xdi_adapter.Initialized) { in diva_pri_cleanup_adapter()
268 diva_pri_stop_adapter(a); in diva_pri_cleanup_adapter()
274 if (a->xdi_adapter.irq_info.registered) { in diva_pri_cleanup_adapter()
275 diva_os_remove_irq(a, a->xdi_adapter.irq_info.irq_nr); in diva_pri_cleanup_adapter()
277 a->xdi_adapter.irq_info.registered = 0; in diva_pri_cleanup_adapter()
283 if (a->resources.pci.bar[bar] in diva_pri_cleanup_adapter()
284 && a->resources.pci.addr[bar]) { in diva_pri_cleanup_adapter()
285 divasa_unmap_pci_bar(a->resources.pci.addr[bar]); in diva_pri_cleanup_adapter()
286 a->resources.pci.bar[bar] = 0; in diva_pri_cleanup_adapter()
287 a->resources.pci.addr[bar] = NULL; in diva_pri_cleanup_adapter()
294 diva_os_cancel_soft_isr(&a->xdi_adapter.isr_soft_isr); in diva_pri_cleanup_adapter()
295 diva_os_cancel_soft_isr(&a->xdi_adapter.req_soft_isr); in diva_pri_cleanup_adapter()
297 diva_os_remove_soft_isr(&a->xdi_adapter.req_soft_isr); in diva_pri_cleanup_adapter()
298 a->xdi_adapter.isr_soft_isr.object = NULL; in diva_pri_cleanup_adapter()
300 diva_os_destroy_spin_lock(&a->xdi_adapter.isr_spin_lock, "rm"); in diva_pri_cleanup_adapter()
301 diva_os_destroy_spin_lock(&a->xdi_adapter.data_spin_lock, "rm"); in diva_pri_cleanup_adapter()
306 if (a->xdi_adapter.e_tbl) { in diva_pri_cleanup_adapter()
307 diva_os_free(0, a->xdi_adapter.e_tbl); in diva_pri_cleanup_adapter()
308 a->xdi_adapter.e_tbl = NULL; in diva_pri_cleanup_adapter()
310 a->xdi_adapter.Channels = 0; in diva_pri_cleanup_adapter()
311 a->xdi_adapter.e_max = 0; in diva_pri_cleanup_adapter()
317 diva_free_dma_map(a->resources.pci.hdev, in diva_pri_cleanup_adapter()
318 (struct _diva_dma_map_entry *) a->xdi_adapter. in diva_pri_cleanup_adapter()
320 a->xdi_adapter.dma_map = NULL; in diva_pri_cleanup_adapter()
387 memset(&IoAdapter->a.IdTable[0], 0x00, in diva_pri_reset_adapter()
388 sizeof(IoAdapter->a.IdTable)); in diva_pri_reset_adapter()
389 memset(&IoAdapter->a.IdTypeTable[0], 0x00, in diva_pri_reset_adapter()
390 sizeof(IoAdapter->a.IdTypeTable)); in diva_pri_reset_adapter()
391 memset(&IoAdapter->a.FlowControlIdTable[0], 0x00, in diva_pri_reset_adapter()
392 sizeof(IoAdapter->a.FlowControlIdTable)); in diva_pri_reset_adapter()
393 memset(&IoAdapter->a.FlowControlSkipTable[0], 0x00, in diva_pri_reset_adapter()
394 sizeof(IoAdapter->a.FlowControlSkipTable)); in diva_pri_reset_adapter()
395 memset(&IoAdapter->a.misc_flags_table[0], 0x00, in diva_pri_reset_adapter()
396 sizeof(IoAdapter->a.misc_flags_table)); in diva_pri_reset_adapter()
397 memset(&IoAdapter->a.rx_stream[0], 0x00, in diva_pri_reset_adapter()
398 sizeof(IoAdapter->a.rx_stream)); in diva_pri_reset_adapter()
399 memset(&IoAdapter->a.tx_stream[0], 0x00, in diva_pri_reset_adapter()
400 sizeof(IoAdapter->a.tx_stream)); in diva_pri_reset_adapter()
401 memset(&IoAdapter->a.tx_pos[0], 0x00, sizeof(IoAdapter->a.tx_pos)); in diva_pri_reset_adapter()
402 memset(&IoAdapter->a.rx_pos[0], 0x00, sizeof(IoAdapter->a.rx_pos)); in diva_pri_reset_adapter()
440 ADAPTER *a = &IoAdapter->a; in diva_pri_start_adapter() local
499 a->ReadyInt = 1; in diva_pri_start_adapter()
500 a->ram_out(a, &PR_RAM->ReadyInt, 1); in diva_pri_start_adapter()
525 static void diva_pri_clear_interrupts(diva_os_xdi_adapter_t *a) in diva_pri_clear_interrupts() argument
527 PISDN_ADAPTER IoAdapter = &a->xdi_adapter; in diva_pri_clear_interrupts()
534 IoAdapter->tst_irq(&IoAdapter->a); in diva_pri_clear_interrupts()
535 IoAdapter->clr_irq(&IoAdapter->a); in diva_pri_clear_interrupts()
536 IoAdapter->tst_irq(&IoAdapter->a); in diva_pri_clear_interrupts()
549 static int diva_pri_stop_adapter(diva_os_xdi_adapter_t *a) in diva_pri_stop_adapter() argument
551 PISDN_ADAPTER IoAdapter = &a->xdi_adapter; in diva_pri_stop_adapter()
572 a->clear_interrupts_proc = diva_pri_clear_interrupts; in diva_pri_stop_adapter()
573 IoAdapter->a.ReadyInt = 1; in diva_pri_stop_adapter()
574 IoAdapter->a.ram_inc(&IoAdapter->a, &PR_RAM->ReadyInt); in diva_pri_stop_adapter()
577 } while (i-- && a->clear_interrupts_proc); in diva_pri_stop_adapter()
579 if (a->clear_interrupts_proc) { in diva_pri_stop_adapter()
580 diva_pri_clear_interrupts(a); in diva_pri_stop_adapter()
581 a->clear_interrupts_proc = NULL; in diva_pri_stop_adapter()
585 IoAdapter->a.ReadyInt = 0; in diva_pri_stop_adapter()
602 diva_pri_cmd_card_proc(struct _diva_os_xdi_adapter *a, in diva_pri_cmd_card_proc() argument
607 if (cmd->adapter != a->controller) { in diva_pri_cmd_card_proc()
609 cmd->adapter, a->controller)) in diva_pri_cmd_card_proc()
615 a->xdi_mbox.data_length = sizeof(dword); in diva_pri_cmd_card_proc()
616 a->xdi_mbox.data = in diva_pri_cmd_card_proc()
617 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_pri_cmd_card_proc()
618 if (a->xdi_mbox.data) { in diva_pri_cmd_card_proc()
619 *(dword *) a->xdi_mbox.data = in diva_pri_cmd_card_proc()
620 (dword) a->CardOrdinal; in diva_pri_cmd_card_proc()
621 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_pri_cmd_card_proc()
627 a->xdi_mbox.data_length = sizeof(dword); in diva_pri_cmd_card_proc()
628 a->xdi_mbox.data = in diva_pri_cmd_card_proc()
629 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_pri_cmd_card_proc()
630 if (a->xdi_mbox.data) { in diva_pri_cmd_card_proc()
631 *(dword *) a->xdi_mbox.data = in diva_pri_cmd_card_proc()
632 (dword) a->xdi_adapter.serialNo; in diva_pri_cmd_card_proc()
633 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_pri_cmd_card_proc()
639 a->xdi_mbox.data_length = sizeof(dword) * 9; in diva_pri_cmd_card_proc()
640 a->xdi_mbox.data = in diva_pri_cmd_card_proc()
641 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_pri_cmd_card_proc()
642 if (a->xdi_mbox.data) { in diva_pri_cmd_card_proc()
644 dword *data = (dword *) a->xdi_mbox.data; in diva_pri_cmd_card_proc()
647 *data++ = a->resources.pci.bar[i]; in diva_pri_cmd_card_proc()
649 *data++ = (dword) a->resources.pci.irq; in diva_pri_cmd_card_proc()
650 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_pri_cmd_card_proc()
656 ret = diva_pri_reset_adapter(&a->xdi_adapter); in diva_pri_cmd_card_proc()
660 ret = diva_pri_write_sdram_block(&a->xdi_adapter, in diva_pri_cmd_card_proc()
666 pri_is_rev_2_card(a-> in diva_pri_cmd_card_proc()
673 ret = diva_pri_stop_adapter(a); in diva_pri_cmd_card_proc()
677 ret = diva_pri_start_adapter(&a->xdi_adapter, in diva_pri_cmd_card_proc()
685 a->xdi_adapter.features = in diva_pri_cmd_card_proc()
687 a->xdi_adapter.a.protocol_capabilities = in diva_pri_cmd_card_proc()
688 a->xdi_adapter.features; in diva_pri_cmd_card_proc()
690 a->xdi_adapter.features)) in diva_pri_cmd_card_proc()
695 a->xdi_mbox.data_length = sizeof(dword); in diva_pri_cmd_card_proc()
696 a->xdi_mbox.data = in diva_pri_cmd_card_proc()
697 diva_os_malloc(0, a->xdi_mbox.data_length); in diva_pri_cmd_card_proc()
698 if (a->xdi_mbox.data) { in diva_pri_cmd_card_proc()
699 dword *data = (dword *) a->xdi_mbox.data; in diva_pri_cmd_card_proc()
700 if (!a->xdi_adapter.ram || in diva_pri_cmd_card_proc()
701 !a->xdi_adapter.reset || in diva_pri_cmd_card_proc()
702 !a->xdi_adapter.cfg) { in diva_pri_cmd_card_proc()
704 } else if (a->xdi_adapter.trapped) { in diva_pri_cmd_card_proc()
706 } else if (a->xdi_adapter.Initialized) { in diva_pri_cmd_card_proc()
711 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_pri_cmd_card_proc()
717 ret = diva_card_read_xlog(a); in diva_pri_cmd_card_proc()
721 if (a->xdi_adapter.Address) { in diva_pri_cmd_card_proc()
723 (a->xdi_mbox.data_length = in diva_pri_cmd_card_proc()
726 (a->xdi_mbox.data_length + in diva_pri_cmd_card_proc()
728 a->xdi_adapter.MemorySize) { in diva_pri_cmd_card_proc()
729 a->xdi_mbox.data = in diva_pri_cmd_card_proc()
731 a->xdi_mbox. in diva_pri_cmd_card_proc()
733 if (a->xdi_mbox.data) { in diva_pri_cmd_card_proc()
734 byte __iomem *p = DIVA_OS_MEM_ATTACH_ADDRESS(&a->xdi_adapter); in diva_pri_cmd_card_proc()
736 byte *dst = a->xdi_mbox.data; in diva_pri_cmd_card_proc()
737 dword len = a->xdi_mbox.data_length; in diva_pri_cmd_card_proc()
744 a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; in diva_pri_cmd_card_proc()
745 DIVA_OS_MEM_DETACH_ADDRESS(&a->xdi_adapter, p); in diva_pri_cmd_card_proc()
754 DBG_ERR(("A: A(%d) invalid cmd=%d", a->controller, in diva_pri_cmd_card_proc()
764 static int pri_get_serial_number(diva_os_xdi_adapter_t *a) in pri_get_serial_number() argument
776 config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); in pri_get_serial_number()
783 DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); in pri_get_serial_number()
788 flash = DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter); in pri_get_serial_number()
792 DIVA_OS_MEM_DETACH_PROM(&a->xdi_adapter, flash); in pri_get_serial_number()
794 config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); in pri_get_serial_number()
797 DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); in pri_get_serial_number()
806 addr4 = a->resources.pci.bar[4]; in pri_get_serial_number()
807 addr3 = a->resources.pci.bar[3]; /* flash */ in pri_get_serial_number()
808 addr1 = a->resources.pci.bar[1]; /* unused */ in pri_get_serial_number()
815 Bus = a->resources.pci.bus; in pri_get_serial_number()
816 Slot = a->resources.pci.func; in pri_get_serial_number()
817 hdev = a->resources.pci.hdev; in pri_get_serial_number()
826 addr = a->resources.pci.addr[1]; in pri_get_serial_number()
827 a->resources.pci.addr[1] = a->resources.pci.addr[4]; in pri_get_serial_number()
828 a->resources.pci.addr[4] = addr; in pri_get_serial_number()
830 addr1 = a->resources.pci.bar[1]; in pri_get_serial_number()
831 a->resources.pci.bar[1] = a->resources.pci.bar[4]; in pri_get_serial_number()
832 a->resources.pci.bar[4] = addr1; in pri_get_serial_number()
839 config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); in pri_get_serial_number()
845 DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); in pri_get_serial_number()
848 flash = DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter); in pri_get_serial_number()
852 DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter, flash); in pri_get_serial_number()
853 config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); in pri_get_serial_number()
856 DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); in pri_get_serial_number()
875 a->xdi_adapter.serialNo = in pri_get_serial_number()
878 if (!a->xdi_adapter.serialNo in pri_get_serial_number()
879 || (a->xdi_adapter.serialNo == 0xffffffff)) { in pri_get_serial_number()
880 a->xdi_adapter.serialNo = 0; in pri_get_serial_number()
885 DBG_LOG(("Serial No. : %ld", a->xdi_adapter.serialNo)) in pri_get_serial_number()
955 static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t *a) in diva_pri_detect_dsps() argument
974 if (!a->xdi_adapter.Control || !a->xdi_adapter.reset) { in diva_pri_detect_dsps()
978 p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); in diva_pri_detect_dsps()
980 DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); in diva_pri_detect_dsps()
983 base = DIVA_OS_MEM_ATTACH_CONTROL(&a->xdi_adapter); in diva_pri_detect_dsps()
1003 DIVA_OS_MEM_DETACH_CONTROL(&a->xdi_adapter, base); in diva_pri_detect_dsps()
1005 p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); in diva_pri_detect_dsps()
1007 DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); in diva_pri_detect_dsps()