14 #define DIVAS_MAX_XDI_ADAPTERS 64
44 diva_os_initialize_spin_lock(&adapter_lock,
"adapter");
68 sizeof(features->
name));
77 return ((a) ? 0 : -1);
132 memset(a, 0x00,
sizeof(*a));
138 DBG_LOG((
"DIDD_ADD A(%d), type:%02x, features:%04x, channels:%d",
141 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"create_adapter");
143 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"create_adapter");
215 memset(e, 0x00,
sizeof(*e));
219 DBG_LOG((
"E(%08x) no memory for os context", e));
237 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"create_entity");
241 if (!(a = diva_um_idi_find_adapter(adapter_nr))) {
245 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"create_entity");
247 DBG_LOG((
"A: no adapter(%ld)", adapter_nr));
261 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"create_entity");
263 DBG_LOG((
"A(%ld), create E(%08x)", adapter_nr, e));
281 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"delete_entity");
285 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"delete_entity");
290 memset(e, 0x00,
sizeof(*e));
293 DBG_LOG((
"A(%d) remove E:%08x", adapter_nr, e));
313 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"read");
316 if (!e || (!(a = e->
adapter)) ||
320 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"read");
321 DBG_ERR((
"E(%08x) read failed - adapter removed", e))
353 DBG_ERR((
"A: A(%d) E(%08x) read small buffer",
355 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
364 if ((ret = (*cp_fn) (os_handle, dst, data, length)) >= 0) {
375 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"read");
393 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"write");
396 if (!e || (!(a = e->
adapter)) ||
400 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
401 DBG_ERR((
"E(%08x) write failed - adapter removed", e))
407 if ((length <
sizeof(*req)) || (length >
sizeof(e->
buffer))) {
408 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
414 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
422 if ((ret = (*cp_fn) (os_handle, e->
buffer, src, length)) < 0) {
425 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
436 DBG_ERR((
"A(%d) get_features, no free buffer",
438 diva_os_leave_spin_lock(&adapter_lock,
444 *) data)->
hdr.features));
451 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
464 switch (process_idi_request(e, req)) {
466 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
469 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
473 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
479 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"write");
491 static void diva_um_idi_xdi_callback(
ENTITY *entity)
499 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"xdi_callback");
505 if ((call_wakeup = process_idi_rc(e, e->
e.
Rc))) {
511 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"xdi_callback");
522 call_wakeup = process_idi_ind(e, e->
e.
Ind);
525 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"xdi_callback");
541 DBG_ERR((
"A: A(%d) E(%08x) not assigned",
548 DBG_TRC((
"A(%d) E(%08x) assign MAN",
554 DBG_TRC((
"A(%d) E(%08x) assign SIG",
560 DBG_TRC((
"A(%d) E(%08x) assign NET",
565 DBG_ERR((
"A: A(%d) E(%08x) unknown type=%08x",
573 e->
e.
callback = diva_um_idi_xdi_callback;
584 DBG_TRC((
"A(%d) E(%08x) request(%02x-%02x-%02x (%d))",
601 DBG_ERR((
"A: A(%d) E(%08x) XDI out of entities",
626 DBG_TRC((
"A(%d) E(%08x) rc(%02x-%02x-%02x)",
632 DBG_ERR((
"A: A(%d) E(%08x) ASSIGN failed",
649 DBG_ERR((
"A: A(%d) E(%08x) discard OK in REMOVE",
669 DBG_ERR((
"A: A(%d) E(%08x) REMOVE FAILED",
672 write_return_code(e, rc);
691 DBG_TRC((
"A(%d) E(%08x) ind_1(%02x-%02x-%02x)-[%d-%d]",
697 DBG_TRC((
"A(%d) E(%08x) ind(%02x-%02x-%02x)-RNR",
708 DBG_TRC((
"A(%d) E(%08x) ind(%02x-%02x-%02x)-[%d]",
718 (
int) (
sizeof(*pind) +
740 DBG_ERR((
"A: A(%d) E(%08x) rc(%02x) lost",
768 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"ind_ready");
776 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"ind_ready");
784 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"ind_ready");
794 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"ind_ready");
811 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"assigned?");
815 if (!e || (!(a = e->
adapter)) ||
818 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"assigned?");
830 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"assigned?");
841 diva_os_enter_spin_lock(&adapter_lock, &old_irql,
"start_remove");
844 if (!e || (!(a = e->
adapter)) ||
847 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"start_remove");
855 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"start_remove");
863 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"start_remove");
875 DBG_TRC((
"A(%d) E(%08x) request(%02x-%02x-%02x (%d))",
882 diva_os_leave_spin_lock(&adapter_lock, &old_irql,
"start_remove");