21 static void *diva_xdiLoadFileFile =
NULL;
22 static dword diva_xdiLoadFileLength = 0;
40 static unsigned long _4bri_bar_length[4] = {
46 static unsigned long _4bri_v2_bar_length[4] = {
52 static unsigned long _4bri_v2_bri_bar_length[4] = {
69 static int diva_4bri_write_sdram_block(
PISDN_ADAPTER IoAdapter,
78 static int _4bri_is_rev_2_card(
int card_ordinal)
80 switch (card_ordinal) {
91 static int _4bri_is_rev_2_bri_card(
int card_ordinal)
93 switch (card_ordinal) {
152 unsigned long bar_length[
ARRAY_SIZE(_4bri_bar_length)];
155 int factor = (tasks == 1) ? 1 : 2;
159 memcpy(bar_length, _4bri_v2_bri_bar_length,
162 memcpy(bar_length, _4bri_v2_bar_length,
166 memcpy(bar_length, _4bri_bar_length,
sizeof(bar_length));
168 DBG_TRC((
"SDRAM_LENGTH=%08x, tasks=%d, factor=%d",
169 bar_length[2], tasks, factor))
177 if (!_4bri_get_serial_number(a)) {
178 DBG_ERR((
"A: 4BRI can't get Serial Number"))
179 diva_4bri_cleanup_adapter(a);
187 DBG_LOG((
"Load %s, SN:%ld, bus:%02x, func:%02x",
196 for (bar = 0; bar < 4; bar++) {
204 (
"A: invalid bar[%d]=%08x", bar,
223 for (bar = 0; bar < 4; bar++) {
229 DBG_ERR((
"A: 4BRI: can't map bar[%d]", bar))
230 diva_4bri_cleanup_adapter(a);
243 DBG_ERR((
"A: 4BRI: can't register bar[1]"))
244 diva_4bri_cleanup_adapter(a);
264 diva_4bri_cleanup_adapter(a);
272 diva_4bri_cleanup_adapter(a);
282 diva_4bri_cleanup_adapter(a);
301 for (i = 0; i < (tasks - 1); i++) {
305 diva_4bri_cleanup_adapter(a);
308 memset(quadro_list, 0x00,
sizeof(*quadro_list));
314 for (i = 0; i < tasks; i++) {
321 for (i = 0; i < tasks; i++) {
322 diva_current = adapter_list[
i];
324 diva_current->
dsp_mask = 0x00000003;
344 diva_4bri_cleanup_slave_adapters(a);
345 diva_4bri_cleanup_adapter(a);
346 for (i = 1; i < (tasks - 1); i++) {
347 diva_os_free(0, adapter_list[i]);
355 diva_4bri_cleanup_slave_adapters(a);
356 diva_4bri_cleanup_adapter(a);
357 for (i = 1; i < (tasks - 1); i++) {
358 diva_os_free(0, adapter_list[i]);
363 diva_4bri_cleanup_slave_adapters(a);
364 diva_4bri_cleanup_adapter(a);
365 for (i = 1; i < (tasks - 1); i++) {
366 diva_os_free(0, adapter_list[i]);
375 diva_4bri_cleanup_slave_adapters(a);
376 diva_4bri_cleanup_adapter(a);
377 for (i = 1; i < (tasks - 1); i++) {
378 diva_os_free(0, adapter_list[i]);
396 for (i = 0; i < tasks; i++) {
397 diva_current = adapter_list[
i];
410 for (i = 0; i < tasks; i++) {
411 diva_current = adapter_list[
i];
412 diva_4bri_set_addresses(diva_current);
439 diva_4bri_cleanup_slave_adapters(a);
440 diva_4bri_cleanup_adapter(a);
441 for (i = 1; i < (tasks - 1); i++) {
442 diva_os_free(0, adapter_list[i]);
477 diva_4bri_stop_adapter(a);
491 diva_4bri_cleanup_slave_adapters(a);
496 for (bar = 0; bar < 4; bar++) {
512 _4bri_is_rev_2_card(a->
514 _4bri_v2_bar_length[1] :
541 for (i = 0; i < 64; ++
i) {
543 for (j = 0; j < 5; ++
j) {
544 PCIwrite(Bus, Slot, 0x4E, &addr,
sizeof(addr),
547 PCIread(Bus, Slot, 0x4E, &status,
sizeof(status),
553 DBG_ERR((
"EEPROM[%d] read failed (0x%x)", i * 4, addr))
561 if (serNo == 0 || serNo == 0xffffffff)
565 DBG_LOG((
"W: Serial Number == 0, create one serial number"));
592 for (i = 0; i < a->xdi_adapter.tasks; i++) {
593 diva_current = adapter_list[
i];
597 isr_spin_lock,
"unload");
633 DBG_ERR((
"A: 4bri_cmd, invalid controller=%d != %d",
675 for (i = 0; i < 8; i++) {
712 diva_4bri_write_fpga_image(a,
760 DBG_TRC((
"Set raw protocol features (%08x)",
767 if (!a->xdi_adapter.ControllerNumber) {
768 ret = diva_4bri_stop_adapter(a);
821 void *ret = diva_xdiLoadFileFile;
824 *FileLength = diva_xdiLoadFileLength;
826 diva_xdiLoadFileFile =
NULL;
827 diva_xdiLoadFileLength = 0;
846 diva_xdiLoadFileFile =
data;
847 diva_xdiLoadFileLength =
length;
851 diva_xdiLoadFileFile =
NULL;
852 diva_xdiLoadFileLength = 0;
854 return (ret ? 0 : -1);
866 DBG_ERR((
"A: A(%d) can't reset 4BRI adapter - please stop first",
874 for (i = 0; ((i < IoAdapter->tasks) && IoAdapter->QuadroList); i++) {
896 memset(&Slave->
a.rx_stream[0], 0x00,
897 sizeof(Slave->
a.rx_stream));
898 memset(&Slave->
a.tx_stream[0], 0x00,
899 sizeof(Slave->
a.tx_stream));
900 memset(&Slave->
a.tx_pos[0], 0x00,
sizeof(Slave->
a.tx_pos));
901 memset(&Slave->
a.rx_pos[0], 0x00,
sizeof(Slave->
a.rx_pos));
916 if (((address + length) >= limit) || !mem) {
918 DBG_ERR((
"A: A(%d) write 4BRI address=0x%08lx",
919 IoAdapter->
ANum, address + length))
952 for (i = 0; i < 300; ++
i) {
954 if (
READ_WORD(&signature[0]) == 0x4447) {
955 DBG_TRC((
"Protocol startup time %d.%02d seconds",
956 (i / 100), (i % 100)))
962 for (i = 1; i < IoAdapter->tasks; i++) {
966 protocol_capabilities = IoAdapter->
features;
970 DBG_FTL((
"%s: Adapter selftest failed, signature=%04x",
974 (*(IoAdapter->trapFnc)) (IoAdapter);
975 IoAdapter->
stop(IoAdapter);
980 for (i = 0; i < IoAdapter->tasks; i++) {
981 IoAdapter->QuadroList->QuadroAdapter[
i]->Initialized = 1;
982 IoAdapter->QuadroList->QuadroAdapter[
i]->IrqCount = 0;
985 if (check_qBri_interrupt(IoAdapter)) {
986 DBG_ERR((
"A: A(%d) interrupt test failed",
988 for (i = 0; i < IoAdapter->tasks; i++) {
991 IoAdapter->
stop(IoAdapter);
998 for (i = 0; i < IoAdapter->
tasks; i++) {
999 DBG_LOG((
"A(%d) %s adapter successfully started",
1001 (IoAdapter->
tasks == 1) ?
"BRI 2.0" :
"4BRI"))
1003 IoAdapter->QuadroList->QuadroAdapter[i]->Properties.
Features = (
word) features;
1011 #ifdef SUPPORT_INTERRUPT_TEST_ON_4BRI
1016 IoAdapter->IrqCount = 0;
1018 if (IoAdapter->ControllerNumber > 0)
1030 for (i = 100; !IoAdapter->IrqCount && (i-- > 0); diva_os_wait(10));
1032 return ((IoAdapter->IrqCount > 0) ? 0 : -1);
1039 IoAdapter->IrqCount = 0;
1041 qBriIrq = (
dword volatile __iomem *) (&p[_4bri_is_rev_2_card
1066 IoAdapter->
disIrq(IoAdapter);
1084 if (!IoAdapter->
ram) {
1089 DBG_ERR((
"A: A(%d) can't stop PRI adapter - not running",
1094 for (i = 0; i < IoAdapter->tasks; i++) {
1101 for (i = 0; i < IoAdapter->
tasks; i++) {
1118 diva_4bri_clear_interrupts(a);
1120 DBG_ERR((
"A: A(%d) no final interrupt from 4BRI adapter",
1128 IoAdapter->
stop(IoAdapter);