Lines Matching refs:seg
165 query_segment_type (struct dcss_segment *seg)
183 memcpy (qin->qname, seg->dcss_name, 8);
203 seg->vm_segtype = qout->range[0].start & 0xff;
222 seg->vm_segtype = SEG_TYPE_EWEN;
225 /* analyze diag output and update seg */
226 seg->start_addr = qout->segstart;
227 seg->end = qout->segend;
229 memcpy (seg->range, qout->range, 6*sizeof(struct qrange));
230 seg->segcnt = qout->segcnt;
254 struct dcss_segment seg;
259 dcss_mkname(name, seg.dcss_name);
260 rc = query_segment_type (&seg);
263 return seg.vm_segtype;
271 segment_overlaps_others (struct dcss_segment *seg)
279 if ((tmp->start_addr >> 20) > (seg->end >> 20))
281 if ((tmp->end >> 20) < (seg->start_addr >> 20))
283 if (seg == tmp)
298 struct dcss_segment *seg;
303 seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA);
304 if (seg == NULL) {
308 dcss_mkname (name, seg->dcss_name);
309 rc = query_segment_type (seg);
313 if (segment_overlaps_others(seg)) {
318 seg->res = kzalloc(sizeof(struct resource), GFP_KERNEL);
319 if (seg->res == NULL) {
323 seg->res->flags = IORESOURCE_BUSY | IORESOURCE_MEM;
324 seg->res->start = seg->start_addr;
325 seg->res->end = seg->end;
326 memcpy(&seg->res_name, seg->dcss_name, 8);
327 EBCASC(seg->res_name, 8);
328 seg->res_name[8] = '\0';
329 strlcat(seg->res_name, " (DCSS)", sizeof(seg->res_name));
330 seg->res->name = seg->res_name;
331 segtype = seg->vm_segtype;
334 seg->res->flags |= IORESOURCE_READONLY;
337 if (request_resource(&iomem_resource, seg->res)) {
342 rc = vmem_add_mapping(seg->start_addr, seg->end - seg->start_addr + 1);
347 diag_cc = dcss_diag(&loadnsr_scode, seg->dcss_name,
350 diag_cc = dcss_diag(&loadshr_scode, seg->dcss_name,
353 dcss_diag(&purgeseg_scode, seg->dcss_name,
361 dcss_diag(&purgeseg_scode, seg->dcss_name,
365 seg->start_addr = start_addr;
366 seg->end = end_addr;
367 seg->do_nonshared = do_nonshared;
368 refcount_set(&seg->ref_count, 1);
369 list_add(&seg->list, &dcss_list);
370 *addr = seg->start_addr;
371 *end = seg->end;
374 "exclusive-writable\n", name, (void*) seg->start_addr,
375 (void*) seg->end, segtype_string[seg->vm_segtype]);
378 "shared access mode\n", name, (void*) seg->start_addr,
379 (void*) seg->end, segtype_string[seg->vm_segtype]);
383 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1);
385 release_resource(seg->res);
387 kfree(seg->res);
389 kfree(seg);
416 struct dcss_segment *seg;
423 seg = segment_by_name (name);
424 if (seg == NULL)
427 if (do_nonshared == seg->do_nonshared) {
428 refcount_inc(&seg->ref_count);
429 *addr = seg->start_addr;
430 *end = seg->end;
431 rc = seg->vm_segtype;
457 struct dcss_segment *seg;
463 seg = segment_by_name (name);
464 if (seg == NULL) {
468 if (do_nonshared == seg->do_nonshared) {
474 if (refcount_read(&seg->ref_count) != 1) {
479 release_resource(seg->res);
481 seg->res->flags &= ~IORESOURCE_READONLY;
483 if (seg->vm_segtype == SEG_TYPE_SR ||
484 seg->vm_segtype == SEG_TYPE_ER)
485 seg->res->flags |= IORESOURCE_READONLY;
487 if (request_resource(&iomem_resource, seg->res)) {
491 kfree(seg->res);
495 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy);
497 diag_cc = dcss_diag(&loadnsr_scode, seg->dcss_name,
500 diag_cc = dcss_diag(&loadshr_scode, seg->dcss_name,
512 seg->start_addr = start_addr;
513 seg->end = end_addr;
514 seg->do_nonshared = do_nonshared;
518 release_resource(seg->res);
519 kfree(seg->res);
521 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1);
522 list_del(&seg->list);
523 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy);
524 kfree(seg);
539 struct dcss_segment *seg;
545 seg = segment_by_name (name);
546 if (seg == NULL) {
550 if (!refcount_dec_and_test(&seg->ref_count))
552 release_resource(seg->res);
553 kfree(seg->res);
554 vmem_remove_mapping(seg->start_addr, seg->end - seg->start_addr + 1);
555 list_del(&seg->list);
556 dcss_diag(&purgeseg_scode, seg->dcss_name, &dummy, &dummy);
557 kfree(seg);
568 struct dcss_segment *seg;
577 seg = segment_by_name (name);
579 if (seg == NULL) {
585 for (i=0; i<seg->segcnt; i++) {
587 seg->range[i].start >> PAGE_SHIFT,
588 seg->range[i].end >> PAGE_SHIFT,
589 segtype_string[seg->range[i].start & 0xff]);