Lines Matching refs:ebus_p

86 static int ebus_config(ebus_devstate_t *ebus_p);
87 static int ebus_apply_range(ebus_devstate_t *ebus_p, dev_info_t *rdip,
89 int ebus_get_ranges_prop(ebus_devstate_t *ebus_p);
90 static void ebus_get_cells_prop(ebus_devstate_t *ebus_p);
91 static void ebus_vreg_dump(ebus_devstate_t *ebus_p, vregspec_t *rp);
246 ebus_devstate_t *ebus_p; /* per ebus state pointer */
250 ebus_p = get_ebus_soft_state(instance);
257 if (ebus_p == NULL)
259 *result = (void *)ebus_p->dip;
281 ebus_devstate_t *ebus_p; /* per ebus state pointer */
298 ebus_p = get_ebus_soft_state(instance);
299 ebus_p->dip = dip;
300 mutex_init(&ebus_p->ebus_mutex, NULL, MUTEX_DRIVER, NULL);
301 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_CLOSED;
303 ebus_get_cells_prop(ebus_p);
308 if (ebus_get_ranges_prop(ebus_p) != DDI_SUCCESS) {
320 if (ebus_config(ebus_p) != DDI_SUCCESS) {
337 ebus_p->state = ATTACHED;
339 DBG(D_ATTACH, ebus_p, "returning\n");
345 ebus_p = get_ebus_soft_state(instance);
347 (void) ebus_config(ebus_p);
349 ebus_p->state = RESUMED;
356 mutex_destroy(&ebus_p->ebus_mutex);
368 ebus_devstate_t *ebus_p = get_ebus_soft_state(instance);
372 DBG1(D_DETACH, ebus_p, "DDI_DETACH dip=%p\n", dip);
374 kmem_free(ebus_p->vrangep, ebus_p->vrange_len);
377 mutex_destroy(&ebus_p->ebus_mutex);
381 DBG1(D_DETACH, ebus_p, "DDI_SUSPEND dip=%p\n", dip);
382 ebus_p->state = SUSPENDED;
394 ebus_get_ranges_prop(ebus_devstate_t *ebus_p)
396 if (ddi_getlongprop(DDI_DEV_T_ANY, ebus_p->dip, DDI_PROP_DONTPASS,
397 "ranges", (caddr_t)&ebus_p->vrangep, &ebus_p->vrange_len)
400 ddi_get_name(ebus_p->dip));
404 ebus_p->vrange_cnt = ebus_p->vrange_len /
405 (ebus_p->ebus_paddr_cells + ebus_p->ebus_addr_cells +
406 ebus_p->ebus_psz_cells);
408 if (ebus_p->vrange_cnt == 0) {
409 kmem_free(ebus_p->vrangep, ebus_p->vrange_len);
418 ebus_get_cells_prop(ebus_devstate_t *ebus_p)
420 dev_info_t *dip = ebus_p->dip;
423 ebus_p->ebus_addr_cells = ddi_getprop(DDI_DEV_T_ANY,
427 ebus_p->ebus_paddr_cells = ddi_getprop(DDI_DEV_T_ANY,
430 ASSERT((ebus_p->ebus_paddr_cells == 3) ||
431 (ebus_p->ebus_paddr_cells == 2));
433 ebus_p->ebus_sz_cells = ddi_getprop(DDI_DEV_T_ANY,
435 ebus_p->ebus_psz_cells = ddi_getprop(DDI_DEV_T_ANY,
440 ebus_p->ebus_psz_cells = 1;
442 ASSERT((ebus_p->ebus_psz_cells == 2) ||
443 (ebus_p->ebus_psz_cells == 1));
462 ebus_devstate_t *ebus_p = get_ebus_soft_state(ddi_get_instance(dip));
472 DBG4(D_MAP, ebus_p, "rdip=%s%d: off=%x len=%x\n",
482 DBG3(D_MAP, ebus_p, "rdip=%s%d: REGSPEC - handlep=%p\n",
495 DBG4(D_MAP, ebus_p, "rdip=%s%d: rnumber=%x handlep=%p\n",
500 DBG(D_MAP, ebus_p, "can't get reg property\n");
507 DBG(D_MAP, ebus_p, "rnumber out of range\n");
523 rval = ebus_apply_range(ebus_p, rdip, ebus_rp, &vreg);
537 DBG1(D_MAP, ebus_p, "parent returned %x\n", rval);
549 * parent space, so maths on preg/rng_cell_p[ebus_p->ebus_paddr_cells - 1],
553 ebus_apply_range(ebus_devstate_t *ebus_p, dev_info_t *rdip,
556 int nrange = ebus_p->vrange_cnt;
560 uint32_t *rng_cell_p = (uint32_t *)ebus_p->vrangep;
561 int rng_rec_sz = ebus_p->ebus_paddr_cells + ebus_p->ebus_addr_cells +
562 ebus_p->ebus_sz_cells;
564 int preg_rec_sz = ebus_p->ebus_paddr_cells + ebus_p->ebus_psz_cells;
569 DBG3(D_MAP, ebus_p, "Range Matching Addr 0x%x.%x size 0x%x\n",
597 for (i = 0; i < ebus_p->ebus_paddr_cells; i++)
598 preg_cell_p[i] = rng_cell_p[ebus_p->ebus_addr_cells+i];
600 preg_cell_p[ebus_p->ebus_paddr_cells-1] += addr_offset;
607 ebus_vreg_dump(ebus_p, (vregspec_t *)preg_cell_p);
660 ebus_devstate_t *ebus_p = get_ebus_soft_state(ddi_get_instance(dip));
673 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_INITCHILD: rdip=%s%d\n",
677 DBG(D_CTLOPS, ebus_p, "can't name child\n");
687 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_UNINITCHILD: rdip=%s%d\n",
697 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_REPORTDEV: rdip=%s%d\n",
707 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_REGSIZE: rdip=%s%d\n",
710 DBG(D_CTLOPS, ebus_p, "can't get reg property\n");
715 DBG(D_MAP, ebus_p, "rnumber out of range\n");
725 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_NREGS: rdip=%s%d\n",
728 DBG(D_CTLOPS, ebus_p, "can't get reg property\n");
739 DBG2(D_CTLOPS, ebus_p, "passing request to parent: rdip=%s%d\n",
768 ebus_devstate_t *ebus_p = get_ebus_soft_state(ddi_get_instance(dip));
773 DBG1(D_INTR, ebus_p, "ebus_p 0x%p\n", ebus_p);
811 DBG2(D_INTR, ebus_p, "child name %s; match PIL %d\n",
829 DBG2(D_INTR, ebus_p, "Device type %s; match "
864 ebus_config(ebus_devstate_t *ebus_p)
868 dev_info_t *dip = ebus_p->dip;
891 if (pci_config_setup(ebus_p->dip, &conf_handle) != DDI_SUCCESS)
896 DBG1(D_MAP, ebus_p, "command register was 0x%x\n", comm);
902 DBG1(D_MAP, ebus_p, "command register is now 0x%x\n", comm);
916 ebus_debug(uint_t flag, ebus_devstate_t *ebus_p, char *fmt,
934 if (ebus_p)
936 ddi_get_name(ebus_p->dip),
937 ddi_get_instance(ebus_p->dip), s);
945 ebus_vreg_dump(ebus_devstate_t *ebus_p, vregspec_t *rp)
947 if (ebus_p->ebus_paddr_cells == 3) {
948 DBG5(D_MAP, ebus_p, "(%x,%x,%x)(%x,%x)\n",
954 } else if (ebus_p->ebus_paddr_cells == 2) {
955 DBG3(D_MAP, ebus_p, "%x,%x,%x\n",
967 ebus_devstate_t *ebus_p;
978 ebus_p = get_ebus_soft_state(getminor(*devp));
979 if (ebus_p == NULL)
985 mutex_enter(&ebus_p->ebus_mutex);
987 if (ebus_p->ebus_soft_state != EBUS_SOFT_STATE_CLOSED) {
988 mutex_exit(&ebus_p->ebus_mutex);
991 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_OPEN_EXCL;
993 if (ebus_p->ebus_soft_state == EBUS_SOFT_STATE_OPEN_EXCL) {
994 mutex_exit(&ebus_p->ebus_mutex);
997 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_OPEN;
999 mutex_exit(&ebus_p->ebus_mutex);
1008 ebus_devstate_t *ebus_p;
1013 ebus_p = get_ebus_soft_state(getminor(dev));
1014 if (ebus_p == NULL)
1017 mutex_enter(&ebus_p->ebus_mutex);
1018 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_CLOSED;
1019 mutex_exit(&ebus_p->ebus_mutex);
1032 ebus_devstate_t *ebus_p;
1038 ebus_p = get_ebus_soft_state(getminor(dev));
1039 if (ebus_p == NULL)
1042 self = ebus_p->dip;