Lines Matching refs:seg

168 query_segment_type (struct dcss_segment *seg)  in query_segment_type()  argument
186 memcpy (qin->qname, seg->dcss_name, 8); in query_segment_type()
206 seg->vm_segtype = qout->range[0].start & 0xff; in query_segment_type()
225 seg->vm_segtype = SEG_TYPE_EWEN; in query_segment_type()
229 seg->start_addr = qout->segstart; in query_segment_type()
230 seg->end = qout->segend; in query_segment_type()
232 memcpy (seg->range, qout->range, 6*sizeof(struct qrange)); in query_segment_type()
233 seg->segcnt = qout->segcnt; in query_segment_type()
257 struct dcss_segment seg; in segment_type() local
262 dcss_mkname(name, seg.dcss_name); in segment_type()
263 rc = query_segment_type (&seg); in segment_type()
266 return seg.vm_segtype; in segment_type()
274 segment_overlaps_others (struct dcss_segment *seg) in segment_overlaps_others() argument
282 if ((tmp->start_addr >> 20) > (seg->end >> 20)) in segment_overlaps_others()
284 if ((tmp->end >> 20) < (seg->start_addr >> 20)) in segment_overlaps_others()
286 if (seg == tmp) in segment_overlaps_others()
301 struct dcss_segment *seg; in __segment_load() local
306 seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA); in __segment_load()
307 if (seg == NULL) { in __segment_load()
311 dcss_mkname (name, seg->dcss_name); in __segment_load()
312 rc = query_segment_type (seg); in __segment_load()
316 if (segment_overlaps_others(seg)) { in __segment_load()
321 seg->res = kzalloc(sizeof(struct resource), GFP_KERNEL); in __segment_load()
322 if (seg->res == NULL) { in __segment_load()
326 seg->res->flags = IORESOURCE_BUSY | IORESOURCE_MEM; in __segment_load()
327 seg->res->start = seg->start_addr; in __segment_load()
328 seg->res->end = seg->end; in __segment_load()
329 memcpy(&seg->res_name, seg->dcss_name, 8); in __segment_load()
330 EBCASC(seg->res_name, 8); in __segment_load()
331 seg->res_name[8] = '\0'; in __segment_load()
332 strlcat(seg->res_name, " (DCSS)", sizeof(seg->res_name)); in __segment_load()
333 seg->res->name = seg->res_name; in __segment_load()
334 segtype = seg->vm_segtype; in __segment_load()
337 seg->res->flags |= IORESOURCE_READONLY; in __segment_load()
340 if (request_resource(&iomem_resource, seg->res)) { in __segment_load()
345 rc = vmem_add_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in __segment_load()
350 diag_cc = dcss_diag(&loadnsr_scode, seg->dcss_name, in __segment_load()
353 diag_cc = dcss_diag(&loadshr_scode, seg->dcss_name, in __segment_load()
356 dcss_diag(&purgeseg_scode, seg->dcss_name, in __segment_load()
364 dcss_diag(&purgeseg_scode, seg->dcss_name, in __segment_load()
368 seg->start_addr = start_addr; in __segment_load()
369 seg->end = end_addr; in __segment_load()
370 seg->do_nonshared = do_nonshared; in __segment_load()
371 refcount_set(&seg->ref_count, 1); in __segment_load()
372 list_add(&seg->list, &dcss_list); in __segment_load()
373 *addr = seg->start_addr; in __segment_load()
374 *end = seg->end; in __segment_load()
377 "exclusive-writable\n", name, (void*) seg->start_addr, in __segment_load()
378 (void*) seg->end, segtype_string[seg->vm_segtype]); in __segment_load()
381 "shared access mode\n", name, (void*) seg->start_addr, in __segment_load()
382 (void*) seg->end, segtype_string[seg->vm_segtype]); in __segment_load()
386 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in __segment_load()
388 release_resource(seg->res); in __segment_load()
390 kfree(seg->res); in __segment_load()
392 kfree(seg); in __segment_load()
419 struct dcss_segment *seg; in segment_load() local
426 seg = segment_by_name (name); in segment_load()
427 if (seg == NULL) in segment_load()
430 if (do_nonshared == seg->do_nonshared) { in segment_load()
431 refcount_inc(&seg->ref_count); in segment_load()
432 *addr = seg->start_addr; in segment_load()
433 *end = seg->end; in segment_load()
434 rc = seg->vm_segtype; in segment_load()
460 struct dcss_segment *seg; in segment_modify_shared() local
466 seg = segment_by_name (name); in segment_modify_shared()
467 if (seg == NULL) { in segment_modify_shared()
471 if (do_nonshared == seg->do_nonshared) { in segment_modify_shared()
477 if (refcount_read(&seg->ref_count) != 1) { in segment_modify_shared()
482 release_resource(seg->res); in segment_modify_shared()
484 seg->res->flags &= ~IORESOURCE_READONLY; in segment_modify_shared()
486 if (seg->vm_segtype == SEG_TYPE_SR || in segment_modify_shared()
487 seg->vm_segtype == SEG_TYPE_ER) in segment_modify_shared()
488 seg->res->flags |= IORESOURCE_READONLY; in segment_modify_shared()
490 if (request_resource(&iomem_resource, seg->res)) { in segment_modify_shared()
494 kfree(seg->res); in segment_modify_shared()
498 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy); in segment_modify_shared()
500 diag_cc = dcss_diag(&loadnsr_scode, seg->dcss_name, in segment_modify_shared()
503 diag_cc = dcss_diag(&loadshr_scode, seg->dcss_name, in segment_modify_shared()
515 seg->start_addr = start_addr; in segment_modify_shared()
516 seg->end = end_addr; in segment_modify_shared()
517 seg->do_nonshared = do_nonshared; in segment_modify_shared()
521 release_resource(seg->res); in segment_modify_shared()
522 kfree(seg->res); in segment_modify_shared()
524 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in segment_modify_shared()
525 list_del(&seg->list); in segment_modify_shared()
526 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy); in segment_modify_shared()
527 kfree(seg); in segment_modify_shared()
535 struct dcss_segment *seg = (struct dcss_segment *)data; in __dcss_diag_purge_on_cpu_0() local
538 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy); in __dcss_diag_purge_on_cpu_0()
549 struct dcss_segment *seg; in segment_unload() local
555 seg = segment_by_name (name); in segment_unload()
556 if (seg == NULL) { in segment_unload()
560 if (!refcount_dec_and_test(&seg->ref_count)) in segment_unload()
562 release_resource(seg->res); in segment_unload()
563 kfree(seg->res); in segment_unload()
564 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1); in segment_unload()
565 list_del(&seg->list); in segment_unload()
573 smp_call_function_single(0, __dcss_diag_purge_on_cpu_0, seg, 1); in segment_unload()
574 kfree(seg); in segment_unload()
585 struct dcss_segment *seg; in segment_save() local
594 seg = segment_by_name (name); in segment_save()
596 if (seg == NULL) { in segment_save()
602 for (i=0; i<seg->segcnt; i++) { in segment_save()
604 seg->range[i].start >> PAGE_SHIFT, in segment_save()
605 seg->range[i].end >> PAGE_SHIFT, in segment_save()
606 segtype_string[seg->range[i].start & 0xff]); in segment_save()