2 * Sony MemoryStick Pro storage support
4 * Copyright (C) 2007 Alex Dubov <oakad@yahoo.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 * Special thanks to Carlos Corbacho for providing various MemoryStick cards
11 * that made this driver possible.
15 #include <linux/blkdev.h>
16 #include <linux/idr.h>
17 #include <linux/hdreg.h>
18 #include <linux/kthread.h>
19 #include <linux/delay.h>
20 #include <linux/slab.h>
21 #include <linux/mutex.h>
22 #include <linux/memstick.h>
24 #define DRIVER_NAME "mspro_block"
27 module_param(major
, int, 0644);
29 #define MSPRO_BLOCK_MAX_SEGS 32
30 #define MSPRO_BLOCK_MAX_PAGES ((2 << 16) - 1)
32 #define MSPRO_BLOCK_SIGNATURE 0xa5c3
33 #define MSPRO_BLOCK_MAX_ATTRIBUTES 41
35 #define MSPRO_BLOCK_PART_SHIFT 3
38 MSPRO_BLOCK_ID_SYSINFO
= 0x10,
39 MSPRO_BLOCK_ID_MODELNAME
= 0x15,
40 MSPRO_BLOCK_ID_MBR
= 0x20,
41 MSPRO_BLOCK_ID_PBR16
= 0x21,
42 MSPRO_BLOCK_ID_PBR32
= 0x22,
43 MSPRO_BLOCK_ID_SPECFILEVALUES1
= 0x25,
44 MSPRO_BLOCK_ID_SPECFILEVALUES2
= 0x26,
45 MSPRO_BLOCK_ID_DEVINFO
= 0x30
48 struct mspro_sys_attr
{
53 struct device_attribute dev_attr
;
56 struct mspro_attr_entry
{
60 unsigned char reserved
[3];
61 } __attribute__((packed
));
63 struct mspro_attribute
{
65 unsigned short version
;
67 unsigned char reserved
[11];
68 struct mspro_attr_entry entries
[];
69 } __attribute__((packed
));
71 struct mspro_sys_info
{
73 unsigned char reserved0
;
76 __be16 user_block_count
;
78 unsigned char reserved1
[2];
79 unsigned char assembly_date
[8];
81 unsigned char assembly_maker_code
;
82 unsigned char assembly_model_code
[3];
83 __be16 memory_maker_code
;
84 __be16 memory_model_code
;
85 unsigned char reserved2
[4];
88 __be16 controller_number
;
89 __be16 controller_function
;
92 unsigned char ms_sub_class
;
93 unsigned char reserved3
[4];
94 unsigned char interface_type
;
95 __be16 controller_code
;
96 unsigned char format_type
;
97 unsigned char reserved4
;
98 unsigned char device_type
;
99 unsigned char reserved5
[7];
100 unsigned char mspro_id
[16];
101 unsigned char reserved6
[16];
102 } __attribute__((packed
));
105 unsigned char boot_partition
;
106 unsigned char start_head
;
107 unsigned char start_sector
;
108 unsigned char start_cylinder
;
109 unsigned char partition_type
;
110 unsigned char end_head
;
111 unsigned char end_sector
;
112 unsigned char end_cylinder
;
113 unsigned int start_sectors
;
114 unsigned int sectors_per_partition
;
115 } __attribute__((packed
));
117 struct mspro_specfile
{
121 unsigned char reserved
[10];
124 unsigned short cluster
;
126 } __attribute__((packed
));
128 struct mspro_devinfo
{
131 __be16 bytes_per_track
;
132 __be16 bytes_per_sector
;
133 __be16 sectors_per_track
;
134 unsigned char reserved
[6];
135 } __attribute__((packed
));
137 struct mspro_block_data
{
138 struct memstick_dev
*card
;
139 unsigned int usage_count
;
141 struct gendisk
*disk
;
142 struct request_queue
*queue
;
143 struct request
*block_req
;
146 unsigned short page_size
;
147 unsigned short cylinders
;
148 unsigned short heads
;
149 unsigned short sectors_per_track
;
151 unsigned char system
;
152 unsigned char read_only
:1,
157 unsigned char transfer_cmd
;
159 int (*mrq_handler
)(struct memstick_dev
*card
,
160 struct memstick_request
**mrq
);
163 /* Default request setup function for data access method preferred by
164 * this host instance.
166 void (*setup_transfer
)(struct memstick_dev
*card
,
167 u64 offset
, size_t length
);
169 struct attribute_group attr_group
;
171 struct scatterlist req_sg
[MSPRO_BLOCK_MAX_SEGS
];
172 unsigned int seg_count
;
173 unsigned int current_seg
;
174 unsigned int current_page
;
177 static DEFINE_IDR(mspro_block_disk_idr
);
178 static DEFINE_MUTEX(mspro_block_disk_lock
);
180 static int mspro_block_complete_req(struct memstick_dev
*card
, int error
);
182 /*** Block device ***/
184 static int mspro_block_bd_open(struct block_device
*bdev
, fmode_t mode
)
186 struct gendisk
*disk
= bdev
->bd_disk
;
187 struct mspro_block_data
*msb
= disk
->private_data
;
190 mutex_lock(&mspro_block_disk_lock
);
192 if (msb
&& msb
->card
) {
194 if ((mode
& FMODE_WRITE
) && msb
->read_only
)
200 mutex_unlock(&mspro_block_disk_lock
);
206 static int mspro_block_disk_release(struct gendisk
*disk
)
208 struct mspro_block_data
*msb
= disk
->private_data
;
209 int disk_id
= MINOR(disk_devt(disk
)) >> MSPRO_BLOCK_PART_SHIFT
;
211 mutex_lock(&mspro_block_disk_lock
);
214 if (msb
->usage_count
)
217 if (!msb
->usage_count
) {
219 disk
->private_data
= NULL
;
220 idr_remove(&mspro_block_disk_idr
, disk_id
);
225 mutex_unlock(&mspro_block_disk_lock
);
230 static int mspro_block_bd_release(struct gendisk
*disk
, fmode_t mode
)
232 return mspro_block_disk_release(disk
);
235 static int mspro_block_bd_getgeo(struct block_device
*bdev
,
236 struct hd_geometry
*geo
)
238 struct mspro_block_data
*msb
= bdev
->bd_disk
->private_data
;
240 geo
->heads
= msb
->heads
;
241 geo
->sectors
= msb
->sectors_per_track
;
242 geo
->cylinders
= msb
->cylinders
;
247 static const struct block_device_operations ms_block_bdops
= {
248 .open
= mspro_block_bd_open
,
249 .release
= mspro_block_bd_release
,
250 .getgeo
= mspro_block_bd_getgeo
,
254 /*** Information ***/
256 static struct mspro_sys_attr
*mspro_from_sysfs_attr(struct attribute
*attr
)
258 struct device_attribute
*dev_attr
259 = container_of(attr
, struct device_attribute
, attr
);
260 return container_of(dev_attr
, struct mspro_sys_attr
, dev_attr
);
263 static const char *mspro_block_attr_name(unsigned char tag
)
266 case MSPRO_BLOCK_ID_SYSINFO
:
267 return "attr_sysinfo";
268 case MSPRO_BLOCK_ID_MODELNAME
:
269 return "attr_modelname";
270 case MSPRO_BLOCK_ID_MBR
:
272 case MSPRO_BLOCK_ID_PBR16
:
274 case MSPRO_BLOCK_ID_PBR32
:
276 case MSPRO_BLOCK_ID_SPECFILEVALUES1
:
277 return "attr_specfilevalues1";
278 case MSPRO_BLOCK_ID_SPECFILEVALUES2
:
279 return "attr_specfilevalues2";
280 case MSPRO_BLOCK_ID_DEVINFO
:
281 return "attr_devinfo";
287 typedef ssize_t (*sysfs_show_t
)(struct device
*dev
,
288 struct device_attribute
*attr
,
291 static ssize_t
mspro_block_attr_show_default(struct device
*dev
,
292 struct device_attribute
*attr
,
295 struct mspro_sys_attr
*s_attr
= container_of(attr
,
296 struct mspro_sys_attr
,
301 for (cnt
= 0; cnt
< s_attr
->size
; cnt
++) {
302 if (cnt
&& !(cnt
% 16)) {
307 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "%02x ",
308 ((unsigned char *)s_attr
->data
)[cnt
]);
313 static ssize_t
mspro_block_attr_show_sysinfo(struct device
*dev
,
314 struct device_attribute
*attr
,
317 struct mspro_sys_attr
*x_attr
= container_of(attr
,
318 struct mspro_sys_attr
,
320 struct mspro_sys_info
*x_sys
= x_attr
->data
;
322 int date_tz
= 0, date_tz_f
= 0;
324 if (x_sys
->assembly_date
[0] > 0x80U
) {
325 date_tz
= (~x_sys
->assembly_date
[0]) + 1;
326 date_tz_f
= date_tz
& 3;
330 } else if (x_sys
->assembly_date
[0] < 0x80U
) {
331 date_tz
= x_sys
->assembly_date
[0];
332 date_tz_f
= date_tz
& 3;
337 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "class: %x\n",
339 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "block size: %x\n",
340 be16_to_cpu(x_sys
->block_size
));
341 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "block count: %x\n",
342 be16_to_cpu(x_sys
->block_count
));
343 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "user block count: %x\n",
344 be16_to_cpu(x_sys
->user_block_count
));
345 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "page size: %x\n",
346 be16_to_cpu(x_sys
->page_size
));
347 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "assembly date: "
348 "GMT%+d:%d %04u-%02u-%02u %02u:%02u:%02u\n",
350 be16_to_cpup((__be16
*)&x_sys
->assembly_date
[1]),
351 x_sys
->assembly_date
[3], x_sys
->assembly_date
[4],
352 x_sys
->assembly_date
[5], x_sys
->assembly_date
[6],
353 x_sys
->assembly_date
[7]);
354 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "serial number: %x\n",
355 be32_to_cpu(x_sys
->serial_number
));
356 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
,
357 "assembly maker code: %x\n",
358 x_sys
->assembly_maker_code
);
359 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "assembly model code: "
360 "%02x%02x%02x\n", x_sys
->assembly_model_code
[0],
361 x_sys
->assembly_model_code
[1],
362 x_sys
->assembly_model_code
[2]);
363 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "memory maker code: %x\n",
364 be16_to_cpu(x_sys
->memory_maker_code
));
365 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "memory model code: %x\n",
366 be16_to_cpu(x_sys
->memory_model_code
));
367 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "vcc: %x\n",
369 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "vpp: %x\n",
371 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "controller number: %x\n",
372 be16_to_cpu(x_sys
->controller_number
));
373 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
,
374 "controller function: %x\n",
375 be16_to_cpu(x_sys
->controller_function
));
376 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "start sector: %x\n",
377 be16_to_cpu(x_sys
->start_sector
));
378 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "unit size: %x\n",
379 be16_to_cpu(x_sys
->unit_size
));
380 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "sub class: %x\n",
381 x_sys
->ms_sub_class
);
382 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "interface type: %x\n",
383 x_sys
->interface_type
);
384 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "controller code: %x\n",
385 be16_to_cpu(x_sys
->controller_code
));
386 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "format type: %x\n",
388 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "device type: %x\n",
390 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "mspro id: %s\n",
395 static ssize_t
mspro_block_attr_show_modelname(struct device
*dev
,
396 struct device_attribute
*attr
,
399 struct mspro_sys_attr
*s_attr
= container_of(attr
,
400 struct mspro_sys_attr
,
403 return scnprintf(buffer
, PAGE_SIZE
, "%s", (char *)s_attr
->data
);
406 static ssize_t
mspro_block_attr_show_mbr(struct device
*dev
,
407 struct device_attribute
*attr
,
410 struct mspro_sys_attr
*x_attr
= container_of(attr
,
411 struct mspro_sys_attr
,
413 struct mspro_mbr
*x_mbr
= x_attr
->data
;
416 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "boot partition: %x\n",
417 x_mbr
->boot_partition
);
418 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "start head: %x\n",
420 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "start sector: %x\n",
421 x_mbr
->start_sector
);
422 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "start cylinder: %x\n",
423 x_mbr
->start_cylinder
);
424 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "partition type: %x\n",
425 x_mbr
->partition_type
);
426 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "end head: %x\n",
428 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "end sector: %x\n",
430 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "end cylinder: %x\n",
431 x_mbr
->end_cylinder
);
432 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "start sectors: %x\n",
433 x_mbr
->start_sectors
);
434 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
,
435 "sectors per partition: %x\n",
436 x_mbr
->sectors_per_partition
);
440 static ssize_t
mspro_block_attr_show_specfile(struct device
*dev
,
441 struct device_attribute
*attr
,
444 struct mspro_sys_attr
*x_attr
= container_of(attr
,
445 struct mspro_sys_attr
,
447 struct mspro_specfile
*x_spfile
= x_attr
->data
;
448 char name
[9], ext
[4];
451 memcpy(name
, x_spfile
->name
, 8);
453 memcpy(ext
, x_spfile
->ext
, 3);
456 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "name: %s\n", name
);
457 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "ext: %s\n", ext
);
458 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "attribute: %x\n",
460 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "time: %d:%d:%d\n",
461 x_spfile
->time
>> 11,
462 (x_spfile
->time
>> 5) & 0x3f,
463 (x_spfile
->time
& 0x1f) * 2);
464 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "date: %d-%d-%d\n",
465 (x_spfile
->date
>> 9) + 1980,
466 (x_spfile
->date
>> 5) & 0xf,
467 x_spfile
->date
& 0x1f);
468 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "start cluster: %x\n",
470 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "size: %x\n",
475 static ssize_t
mspro_block_attr_show_devinfo(struct device
*dev
,
476 struct device_attribute
*attr
,
479 struct mspro_sys_attr
*x_attr
= container_of(attr
,
480 struct mspro_sys_attr
,
482 struct mspro_devinfo
*x_devinfo
= x_attr
->data
;
485 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "cylinders: %x\n",
486 be16_to_cpu(x_devinfo
->cylinders
));
487 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "heads: %x\n",
488 be16_to_cpu(x_devinfo
->heads
));
489 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "bytes per track: %x\n",
490 be16_to_cpu(x_devinfo
->bytes_per_track
));
491 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "bytes per sector: %x\n",
492 be16_to_cpu(x_devinfo
->bytes_per_sector
));
493 rc
+= scnprintf(buffer
+ rc
, PAGE_SIZE
- rc
, "sectors per track: %x\n",
494 be16_to_cpu(x_devinfo
->sectors_per_track
));
498 static sysfs_show_t
mspro_block_attr_show(unsigned char tag
)
501 case MSPRO_BLOCK_ID_SYSINFO
:
502 return mspro_block_attr_show_sysinfo
;
503 case MSPRO_BLOCK_ID_MODELNAME
:
504 return mspro_block_attr_show_modelname
;
505 case MSPRO_BLOCK_ID_MBR
:
506 return mspro_block_attr_show_mbr
;
507 case MSPRO_BLOCK_ID_SPECFILEVALUES1
:
508 case MSPRO_BLOCK_ID_SPECFILEVALUES2
:
509 return mspro_block_attr_show_specfile
;
510 case MSPRO_BLOCK_ID_DEVINFO
:
511 return mspro_block_attr_show_devinfo
;
513 return mspro_block_attr_show_default
;
517 /*** Protocol handlers ***/
520 * Functions prefixed with "h_" are protocol callbacks. They can be called from
521 * interrupt context. Return value of 0 means that request processing is still
522 * ongoing, while special error value of -EAGAIN means that current request is
523 * finished (and request processor should come back some time later).
526 static int h_mspro_block_req_init(struct memstick_dev
*card
,
527 struct memstick_request
**mrq
)
529 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
531 *mrq
= &card
->current_mrq
;
532 card
->next_request
= msb
->mrq_handler
;
536 static int h_mspro_block_default(struct memstick_dev
*card
,
537 struct memstick_request
**mrq
)
539 return mspro_block_complete_req(card
, (*mrq
)->error
);
542 static int h_mspro_block_default_bad(struct memstick_dev
*card
,
543 struct memstick_request
**mrq
)
548 static int h_mspro_block_get_ro(struct memstick_dev
*card
,
549 struct memstick_request
**mrq
)
551 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
553 if (!(*mrq
)->error
) {
554 if ((*mrq
)->data
[offsetof(struct ms_status_register
, status0
)]
555 & MEMSTICK_STATUS0_WP
)
561 return mspro_block_complete_req(card
, (*mrq
)->error
);
564 static int h_mspro_block_wait_for_ced(struct memstick_dev
*card
,
565 struct memstick_request
**mrq
)
567 dev_dbg(&card
->dev
, "wait for ced: value %x\n", (*mrq
)->data
[0]);
569 if (!(*mrq
)->error
) {
570 if ((*mrq
)->data
[0] & (MEMSTICK_INT_CMDNAK
| MEMSTICK_INT_ERR
))
571 (*mrq
)->error
= -EFAULT
;
572 else if (!((*mrq
)->data
[0] & MEMSTICK_INT_CED
))
576 return mspro_block_complete_req(card
, (*mrq
)->error
);
579 static int h_mspro_block_transfer_data(struct memstick_dev
*card
,
580 struct memstick_request
**mrq
)
582 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
583 unsigned char t_val
= 0;
584 struct scatterlist t_sg
= { 0 };
588 return mspro_block_complete_req(card
, (*mrq
)->error
);
590 switch ((*mrq
)->tpc
) {
591 case MS_TPC_WRITE_REG
:
592 memstick_init_req(*mrq
, MS_TPC_SET_CMD
, &msb
->transfer_cmd
, 1);
593 (*mrq
)->need_card_int
= 1;
596 t_val
= (*mrq
)->int_reg
;
597 memstick_init_req(*mrq
, MS_TPC_GET_INT
, NULL
, 1);
598 if (msb
->caps
& MEMSTICK_CAP_AUTO_GET_INT
)
602 t_val
= (*mrq
)->data
[0];
604 if (t_val
& (MEMSTICK_INT_CMDNAK
| MEMSTICK_INT_ERR
)) {
605 t_val
= MSPRO_CMD_STOP
;
606 memstick_init_req(*mrq
, MS_TPC_SET_CMD
, &t_val
, 1);
607 card
->next_request
= h_mspro_block_default
;
611 if (msb
->current_page
612 == (msb
->req_sg
[msb
->current_seg
].length
614 msb
->current_page
= 0;
617 if (msb
->current_seg
== msb
->seg_count
) {
618 if (t_val
& MEMSTICK_INT_CED
) {
619 return mspro_block_complete_req(card
,
623 = h_mspro_block_wait_for_ced
;
624 memstick_init_req(*mrq
, MS_TPC_GET_INT
,
631 if (!(t_val
& MEMSTICK_INT_BREQ
)) {
632 memstick_init_req(*mrq
, MS_TPC_GET_INT
, NULL
, 1);
636 t_offset
= msb
->req_sg
[msb
->current_seg
].offset
;
637 t_offset
+= msb
->current_page
* msb
->page_size
;
640 nth_page(sg_page(&(msb
->req_sg
[msb
->current_seg
])),
641 t_offset
>> PAGE_SHIFT
),
642 msb
->page_size
, offset_in_page(t_offset
));
644 memstick_init_req_sg(*mrq
, msb
->data_dir
== READ
645 ? MS_TPC_READ_LONG_DATA
646 : MS_TPC_WRITE_LONG_DATA
,
648 (*mrq
)->need_card_int
= 1;
650 case MS_TPC_READ_LONG_DATA
:
651 case MS_TPC_WRITE_LONG_DATA
:
653 if (msb
->caps
& MEMSTICK_CAP_AUTO_GET_INT
) {
654 t_val
= (*mrq
)->int_reg
;
657 memstick_init_req(*mrq
, MS_TPC_GET_INT
, NULL
, 1);
666 /*** Transfer setup functions for different access methods. ***/
668 /** Setup data transfer request for SET_CMD TPC with arguments in card
671 * @card Current media instance
672 * @offset Target data offset in bytes
673 * @length Required transfer length in bytes.
675 static void h_mspro_block_setup_cmd(struct memstick_dev
*card
, u64 offset
,
678 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
679 struct mspro_param_register param
= {
680 .system
= msb
->system
,
681 .data_count
= cpu_to_be16((uint16_t)(length
/ msb
->page_size
)),
682 /* ISO C90 warning precludes direct initialization for now. */
687 do_div(offset
, msb
->page_size
);
688 param
.data_address
= cpu_to_be32((uint32_t)offset
);
690 card
->next_request
= h_mspro_block_req_init
;
691 msb
->mrq_handler
= h_mspro_block_transfer_data
;
692 memstick_init_req(&card
->current_mrq
, MS_TPC_WRITE_REG
,
693 ¶m
, sizeof(param
));
696 /*** Data transfer ***/
698 static int mspro_block_issue_req(struct memstick_dev
*card
, int chunk
)
700 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
706 msb
->current_page
= 0;
707 msb
->current_seg
= 0;
708 msb
->seg_count
= blk_rq_map_sg(msb
->block_req
->q
,
712 if (!msb
->seg_count
) {
713 chunk
= __blk_end_request_cur(msb
->block_req
, -ENOMEM
);
717 t_off
= blk_rq_pos(msb
->block_req
);
719 count
= blk_rq_bytes(msb
->block_req
);
721 msb
->setup_transfer(card
, t_off
, count
);
723 msb
->data_dir
= rq_data_dir(msb
->block_req
);
724 msb
->transfer_cmd
= msb
->data_dir
== READ
725 ? MSPRO_CMD_READ_DATA
726 : MSPRO_CMD_WRITE_DATA
;
728 memstick_new_req(card
->host
);
732 dev_dbg(&card
->dev
, "blk_fetch\n");
733 msb
->block_req
= blk_fetch_request(msb
->queue
);
734 if (!msb
->block_req
) {
735 dev_dbg(&card
->dev
, "issue end\n");
739 dev_dbg(&card
->dev
, "trying again\n");
744 static int mspro_block_complete_req(struct memstick_dev
*card
, int error
)
746 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
748 unsigned int t_len
= 0;
751 spin_lock_irqsave(&msb
->q_lock
, flags
);
752 dev_dbg(&card
->dev
, "complete %d, %d\n", msb
->has_request
? 1 : 0,
755 if (msb
->has_request
) {
756 /* Nothing to do - not really an error */
757 if (error
== -EAGAIN
)
760 if (error
|| (card
->current_mrq
.tpc
== MSPRO_CMD_STOP
)) {
761 if (msb
->data_dir
== READ
) {
762 for (cnt
= 0; cnt
< msb
->current_seg
; cnt
++)
763 t_len
+= msb
->req_sg
[cnt
].length
766 if (msb
->current_page
)
767 t_len
+= msb
->current_page
- 1;
769 t_len
*= msb
->page_size
;
772 t_len
= blk_rq_bytes(msb
->block_req
);
774 dev_dbg(&card
->dev
, "transferred %x (%d)\n", t_len
, error
);
777 t_len
= blk_rq_cur_bytes(msb
->block_req
);
779 chunk
= __blk_end_request(msb
->block_req
, error
, t_len
);
781 error
= mspro_block_issue_req(card
, chunk
);
786 msb
->has_request
= 0;
792 card
->next_request
= h_mspro_block_default_bad
;
793 complete_all(&card
->mrq_complete
);
795 spin_unlock_irqrestore(&msb
->q_lock
, flags
);
799 static void mspro_block_stop(struct memstick_dev
*card
)
801 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
806 spin_lock_irqsave(&msb
->q_lock
, flags
);
807 if (!msb
->has_request
) {
808 blk_stop_queue(msb
->queue
);
811 spin_unlock_irqrestore(&msb
->q_lock
, flags
);
816 wait_for_completion(&card
->mrq_complete
);
820 static void mspro_block_start(struct memstick_dev
*card
)
822 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
825 spin_lock_irqsave(&msb
->q_lock
, flags
);
826 blk_start_queue(msb
->queue
);
827 spin_unlock_irqrestore(&msb
->q_lock
, flags
);
830 static int mspro_block_prepare_req(struct request_queue
*q
, struct request
*req
)
832 if (req
->cmd_type
!= REQ_TYPE_FS
&&
833 req
->cmd_type
!= REQ_TYPE_BLOCK_PC
) {
834 blk_dump_rq_flags(req
, "MSPro unsupported request");
838 req
->cmd_flags
|= REQ_DONTPREP
;
843 static void mspro_block_submit_req(struct request_queue
*q
)
845 struct memstick_dev
*card
= q
->queuedata
;
846 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
847 struct request
*req
= NULL
;
849 if (msb
->has_request
)
853 while ((req
= blk_fetch_request(q
)) != NULL
)
854 __blk_end_request_all(req
, -ENODEV
);
859 msb
->has_request
= 1;
860 if (mspro_block_issue_req(card
, 0))
861 msb
->has_request
= 0;
864 /*** Initialization ***/
866 static int mspro_block_wait_for_ced(struct memstick_dev
*card
)
868 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
870 card
->next_request
= h_mspro_block_req_init
;
871 msb
->mrq_handler
= h_mspro_block_wait_for_ced
;
872 memstick_init_req(&card
->current_mrq
, MS_TPC_GET_INT
, NULL
, 1);
873 memstick_new_req(card
->host
);
874 wait_for_completion(&card
->mrq_complete
);
875 return card
->current_mrq
.error
;
878 static int mspro_block_set_interface(struct memstick_dev
*card
,
879 unsigned char sys_reg
)
881 struct memstick_host
*host
= card
->host
;
882 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
883 struct mspro_param_register param
= {
890 card
->next_request
= h_mspro_block_req_init
;
891 msb
->mrq_handler
= h_mspro_block_default
;
892 memstick_init_req(&card
->current_mrq
, MS_TPC_WRITE_REG
, ¶m
,
894 memstick_new_req(host
);
895 wait_for_completion(&card
->mrq_complete
);
896 return card
->current_mrq
.error
;
899 static int mspro_block_switch_interface(struct memstick_dev
*card
)
901 struct memstick_host
*host
= card
->host
;
902 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
906 if (msb
->caps
& MEMSTICK_CAP_PAR4
)
907 rc
= mspro_block_set_interface(card
, MEMSTICK_SYS_PAR4
);
913 "%s: could not switch to 4-bit mode, error %d\n",
914 dev_name(&card
->dev
), rc
);
918 msb
->system
= MEMSTICK_SYS_PAR4
;
919 host
->set_param(host
, MEMSTICK_INTERFACE
, MEMSTICK_PAR4
);
920 printk(KERN_INFO
"%s: switching to 4-bit parallel mode\n",
921 dev_name(&card
->dev
));
923 if (msb
->caps
& MEMSTICK_CAP_PAR8
) {
924 rc
= mspro_block_set_interface(card
, MEMSTICK_SYS_PAR8
);
927 msb
->system
= MEMSTICK_SYS_PAR8
;
928 host
->set_param(host
, MEMSTICK_INTERFACE
,
931 "%s: switching to 8-bit parallel mode\n",
932 dev_name(&card
->dev
));
935 "%s: could not switch to 8-bit mode, error %d\n",
936 dev_name(&card
->dev
), rc
);
939 card
->next_request
= h_mspro_block_req_init
;
940 msb
->mrq_handler
= h_mspro_block_default
;
941 memstick_init_req(&card
->current_mrq
, MS_TPC_GET_INT
, NULL
, 1);
942 memstick_new_req(card
->host
);
943 wait_for_completion(&card
->mrq_complete
);
944 rc
= card
->current_mrq
.error
;
948 "%s: interface error, trying to fall back to serial\n",
949 dev_name(&card
->dev
));
950 msb
->system
= MEMSTICK_SYS_SERIAL
;
951 host
->set_param(host
, MEMSTICK_POWER
, MEMSTICK_POWER_OFF
);
953 host
->set_param(host
, MEMSTICK_POWER
, MEMSTICK_POWER_ON
);
954 host
->set_param(host
, MEMSTICK_INTERFACE
, MEMSTICK_SERIAL
);
956 rc
= memstick_set_rw_addr(card
);
958 rc
= mspro_block_set_interface(card
, msb
->system
);
962 rc
= mspro_block_wait_for_ced(card
);
966 if (msb
->caps
& MEMSTICK_CAP_PAR8
) {
967 msb
->caps
&= ~MEMSTICK_CAP_PAR8
;
975 /* Memory allocated for attributes by this function should be freed by
976 * mspro_block_data_clear, no matter if the initialization process succeeded
979 static int mspro_block_read_attributes(struct memstick_dev
*card
)
981 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
982 struct mspro_attribute
*attr
= NULL
;
983 struct mspro_sys_attr
*s_attr
= NULL
;
984 unsigned char *buffer
= NULL
;
985 int cnt
, rc
, attr_count
;
986 /* While normally physical device offsets, represented here by
987 * attr_offset and attr_len will be of large numeric types, we can be
988 * sure, that attributes are close enough to the beginning of the
989 * device, to save ourselves some trouble.
991 unsigned int addr
, attr_offset
= 0, attr_len
= msb
->page_size
;
993 attr
= kmalloc(msb
->page_size
, GFP_KERNEL
);
997 sg_init_one(&msb
->req_sg
[0], attr
, msb
->page_size
);
999 msb
->current_seg
= 0;
1000 msb
->current_page
= 0;
1001 msb
->data_dir
= READ
;
1002 msb
->transfer_cmd
= MSPRO_CMD_READ_ATRB
;
1004 msb
->setup_transfer(card
, attr_offset
, attr_len
);
1006 memstick_new_req(card
->host
);
1007 wait_for_completion(&card
->mrq_complete
);
1008 if (card
->current_mrq
.error
) {
1009 rc
= card
->current_mrq
.error
;
1013 if (be16_to_cpu(attr
->signature
) != MSPRO_BLOCK_SIGNATURE
) {
1014 printk(KERN_ERR
"%s: unrecognized device signature %x\n",
1015 dev_name(&card
->dev
), be16_to_cpu(attr
->signature
));
1020 if (attr
->count
> MSPRO_BLOCK_MAX_ATTRIBUTES
) {
1021 printk(KERN_WARNING
"%s: way too many attribute entries\n",
1022 dev_name(&card
->dev
));
1023 attr_count
= MSPRO_BLOCK_MAX_ATTRIBUTES
;
1025 attr_count
= attr
->count
;
1027 msb
->attr_group
.attrs
= kzalloc((attr_count
+ 1)
1028 * sizeof(struct attribute
),
1030 if (!msb
->attr_group
.attrs
) {
1034 msb
->attr_group
.name
= "media_attributes";
1036 buffer
= kmalloc(attr_len
, GFP_KERNEL
);
1041 memcpy(buffer
, (char *)attr
, attr_len
);
1043 for (cnt
= 0; cnt
< attr_count
; ++cnt
) {
1044 s_attr
= kzalloc(sizeof(struct mspro_sys_attr
), GFP_KERNEL
);
1047 goto out_free_buffer
;
1050 msb
->attr_group
.attrs
[cnt
] = &s_attr
->dev_attr
.attr
;
1051 addr
= be32_to_cpu(attr
->entries
[cnt
].address
);
1052 s_attr
->size
= be32_to_cpu(attr
->entries
[cnt
].size
);
1053 dev_dbg(&card
->dev
, "adding attribute %d: id %x, address %x, "
1054 "size %zx\n", cnt
, attr
->entries
[cnt
].id
, addr
,
1056 s_attr
->id
= attr
->entries
[cnt
].id
;
1057 if (mspro_block_attr_name(s_attr
->id
))
1058 snprintf(s_attr
->name
, sizeof(s_attr
->name
), "%s",
1059 mspro_block_attr_name(attr
->entries
[cnt
].id
));
1061 snprintf(s_attr
->name
, sizeof(s_attr
->name
),
1062 "attr_x%02x", attr
->entries
[cnt
].id
);
1064 sysfs_attr_init(&s_attr
->dev_attr
.attr
);
1065 s_attr
->dev_attr
.attr
.name
= s_attr
->name
;
1066 s_attr
->dev_attr
.attr
.mode
= S_IRUGO
;
1067 s_attr
->dev_attr
.show
= mspro_block_attr_show(s_attr
->id
);
1072 s_attr
->data
= kmalloc(s_attr
->size
, GFP_KERNEL
);
1073 if (!s_attr
->data
) {
1075 goto out_free_buffer
;
1078 if (((addr
/ msb
->page_size
) == (attr_offset
/ msb
->page_size
))
1079 && (((addr
+ s_attr
->size
- 1) / msb
->page_size
)
1080 == (attr_offset
/ msb
->page_size
))) {
1081 memcpy(s_attr
->data
, buffer
+ addr
% msb
->page_size
,
1086 attr_offset
= (addr
/ msb
->page_size
) * msb
->page_size
;
1088 if ((attr_offset
+ attr_len
) < (addr
+ s_attr
->size
)) {
1090 attr_len
= (((addr
+ s_attr
->size
) / msb
->page_size
)
1091 + 1 ) * msb
->page_size
- attr_offset
;
1092 buffer
= kmalloc(attr_len
, GFP_KERNEL
);
1099 sg_init_one(&msb
->req_sg
[0], buffer
, attr_len
);
1101 msb
->current_seg
= 0;
1102 msb
->current_page
= 0;
1103 msb
->data_dir
= READ
;
1104 msb
->transfer_cmd
= MSPRO_CMD_READ_ATRB
;
1106 dev_dbg(&card
->dev
, "reading attribute range %x, %x\n",
1107 attr_offset
, attr_len
);
1109 msb
->setup_transfer(card
, attr_offset
, attr_len
);
1110 memstick_new_req(card
->host
);
1111 wait_for_completion(&card
->mrq_complete
);
1112 if (card
->current_mrq
.error
) {
1113 rc
= card
->current_mrq
.error
;
1114 goto out_free_buffer
;
1117 memcpy(s_attr
->data
, buffer
+ addr
% msb
->page_size
,
1129 static int mspro_block_init_card(struct memstick_dev
*card
)
1131 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
1132 struct memstick_host
*host
= card
->host
;
1135 msb
->system
= MEMSTICK_SYS_SERIAL
;
1136 msb
->setup_transfer
= h_mspro_block_setup_cmd
;
1138 card
->reg_addr
.r_offset
= offsetof(struct mspro_register
, status
);
1139 card
->reg_addr
.r_length
= sizeof(struct ms_status_register
);
1140 card
->reg_addr
.w_offset
= offsetof(struct mspro_register
, param
);
1141 card
->reg_addr
.w_length
= sizeof(struct mspro_param_register
);
1143 if (memstick_set_rw_addr(card
))
1146 msb
->caps
= host
->caps
;
1149 rc
= mspro_block_wait_for_ced(card
);
1153 rc
= mspro_block_switch_interface(card
);
1157 dev_dbg(&card
->dev
, "card activated\n");
1158 if (msb
->system
!= MEMSTICK_SYS_SERIAL
)
1159 msb
->caps
|= MEMSTICK_CAP_AUTO_GET_INT
;
1161 card
->next_request
= h_mspro_block_req_init
;
1162 msb
->mrq_handler
= h_mspro_block_get_ro
;
1163 memstick_init_req(&card
->current_mrq
, MS_TPC_READ_REG
, NULL
,
1164 sizeof(struct ms_status_register
));
1165 memstick_new_req(card
->host
);
1166 wait_for_completion(&card
->mrq_complete
);
1167 if (card
->current_mrq
.error
)
1168 return card
->current_mrq
.error
;
1170 dev_dbg(&card
->dev
, "card r/w status %d\n", msb
->read_only
? 0 : 1);
1172 msb
->page_size
= 512;
1173 rc
= mspro_block_read_attributes(card
);
1177 dev_dbg(&card
->dev
, "attributes loaded\n");
1182 static int mspro_block_init_disk(struct memstick_dev
*card
)
1184 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
1185 struct memstick_host
*host
= card
->host
;
1186 struct mspro_devinfo
*dev_info
= NULL
;
1187 struct mspro_sys_info
*sys_info
= NULL
;
1188 struct mspro_sys_attr
*s_attr
= NULL
;
1190 u64 limit
= BLK_BOUNCE_HIGH
;
1191 unsigned long capacity
;
1193 if (host
->dev
.dma_mask
&& *(host
->dev
.dma_mask
))
1194 limit
= *(host
->dev
.dma_mask
);
1196 for (rc
= 0; msb
->attr_group
.attrs
[rc
]; ++rc
) {
1197 s_attr
= mspro_from_sysfs_attr(msb
->attr_group
.attrs
[rc
]);
1199 if (s_attr
->id
== MSPRO_BLOCK_ID_DEVINFO
)
1200 dev_info
= s_attr
->data
;
1201 else if (s_attr
->id
== MSPRO_BLOCK_ID_SYSINFO
)
1202 sys_info
= s_attr
->data
;
1205 if (!dev_info
|| !sys_info
)
1208 msb
->cylinders
= be16_to_cpu(dev_info
->cylinders
);
1209 msb
->heads
= be16_to_cpu(dev_info
->heads
);
1210 msb
->sectors_per_track
= be16_to_cpu(dev_info
->sectors_per_track
);
1212 msb
->page_size
= be16_to_cpu(sys_info
->unit_size
);
1214 mutex_lock(&mspro_block_disk_lock
);
1215 if (!idr_pre_get(&mspro_block_disk_idr
, GFP_KERNEL
)) {
1216 mutex_unlock(&mspro_block_disk_lock
);
1220 rc
= idr_get_new(&mspro_block_disk_idr
, card
, &disk_id
);
1221 mutex_unlock(&mspro_block_disk_lock
);
1226 if ((disk_id
<< MSPRO_BLOCK_PART_SHIFT
) > 255) {
1228 goto out_release_id
;
1231 msb
->disk
= alloc_disk(1 << MSPRO_BLOCK_PART_SHIFT
);
1234 goto out_release_id
;
1237 msb
->queue
= blk_init_queue(mspro_block_submit_req
, &msb
->q_lock
);
1243 msb
->queue
->queuedata
= card
;
1244 blk_queue_prep_rq(msb
->queue
, mspro_block_prepare_req
);
1246 blk_queue_bounce_limit(msb
->queue
, limit
);
1247 blk_queue_max_hw_sectors(msb
->queue
, MSPRO_BLOCK_MAX_PAGES
);
1248 blk_queue_max_segments(msb
->queue
, MSPRO_BLOCK_MAX_SEGS
);
1249 blk_queue_max_segment_size(msb
->queue
,
1250 MSPRO_BLOCK_MAX_PAGES
* msb
->page_size
);
1252 msb
->disk
->major
= major
;
1253 msb
->disk
->first_minor
= disk_id
<< MSPRO_BLOCK_PART_SHIFT
;
1254 msb
->disk
->fops
= &ms_block_bdops
;
1255 msb
->usage_count
= 1;
1256 msb
->disk
->private_data
= msb
;
1257 msb
->disk
->queue
= msb
->queue
;
1258 msb
->disk
->driverfs_dev
= &card
->dev
;
1260 sprintf(msb
->disk
->disk_name
, "mspblk%d", disk_id
);
1262 blk_queue_logical_block_size(msb
->queue
, msb
->page_size
);
1264 capacity
= be16_to_cpu(sys_info
->user_block_count
);
1265 capacity
*= be16_to_cpu(sys_info
->block_size
);
1266 capacity
*= msb
->page_size
>> 9;
1267 set_capacity(msb
->disk
, capacity
);
1268 dev_dbg(&card
->dev
, "capacity set %ld\n", capacity
);
1270 add_disk(msb
->disk
);
1275 put_disk(msb
->disk
);
1277 mutex_lock(&mspro_block_disk_lock
);
1278 idr_remove(&mspro_block_disk_idr
, disk_id
);
1279 mutex_unlock(&mspro_block_disk_lock
);
1283 static void mspro_block_data_clear(struct mspro_block_data
*msb
)
1286 struct mspro_sys_attr
*s_attr
;
1288 if (msb
->attr_group
.attrs
) {
1289 for (cnt
= 0; msb
->attr_group
.attrs
[cnt
]; ++cnt
) {
1290 s_attr
= mspro_from_sysfs_attr(msb
->attr_group
1292 kfree(s_attr
->data
);
1295 kfree(msb
->attr_group
.attrs
);
1301 static int mspro_block_check_card(struct memstick_dev
*card
)
1303 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
1305 return (msb
->active
== 1);
1308 static int mspro_block_probe(struct memstick_dev
*card
)
1310 struct mspro_block_data
*msb
;
1313 msb
= kzalloc(sizeof(struct mspro_block_data
), GFP_KERNEL
);
1316 memstick_set_drvdata(card
, msb
);
1318 spin_lock_init(&msb
->q_lock
);
1320 rc
= mspro_block_init_card(card
);
1325 rc
= sysfs_create_group(&card
->dev
.kobj
, &msb
->attr_group
);
1329 rc
= mspro_block_init_disk(card
);
1331 card
->check
= mspro_block_check_card
;
1332 card
->stop
= mspro_block_stop
;
1333 card
->start
= mspro_block_start
;
1337 sysfs_remove_group(&card
->dev
.kobj
, &msb
->attr_group
);
1339 memstick_set_drvdata(card
, NULL
);
1340 mspro_block_data_clear(msb
);
1345 static void mspro_block_remove(struct memstick_dev
*card
)
1347 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
1348 unsigned long flags
;
1350 spin_lock_irqsave(&msb
->q_lock
, flags
);
1352 blk_start_queue(msb
->queue
);
1353 spin_unlock_irqrestore(&msb
->q_lock
, flags
);
1355 del_gendisk(msb
->disk
);
1356 dev_dbg(&card
->dev
, "mspro block remove\n");
1358 blk_cleanup_queue(msb
->queue
);
1361 sysfs_remove_group(&card
->dev
.kobj
, &msb
->attr_group
);
1363 mutex_lock(&mspro_block_disk_lock
);
1364 mspro_block_data_clear(msb
);
1365 mutex_unlock(&mspro_block_disk_lock
);
1367 mspro_block_disk_release(msb
->disk
);
1368 memstick_set_drvdata(card
, NULL
);
1373 static int mspro_block_suspend(struct memstick_dev
*card
, pm_message_t state
)
1375 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
1376 unsigned long flags
;
1378 spin_lock_irqsave(&msb
->q_lock
, flags
);
1379 blk_stop_queue(msb
->queue
);
1381 spin_unlock_irqrestore(&msb
->q_lock
, flags
);
1386 static int mspro_block_resume(struct memstick_dev
*card
)
1388 struct mspro_block_data
*msb
= memstick_get_drvdata(card
);
1389 unsigned long flags
;
1392 #ifdef CONFIG_MEMSTICK_UNSAFE_RESUME
1394 struct mspro_block_data
*new_msb
;
1395 struct memstick_host
*host
= card
->host
;
1396 struct mspro_sys_attr
*s_attr
, *r_attr
;
1399 mutex_lock(&host
->lock
);
1400 new_msb
= kzalloc(sizeof(struct mspro_block_data
), GFP_KERNEL
);
1406 new_msb
->card
= card
;
1407 memstick_set_drvdata(card
, new_msb
);
1408 if (mspro_block_init_card(card
))
1411 for (cnt
= 0; new_msb
->attr_group
.attrs
[cnt
]
1412 && msb
->attr_group
.attrs
[cnt
]; ++cnt
) {
1413 s_attr
= mspro_from_sysfs_attr(new_msb
->attr_group
.attrs
[cnt
]);
1414 r_attr
= mspro_from_sysfs_attr(msb
->attr_group
.attrs
[cnt
]);
1416 if (s_attr
->id
== MSPRO_BLOCK_ID_SYSINFO
1417 && r_attr
->id
== s_attr
->id
) {
1418 if (memcmp(s_attr
->data
, r_attr
->data
, s_attr
->size
))
1427 memstick_set_drvdata(card
, msb
);
1428 mspro_block_data_clear(new_msb
);
1431 mutex_unlock(&host
->lock
);
1433 #endif /* CONFIG_MEMSTICK_UNSAFE_RESUME */
1435 spin_lock_irqsave(&msb
->q_lock
, flags
);
1436 blk_start_queue(msb
->queue
);
1437 spin_unlock_irqrestore(&msb
->q_lock
, flags
);
1443 #define mspro_block_suspend NULL
1444 #define mspro_block_resume NULL
1446 #endif /* CONFIG_PM */
1448 static struct memstick_device_id mspro_block_id_tbl
[] = {
1449 {MEMSTICK_MATCH_ALL
, MEMSTICK_TYPE_PRO
, MEMSTICK_CATEGORY_STORAGE_DUO
,
1450 MEMSTICK_CLASS_DUO
},
1455 static struct memstick_driver mspro_block_driver
= {
1457 .name
= DRIVER_NAME
,
1458 .owner
= THIS_MODULE
1460 .id_table
= mspro_block_id_tbl
,
1461 .probe
= mspro_block_probe
,
1462 .remove
= mspro_block_remove
,
1463 .suspend
= mspro_block_suspend
,
1464 .resume
= mspro_block_resume
1467 static int __init
mspro_block_init(void)
1471 rc
= register_blkdev(major
, DRIVER_NAME
);
1473 printk(KERN_ERR DRIVER_NAME
": failed to register "
1474 "major %d, error %d\n", major
, rc
);
1480 rc
= memstick_register_driver(&mspro_block_driver
);
1482 unregister_blkdev(major
, DRIVER_NAME
);
1486 static void __exit
mspro_block_exit(void)
1488 memstick_unregister_driver(&mspro_block_driver
);
1489 unregister_blkdev(major
, DRIVER_NAME
);
1490 idr_destroy(&mspro_block_disk_idr
);
1493 module_init(mspro_block_init
);
1494 module_exit(mspro_block_exit
);
1496 MODULE_LICENSE("GPL");
1497 MODULE_AUTHOR("Alex Dubov");
1498 MODULE_DESCRIPTION("Sony MemoryStickPro block device driver");
1499 MODULE_DEVICE_TABLE(memstick
, mspro_block_id_tbl
);