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