Lines Matching refs:seg

243 query_segment_type (struct dcss_segment *seg)  in query_segment_type()  argument
261 memcpy (qin->qname, seg->dcss_name, 8); in query_segment_type()
306 seg->vm_segtype = qout->range[0].start & 0xff; in query_segment_type()
325 seg->vm_segtype = SEG_TYPE_EWEN; in query_segment_type()
329 seg->start_addr = qout->segstart; in query_segment_type()
330 seg->end = qout->segend; in query_segment_type()
332 memcpy (seg->range, qout->range, 6*sizeof(struct qrange)); in query_segment_type()
333 seg->segcnt = qout->segcnt; in query_segment_type()
357 struct dcss_segment seg; in segment_type() local
362 dcss_mkname(name, seg.dcss_name); in segment_type()
363 rc = query_segment_type (&seg); in segment_type()
366 return seg.vm_segtype; in segment_type()
374 segment_overlaps_others (struct dcss_segment *seg) in segment_overlaps_others() argument
382 if ((tmp->start_addr >> 20) > (seg->end >> 20)) in segment_overlaps_others()
384 if ((tmp->end >> 20) < (seg->start_addr >> 20)) in segment_overlaps_others()
386 if (seg == tmp) in segment_overlaps_others()
400 struct dcss_segment *seg; in __segment_load() local
404 seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA); in __segment_load()
405 if (seg == NULL) { in __segment_load()
409 dcss_mkname (name, seg->dcss_name); in __segment_load()
410 rc = query_segment_type (seg); in __segment_load()
415 if (segment_overlaps_others(seg)) { in __segment_load()
421 rc = vmem_add_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in __segment_load()
426 seg->res = kzalloc(sizeof(struct resource), GFP_KERNEL); in __segment_load()
427 if (seg->res == NULL) { in __segment_load()
431 seg->res->flags = IORESOURCE_BUSY | IORESOURCE_MEM; in __segment_load()
432 seg->res->start = seg->start_addr; in __segment_load()
433 seg->res->end = seg->end; in __segment_load()
434 memcpy(&seg->res_name, seg->dcss_name, 8); in __segment_load()
435 EBCASC(seg->res_name, 8); in __segment_load()
436 seg->res_name[8] = '\0'; in __segment_load()
437 strncat(seg->res_name, " (DCSS)", 7); in __segment_load()
438 seg->res->name = seg->res_name; in __segment_load()
439 rc = seg->vm_segtype; in __segment_load()
442 seg->res->flags |= IORESOURCE_READONLY; in __segment_load()
443 if (request_resource(&iomem_resource, seg->res)) { in __segment_load()
445 kfree(seg->res); in __segment_load()
450 diag_cc = dcss_diag(&loadnsr_scode, seg->dcss_name, in __segment_load()
453 diag_cc = dcss_diag(&loadshr_scode, seg->dcss_name, in __segment_load()
456 dcss_diag(&purgeseg_scode, seg->dcss_name, in __segment_load()
465 dcss_diag(&purgeseg_scode, seg->dcss_name, in __segment_load()
469 seg->start_addr = start_addr; in __segment_load()
470 seg->end = end_addr; in __segment_load()
471 seg->do_nonshared = do_nonshared; in __segment_load()
472 atomic_set(&seg->ref_count, 1); in __segment_load()
473 list_add(&seg->list, &dcss_list); in __segment_load()
474 *addr = seg->start_addr; in __segment_load()
475 *end = seg->end; in __segment_load()
478 "exclusive-writable\n", name, (void*) seg->start_addr, in __segment_load()
479 (void*) seg->end, segtype_string[seg->vm_segtype]); in __segment_load()
482 "shared access mode\n", name, (void*) seg->start_addr, in __segment_load()
483 (void*) seg->end, segtype_string[seg->vm_segtype]); in __segment_load()
487 release_resource(seg->res); in __segment_load()
488 kfree(seg->res); in __segment_load()
490 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in __segment_load()
492 kfree(seg); in __segment_load()
520 struct dcss_segment *seg; in segment_load() local
527 seg = segment_by_name (name); in segment_load()
528 if (seg == NULL) in segment_load()
531 if (do_nonshared == seg->do_nonshared) { in segment_load()
532 atomic_inc(&seg->ref_count); in segment_load()
533 *addr = seg->start_addr; in segment_load()
534 *end = seg->end; in segment_load()
535 rc = seg->vm_segtype; in segment_load()
561 struct dcss_segment *seg; in segment_modify_shared() local
567 seg = segment_by_name (name); in segment_modify_shared()
568 if (seg == NULL) { in segment_modify_shared()
572 if (do_nonshared == seg->do_nonshared) { in segment_modify_shared()
578 if (atomic_read (&seg->ref_count) != 1) { in segment_modify_shared()
584 release_resource(seg->res); in segment_modify_shared()
586 seg->res->flags &= ~IORESOURCE_READONLY; in segment_modify_shared()
588 if (seg->vm_segtype == SEG_TYPE_SR || in segment_modify_shared()
589 seg->vm_segtype == SEG_TYPE_ER) in segment_modify_shared()
590 seg->res->flags |= IORESOURCE_READONLY; in segment_modify_shared()
592 if (request_resource(&iomem_resource, seg->res)) { in segment_modify_shared()
596 kfree(seg->res); in segment_modify_shared()
600 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy); in segment_modify_shared()
602 diag_cc = dcss_diag(&loadnsr_scode, seg->dcss_name, in segment_modify_shared()
605 diag_cc = dcss_diag(&loadshr_scode, seg->dcss_name, in segment_modify_shared()
617 seg->start_addr = start_addr; in segment_modify_shared()
618 seg->end = end_addr; in segment_modify_shared()
619 seg->do_nonshared = do_nonshared; in segment_modify_shared()
623 release_resource(seg->res); in segment_modify_shared()
624 kfree(seg->res); in segment_modify_shared()
626 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in segment_modify_shared()
627 list_del(&seg->list); in segment_modify_shared()
628 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy); in segment_modify_shared()
629 kfree(seg); in segment_modify_shared()
644 struct dcss_segment *seg; in segment_unload() local
650 seg = segment_by_name (name); in segment_unload()
651 if (seg == NULL) { in segment_unload()
655 if (atomic_dec_return(&seg->ref_count) != 0) in segment_unload()
657 release_resource(seg->res); in segment_unload()
658 kfree(seg->res); in segment_unload()
659 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in segment_unload()
660 list_del(&seg->list); in segment_unload()
661 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy); in segment_unload()
662 kfree(seg); in segment_unload()
673 struct dcss_segment *seg; in segment_save() local
682 seg = segment_by_name (name); in segment_save()
684 if (seg == NULL) { in segment_save()
690 for (i=0; i<seg->segcnt; i++) { in segment_save()
692 seg->range[i].start >> PAGE_SHIFT, in segment_save()
693 seg->range[i].end >> PAGE_SHIFT, in segment_save()
694 segtype_string[seg->range[i].start & 0xff]); in segment_save()