n64cart.c (37772f9136f442a1098d0ae1238def72f1216057) | n64cart.c (0d424780852eb60467a6f053d92495bb845ac186) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Support for the N64 cart. 4 * 5 * Copyright (c) 2021 Lauri Kasanen 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 102 unchanged lines hidden (view full) --- 111 112/* 113 * The target device is embedded and RAM-constrained. We save RAM 114 * by initializing in __init code that gets dropped late in boot. 115 * For the same reason there is no module or unloading support. 116 */ 117static int __init n64cart_probe(struct platform_device *pdev) 118{ | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Support for the N64 cart. 4 * 5 * Copyright (c) 2021 Lauri Kasanen 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 102 unchanged lines hidden (view full) --- 111 112/* 113 * The target device is embedded and RAM-constrained. We save RAM 114 * by initializing in __init code that gets dropped late in boot. 115 * For the same reason there is no module or unloading support. 116 */ 117static int __init n64cart_probe(struct platform_device *pdev) 118{ |
119 int err; | |
120 struct gendisk *disk; | 119 struct gendisk *disk; |
121 struct request_queue *queue; | |
122 123 if (!start || !size) { 124 pr_err("start or size not specified\n"); 125 return -ENODEV; 126 } 127 128 if (size & 4095) { 129 pr_err("size must be a multiple of 4K\n"); 130 return -ENODEV; 131 } 132 | 120 121 if (!start || !size) { 122 pr_err("start or size not specified\n"); 123 return -ENODEV; 124 } 125 126 if (size & 4095) { 127 pr_err("size must be a multiple of 4K\n"); 128 return -ENODEV; 129 } 130 |
133 queue = blk_alloc_queue(NUMA_NO_NODE); 134 if (!queue) 135 return -ENOMEM; 136 | |
137 reg_base = devm_platform_ioremap_resource(pdev, 0); | 131 reg_base = devm_platform_ioremap_resource(pdev, 0); |
138 if (!reg_base) { 139 err = -EINVAL; 140 goto fail_queue; 141 } | 132 if (!reg_base) 133 return -EINVAL; |
142 143 disk = alloc_disk(0); | 134 135 disk = alloc_disk(0); |
144 if (!disk) { 145 err = -ENOMEM; 146 goto fail_queue; 147 } | 136 if (!disk) 137 return -ENOMEM; |
148 | 138 |
139 disk->queue = blk_alloc_queue(NUMA_NO_NODE); 140 if (!disk->queue) 141 return -ENOMEM; 142 |
|
149 dev = &pdev->dev; 150 151 disk->first_minor = 0; | 143 dev = &pdev->dev; 144 145 disk->first_minor = 0; |
152 disk->queue = queue; | |
153 disk->flags = GENHD_FL_NO_PART_SCAN | GENHD_FL_EXT_DEVT; 154 disk->fops = &n64cart_fops; 155 strcpy(disk->disk_name, "n64cart"); 156 157 set_capacity(disk, size >> SECTOR_SHIFT); 158 set_disk_ro(disk, 1); 159 | 146 disk->flags = GENHD_FL_NO_PART_SCAN | GENHD_FL_EXT_DEVT; 147 disk->fops = &n64cart_fops; 148 strcpy(disk->disk_name, "n64cart"); 149 150 set_capacity(disk, size >> SECTOR_SHIFT); 151 set_disk_ro(disk, 1); 152 |
160 blk_queue_flag_set(QUEUE_FLAG_NONROT, queue); 161 blk_queue_physical_block_size(queue, 4096); 162 blk_queue_logical_block_size(queue, 4096); | 153 blk_queue_flag_set(QUEUE_FLAG_NONROT, disk->queue); 154 blk_queue_physical_block_size(disk->queue, 4096); 155 blk_queue_logical_block_size(disk->queue, 4096); |
163 164 add_disk(disk); 165 166 pr_info("n64cart: %u kb disk\n", size / 1024); 167 168 return 0; | 156 157 add_disk(disk); 158 159 pr_info("n64cart: %u kb disk\n", size / 1024); 160 161 return 0; |
169fail_queue: 170 blk_cleanup_queue(queue); 171 172 return err; | |
173} 174 175static struct platform_driver n64cart_driver = { 176 .driver = { 177 .name = "n64cart", 178 }, 179}; 180 181static int __init n64cart_init(void) 182{ 183 return platform_driver_probe(&n64cart_driver, n64cart_probe); 184} 185 186module_init(n64cart_init); 187 188MODULE_AUTHOR("Lauri Kasanen <cand@gmx.com>"); 189MODULE_DESCRIPTION("Driver for the N64 cart"); 190MODULE_LICENSE("GPL"); | 162} 163 164static struct platform_driver n64cart_driver = { 165 .driver = { 166 .name = "n64cart", 167 }, 168}; 169 170static int __init n64cart_init(void) 171{ 172 return platform_driver_probe(&n64cart_driver, n64cart_probe); 173} 174 175module_init(n64cart_init); 176 177MODULE_AUTHOR("Lauri Kasanen <cand@gmx.com>"); 178MODULE_DESCRIPTION("Driver for the N64 cart"); 179MODULE_LICENSE("GPL"); |