31 static int bri_bar_length[3] = {
42 static int diva_bri_write_sdram_block(
PISDN_ADAPTER IoAdapter,
78 dword bar2 = 0, bar2_length = 0xffffffff;
93 for (bar = 0; bar < 3; bar++) {
99 DBG_ERR((
"A: can't get BAR[%d]", bar))
124 PCIread(Bus, Slot, 0x18, &bar2,
sizeof(bar2), hdev);
125 PCIread(Bus, Slot, 0x04, &cmd_org,
sizeof(cmd_org), hdev);
129 PCIwrite(Bus, Slot, 0x04, &cmd,
sizeof(cmd), hdev);
130 PCIwrite(Bus, Slot, 0x18, &bar2_length,
sizeof(bar2_length), hdev);
131 PCIread(Bus, Slot, 0x18, &bar2_length,
sizeof(bar2_length), hdev);
135 PCIwrite(Bus, Slot, 0x18, &bar2,
sizeof(bar2), hdev);
136 PCIwrite(Bus, Slot, 0x04, &cmd_org,
sizeof(cmd_org), hdev);
141 bar2_length = (~(bar2_length & ~7)) + 1;
142 DBG_LOG((
"BAR[2] length=%lx", bar2_length))
149 bri_bar_length[0]))) {
150 DBG_ERR((
"A: BRI, can't map BAR[0]"))
151 diva_bri_cleanup_adapter(a);
159 bri_bar_length[1], &a->
port_name[0], 1)) {
160 DBG_ERR((
"A: BRI, can't register BAR[1]"))
161 diva_bri_cleanup_adapter(a);
169 DBG_ERR((
"A: BRI, can't register BAR[2]"))
170 diva_bri_cleanup_adapter(a);
179 diva_bri_set_addresses(a);
189 if (diva_bri_reregister_io(a)) {
190 diva_bri_cleanup_adapter(a);
197 if (diva_os_initialize_spin_lock
199 diva_bri_cleanup_adapter(a);
202 if (diva_os_initialize_spin_lock
204 diva_bri_cleanup_adapter(a);
212 diva_bri_cleanup_adapter(a);
227 diva_bri_cleanup_adapter(a);
256 diva_bri_cleanup_adapter(a);
273 diva_bri_stop_adapter(a);
290 for (i = 1; i < 3; i++) {
340 serHi = (
word) (
inppw(&confIO[0x22]) & 0x0FFF);
341 serLo = (
word) (
inppw(&confIO[0x26]) & 0x0FFF);
342 serNo = ((
dword) serHi << 16) | (
dword) serLo;
345 if ((serNo == 0) || (serNo == 0xFFFFFFFF)) {
346 DBG_FTL((
"W: BRI use BAR[0] to get card serial number"))
351 serNo = (((
dword) serHi) << 16) | ((
dword) serLo);
368 for (i = 1; i < 3; i++) {
370 a->resources.pci.length[i],
371 &a->port_name[0], i);
372 a->resources.pci.addr[
i] =
NULL;
375 sprintf(a->port_name,
"DIVA BRI %ld",
376 (
long) a->xdi_adapter.serialNo);
378 for (i = 1; i < 3; i++) {
380 a->resources.pci.length[i],
381 &a->port_name[0], i)) {
382 DBG_ERR((
"A: failed to reregister BAR[%d]", i))
386 (
void *) (
unsigned long) a->
resources.pci.bar[i];
401 if (cmd->adapter != a->controller) {
402 DBG_ERR((
"A: pri_cmd, invalid controller=%d != %d",
403 cmd->adapter, a->controller))
409 a->xdi_mbox.data_length =
sizeof(
dword);
411 diva_os_malloc(0, a->xdi_mbox.data_length);
412 if (a->xdi_mbox.data) {
413 *(
dword *) a->xdi_mbox.data =
414 (
dword) a->CardOrdinal;
421 a->xdi_mbox.data_length =
sizeof(
dword);
423 diva_os_malloc(0, a->xdi_mbox.data_length);
424 if (a->xdi_mbox.data) {
425 *(
dword *) a->xdi_mbox.data =
426 (
dword) a->xdi_adapter.serialNo;
433 a->xdi_mbox.data_length =
sizeof(
dword) * 9;
435 diva_os_malloc(0, a->xdi_mbox.data_length);
436 if (a->xdi_mbox.data) {
440 for (i = 0; i < 8; i++) {
441 *data++ = a->resources.pci.bar[
i];
443 *data++ = (
dword) a->resources.pci.irq;
450 a->xdi_mbox.data_length =
sizeof(
dword);
452 diva_os_malloc(0, a->xdi_mbox.data_length);
453 if (a->xdi_mbox.data) {
455 if (!a->xdi_adapter.port) {
457 }
else if (a->xdi_adapter.trapped) {
459 }
else if (a->xdi_adapter.Initialized) {
470 ret = diva_bri_reset_adapter(&a->xdi_adapter);
474 ret = diva_bri_write_sdram_block(&a->xdi_adapter,
483 ret = diva_bri_start_adapter(&a->xdi_adapter,
484 cmd->command_data.start.
486 cmd->command_data.start.
491 a->xdi_adapter.features =
492 cmd->command_data.features.features;
493 a->xdi_adapter.a.protocol_capabilities =
494 a->xdi_adapter.features;
496 (
"Set raw protocol features (%08x)",
497 a->xdi_adapter.features)) ret = 0;
501 ret = diva_bri_stop_adapter(a);
522 if (!IoAdapter->port) {
525 if (IoAdapter->Initialized) {
526 DBG_ERR((
"A: A(%d) can't reset BRI adapter - please stop first",
527 IoAdapter->ANum)) return (-1);
529 (*(IoAdapter->rstFnc)) (IoAdapter);
534 addrLo = Port +
ADDR;
535 ioaddr = Port +
DATA;
547 (IoAdapter->MemoryBase + IoAdapter->MemorySize -
550 for (i = 0; i < 0x8000;
outppw(ioaddr, 0), ++i);
558 (IoAdapter->MemoryBase + IoAdapter->MemorySize -
559 BRI_SHARED_RAM_SIZE) >> 16));
564 outpp(addrHi, (byte) 0);
573 IoAdapter->e_count = 0;
574 if (IoAdapter->e_tbl) {
575 memset(IoAdapter->e_tbl, 0x00,
576 IoAdapter->e_max *
sizeof(
E_INFO));
580 IoAdapter->assign = 0;
581 IoAdapter->trapped = 0;
583 memset(&IoAdapter->a.IdTable[0], 0x00,
584 sizeof(IoAdapter->a.IdTable));
585 memset(&IoAdapter->a.IdTypeTable[0], 0x00,
586 sizeof(IoAdapter->a.IdTypeTable));
587 memset(&IoAdapter->a.FlowControlIdTable[0], 0x00,
588 sizeof(IoAdapter->a.FlowControlIdTable));
589 memset(&IoAdapter->a.FlowControlSkipTable[0], 0x00,
590 sizeof(IoAdapter->a.FlowControlSkipTable));
591 memset(&IoAdapter->a.misc_flags_table[0], 0x00,
592 sizeof(IoAdapter->a.misc_flags_table));
593 memset(&IoAdapter->a.rx_stream[0], 0x00,
594 sizeof(IoAdapter->a.rx_stream));
595 memset(&IoAdapter->a.tx_stream[0], 0x00,
596 sizeof(IoAdapter->a.tx_stream));
597 memset(&IoAdapter->a.tx_pos[0], 0x00,
sizeof(IoAdapter->a.tx_pos));
598 memset(&IoAdapter->a.rx_pos[0], 0x00,
sizeof(IoAdapter->a.rx_pos));
610 if (!IoAdapter->
port) {
617 addrLo = Port +
ADDR;
618 ioaddr = Port +
DATA;
622 outppw(addrLo, (
word) (address & 0x0000ffff));
623 outpp(ioaddr, *data++);
643 (
"A: A(%d) bri_start_adapter, adapter already running",
644 IoAdapter->
ANum)) return (-1);
647 DBG_ERR((
"A: A(%d) bri_start_adapter, adapter not mapped",
648 IoAdapter->
ANum)) return (-1);
651 sprintf(IoAdapter->Name, "
A(%d)", (
int) IoAdapter->ANum);
657 addrLo = Port + ADDR;
658 ioaddr = Port + DATA;
662 (IoAdapter->MemoryBase + IoAdapter->MemorySize -
678 addrLo = Port + ADDR;
679 ioaddr = Port + DATA;
683 for (i = 0; i < 300; ++i) {
687 (IoAdapter->MemoryBase +
688 IoAdapter->MemorySize -
689 BRI_SHARED_RAM_SIZE) >> 16));
692 if (test == 0x4447) {
694 (
"Protocol startup time %d.%02d seconds",
695 (i / 100), (i % 100)))
703 DBG_FTL((
"A: A(%d) %s: Adapter selftest failed 0x%04X",
704 IoAdapter->ANum, IoAdapter->Properties.Name,
706 (*(IoAdapter->trapFnc)) (IoAdapter);
710 IoAdapter->Initialized = 1;
715 IoAdapter->IrqCount = 0;
718 if (IoAdapter->reset) {
725 for (i = 0; ((!IoAdapter->IrqCount) && (i < 100)); i++) {
728 if (!IoAdapter->IrqCount) {
730 (
"A: A(%d) interrupt test failed",
732 IoAdapter->Initialized = 0;
733 IoAdapter->
stop(IoAdapter);
755 IoAdapter->
disIrq(IoAdapter);
776 if (!IoAdapter->
port) {
780 DBG_ERR((
"A: A(%d) can't stop BRI adapter - not running",
784 IoAdapter->Initialized = 0;
794 a->clear_interrupts_proc = diva_bri_clear_interrupts;
795 IoAdapter->a.ReadyInt = 1;
796 IoAdapter->a.ram_inc(&IoAdapter->a, &
PR_RAM->ReadyInt);
801 diva_bri_clear_interrupts(a);
803 DBG_ERR((
"A: A(%d) no final interrupt from BRI adapter",
811 IoAdapter->
stop(IoAdapter);