Lines Matching refs:e

29 static void cleanup_entity(divas_um_idi_entity_t *e);
33 static int process_idi_request(divas_um_idi_entity_t *e,
35 static int process_idi_rc(divas_um_idi_entity_t *e, byte rc);
36 static int process_idi_ind(divas_um_idi_entity_t *e, byte ind);
37 static int write_return_code(divas_um_idi_entity_t *e, byte rc);
172 divas_um_idi_entity_t *e; in cleanup_adapter() local
175 e = list_entry(tmp, divas_um_idi_entity_t, link); in cleanup_adapter()
177 cleanup_entity(e); in cleanup_adapter()
178 if (e->os_context) { in cleanup_adapter()
179 diva_os_wakeup_read(e->os_context); in cleanup_adapter()
180 diva_os_wakeup_close(e->os_context); in cleanup_adapter()
189 static void cleanup_entity(divas_um_idi_entity_t *e) in cleanup_entity() argument
191 e->os_ref = NULL; in cleanup_entity()
192 e->status = 0; in cleanup_entity()
193 e->adapter = NULL; in cleanup_entity()
194 e->e.Id = 0; in cleanup_entity()
195 e->rc_count = 0; in cleanup_entity()
197 e->status |= DIVA_UM_IDI_REMOVED; in cleanup_entity()
198 e->status |= DIVA_UM_IDI_REMOVE_PENDING; in cleanup_entity()
200 diva_data_q_finit(&e->data); in cleanup_entity()
201 diva_data_q_finit(&e->rc); in cleanup_entity()
210 divas_um_idi_entity_t *e; in divas_um_idi_create_entity() local
214 if ((e = (divas_um_idi_entity_t *) diva_os_malloc(0, sizeof(*e)))) { in divas_um_idi_create_entity()
215 memset(e, 0x00, sizeof(*e)); in divas_um_idi_create_entity()
217 (e->os_context = in divas_um_idi_create_entity()
219 DBG_LOG(("E(%08x) no memory for os context", e)); in divas_um_idi_create_entity()
220 diva_os_free(0, e); in divas_um_idi_create_entity()
223 memset(e->os_context, 0x00, diva_os_get_context_size()); in divas_um_idi_create_entity()
225 if ((diva_data_q_init(&e->data, 2048 + 512, 16))) { in divas_um_idi_create_entity()
226 diva_os_free(0, e->os_context); in divas_um_idi_create_entity()
227 diva_os_free(0, e); in divas_um_idi_create_entity()
230 if ((diva_data_q_init(&e->rc, sizeof(diva_um_idi_ind_hdr_t), 2))) { in divas_um_idi_create_entity()
231 diva_data_q_finit(&e->data); in divas_um_idi_create_entity()
232 diva_os_free(0, e->os_context); in divas_um_idi_create_entity()
233 diva_os_free(0, e); in divas_um_idi_create_entity()
249 cleanup_entity(e); in divas_um_idi_create_entity()
250 diva_os_free(0, e->os_context); in divas_um_idi_create_entity()
251 diva_os_free(0, e); in divas_um_idi_create_entity()
256 e->os_ref = file; /* link to os handle */ in divas_um_idi_create_entity()
257 e->adapter = a; /* link to adapter */ in divas_um_idi_create_entity()
259 list_add_tail(&e->link, &a->entity_q); /* link from adapter */ in divas_um_idi_create_entity()
263 DBG_LOG(("A(%ld), create E(%08x)", adapter_nr, e)); in divas_um_idi_create_entity()
266 return (e); in divas_um_idi_create_entity()
274 divas_um_idi_entity_t *e; in divas_um_idi_delete_entity() local
278 if (!(e = (divas_um_idi_entity_t *) entity)) in divas_um_idi_delete_entity()
282 if ((a = e->adapter)) { in divas_um_idi_delete_entity()
283 list_del(&e->link); in divas_um_idi_delete_entity()
288 cleanup_entity(e); in divas_um_idi_delete_entity()
289 diva_os_free(0, e->os_context); in divas_um_idi_delete_entity()
290 memset(e, 0x00, sizeof(*e)); in divas_um_idi_delete_entity()
292 DBG_LOG(("A(%d) remove E:%08x", adapter_nr, e)); in divas_um_idi_delete_entity()
293 diva_os_free(0, e); in divas_um_idi_delete_entity()
306 divas_um_idi_entity_t *e; in diva_um_idi_read() local
315 e = (divas_um_idi_entity_t *) entity; in diva_um_idi_read()
316 if (!e || (!(a = e->adapter)) || in diva_um_idi_read()
317 (e->status & DIVA_UM_IDI_REMOVE_PENDING) || in diva_um_idi_read()
318 (e->status & DIVA_UM_IDI_REMOVED) || in diva_um_idi_read()
321 DBG_ERR(("E(%08x) read failed - adapter removed", e)) in diva_um_idi_read()
325 DBG_TRC(("A(%d) E(%08x) read(%d)", a->adapter_nr, e, max_length)); in diva_um_idi_read()
330 data = diva_data_q_get_segment4read(&e->rc); in diva_um_idi_read()
331 q = &e->rc; in diva_um_idi_read()
337 if (!(e->status & DIVA_UM_IDI_RC_PENDING)) { in diva_um_idi_read()
338 DBG_TRC(("A(%d) E(%08x) read data", a->adapter_nr, e)); in diva_um_idi_read()
339 data = diva_data_q_get_segment4read(&e->data); in diva_um_idi_read()
340 q = &e->data; in diva_um_idi_read()
343 e->status &= ~DIVA_UM_IDI_RC_PENDING; in diva_um_idi_read()
344 DBG_TRC(("A(%d) E(%08x) read rc", a->adapter_nr, e)); in diva_um_idi_read()
354 a->adapter_nr, e, ret)); in diva_um_idi_read()
373 DBG_TRC(("A(%d) E(%08x) read=%d", a->adapter_nr, e, ret)); in diva_um_idi_read()
386 divas_um_idi_entity_t *e; in diva_um_idi_write() local
395 e = (divas_um_idi_entity_t *) entity; in diva_um_idi_write()
396 if (!e || (!(a = e->adapter)) || in diva_um_idi_write()
397 (e->status & DIVA_UM_IDI_REMOVE_PENDING) || in diva_um_idi_write()
398 (e->status & DIVA_UM_IDI_REMOVED) || in diva_um_idi_write()
401 DBG_ERR(("E(%08x) write failed - adapter removed", e)) in diva_um_idi_write()
405 DBG_TRC(("A(%d) E(%08x) write(%d)", a->adapter_nr, e, length)); in diva_um_idi_write()
407 if ((length < sizeof(*req)) || (length > sizeof(e->buffer))) { in diva_um_idi_write()
412 if (e->status & DIVA_UM_IDI_RC_PENDING) { in diva_um_idi_write()
413 DBG_ERR(("A: A(%d) E(%08x) rc pending", a->adapter_nr, e)); in diva_um_idi_write()
422 if ((ret = (*cp_fn) (os_handle, e->buffer, src, length)) < 0) { in diva_um_idi_write()
424 e, ret)); in diva_um_idi_write()
429 req = (diva_um_idi_req_hdr_t *)&e->buffer[0]; in diva_um_idi_write()
435 diva_data_q_get_segment4write(&e->data))) { in diva_um_idi_write()
448 diva_data_q_ack_segment4write(&e->data, in diva_um_idi_write()
453 diva_os_wakeup_read(e->os_context); in diva_um_idi_write()
464 switch (process_idi_request(e, req)) { in diva_um_idi_write()
470 diva_os_wakeup_read(e->os_context); in diva_um_idi_write()
483 DBG_TRC(("A(%d) E(%08x) write=%d", a->adapter_nr, e, ret)); in diva_um_idi_write()
493 divas_um_idi_entity_t *e = DIVAS_CONTAINING_RECORD(entity, in diva_um_idi_xdi_callback() local
495 e); in diva_um_idi_xdi_callback()
501 if (e->e.complete == 255) { in diva_um_idi_xdi_callback()
502 if (!(e->status & DIVA_UM_IDI_REMOVE_PENDING)) { in diva_um_idi_xdi_callback()
503 diva_um_idi_stop_wdog(e); in diva_um_idi_xdi_callback()
505 if ((call_wakeup = process_idi_rc(e, e->e.Rc))) { in diva_um_idi_xdi_callback()
506 if (e->rc_count) { in diva_um_idi_xdi_callback()
507 e->rc_count--; in diva_um_idi_xdi_callback()
510 e->e.Rc = 0; in diva_um_idi_xdi_callback()
514 diva_os_wakeup_read(e->os_context); in diva_um_idi_xdi_callback()
515 diva_os_wakeup_close(e->os_context); in diva_um_idi_xdi_callback()
518 if (e->status & DIVA_UM_IDI_REMOVE_PENDING) { in diva_um_idi_xdi_callback()
519 e->e.RNum = 0; in diva_um_idi_xdi_callback()
520 e->e.RNR = 2; in diva_um_idi_xdi_callback()
522 call_wakeup = process_idi_ind(e, e->e.Ind); in diva_um_idi_xdi_callback()
524 e->e.Ind = 0; in diva_um_idi_xdi_callback()
527 diva_os_wakeup_read(e->os_context); in diva_um_idi_xdi_callback()
532 static int process_idi_request(divas_um_idi_entity_t *e, in process_idi_request() argument
539 if (!e->e.Id || !e->e.callback) { /* not assigned */ in process_idi_request()
542 e->adapter->adapter_nr, e)); in process_idi_request()
547 e->e.Id = MAN_ID; in process_idi_request()
549 e->adapter->adapter_nr, e)); in process_idi_request()
553 e->e.Id = DSIG_ID; in process_idi_request()
555 e->adapter->adapter_nr, e)); in process_idi_request()
559 e->e.Id = NL_ID; in process_idi_request()
561 e->adapter->adapter_nr, e)); in process_idi_request()
566 e->adapter->adapter_nr, e, in process_idi_request()
571 e->e.XNum = 1; in process_idi_request()
572 e->e.RNum = 1; in process_idi_request()
573 e->e.callback = diva_um_idi_xdi_callback; in process_idi_request()
574 e->e.X = &e->XData; in process_idi_request()
575 e->e.R = &e->RData; in process_idi_request()
578 e->status |= DIVA_UM_IDI_RC_PENDING; in process_idi_request()
579 e->e.Req = Req; in process_idi_request()
580 e->e.ReqCh = (byte) req->ReqCh; in process_idi_request()
581 e->e.X->PLength = (word) req->data_length; in process_idi_request()
582 e->e.X->P = (byte *)&req[1]; /* Our buffer is safe */ in process_idi_request()
585 e->adapter->adapter_nr, e, e->e.Id, e->e.Req, in process_idi_request()
586 e->e.ReqCh, e->e.X->PLength)); in process_idi_request()
588 e->rc_count++; in process_idi_request()
590 if (e->adapter && e->adapter->d.request) { in process_idi_request()
591 diva_um_idi_start_wdog(e); in process_idi_request()
592 (*(e->adapter->d.request)) (&e->e); in process_idi_request()
596 if (e->e.Rc == OUT_OF_RESOURCES) { in process_idi_request()
602 e->adapter->adapter_nr, e)); in process_idi_request()
604 e->e.Id = 0; in process_idi_request()
605 e->e.ReqCh = 0; in process_idi_request()
606 e->e.RcCh = 0; in process_idi_request()
607 e->e.Ind = 0; in process_idi_request()
608 e->e.IndCh = 0; in process_idi_request()
609 e->e.XNum = 0; in process_idi_request()
610 e->e.RNum = 0; in process_idi_request()
611 e->e.callback = NULL; in process_idi_request()
612 e->e.X = NULL; in process_idi_request()
613 e->e.R = NULL; in process_idi_request()
614 write_return_code(e, ASSIGN_RC | OUT_OF_RESOURCES); in process_idi_request()
617 e->status |= DIVA_UM_IDI_ASSIGN_PENDING; in process_idi_request()
624 static int process_idi_rc(divas_um_idi_entity_t *e, byte rc) in process_idi_rc() argument
627 e->adapter->adapter_nr, e, e->e.Id, rc, e->e.RcCh)); in process_idi_rc()
629 if (e->status & DIVA_UM_IDI_ASSIGN_PENDING) { in process_idi_rc()
630 e->status &= ~DIVA_UM_IDI_ASSIGN_PENDING; in process_idi_rc()
633 e->adapter->adapter_nr, e)); in process_idi_rc()
634 e->e.callback = NULL; in process_idi_rc()
635 e->e.Id = 0; in process_idi_rc()
636 e->e.Req = 0; in process_idi_rc()
637 e->e.ReqCh = 0; in process_idi_rc()
638 e->e.Rc = 0; in process_idi_rc()
639 e->e.RcCh = 0; in process_idi_rc()
640 e->e.Ind = 0; in process_idi_rc()
641 e->e.IndCh = 0; in process_idi_rc()
642 e->e.X = NULL; in process_idi_rc()
643 e->e.R = NULL; in process_idi_rc()
644 e->e.XNum = 0; in process_idi_rc()
645 e->e.RNum = 0; in process_idi_rc()
648 if ((e->e.Req == REMOVE) && e->e.Id && (rc == 0xff)) { in process_idi_rc()
650 e->adapter->adapter_nr, e)); in process_idi_rc()
653 if ((e->e.Req == REMOVE) && (!e->e.Id)) { /* REMOVE COMPLETE */ in process_idi_rc()
654 e->e.callback = NULL; in process_idi_rc()
655 e->e.Id = 0; in process_idi_rc()
656 e->e.Req = 0; in process_idi_rc()
657 e->e.ReqCh = 0; in process_idi_rc()
658 e->e.Rc = 0; in process_idi_rc()
659 e->e.RcCh = 0; in process_idi_rc()
660 e->e.Ind = 0; in process_idi_rc()
661 e->e.IndCh = 0; in process_idi_rc()
662 e->e.X = NULL; in process_idi_rc()
663 e->e.R = NULL; in process_idi_rc()
664 e->e.XNum = 0; in process_idi_rc()
665 e->e.RNum = 0; in process_idi_rc()
666 e->rc_count = 0; in process_idi_rc()
668 if ((e->e.Req == REMOVE) && (rc != 0xff)) { /* REMOVE FAILED */ in process_idi_rc()
670 e->adapter->adapter_nr, e)); in process_idi_rc()
672 write_return_code(e, rc); in process_idi_rc()
677 static int process_idi_ind(divas_um_idi_entity_t *e, byte ind) in process_idi_ind() argument
681 if (e->e.complete != 0x02) { in process_idi_ind()
684 diva_data_q_get_segment4write(&e->data); in process_idi_ind()
686 e->e.RNum = 1; in process_idi_ind()
687 e->e.R->P = (byte *)&pind[1]; in process_idi_ind()
688 e->e.R->PLength = in process_idi_ind()
689 (word) (diva_data_q_get_max_length(&e->data) - in process_idi_ind()
692 e->adapter->adapter_nr, e, e->e.Id, ind, in process_idi_ind()
693 e->e.IndCh, e->e.RLength, in process_idi_ind()
694 e->e.R->PLength)); in process_idi_ind()
698 e->adapter->adapter_nr, e, e->e.Id, ind, in process_idi_ind()
699 e->e.IndCh)); in process_idi_ind()
700 e->e.RNum = 0; in process_idi_ind()
701 e->e.RNR = 1; in process_idi_ind()
706 (diva_um_idi_ind_hdr_t *) (e->e.R->P); in process_idi_ind()
709 e->adapter->adapter_nr, e, e->e.Id, ind, in process_idi_ind()
710 e->e.IndCh, e->e.R->PLength)); in process_idi_ind()
715 pind->hdr.ind.IndCh = e->e.IndCh; in process_idi_ind()
716 pind->data_length = e->e.R->PLength; in process_idi_ind()
717 diva_data_q_ack_segment4write(&e->data, in process_idi_ind()
719 e->e.R->PLength)); in process_idi_ind()
723 if ((e->status & DIVA_UM_IDI_RC_PENDING) && !e->rc.count) { in process_idi_ind()
733 static int write_return_code(divas_um_idi_entity_t *e, byte rc) in write_return_code() argument
738 (diva_um_idi_ind_hdr_t *) diva_data_q_get_segment4write(&e->rc))) in write_return_code()
741 e->adapter->adapter_nr, e, rc)); in write_return_code()
742 e->status &= ~DIVA_UM_IDI_RC_PENDING; in write_return_code()
748 prc->hdr.rc.RcCh = e->e.RcCh; in write_return_code()
750 diva_data_q_ack_segment4write(&e->rc, sizeof(*prc)); in write_return_code()
761 divas_um_idi_entity_t *e; in diva_user_mode_idi_ind_ready() local
769 e = (divas_um_idi_entity_t *) entity; in diva_user_mode_idi_ind_ready()
770 a = e->adapter; in diva_user_mode_idi_ind_ready()
779 if (e->status & DIVA_UM_IDI_REMOVED) { in diva_user_mode_idi_ind_ready()
788 ret = e->rc.count + e->data.count; in diva_user_mode_idi_ind_ready()
790 if ((e->status & DIVA_UM_IDI_RC_PENDING) && !e->rc.count) { in diva_user_mode_idi_ind_ready()
806 divas_um_idi_entity_t *e; in divas_um_idi_entity_assigned() local
814 e = (divas_um_idi_entity_t *) entity; in divas_um_idi_entity_assigned()
815 if (!e || (!(a = e->adapter)) || in divas_um_idi_entity_assigned()
816 (e->status & DIVA_UM_IDI_REMOVED) || in divas_um_idi_entity_assigned()
822 e->status |= DIVA_UM_IDI_REMOVE_PENDING; in divas_um_idi_entity_assigned()
824 ret = (e->e.Id || e->rc_count in divas_um_idi_entity_assigned()
825 || (e->status & DIVA_UM_IDI_ASSIGN_PENDING)); in divas_um_idi_entity_assigned()
827 DBG_TRC(("Id:%02x, rc_count:%d, status:%08x", e->e.Id, e->rc_count, in divas_um_idi_entity_assigned()
828 e->status)) in divas_um_idi_entity_assigned()
837 divas_um_idi_entity_t *e; in divas_um_idi_entity_start_remove() local
843 e = (divas_um_idi_entity_t *) entity; in divas_um_idi_entity_start_remove()
844 if (!e || (!(a = e->adapter)) || in divas_um_idi_entity_start_remove()
845 (e->status & DIVA_UM_IDI_REMOVED) || in divas_um_idi_entity_start_remove()
851 if (e->rc_count) { in divas_um_idi_entity_start_remove()
859 if (!e->e.Id) { in divas_um_idi_entity_start_remove()
870 e->e.Req = REMOVE; in divas_um_idi_entity_start_remove()
871 e->e.ReqCh = 0; in divas_um_idi_entity_start_remove()
873 e->rc_count++; in divas_um_idi_entity_start_remove()
876 e->adapter->adapter_nr, e, e->e.Id, e->e.Req, in divas_um_idi_entity_start_remove()
877 e->e.ReqCh, e->e.X->PLength)); in divas_um_idi_entity_start_remove()
880 (*(a->d.request)) (&e->e); in divas_um_idi_entity_start_remove()