Lines Matching refs:rd_dev
28 static inline struct rd_dev *RD_DEV(struct se_device *dev) in RD_DEV()
30 return container_of(dev, struct rd_dev, dev); in RD_DEV()
63 static u32 rd_release_sgl_table(struct rd_dev *rd_dev, struct rd_dev_sg_table *sg_table, in rd_release_sgl_table() argument
88 static void rd_release_device_space(struct rd_dev *rd_dev) in rd_release_device_space() argument
92 if (!rd_dev->sg_table_array || !rd_dev->sg_table_count) in rd_release_device_space()
95 page_count = rd_release_sgl_table(rd_dev, rd_dev->sg_table_array, in rd_release_device_space()
96 rd_dev->sg_table_count); in rd_release_device_space()
100 rd_dev->rd_host->rd_host_id, rd_dev->rd_dev_id, page_count, in rd_release_device_space()
101 rd_dev->sg_table_count, (unsigned long)page_count * PAGE_SIZE); in rd_release_device_space()
103 rd_dev->sg_table_array = NULL; in rd_release_device_space()
104 rd_dev->sg_table_count = 0; in rd_release_device_space()
112 static int rd_allocate_sgl_table(struct rd_dev *rd_dev, struct rd_dev_sg_table *sg_table, in rd_allocate_sgl_table() argument
174 static int rd_build_device_space(struct rd_dev *rd_dev) in rd_build_device_space() argument
182 if (rd_dev->rd_page_count <= 0) { in rd_build_device_space()
184 rd_dev->rd_page_count); in rd_build_device_space()
189 if (rd_dev->rd_flags & RDF_NULLIO) in rd_build_device_space()
192 total_sg_needed = rd_dev->rd_page_count; in rd_build_device_space()
199 rd_dev->sg_table_array = sg_table; in rd_build_device_space()
200 rd_dev->sg_table_count = sg_tables; in rd_build_device_space()
202 rc = rd_allocate_sgl_table(rd_dev, sg_table, total_sg_needed, 0x00); in rd_build_device_space()
207 " %u pages in %u tables\n", rd_dev->rd_host->rd_host_id, in rd_build_device_space()
208 rd_dev->rd_dev_id, rd_dev->rd_page_count, in rd_build_device_space()
209 rd_dev->sg_table_count); in rd_build_device_space()
214 static void rd_release_prot_space(struct rd_dev *rd_dev) in rd_release_prot_space() argument
218 if (!rd_dev->sg_prot_array || !rd_dev->sg_prot_count) in rd_release_prot_space()
221 page_count = rd_release_sgl_table(rd_dev, rd_dev->sg_prot_array, in rd_release_prot_space()
222 rd_dev->sg_prot_count); in rd_release_prot_space()
226 rd_dev->rd_host->rd_host_id, rd_dev->rd_dev_id, page_count, in rd_release_prot_space()
227 rd_dev->sg_table_count, (unsigned long)page_count * PAGE_SIZE); in rd_release_prot_space()
229 rd_dev->sg_prot_array = NULL; in rd_release_prot_space()
230 rd_dev->sg_prot_count = 0; in rd_release_prot_space()
233 static int rd_build_prot_space(struct rd_dev *rd_dev, int prot_length, int block_size) in rd_build_prot_space() argument
241 if (rd_dev->rd_flags & RDF_NULLIO) in rd_build_prot_space()
249 total_sg_needed = (rd_dev->rd_page_count * prot_length / block_size) + 1; in rd_build_prot_space()
256 rd_dev->sg_prot_array = sg_table; in rd_build_prot_space()
257 rd_dev->sg_prot_count = sg_tables; in rd_build_prot_space()
259 rc = rd_allocate_sgl_table(rd_dev, sg_table, total_sg_needed, 0xff); in rd_build_prot_space()
264 " %u pages in %u tables\n", rd_dev->rd_host->rd_host_id, in rd_build_prot_space()
265 rd_dev->rd_dev_id, total_sg_needed, rd_dev->sg_prot_count); in rd_build_prot_space()
272 struct rd_dev *rd_dev; in rd_alloc_device() local
275 rd_dev = kzalloc(sizeof(*rd_dev), GFP_KERNEL); in rd_alloc_device()
276 if (!rd_dev) in rd_alloc_device()
279 rd_dev->rd_host = rd_host; in rd_alloc_device()
281 return &rd_dev->dev; in rd_alloc_device()
286 struct rd_dev *rd_dev = RD_DEV(dev); in rd_configure_device() local
290 if (!(rd_dev->rd_flags & RDF_HAS_PAGE_COUNT)) { in rd_configure_device()
295 ret = rd_build_device_space(rd_dev); in rd_configure_device()
304 rd_dev->rd_dev_id = rd_host->rd_host_dev_id_count++; in rd_configure_device()
308 rd_host->rd_host_id, rd_dev->rd_dev_id, rd_dev->rd_page_count, in rd_configure_device()
309 rd_dev->sg_table_count, in rd_configure_device()
310 (unsigned long)(rd_dev->rd_page_count * PAGE_SIZE)); in rd_configure_device()
315 rd_release_device_space(rd_dev); in rd_configure_device()
322 struct rd_dev *rd_dev = RD_DEV(dev); in rd_dev_call_rcu() local
324 kfree(rd_dev); in rd_dev_call_rcu()
334 struct rd_dev *rd_dev = RD_DEV(dev); in rd_destroy_device() local
336 rd_release_device_space(rd_dev); in rd_destroy_device()
339 static struct rd_dev_sg_table *rd_get_sg_table(struct rd_dev *rd_dev, u32 page) in rd_get_sg_table() argument
346 if (i < rd_dev->sg_table_count) { in rd_get_sg_table()
347 sg_table = &rd_dev->sg_table_array[i]; in rd_get_sg_table()
359 static struct rd_dev_sg_table *rd_get_prot_table(struct rd_dev *rd_dev, u32 page) in rd_get_prot_table() argument
366 if (i < rd_dev->sg_prot_count) { in rd_get_prot_table()
367 sg_table = &rd_dev->sg_prot_array[i]; in rd_get_prot_table()
382 struct rd_dev *dev = RD_DEV(se_dev); in rd_do_prot_rw()
421 struct rd_dev *dev = RD_DEV(se_dev); in rd_execute_rw()
546 struct rd_dev *rd_dev = RD_DEV(dev); in rd_set_configfs_dev_params() local
565 rd_dev->rd_page_count = arg; in rd_set_configfs_dev_params()
567 " Count: %u\n", rd_dev->rd_page_count); in rd_set_configfs_dev_params()
568 rd_dev->rd_flags |= RDF_HAS_PAGE_COUNT; in rd_set_configfs_dev_params()
576 rd_dev->rd_flags |= RDF_NULLIO; in rd_set_configfs_dev_params()
584 rd_dev->rd_flags |= RDF_DUMMY; in rd_set_configfs_dev_params()
597 struct rd_dev *rd_dev = RD_DEV(dev); in rd_show_configfs_dev_params() local
600 rd_dev->rd_dev_id); in rd_show_configfs_dev_params()
603 rd_dev->rd_page_count, in rd_show_configfs_dev_params()
604 PAGE_SIZE, rd_dev->sg_table_count, in rd_show_configfs_dev_params()
605 !!(rd_dev->rd_flags & RDF_NULLIO), in rd_show_configfs_dev_params()
606 !!(rd_dev->rd_flags & RDF_DUMMY)); in rd_show_configfs_dev_params()
620 struct rd_dev *rd_dev = RD_DEV(dev); in rd_get_blocks() local
622 unsigned long long blocks_long = ((rd_dev->rd_page_count * PAGE_SIZE) / in rd_get_blocks()
630 struct rd_dev *rd_dev = RD_DEV(dev); in rd_init_prot() local
635 return rd_build_prot_space(rd_dev, dev->prot_length, in rd_init_prot()
641 struct rd_dev *rd_dev = RD_DEV(dev); in rd_free_prot() local
643 rd_release_prot_space(rd_dev); in rd_free_prot()