Lines Matching defs:ebus_p

83 static int ebus_config(ebus_devstate_t *ebus_p);
84 static int ebus_apply_range(ebus_devstate_t *ebus_p, dev_info_t *rdip,
86 int ebus_get_ranges_prop(ebus_devstate_t *ebus_p);
87 static void ebus_get_cells_prop(ebus_devstate_t *ebus_p);
88 static void ebus_vreg_dump(ebus_devstate_t *ebus_p, vregspec_t *rp);
243 ebus_devstate_t *ebus_p; /* per ebus state pointer */
247 ebus_p = get_ebus_soft_state(instance);
254 if (ebus_p == NULL)
256 *result = (void *)ebus_p->dip;
278 ebus_devstate_t *ebus_p; /* per ebus state pointer */
295 ebus_p = get_ebus_soft_state(instance);
296 ebus_p->dip = dip;
297 mutex_init(&ebus_p->ebus_mutex, NULL, MUTEX_DRIVER, NULL);
298 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_CLOSED;
300 ebus_get_cells_prop(ebus_p);
305 if (ebus_get_ranges_prop(ebus_p) != DDI_SUCCESS) {
317 if (ebus_config(ebus_p) != DDI_SUCCESS) {
334 ebus_p->state = ATTACHED;
336 DBG(D_ATTACH, ebus_p, "returning\n");
342 ebus_p = get_ebus_soft_state(instance);
344 (void) ebus_config(ebus_p);
346 ebus_p->state = RESUMED;
353 mutex_destroy(&ebus_p->ebus_mutex);
365 ebus_devstate_t *ebus_p = get_ebus_soft_state(instance);
369 DBG1(D_DETACH, ebus_p, "DDI_DETACH dip=%p\n", dip);
371 kmem_free(ebus_p->vrangep, ebus_p->vrange_len);
374 mutex_destroy(&ebus_p->ebus_mutex);
378 DBG1(D_DETACH, ebus_p, "DDI_SUSPEND dip=%p\n", dip);
379 ebus_p->state = SUSPENDED;
391 ebus_get_ranges_prop(ebus_devstate_t *ebus_p)
393 if (ddi_getlongprop(DDI_DEV_T_ANY, ebus_p->dip, DDI_PROP_DONTPASS,
394 "ranges", (caddr_t)&ebus_p->vrangep, &ebus_p->vrange_len)
397 ddi_get_name(ebus_p->dip));
401 ebus_p->vrange_cnt = ebus_p->vrange_len /
402 (ebus_p->ebus_paddr_cells + ebus_p->ebus_addr_cells +
403 ebus_p->ebus_psz_cells);
405 if (ebus_p->vrange_cnt == 0) {
406 kmem_free(ebus_p->vrangep, ebus_p->vrange_len);
415 ebus_get_cells_prop(ebus_devstate_t *ebus_p)
417 dev_info_t *dip = ebus_p->dip;
420 ebus_p->ebus_addr_cells = ddi_getprop(DDI_DEV_T_ANY,
424 ebus_p->ebus_paddr_cells = ddi_getprop(DDI_DEV_T_ANY,
427 ASSERT((ebus_p->ebus_paddr_cells == 3) ||
428 (ebus_p->ebus_paddr_cells == 2));
430 ebus_p->ebus_sz_cells = ddi_getprop(DDI_DEV_T_ANY,
432 ebus_p->ebus_psz_cells = ddi_getprop(DDI_DEV_T_ANY,
437 ebus_p->ebus_psz_cells = 1;
439 ASSERT((ebus_p->ebus_psz_cells == 2) ||
440 (ebus_p->ebus_psz_cells == 1));
459 ebus_devstate_t *ebus_p = get_ebus_soft_state(ddi_get_instance(dip));
469 DBG4(D_MAP, ebus_p, "rdip=%s%d: off=%x len=%x\n",
479 DBG3(D_MAP, ebus_p, "rdip=%s%d: REGSPEC - handlep=%p\n",
492 DBG4(D_MAP, ebus_p, "rdip=%s%d: rnumber=%x handlep=%p\n",
497 DBG(D_MAP, ebus_p, "can't get reg property\n");
504 DBG(D_MAP, ebus_p, "rnumber out of range\n");
520 rval = ebus_apply_range(ebus_p, rdip, ebus_rp, &vreg);
534 DBG1(D_MAP, ebus_p, "parent returned %x\n", rval);
546 * parent space, so maths on preg/rng_cell_p[ebus_p->ebus_paddr_cells - 1],
550 ebus_apply_range(ebus_devstate_t *ebus_p, dev_info_t *rdip,
553 int nrange = ebus_p->vrange_cnt;
557 uint32_t *rng_cell_p = (uint32_t *)ebus_p->vrangep;
558 int rng_rec_sz = ebus_p->ebus_paddr_cells + ebus_p->ebus_addr_cells +
559 ebus_p->ebus_sz_cells;
561 int preg_rec_sz = ebus_p->ebus_paddr_cells + ebus_p->ebus_psz_cells;
566 DBG3(D_MAP, ebus_p, "Range Matching Addr 0x%x.%x size 0x%x\n",
594 for (i = 0; i < ebus_p->ebus_paddr_cells; i++)
595 preg_cell_p[i] = rng_cell_p[ebus_p->ebus_addr_cells+i];
597 preg_cell_p[ebus_p->ebus_paddr_cells-1] += addr_offset;
604 ebus_vreg_dump(ebus_p, (vregspec_t *)preg_cell_p);
657 ebus_devstate_t *ebus_p = get_ebus_soft_state(ddi_get_instance(dip));
670 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_INITCHILD: rdip=%s%d\n",
674 DBG(D_CTLOPS, ebus_p, "can't name child\n");
684 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_UNINITCHILD: rdip=%s%d\n",
694 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_REPORTDEV: rdip=%s%d\n",
704 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_REGSIZE: rdip=%s%d\n",
707 DBG(D_CTLOPS, ebus_p, "can't get reg property\n");
712 DBG(D_MAP, ebus_p, "rnumber out of range\n");
722 DBG2(D_CTLOPS, ebus_p, "DDI_CTLOPS_NREGS: rdip=%s%d\n",
725 DBG(D_CTLOPS, ebus_p, "can't get reg property\n");
736 DBG2(D_CTLOPS, ebus_p, "passing request to parent: rdip=%s%d\n",
765 ebus_devstate_t *ebus_p = get_ebus_soft_state(ddi_get_instance(dip));
770 DBG1(D_INTR, ebus_p, "ebus_p 0x%p\n", ebus_p);
808 DBG2(D_INTR, ebus_p, "child name %s; match PIL %d\n",
826 DBG2(D_INTR, ebus_p, "Device type %s; match "
861 ebus_config(ebus_devstate_t *ebus_p)
865 dev_info_t *dip = ebus_p->dip;
888 if (pci_config_setup(ebus_p->dip, &conf_handle) != DDI_SUCCESS)
893 DBG1(D_MAP, ebus_p, "command register was 0x%x\n", comm);
899 DBG1(D_MAP, ebus_p, "command register is now 0x%x\n", comm);
913 ebus_debug(uint_t flag, ebus_devstate_t *ebus_p, char *fmt,
931 if (ebus_p)
933 ddi_get_name(ebus_p->dip),
934 ddi_get_instance(ebus_p->dip), s);
942 ebus_vreg_dump(ebus_devstate_t *ebus_p, vregspec_t *rp)
944 if (ebus_p->ebus_paddr_cells == 3) {
945 DBG5(D_MAP, ebus_p, "(%x,%x,%x)(%x,%x)\n",
951 } else if (ebus_p->ebus_paddr_cells == 2) {
952 DBG3(D_MAP, ebus_p, "%x,%x,%x\n",
964 ebus_devstate_t *ebus_p;
975 ebus_p = get_ebus_soft_state(getminor(*devp));
976 if (ebus_p == NULL)
982 mutex_enter(&ebus_p->ebus_mutex);
984 if (ebus_p->ebus_soft_state != EBUS_SOFT_STATE_CLOSED) {
985 mutex_exit(&ebus_p->ebus_mutex);
988 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_OPEN_EXCL;
990 if (ebus_p->ebus_soft_state == EBUS_SOFT_STATE_OPEN_EXCL) {
991 mutex_exit(&ebus_p->ebus_mutex);
994 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_OPEN;
996 mutex_exit(&ebus_p->ebus_mutex);
1005 ebus_devstate_t *ebus_p;
1010 ebus_p = get_ebus_soft_state(getminor(dev));
1011 if (ebus_p == NULL)
1014 mutex_enter(&ebus_p->ebus_mutex);
1015 ebus_p->ebus_soft_state = EBUS_SOFT_STATE_CLOSED;
1016 mutex_exit(&ebus_p->ebus_mutex);
1029 ebus_devstate_t *ebus_p;
1035 ebus_p = get_ebus_soft_state(getminor(dev));
1036 if (ebus_p == NULL)
1039 self = ebus_p->dip;