• Home
  • Raw
  • Download

Lines Matching refs:card

73 	struct rsxx_cardinfo *card = bdev->bd_disk->private_data;  in rsxx_blkdev_ioctl()  local
77 return rsxx_reg_access(card, (void __user *)arg, 1); in rsxx_blkdev_ioctl()
79 return rsxx_reg_access(card, (void __user *)arg, 0); in rsxx_blkdev_ioctl()
87 struct rsxx_cardinfo *card = bdev->bd_disk->private_data; in rsxx_getgeo() local
88 u64 blocks = card->size8 >> 9; in rsxx_getgeo()
94 if (card->size8) { in rsxx_getgeo()
113 static void disk_stats_start(struct rsxx_cardinfo *card, struct bio *bio) in disk_stats_start() argument
115 struct hd_struct *part0 = &card->gendisk->part0; in disk_stats_start()
127 static void disk_stats_complete(struct rsxx_cardinfo *card, in disk_stats_complete() argument
131 struct hd_struct *part0 = &card->gendisk->part0; in disk_stats_complete()
148 static void bio_dma_done_cb(struct rsxx_cardinfo *card, in bio_dma_done_cb() argument
158 if (!card->eeh_state && card->gendisk) in bio_dma_done_cb()
159 disk_stats_complete(card, meta->bio, meta->start_time); in bio_dma_done_cb()
168 struct rsxx_cardinfo *card = q->queuedata; in rsxx_make_request() local
174 if (!card) in rsxx_make_request()
177 if (bio_end_sector(bio) > get_capacity(card->gendisk)) in rsxx_make_request()
180 if (unlikely(card->halt)) { in rsxx_make_request()
185 if (unlikely(card->dma_fault)) { in rsxx_make_request()
191 dev_err(CARD_TO_DEV(card), "size zero BIO!\n"); in rsxx_make_request()
206 if (!unlikely(card->halt)) in rsxx_make_request()
207 disk_stats_start(card, bio); in rsxx_make_request()
209 dev_dbg(CARD_TO_DEV(card), "BIO[%c]: meta: %p addr8: x%llx size: %d\n", in rsxx_make_request()
213 st = rsxx_dma_queue_bio(card, bio, &bio_meta->pending_dmas, in rsxx_make_request()
227 static bool rsxx_discard_supported(struct rsxx_cardinfo *card) in rsxx_discard_supported() argument
231 pci_read_config_byte(card->dev, PCI_REVISION_ID, &pci_rev); in rsxx_discard_supported()
236 int rsxx_attach_dev(struct rsxx_cardinfo *card) in rsxx_attach_dev() argument
238 mutex_lock(&card->dev_lock); in rsxx_attach_dev()
242 if (card->config_valid) in rsxx_attach_dev()
243 set_capacity(card->gendisk, card->size8 >> 9); in rsxx_attach_dev()
245 set_capacity(card->gendisk, 0); in rsxx_attach_dev()
246 add_disk(card->gendisk); in rsxx_attach_dev()
248 card->bdev_attached = 1; in rsxx_attach_dev()
251 mutex_unlock(&card->dev_lock); in rsxx_attach_dev()
256 void rsxx_detach_dev(struct rsxx_cardinfo *card) in rsxx_detach_dev() argument
258 mutex_lock(&card->dev_lock); in rsxx_detach_dev()
260 if (card->bdev_attached) { in rsxx_detach_dev()
261 del_gendisk(card->gendisk); in rsxx_detach_dev()
262 card->bdev_attached = 0; in rsxx_detach_dev()
265 mutex_unlock(&card->dev_lock); in rsxx_detach_dev()
268 int rsxx_setup_dev(struct rsxx_cardinfo *card) in rsxx_setup_dev() argument
272 mutex_init(&card->dev_lock); in rsxx_setup_dev()
277 card->major = register_blkdev(0, DRIVER_NAME); in rsxx_setup_dev()
278 if (card->major < 0) { in rsxx_setup_dev()
279 dev_err(CARD_TO_DEV(card), "Failed to get major number\n"); in rsxx_setup_dev()
283 card->queue = blk_alloc_queue(GFP_KERNEL); in rsxx_setup_dev()
284 if (!card->queue) { in rsxx_setup_dev()
285 dev_err(CARD_TO_DEV(card), "Failed queue alloc\n"); in rsxx_setup_dev()
286 unregister_blkdev(card->major, DRIVER_NAME); in rsxx_setup_dev()
290 card->gendisk = alloc_disk(blkdev_minors); in rsxx_setup_dev()
291 if (!card->gendisk) { in rsxx_setup_dev()
292 dev_err(CARD_TO_DEV(card), "Failed disk alloc\n"); in rsxx_setup_dev()
293 blk_cleanup_queue(card->queue); in rsxx_setup_dev()
294 unregister_blkdev(card->major, DRIVER_NAME); in rsxx_setup_dev()
298 if (card->config_valid) { in rsxx_setup_dev()
299 blk_size = card->config.data.block_size; in rsxx_setup_dev()
300 blk_queue_dma_alignment(card->queue, blk_size - 1); in rsxx_setup_dev()
301 blk_queue_logical_block_size(card->queue, blk_size); in rsxx_setup_dev()
304 blk_queue_make_request(card->queue, rsxx_make_request); in rsxx_setup_dev()
305 blk_queue_bounce_limit(card->queue, BLK_BOUNCE_ANY); in rsxx_setup_dev()
306 blk_queue_max_hw_sectors(card->queue, blkdev_max_hw_sectors); in rsxx_setup_dev()
307 blk_queue_physical_block_size(card->queue, RSXX_HW_BLK_SIZE); in rsxx_setup_dev()
309 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, card->queue); in rsxx_setup_dev()
310 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, card->queue); in rsxx_setup_dev()
311 if (rsxx_discard_supported(card)) { in rsxx_setup_dev()
312 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, card->queue); in rsxx_setup_dev()
313 blk_queue_max_discard_sectors(card->queue, in rsxx_setup_dev()
315 card->queue->limits.discard_granularity = RSXX_HW_BLK_SIZE; in rsxx_setup_dev()
316 card->queue->limits.discard_alignment = RSXX_HW_BLK_SIZE; in rsxx_setup_dev()
317 card->queue->limits.discard_zeroes_data = 1; in rsxx_setup_dev()
320 card->queue->queuedata = card; in rsxx_setup_dev()
322 snprintf(card->gendisk->disk_name, sizeof(card->gendisk->disk_name), in rsxx_setup_dev()
323 "rsxx%d", card->disk_id); in rsxx_setup_dev()
324 card->gendisk->driverfs_dev = &card->dev->dev; in rsxx_setup_dev()
325 card->gendisk->major = card->major; in rsxx_setup_dev()
326 card->gendisk->first_minor = 0; in rsxx_setup_dev()
327 card->gendisk->fops = &rsxx_fops; in rsxx_setup_dev()
328 card->gendisk->private_data = card; in rsxx_setup_dev()
329 card->gendisk->queue = card->queue; in rsxx_setup_dev()
334 void rsxx_destroy_dev(struct rsxx_cardinfo *card) in rsxx_destroy_dev() argument
339 put_disk(card->gendisk); in rsxx_destroy_dev()
340 card->gendisk = NULL; in rsxx_destroy_dev()
342 blk_cleanup_queue(card->queue); in rsxx_destroy_dev()
343 card->queue->queuedata = NULL; in rsxx_destroy_dev()
344 unregister_blkdev(card->major, DRIVER_NAME); in rsxx_destroy_dev()