• Home
  • Raw
  • Download

Lines Matching +full:4 +full:kb +full:- +full:page

1 // SPDX-License-Identifier: GPL-2.0
3 * Xpram.c -- the S/390 expanded memory RAM-disk
20 * "ad-hoc" partitioning:
26 * generic hard disk support to replace ad-hoc partitioning
53 unsigned int offset; /* start page of xpram segment */
82 * Copy expanded memory page (4kB) into main memory
84 * page_addr: address of target page
85 * xpage_index: index of expandeded memory page
88 * -EIO: if pgin failed
89 * -ENXIO: if xpram has vanished
103 return -ENXIO; in xpram_page_in()
105 return -ENXIO; in xpram_page_in()
107 return -EIO; in xpram_page_in()
112 * Copy a 4kB page of main memory to an expanded memory page
114 * page_addr: address of source page
115 * xpage_index: index of expandeded memory page
118 * -EIO: if pgout failed
119 * -ENXIO: if xpram has vanished
133 return -ENXIO; in xpram_page_out()
135 return -ENXIO; in xpram_page_out()
137 return -EIO; in xpram_page_out()
151 return -ENOMEM; in xpram_present()
154 return rc ? -ENXIO : 0; in xpram_present()
158 * Return index of the last available xpram page.
170 add_bit = 1ULL << (sizeof(unsigned int)*8 - 1); in xpram_highest_page_index()
187 xpram_device_t *xdev = bio->bi_disk->private_data; in xpram_submit_bio()
196 if ((bio->bi_iter.bi_sector & 7) != 0 || in xpram_submit_bio()
197 (bio->bi_iter.bi_size & 4095) != 0) in xpram_submit_bio()
198 /* Request is not page-aligned. */ in xpram_submit_bio()
200 if ((bio->bi_iter.bi_size >> 12) > xdev->size) in xpram_submit_bio()
201 /* Request size is no page-aligned. */ in xpram_submit_bio()
203 if ((bio->bi_iter.bi_sector >> 3) > 0xffffffffU - xdev->offset) in xpram_submit_bio()
205 index = (bio->bi_iter.bi_sector >> 3) + xdev->offset; in xpram_submit_bio()
222 bytes -= 4096; in xpram_submit_bio()
239 * multiple of 64 (32k): tell we have 16 sectors, 4 heads, in xpram_getgeo()
240 * whatever cylinders. Tell also that data starts at sector. 4. in xpram_getgeo()
243 geo->cylinders = size >> 6; in xpram_getgeo()
244 geo->heads = 4; in xpram_getgeo()
245 geo->sectors = 16; in xpram_getgeo()
246 geo->start = 4; in xpram_getgeo()
272 return -EINVAL; in xpram_setup_sizes()
278 * sizes to page boundary. in xpram_setup_sizes()
294 xpram_sizes[i] = (size + 3) & -4UL; in xpram_setup_sizes()
305 pr_info(" size of partition %d: %u kB\n", in xpram_setup_sizes()
311 pr_info(" memory needed (for sized partitions): %lu kB\n", in xpram_setup_sizes()
316 if (mem_needed > pages * 4) { in xpram_setup_sizes()
318 return -EINVAL; in xpram_setup_sizes()
323 * xpram_sizes[i] != 0; partition i has size xpram_sizes[i] kB in xpram_setup_sizes()
328 mem_auto = ((pages - mem_needed / 4) / mem_auto_no) * 4; in xpram_setup_sizes()
330 "partition size: %lu kB\n", mem_auto); in xpram_setup_sizes()
341 int i, rc = -ENOMEM; in xpram_setup_blkdev()
371 xpram_devices[i].size = xpram_sizes[i] / 4; in xpram_setup_blkdev()
374 disk->major = XPRAM_MAJOR; in xpram_setup_blkdev()
375 disk->first_minor = i; in xpram_setup_blkdev()
376 disk->fops = &xpram_devops; in xpram_setup_blkdev()
377 disk->private_data = &xpram_devices[i]; in xpram_setup_blkdev()
378 disk->queue = xpram_queues[i]; in xpram_setup_blkdev()
379 sprintf(disk->disk_name, "slram%d", i); in xpram_setup_blkdev()
386 while (i--) { in xpram_setup_blkdev()
452 return -ENODEV; in xpram_init()
455 pr_info(" %u pages expanded memory found (%lu KB).\n", in xpram_init()
456 xpram_pages, (unsigned long) xpram_pages*4); in xpram_init()
463 xpram_pdev = platform_device_register_simple(XPRAM_NAME, -1, NULL, 0); in xpram_init()