Lines Matching refs:rsp

133 	rd_devstate_t	*rsp;  in rd_is_busy()  local
137 if ((rsp = ddi_get_soft_state(rd_statep, minor)) != NULL && in rd_is_busy()
138 rsp->rd_dip == rd_dip) { in rd_is_busy()
171 rd_devstate_t *rsp; in rd_find_named_disk() local
175 if ((rsp = ddi_get_soft_state(rd_statep, minor)) != NULL && in rd_find_named_disk()
176 strcmp(rsp->rd_name, name) == 0) { in rd_find_named_disk()
177 return (rsp); in rd_find_named_disk()
191 rd_devstate_t *rsp; in rd_find_dip_state() local
195 if ((rsp = ddi_get_soft_state(rd_statep, minor)) != NULL && in rd_find_dip_state()
196 rsp->rd_dip == dip) { in rd_find_dip_state()
197 return (rsp); in rd_find_dip_state()
207 rd_is_open(rd_devstate_t *rsp) in rd_is_open() argument
210 return (rsp->rd_chr_open || rsp->rd_blk_open || rsp->rd_lyr_open_cnt); in rd_is_open()
217 rd_opened(rd_devstate_t *rsp, int otyp) in rd_opened() argument
222 rsp->rd_chr_open = 1; in rd_opened()
225 rsp->rd_blk_open = 1; in rd_opened()
228 rsp->rd_lyr_open_cnt++; in rd_opened()
240 rd_closed(rd_devstate_t *rsp, int otyp) in rd_closed() argument
245 rsp->rd_chr_open = 0; in rd_closed()
248 rsp->rd_blk_open = 0; in rd_closed()
251 rsp->rd_lyr_open_cnt--; in rd_closed()
399 rd_unmap_window(rd_devstate_t *rsp) in rd_unmap_window() argument
401 ASSERT(rsp->rd_window_obp == 0); in rd_unmap_window()
402 if (rsp->rd_window_base != RD_WINDOW_NOT_MAPPED) { in rd_unmap_window()
403 hat_unload(kas.a_hat, rsp->rd_window_virt, rsp->rd_window_size, in rd_unmap_window()
412 rd_map_window(rd_devstate_t *rsp, off_t offset) in rd_map_window() argument
416 if (rsp->rd_window_base != RD_WINDOW_NOT_MAPPED) { in rd_map_window()
420 if (offset >= rsp->rd_window_base && in rd_map_window()
421 offset < rsp->rd_window_base + rsp->rd_window_size) { in rd_map_window()
428 rd_unmap_window(rsp); in rd_map_window()
430 rsp->rd_window_base = ptob(offpgs); in rd_map_window()
436 if (rsp->rd_dip == rd_dip) { in rd_map_window()
444 lastpi = pi + btopr(rsp->rd_window_size); in rd_map_window()
445 if (lastpi > rsp->rd_npages) { in rd_map_window()
446 lastpi = rsp->rd_npages; in rd_map_window()
452 vaddr = rsp->rd_window_virt; in rd_map_window()
454 hat_memload(kas.a_hat, vaddr, rsp->rd_ppa[pi], in rd_map_window()
467 for (i = 0; i < rsp->rd_nexisting; ++i) { in rd_map_window()
468 if (offset < rsp->rd_existing[i].size) { in rd_map_window()
471 offset -= rsp->rd_existing[i].size; in rd_map_window()
473 ASSERT(i < rsp->rd_nexisting); in rd_map_window()
478 pfn = btop(rsp->rd_existing[i].phys + offset); in rd_map_window()
479 hat_devload(kas.a_hat, rsp->rd_window_virt, rsp->rd_window_size, in rd_map_window()
496 rd_fake_disk_geometry(rd_devstate_t *rsp) in rd_fake_disk_geometry() argument
510 if (rsp->rd_size < (2 * 1024 * 1024)) /* floppy? */ in rd_fake_disk_geometry()
511 rsp->rd_dkg.dkg_ncyl = rsp->rd_size / (100 * 1024); in rd_fake_disk_geometry()
513 rsp->rd_dkg.dkg_ncyl = rsp->rd_size / (300 * 1024); in rd_fake_disk_geometry()
515 if (rsp->rd_dkg.dkg_ncyl == 0) in rd_fake_disk_geometry()
516 rsp->rd_dkg.dkg_ncyl = 1; in rd_fake_disk_geometry()
517 rsp->rd_dkg.dkg_acyl = 0; in rd_fake_disk_geometry()
518 rsp->rd_dkg.dkg_bcyl = 0; in rd_fake_disk_geometry()
519 rsp->rd_dkg.dkg_nhead = 1; in rd_fake_disk_geometry()
520 rsp->rd_dkg.dkg_obs1 = 0; in rd_fake_disk_geometry()
521 rsp->rd_dkg.dkg_intrlv = 0; in rd_fake_disk_geometry()
522 rsp->rd_dkg.dkg_obs2 = 0; in rd_fake_disk_geometry()
523 rsp->rd_dkg.dkg_obs3 = 0; in rd_fake_disk_geometry()
524 rsp->rd_dkg.dkg_apc = 0; in rd_fake_disk_geometry()
525 rsp->rd_dkg.dkg_rpm = 7200; in rd_fake_disk_geometry()
526 rsp->rd_dkg.dkg_pcyl = rsp->rd_dkg.dkg_ncyl + rsp->rd_dkg.dkg_acyl; in rd_fake_disk_geometry()
527 rsp->rd_dkg.dkg_nsect = rsp->rd_size / in rd_fake_disk_geometry()
528 (DEV_BSIZE * rsp->rd_dkg.dkg_ncyl); in rd_fake_disk_geometry()
529 rsp->rd_dkg.dkg_write_reinstruct = 0; in rd_fake_disk_geometry()
530 rsp->rd_dkg.dkg_read_reinstruct = 0; in rd_fake_disk_geometry()
533 bzero(&rsp->rd_vtoc, sizeof (struct vtoc)); in rd_fake_disk_geometry()
534 rsp->rd_vtoc.v_sanity = VTOC_SANE; in rd_fake_disk_geometry()
535 rsp->rd_vtoc.v_version = V_VERSION; in rd_fake_disk_geometry()
536 bcopy(RD_DRIVER_NAME, rsp->rd_vtoc.v_volume, 7); in rd_fake_disk_geometry()
537 rsp->rd_vtoc.v_sectorsz = DEV_BSIZE; in rd_fake_disk_geometry()
538 rsp->rd_vtoc.v_nparts = 1; in rd_fake_disk_geometry()
539 rsp->rd_vtoc.v_part[0].p_tag = V_UNASSIGNED; in rd_fake_disk_geometry()
540 rsp->rd_vtoc.v_part[0].p_flag = V_UNMNT; in rd_fake_disk_geometry()
541 rsp->rd_vtoc.v_part[0].p_start = (daddr_t)0; in rd_fake_disk_geometry()
548 rsp->rd_vtoc.v_part[0].p_size = rsp->rd_dkg.dkg_pcyl * in rd_fake_disk_geometry()
549 rsp->rd_dkg.dkg_nsect * rsp->rd_dkg.dkg_nhead; in rd_fake_disk_geometry()
552 bzero(&rsp->rd_ci, sizeof (struct dk_cinfo)); in rd_fake_disk_geometry()
553 (void) strcpy(rsp->rd_ci.dki_cname, RD_DRIVER_NAME); in rd_fake_disk_geometry()
554 rsp->rd_ci.dki_ctype = DKC_MD; in rd_fake_disk_geometry()
555 rsp->rd_ci.dki_flags = 0; in rd_fake_disk_geometry()
556 rsp->rd_ci.dki_cnum = 0; in rd_fake_disk_geometry()
557 rsp->rd_ci.dki_addr = 0; in rd_fake_disk_geometry()
558 rsp->rd_ci.dki_space = 0; in rd_fake_disk_geometry()
559 rsp->rd_ci.dki_prio = 0; in rd_fake_disk_geometry()
560 rsp->rd_ci.dki_vec = 0; in rd_fake_disk_geometry()
561 (void) strcpy(rsp->rd_ci.dki_dname, RD_DRIVER_NAME); in rd_fake_disk_geometry()
562 rsp->rd_ci.dki_unit = 0; in rd_fake_disk_geometry()
563 rsp->rd_ci.dki_slave = 0; in rd_fake_disk_geometry()
564 rsp->rd_ci.dki_partition = 0; in rd_fake_disk_geometry()
571 rsp->rd_ci.dki_maxtransfer = 16; in rd_fake_disk_geometry()
579 rd_dealloc_resources(rd_devstate_t *rsp) in rd_dealloc_resources() argument
581 dev_info_t *dip = rsp->rd_dip; in rd_dealloc_resources()
585 if (rsp->rd_window_obp == 0 && rsp->rd_window_virt != NULL) { in rd_dealloc_resources()
586 if (rsp->rd_window_base != RD_WINDOW_NOT_MAPPED) { in rd_dealloc_resources()
587 rd_unmap_window(rsp); in rd_dealloc_resources()
589 vmem_free(heap_arena, rsp->rd_window_virt, rsp->rd_window_size); in rd_dealloc_resources()
591 mutex_destroy(&rsp->rd_device_lock); in rd_dealloc_resources()
593 if (rsp->rd_existing) { in rd_dealloc_resources()
594 ddi_prop_free(rsp->rd_existing); in rd_dealloc_resources()
596 if (rsp->rd_ppa != NULL) { in rd_dealloc_resources()
597 rd_phys_free(rsp->rd_ppa, rsp->rd_npages); in rd_dealloc_resources()
605 rsp->rd_name); in rd_dealloc_resources()
608 rsp->rd_name); in rd_dealloc_resources()
618 fulldev = makedevice(ddi_driver_major(dip), rsp->rd_minor); in rd_dealloc_resources()
622 if (rsp->rd_kstat) { in rd_dealloc_resources()
623 kstat_delete(rsp->rd_kstat); in rd_dealloc_resources()
624 mutex_destroy(&rsp->rd_kstat_lock); in rd_dealloc_resources()
627 ddi_soft_state_free(rd_statep, rsp->rd_minor); in rd_dealloc_resources()
638 rd_devstate_t *rsp; in rd_alloc_resources() local
648 rsp = ddi_get_soft_state(rd_statep, minor); in rd_alloc_resources()
650 (void) strcpy(rsp->rd_name, name); in rd_alloc_resources()
651 rsp->rd_dip = dip; in rd_alloc_resources()
652 rsp->rd_minor = minor; in rd_alloc_resources()
653 rsp->rd_size = size; in rd_alloc_resources()
658 mutex_init(&rsp->rd_device_lock, NULL, MUTEX_DRIVER, NULL); in rd_alloc_resources()
660 rsp->rd_window_obp = 0; in rd_alloc_resources()
661 rsp->rd_window_base = RD_WINDOW_NOT_MAPPED; in rd_alloc_resources()
662 rsp->rd_window_size = PAGESIZE; in rd_alloc_resources()
663 rsp->rd_window_virt = vmem_alloc(heap_arena, in rd_alloc_resources()
664 rsp->rd_window_size, VM_SLEEP); in rd_alloc_resources()
665 if (rsp->rd_window_virt == NULL) { in rd_alloc_resources()
669 rsp->rd_window_obp = 1; in rd_alloc_resources()
670 rsp->rd_window_base = 0; in rd_alloc_resources()
671 rsp->rd_window_size = size; in rd_alloc_resources()
672 rsp->rd_window_virt = (caddr_t)((ulong_t)addr); in rd_alloc_resources()
680 rsp->rd_npages = btopr(size); in rd_alloc_resources()
681 rsp->rd_ppa = rd_phys_alloc(rsp->rd_npages); in rd_alloc_resources()
682 if (rsp->rd_ppa == NULL) { in rd_alloc_resources()
693 rsp->rd_name); in rd_alloc_resources()
699 rsp->rd_name); in rd_alloc_resources()
739 rsp->rd_kstat = kstat_create(RD_DRIVER_NAME, minor, NULL, in rd_alloc_resources()
741 if (rsp->rd_kstat) { in rd_alloc_resources()
742 mutex_init(&rsp->rd_kstat_lock, NULL, in rd_alloc_resources()
744 rsp->rd_kstat->ks_lock = &rsp->rd_kstat_lock; in rd_alloc_resources()
745 kstat_install(rsp->rd_kstat); in rd_alloc_resources()
748 rd_fake_disk_geometry(rsp); in rd_alloc_resources()
750 return (rsp); in rd_alloc_resources()
756 rd_dealloc_resources(rsp); in rd_alloc_resources()
782 rd_devstate_t *rsp; in rd_common_detach() local
784 if ((rsp = rd_find_dip_state(dip)) != NULL) { in rd_common_detach()
785 rd_dealloc_resources(rsp); in rd_common_detach()
800 rd_devstate_t *rsp; in rd_attach() local
823 rsp = ddi_get_soft_state(rd_statep, RD_CTL_MINOR); in rd_attach()
824 rsp->rd_dip = dip; in rd_attach()
881 if ((rsp = rd_alloc_resources(name, obpaddr, size, in rd_attach()
886 rsp->rd_existing = ep; in rd_attach()
887 rsp->rd_nexisting = nep; in rd_attach()
943 rd_devstate_t *rsp; in rd_getinfo() local
947 if ((rsp = ddi_get_soft_state(rd_statep, in rd_getinfo()
949 *result = rsp->rd_dip; in rd_getinfo()
956 if ((rsp = ddi_get_soft_state(rd_statep, in rd_getinfo()
959 ddi_get_instance(rsp->rd_dip); in rd_getinfo()
975 rd_devstate_t *rsp; in rd_open() local
989 rsp = ddi_get_soft_state(rd_statep, RD_CTL_MINOR); in rd_open()
990 if (rsp == NULL) { in rd_open()
995 if (rd_is_open(rsp)) { in rd_open()
999 (void) rd_opened(rsp, OTYP_CHR); in rd_open()
1006 rsp = ddi_get_soft_state(rd_statep, minor); in rd_open()
1007 if (rsp == NULL) { in rd_open()
1012 if (rd_opened(rsp, otyp) == -1) { in rd_open()
1026 rd_devstate_t *rsp; in rd_close() local
1032 rsp = ddi_get_soft_state(rd_statep, minor); in rd_close()
1033 if (rsp == NULL) { in rd_close()
1038 rd_closed(rsp, otyp); in rd_close()
1054 rd_rw(rd_devstate_t *rsp, struct buf *bp, offset_t offset, size_t nbytes) in rd_rw() argument
1067 mutex_enter(&rsp->rd_device_lock); in rd_rw()
1068 rd_map_window(rsp, offset); in rd_rw()
1070 off_in_window = offset - rsp->rd_window_base; in rd_rw()
1071 rem_in_window = rsp->rd_window_size - off_in_window; in rd_rw()
1073 raddr = rsp->rd_window_virt + off_in_window; in rd_rw()
1081 mutex_exit(&rsp->rd_device_lock); in rd_rw()
1099 rd_devstate_t *rsp; local
1102 rsp = ddi_get_soft_state(rd_statep, getminor(bp->b_edev));
1106 if (rsp == NULL ||
1108 (rsp->rd_dip != rd_dip || rd_dip == NULL))) { /* OBP ramdisk */
1110 if (rsp == NULL) {
1114 } else if (offset >= rsp->rd_size) {
1120 if (rsp->rd_kstat) {
1121 mutex_enter(rsp->rd_kstat->ks_lock);
1122 kstat_runq_enter(KSTAT_IO_PTR(rsp->rd_kstat));
1123 mutex_exit(rsp->rd_kstat->ks_lock);
1126 nbytes = min(bp->b_bcount, rsp->rd_size - offset);
1128 rd_rw(rsp, bp, offset, nbytes);
1132 if (rsp->rd_kstat) {
1135 mutex_enter(rsp->rd_kstat->ks_lock);
1136 kioptr = KSTAT_IO_PTR(rsp->rd_kstat);
1145 mutex_exit(rsp->rd_kstat->ks_lock);
1157 rd_devstate_t *rsp; local
1159 rsp = ddi_get_soft_state(rd_statep, getminor(dev));
1161 if (uiop->uio_offset >= rsp->rd_size)
1171 rd_devstate_t *rsp; local
1173 rsp = ddi_get_soft_state(rd_statep, getminor(dev));
1175 if (uiop->uio_offset >= rsp->rd_size)
1187 rd_devstate_t *rsp; local
1208 rsp = rd_alloc_resources(kri.ri_name, 0, size, rd_dip);
1209 if (rsp == NULL) {
1224 rd_devstate_t *rsp; local
1234 rsp = rd_find_named_disk(kri.ri_name);
1235 if (rsp == NULL || rsp->rd_dip != rd_dip) {
1239 if (rd_is_open(rsp)) {
1244 rd_dealloc_resources(rsp);
1258 rd_devstate_t *rsp; local
1289 rsp = ddi_get_soft_state(rd_statep, minor);
1290 if (rsp == NULL) {
1303 vtoctovtoc32(rsp->rd_vtoc, vtoc32);
1311 if (ddi_copyout(&rsp->rd_vtoc, (void *)arg,
1318 error = ddi_copyout(&rsp->rd_ci, (void *)arg,
1326 error = ddi_copyout(&rsp->rd_dkg, (void *)arg,