0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #include <linux/kernel.h>
0036 #include <linux/errno.h>
0037 #include <linux/init.h>
0038 #include <linux/slab.h>
0039 #include <linux/module.h>
0040 #include <linux/kref.h>
0041 #include <linux/uaccess.h>
0042 #include <linux/usb.h>
0043 #include <linux/mutex.h>
0044 #include <linux/mmc/host.h>
0045 #include <linux/mmc/card.h>
0046 #include <linux/mmc/sdio_func.h>
0047 #include <linux/mmc/sdio_ids.h>
0048 #include <linux/workqueue.h>
0049 #include <linux/ctype.h>
0050 #include <linux/firmware.h>
0051 #include <linux/scatterlist.h>
0052
0053 struct host_controller_info {
0054 u8 info_size;
0055 u16 firmware_version;
0056 u8 number_of_ports;
0057 } __packed;
0058
0059 #define FIRMWARE_BLOCK_BOUNDARY 1024
0060 struct sd_command_header {
0061 u8 header_size;
0062 u8 header_type;
0063 u8 port_number;
0064 u8 command_type;
0065 u8 command_index;
0066 u8 transfer_size[4];
0067 u8 response_type;
0068 u8 arguments[4];
0069 u8 block_count[2];
0070 u8 block_size[2];
0071 u8 block_boundary[2];
0072 u8 reserved[44];
0073 } __packed;
0074
0075 struct sd_irqpoll_header {
0076 u8 header_size;
0077 u8 header_type;
0078 u8 port_number;
0079 u8 command_type;
0080 u8 padding[16];
0081 u8 poll_timeout_msb;
0082 u8 poll_timeout_lsb;
0083 u8 reserved[42];
0084 } __packed;
0085
0086 struct sd_common_header {
0087 u8 header_size;
0088 u8 header_type;
0089 u8 port_number;
0090 } __packed;
0091
0092 struct sd_response_header {
0093 u8 header_size;
0094 u8 header_type;
0095 u8 port_number;
0096 u8 command_type;
0097 u8 command_index;
0098 u8 command_response[];
0099 } __packed;
0100
0101 struct sd_status_header {
0102 u8 header_size;
0103 u8 header_type;
0104 u8 port_number;
0105 u16 port_flags;
0106 u32 sdio_clock;
0107 u16 host_header_size;
0108 u16 func_header_size;
0109 u16 ctrl_header_size;
0110 } __packed;
0111
0112 struct sd_error_header {
0113 u8 header_size;
0114 u8 header_type;
0115 u8 port_number;
0116 u8 error_code;
0117 } __packed;
0118
0119 struct sd_interrupt_header {
0120 u8 header_size;
0121 u8 header_type;
0122 u8 port_number;
0123 } __packed;
0124
0125 struct offload_registers_access {
0126 u8 command_byte[4];
0127 u8 Respond_Byte[4];
0128 } __packed;
0129
0130 #define INTERRUPT_REGISTER_ACCESSES 15
0131 struct sd_offloaded_interrupt {
0132 u8 header_size;
0133 u8 header_type;
0134 u8 port_number;
0135 struct offload_registers_access reg[INTERRUPT_REGISTER_ACCESSES];
0136 } __packed;
0137
0138 struct sd_register_header {
0139 u8 header_size;
0140 u8 header_type;
0141 u8 port_number;
0142 u8 command_type;
0143 u8 command_index;
0144 u8 command_response[6];
0145 } __packed;
0146
0147 #define PIGGYBACK_REGISTER_ACCESSES 14
0148 struct sd_offloaded_piggyback {
0149 struct sd_register_header sdio;
0150 struct offload_registers_access reg[PIGGYBACK_REGISTER_ACCESSES];
0151 } __packed;
0152
0153 union sd_response {
0154 struct sd_common_header common;
0155 struct sd_status_header status;
0156 struct sd_error_header error;
0157 struct sd_interrupt_header interrupt;
0158 struct sd_response_header response;
0159 struct sd_offloaded_interrupt irq;
0160 struct sd_offloaded_piggyback pig;
0161 } __packed;
0162
0163 union sd_command {
0164 struct sd_command_header head;
0165 struct sd_irqpoll_header poll;
0166 } __packed;
0167
0168 enum SD_RESPONSE_TYPE {
0169 SDRT_UNSPECIFIED = 0,
0170 SDRT_NONE,
0171 SDRT_1,
0172 SDRT_1B,
0173 SDRT_2,
0174 SDRT_3,
0175 SDRT_4,
0176 SDRT_5,
0177 SDRT_5B,
0178 SDRT_6,
0179 SDRT_7,
0180 };
0181
0182 #define RESPONSE_INTERRUPT 0x01
0183 #define RESPONSE_ERROR 0x02
0184 #define RESPONSE_STATUS 0x03
0185 #define RESPONSE_IRQ_DISABLED 0x05
0186 #define RESPONSE_IRQ_ENABLED 0x06
0187 #define RESPONSE_PIGGYBACKED 0x07
0188 #define RESPONSE_NO_INTERRUPT 0x08
0189 #define RESPONSE_PIG_DISABLED 0x09
0190 #define RESPONSE_PIG_ENABLED 0x0A
0191 #define SD_ERROR_1BIT_TIMEOUT 0x01
0192 #define SD_ERROR_4BIT_TIMEOUT 0x02
0193 #define SD_ERROR_1BIT_CRC_WRONG 0x03
0194 #define SD_ERROR_4BIT_CRC_WRONG 0x04
0195 #define SD_ERROR_1BIT_CRC_ERROR 0x05
0196 #define SD_ERROR_4BIT_CRC_ERROR 0x06
0197 #define SD_ERROR_NO_CMD_ENDBIT 0x07
0198 #define SD_ERROR_NO_1BIT_DATEND 0x08
0199 #define SD_ERROR_NO_4BIT_DATEND 0x09
0200 #define SD_ERROR_1BIT_UNEXPECTED_TIMEOUT 0x0A
0201 #define SD_ERROR_4BIT_UNEXPECTED_TIMEOUT 0x0B
0202 #define SD_ERROR_ILLEGAL_COMMAND 0x0C
0203 #define SD_ERROR_NO_DEVICE 0x0D
0204 #define SD_ERROR_TRANSFER_LENGTH 0x0E
0205 #define SD_ERROR_1BIT_DATA_TIMEOUT 0x0F
0206 #define SD_ERROR_4BIT_DATA_TIMEOUT 0x10
0207 #define SD_ERROR_ILLEGAL_STATE 0x11
0208 #define SD_ERROR_UNKNOWN_ERROR 0x12
0209 #define SD_ERROR_RESERVED_ERROR 0x13
0210 #define SD_ERROR_INVALID_FUNCTION 0x14
0211 #define SD_ERROR_OUT_OF_RANGE 0x15
0212 #define SD_ERROR_STAT_CMD 0x16
0213 #define SD_ERROR_STAT_DATA 0x17
0214 #define SD_ERROR_STAT_CMD_TIMEOUT 0x18
0215 #define SD_ERROR_SDCRDY_STUCK 0x19
0216 #define SD_ERROR_UNHANDLED 0x1A
0217 #define SD_ERROR_OVERRUN 0x1B
0218 #define SD_ERROR_PIO_TIMEOUT 0x1C
0219
0220 #define FUN(c) (0x000007 & (c->arg>>28))
0221 #define REG(c) (0x01FFFF & (c->arg>>9))
0222
0223 static bool limit_speed_to_24_MHz;
0224 module_param(limit_speed_to_24_MHz, bool, 0644);
0225 MODULE_PARM_DESC(limit_speed_to_24_MHz, "Limit Max SDIO Clock Speed to 24 MHz");
0226
0227 static bool pad_input_to_usb_pkt;
0228 module_param(pad_input_to_usb_pkt, bool, 0644);
0229 MODULE_PARM_DESC(pad_input_to_usb_pkt,
0230 "Pad USB data input transfers to whole USB Packet");
0231
0232 static bool disable_offload_processing;
0233 module_param(disable_offload_processing, bool, 0644);
0234 MODULE_PARM_DESC(disable_offload_processing, "Disable Offload Processing");
0235
0236 static bool force_1_bit_data_xfers;
0237 module_param(force_1_bit_data_xfers, bool, 0644);
0238 MODULE_PARM_DESC(force_1_bit_data_xfers,
0239 "Force SDIO Data Transfers to 1-bit Mode");
0240
0241 static bool force_polling_for_irqs;
0242 module_param(force_polling_for_irqs, bool, 0644);
0243 MODULE_PARM_DESC(force_polling_for_irqs, "Force Polling for SDIO interrupts");
0244
0245 static int firmware_irqpoll_timeout = 1024;
0246 module_param(firmware_irqpoll_timeout, int, 0644);
0247 MODULE_PARM_DESC(firmware_irqpoll_timeout, "VUB300 firmware irqpoll timeout");
0248
0249 static int force_max_req_size = 128;
0250 module_param(force_max_req_size, int, 0644);
0251 MODULE_PARM_DESC(force_max_req_size, "set max request size in kBytes");
0252
0253 #ifdef SMSC_DEVELOPMENT_BOARD
0254 static int firmware_rom_wait_states = 0x04;
0255 #else
0256 static int firmware_rom_wait_states = 0x1C;
0257 #endif
0258
0259 module_param(firmware_rom_wait_states, int, 0644);
0260 MODULE_PARM_DESC(firmware_rom_wait_states,
0261 "ROM wait states byte=RRRIIEEE (Reserved Internal External)");
0262
0263 #define ELAN_VENDOR_ID 0x2201
0264 #define VUB300_VENDOR_ID 0x0424
0265 #define VUB300_PRODUCT_ID 0x012C
0266 static const struct usb_device_id vub300_table[] = {
0267 {USB_DEVICE(ELAN_VENDOR_ID, VUB300_PRODUCT_ID)},
0268 {USB_DEVICE(VUB300_VENDOR_ID, VUB300_PRODUCT_ID)},
0269 {}
0270 };
0271 MODULE_DEVICE_TABLE(usb, vub300_table);
0272
0273 static struct workqueue_struct *cmndworkqueue;
0274 static struct workqueue_struct *pollworkqueue;
0275 static struct workqueue_struct *deadworkqueue;
0276
0277 static inline int interface_to_InterfaceNumber(struct usb_interface *interface)
0278 {
0279 if (!interface)
0280 return -1;
0281 if (!interface->cur_altsetting)
0282 return -1;
0283 return interface->cur_altsetting->desc.bInterfaceNumber;
0284 }
0285
0286 struct sdio_register {
0287 unsigned func_num:3;
0288 unsigned sdio_reg:17;
0289 unsigned activate:1;
0290 unsigned prepared:1;
0291 unsigned regvalue:8;
0292 unsigned response:8;
0293 unsigned sparebit:26;
0294 };
0295
0296 struct vub300_mmc_host {
0297 struct usb_device *udev;
0298 struct usb_interface *interface;
0299 struct kref kref;
0300 struct mutex cmd_mutex;
0301 struct mutex irq_mutex;
0302 char vub_name[3 + (9 * 8) + 4 + 1];
0303 u8 cmnd_out_ep;
0304 u8 cmnd_res_ep;
0305 u8 data_out_ep;
0306 u8 data_inp_ep;
0307 bool card_powered;
0308 bool card_present;
0309 bool read_only;
0310 bool large_usb_packets;
0311 bool app_spec;
0312 bool irq_enabled;
0313 bool irq_disabled;
0314 unsigned bus_width:4;
0315 u8 total_offload_count;
0316 u8 dynamic_register_count;
0317 u8 resp_len;
0318 u32 datasize;
0319 int errors;
0320 int usb_transport_fail;
0321 int usb_timed_out;
0322 int irqs_queued;
0323 struct sdio_register sdio_register[16];
0324 struct offload_interrupt_function_register {
0325 #define MAXREGBITS 4
0326 #define MAXREGS (1<<MAXREGBITS)
0327 #define MAXREGMASK (MAXREGS-1)
0328 u8 offload_count;
0329 u32 offload_point;
0330 struct offload_registers_access reg[MAXREGS];
0331 } fn[8];
0332 u16 fbs[8];
0333 struct mmc_command *cmd;
0334 struct mmc_request *req;
0335 struct mmc_data *data;
0336 struct mmc_host *mmc;
0337 struct urb *urb;
0338 struct urb *command_out_urb;
0339 struct urb *command_res_urb;
0340 struct completion command_complete;
0341 struct completion irqpoll_complete;
0342 union sd_command cmnd;
0343 union sd_response resp;
0344 struct timer_list sg_transfer_timer;
0345 struct usb_sg_request sg_request;
0346 struct timer_list inactivity_timer;
0347 struct work_struct deadwork;
0348 struct work_struct cmndwork;
0349 struct delayed_work pollwork;
0350 struct host_controller_info hc_info;
0351 struct sd_status_header system_port_status;
0352 u8 padded_buffer[64];
0353 };
0354
0355 #define kref_to_vub300_mmc_host(d) container_of(d, struct vub300_mmc_host, kref)
0356 #define SET_TRANSFER_PSEUDOCODE 21
0357 #define SET_INTERRUPT_PSEUDOCODE 20
0358 #define SET_FAILURE_MODE 18
0359 #define SET_ROM_WAIT_STATES 16
0360 #define SET_IRQ_ENABLE 13
0361 #define SET_CLOCK_SPEED 11
0362 #define SET_FUNCTION_BLOCK_SIZE 9
0363 #define SET_SD_DATA_MODE 6
0364 #define SET_SD_POWER 4
0365 #define ENTER_DFU_MODE 3
0366 #define GET_HC_INF0 1
0367 #define GET_SYSTEM_PORT_STATUS 0
0368
0369 static void vub300_delete(struct kref *kref)
0370 {
0371 struct vub300_mmc_host *vub300 = kref_to_vub300_mmc_host(kref);
0372 struct mmc_host *mmc = vub300->mmc;
0373 usb_free_urb(vub300->command_out_urb);
0374 vub300->command_out_urb = NULL;
0375 usb_free_urb(vub300->command_res_urb);
0376 vub300->command_res_urb = NULL;
0377 usb_put_dev(vub300->udev);
0378 mmc_free_host(mmc);
0379
0380
0381
0382
0383 }
0384
0385 static void vub300_queue_cmnd_work(struct vub300_mmc_host *vub300)
0386 {
0387 kref_get(&vub300->kref);
0388 if (queue_work(cmndworkqueue, &vub300->cmndwork)) {
0389
0390
0391
0392
0393
0394
0395 } else {
0396
0397
0398
0399
0400
0401 kref_put(&vub300->kref, vub300_delete);
0402 }
0403 }
0404
0405 static void vub300_queue_poll_work(struct vub300_mmc_host *vub300, int delay)
0406 {
0407 kref_get(&vub300->kref);
0408 if (queue_delayed_work(pollworkqueue, &vub300->pollwork, delay)) {
0409
0410
0411
0412
0413
0414
0415 } else {
0416
0417
0418
0419
0420
0421 kref_put(&vub300->kref, vub300_delete);
0422 }
0423 }
0424
0425 static void vub300_queue_dead_work(struct vub300_mmc_host *vub300)
0426 {
0427 kref_get(&vub300->kref);
0428 if (queue_work(deadworkqueue, &vub300->deadwork)) {
0429
0430
0431
0432
0433
0434
0435 } else {
0436
0437
0438
0439
0440
0441 kref_put(&vub300->kref, vub300_delete);
0442 }
0443 }
0444
0445 static void irqpoll_res_completed(struct urb *urb)
0446 {
0447 struct vub300_mmc_host *vub300 = (struct vub300_mmc_host *)urb->context;
0448 if (urb->status)
0449 vub300->usb_transport_fail = urb->status;
0450 complete(&vub300->irqpoll_complete);
0451 }
0452
0453 static void irqpoll_out_completed(struct urb *urb)
0454 {
0455 struct vub300_mmc_host *vub300 = (struct vub300_mmc_host *)urb->context;
0456 if (urb->status) {
0457 vub300->usb_transport_fail = urb->status;
0458 complete(&vub300->irqpoll_complete);
0459 return;
0460 } else {
0461 int ret;
0462 unsigned int pipe =
0463 usb_rcvbulkpipe(vub300->udev, vub300->cmnd_res_ep);
0464 usb_fill_bulk_urb(vub300->command_res_urb, vub300->udev, pipe,
0465 &vub300->resp, sizeof(vub300->resp),
0466 irqpoll_res_completed, vub300);
0467 vub300->command_res_urb->actual_length = 0;
0468 ret = usb_submit_urb(vub300->command_res_urb, GFP_ATOMIC);
0469 if (ret) {
0470 vub300->usb_transport_fail = ret;
0471 complete(&vub300->irqpoll_complete);
0472 }
0473 return;
0474 }
0475 }
0476
0477 static void send_irqpoll(struct vub300_mmc_host *vub300)
0478 {
0479
0480 int retval;
0481 int timeout = 0xFFFF & (0x0001FFFF - firmware_irqpoll_timeout);
0482 vub300->cmnd.poll.header_size = 22;
0483 vub300->cmnd.poll.header_type = 1;
0484 vub300->cmnd.poll.port_number = 0;
0485 vub300->cmnd.poll.command_type = 2;
0486 vub300->cmnd.poll.poll_timeout_lsb = 0xFF & (unsigned)timeout;
0487 vub300->cmnd.poll.poll_timeout_msb = 0xFF & (unsigned)(timeout >> 8);
0488 usb_fill_bulk_urb(vub300->command_out_urb, vub300->udev,
0489 usb_sndbulkpipe(vub300->udev, vub300->cmnd_out_ep)
0490 , &vub300->cmnd, sizeof(vub300->cmnd)
0491 , irqpoll_out_completed, vub300);
0492 retval = usb_submit_urb(vub300->command_out_urb, GFP_KERNEL);
0493 if (0 > retval) {
0494 vub300->usb_transport_fail = retval;
0495 vub300_queue_poll_work(vub300, 1);
0496 complete(&vub300->irqpoll_complete);
0497 return;
0498 } else {
0499 return;
0500 }
0501 }
0502
0503 static void new_system_port_status(struct vub300_mmc_host *vub300)
0504 {
0505 int old_card_present = vub300->card_present;
0506 int new_card_present =
0507 (0x0001 & vub300->system_port_status.port_flags) ? 1 : 0;
0508 vub300->read_only =
0509 (0x0010 & vub300->system_port_status.port_flags) ? 1 : 0;
0510 if (new_card_present && !old_card_present) {
0511 dev_info(&vub300->udev->dev, "card just inserted\n");
0512 vub300->card_present = 1;
0513 vub300->bus_width = 0;
0514 if (disable_offload_processing)
0515 strncpy(vub300->vub_name, "EMPTY Processing Disabled",
0516 sizeof(vub300->vub_name));
0517 else
0518 vub300->vub_name[0] = 0;
0519 mmc_detect_change(vub300->mmc, 1);
0520 } else if (!new_card_present && old_card_present) {
0521 dev_info(&vub300->udev->dev, "card just ejected\n");
0522 vub300->card_present = 0;
0523 mmc_detect_change(vub300->mmc, 0);
0524 } else {
0525
0526 }
0527 }
0528
0529 static void __add_offloaded_reg_to_fifo(struct vub300_mmc_host *vub300,
0530 struct offload_registers_access
0531 *register_access, u8 func)
0532 {
0533 u8 r = vub300->fn[func].offload_point + vub300->fn[func].offload_count;
0534 memcpy(&vub300->fn[func].reg[MAXREGMASK & r], register_access,
0535 sizeof(struct offload_registers_access));
0536 vub300->fn[func].offload_count += 1;
0537 vub300->total_offload_count += 1;
0538 }
0539
0540 static void add_offloaded_reg(struct vub300_mmc_host *vub300,
0541 struct offload_registers_access *register_access)
0542 {
0543 u32 Register = ((0x03 & register_access->command_byte[0]) << 15)
0544 | ((0xFF & register_access->command_byte[1]) << 7)
0545 | ((0xFE & register_access->command_byte[2]) >> 1);
0546 u8 func = ((0x70 & register_access->command_byte[0]) >> 4);
0547 u8 regs = vub300->dynamic_register_count;
0548 u8 i = 0;
0549 while (0 < regs-- && 1 == vub300->sdio_register[i].activate) {
0550 if (vub300->sdio_register[i].func_num == func &&
0551 vub300->sdio_register[i].sdio_reg == Register) {
0552 if (vub300->sdio_register[i].prepared == 0)
0553 vub300->sdio_register[i].prepared = 1;
0554 vub300->sdio_register[i].response =
0555 register_access->Respond_Byte[2];
0556 vub300->sdio_register[i].regvalue =
0557 register_access->Respond_Byte[3];
0558 return;
0559 } else {
0560 i += 1;
0561 continue;
0562 }
0563 }
0564 __add_offloaded_reg_to_fifo(vub300, register_access, func);
0565 }
0566
0567 static void check_vub300_port_status(struct vub300_mmc_host *vub300)
0568 {
0569
0570
0571
0572
0573 int retval;
0574 retval =
0575 usb_control_msg(vub300->udev, usb_rcvctrlpipe(vub300->udev, 0),
0576 GET_SYSTEM_PORT_STATUS,
0577 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0578 0x0000, 0x0000, &vub300->system_port_status,
0579 sizeof(vub300->system_port_status), 1000);
0580 if (sizeof(vub300->system_port_status) == retval)
0581 new_system_port_status(vub300);
0582 }
0583
0584 static void __vub300_irqpoll_response(struct vub300_mmc_host *vub300)
0585 {
0586
0587 if (vub300->command_res_urb->actual_length == 0)
0588 return;
0589
0590 switch (vub300->resp.common.header_type) {
0591 case RESPONSE_INTERRUPT:
0592 mutex_lock(&vub300->irq_mutex);
0593 if (vub300->irq_enabled)
0594 mmc_signal_sdio_irq(vub300->mmc);
0595 else
0596 vub300->irqs_queued += 1;
0597 vub300->irq_disabled = 1;
0598 mutex_unlock(&vub300->irq_mutex);
0599 break;
0600 case RESPONSE_ERROR:
0601 if (vub300->resp.error.error_code == SD_ERROR_NO_DEVICE)
0602 check_vub300_port_status(vub300);
0603 break;
0604 case RESPONSE_STATUS:
0605 vub300->system_port_status = vub300->resp.status;
0606 new_system_port_status(vub300);
0607 if (!vub300->card_present)
0608 vub300_queue_poll_work(vub300, HZ / 5);
0609 break;
0610 case RESPONSE_IRQ_DISABLED:
0611 {
0612 int offloaded_data_length = vub300->resp.common.header_size - 3;
0613 int register_count = offloaded_data_length >> 3;
0614 int ri = 0;
0615 while (register_count--) {
0616 add_offloaded_reg(vub300, &vub300->resp.irq.reg[ri]);
0617 ri += 1;
0618 }
0619 mutex_lock(&vub300->irq_mutex);
0620 if (vub300->irq_enabled)
0621 mmc_signal_sdio_irq(vub300->mmc);
0622 else
0623 vub300->irqs_queued += 1;
0624 vub300->irq_disabled = 1;
0625 mutex_unlock(&vub300->irq_mutex);
0626 break;
0627 }
0628 case RESPONSE_IRQ_ENABLED:
0629 {
0630 int offloaded_data_length = vub300->resp.common.header_size - 3;
0631 int register_count = offloaded_data_length >> 3;
0632 int ri = 0;
0633 while (register_count--) {
0634 add_offloaded_reg(vub300, &vub300->resp.irq.reg[ri]);
0635 ri += 1;
0636 }
0637 mutex_lock(&vub300->irq_mutex);
0638 if (vub300->irq_enabled)
0639 mmc_signal_sdio_irq(vub300->mmc);
0640 else
0641 vub300->irqs_queued += 1;
0642 vub300->irq_disabled = 0;
0643 mutex_unlock(&vub300->irq_mutex);
0644 break;
0645 }
0646 case RESPONSE_NO_INTERRUPT:
0647 vub300_queue_poll_work(vub300, 1);
0648 break;
0649 default:
0650 break;
0651 }
0652 }
0653
0654 static void __do_poll(struct vub300_mmc_host *vub300)
0655 {
0656
0657 unsigned long commretval;
0658 mod_timer(&vub300->inactivity_timer, jiffies + HZ);
0659 init_completion(&vub300->irqpoll_complete);
0660 send_irqpoll(vub300);
0661 commretval = wait_for_completion_timeout(&vub300->irqpoll_complete,
0662 msecs_to_jiffies(500));
0663 if (vub300->usb_transport_fail) {
0664
0665 } else if (commretval == 0) {
0666 vub300->usb_timed_out = 1;
0667 usb_kill_urb(vub300->command_out_urb);
0668 usb_kill_urb(vub300->command_res_urb);
0669 } else {
0670 __vub300_irqpoll_response(vub300);
0671 }
0672 }
0673
0674
0675
0676
0677 static void vub300_pollwork_thread(struct work_struct *work)
0678 {
0679 struct vub300_mmc_host *vub300 = container_of(work,
0680 struct vub300_mmc_host, pollwork.work);
0681 if (!vub300->interface) {
0682 kref_put(&vub300->kref, vub300_delete);
0683 return;
0684 }
0685 mutex_lock(&vub300->cmd_mutex);
0686 if (vub300->cmd) {
0687 vub300_queue_poll_work(vub300, 1);
0688 } else if (!vub300->card_present) {
0689
0690 } else {
0691 mutex_lock(&vub300->irq_mutex);
0692 if (!vub300->irq_enabled) {
0693 mutex_unlock(&vub300->irq_mutex);
0694 } else if (vub300->irqs_queued) {
0695 vub300->irqs_queued -= 1;
0696 mmc_signal_sdio_irq(vub300->mmc);
0697 mod_timer(&vub300->inactivity_timer, jiffies + HZ);
0698 mutex_unlock(&vub300->irq_mutex);
0699 } else {
0700 mutex_unlock(&vub300->irq_mutex);
0701 __do_poll(vub300);
0702 }
0703 }
0704 mutex_unlock(&vub300->cmd_mutex);
0705 kref_put(&vub300->kref, vub300_delete);
0706 }
0707
0708 static void vub300_deadwork_thread(struct work_struct *work)
0709 {
0710 struct vub300_mmc_host *vub300 =
0711 container_of(work, struct vub300_mmc_host, deadwork);
0712 if (!vub300->interface) {
0713 kref_put(&vub300->kref, vub300_delete);
0714 return;
0715 }
0716 mutex_lock(&vub300->cmd_mutex);
0717 if (vub300->cmd) {
0718
0719
0720
0721
0722
0723
0724 } else if (vub300->card_present) {
0725 check_vub300_port_status(vub300);
0726 } else if (vub300->mmc && vub300->mmc->card) {
0727
0728
0729
0730
0731
0732
0733 } else {
0734 check_vub300_port_status(vub300);
0735 }
0736 mod_timer(&vub300->inactivity_timer, jiffies + HZ);
0737 mutex_unlock(&vub300->cmd_mutex);
0738 kref_put(&vub300->kref, vub300_delete);
0739 }
0740
0741 static void vub300_inactivity_timer_expired(struct timer_list *t)
0742 {
0743 struct vub300_mmc_host *vub300 = from_timer(vub300, t,
0744 inactivity_timer);
0745 if (!vub300->interface) {
0746 kref_put(&vub300->kref, vub300_delete);
0747 } else if (vub300->cmd) {
0748 mod_timer(&vub300->inactivity_timer, jiffies + HZ);
0749 } else {
0750 vub300_queue_dead_work(vub300);
0751 mod_timer(&vub300->inactivity_timer, jiffies + HZ);
0752 }
0753 }
0754
0755 static int vub300_response_error(u8 error_code)
0756 {
0757 switch (error_code) {
0758 case SD_ERROR_PIO_TIMEOUT:
0759 case SD_ERROR_1BIT_TIMEOUT:
0760 case SD_ERROR_4BIT_TIMEOUT:
0761 return -ETIMEDOUT;
0762 case SD_ERROR_STAT_DATA:
0763 case SD_ERROR_OVERRUN:
0764 case SD_ERROR_STAT_CMD:
0765 case SD_ERROR_STAT_CMD_TIMEOUT:
0766 case SD_ERROR_SDCRDY_STUCK:
0767 case SD_ERROR_UNHANDLED:
0768 case SD_ERROR_1BIT_CRC_WRONG:
0769 case SD_ERROR_4BIT_CRC_WRONG:
0770 case SD_ERROR_1BIT_CRC_ERROR:
0771 case SD_ERROR_4BIT_CRC_ERROR:
0772 case SD_ERROR_NO_CMD_ENDBIT:
0773 case SD_ERROR_NO_1BIT_DATEND:
0774 case SD_ERROR_NO_4BIT_DATEND:
0775 case SD_ERROR_1BIT_DATA_TIMEOUT:
0776 case SD_ERROR_4BIT_DATA_TIMEOUT:
0777 case SD_ERROR_1BIT_UNEXPECTED_TIMEOUT:
0778 case SD_ERROR_4BIT_UNEXPECTED_TIMEOUT:
0779 return -EILSEQ;
0780 case 33:
0781 return -EILSEQ;
0782 case SD_ERROR_ILLEGAL_COMMAND:
0783 return -EINVAL;
0784 case SD_ERROR_NO_DEVICE:
0785 return -ENOMEDIUM;
0786 default:
0787 return -ENODEV;
0788 }
0789 }
0790
0791 static void command_res_completed(struct urb *urb)
0792 {
0793 struct vub300_mmc_host *vub300 = (struct vub300_mmc_host *)urb->context;
0794 if (urb->status) {
0795
0796 } else if (vub300->command_res_urb->actual_length == 0) {
0797
0798
0799
0800
0801 } else if (!vub300->data) {
0802
0803 } else if (vub300->resp.common.header_type != 0x02) {
0804
0805
0806
0807
0808 } else if (vub300->urb) {
0809 vub300->cmd->error =
0810 vub300_response_error(vub300->resp.error.error_code);
0811 usb_unlink_urb(vub300->urb);
0812 } else {
0813 vub300->cmd->error =
0814 vub300_response_error(vub300->resp.error.error_code);
0815 usb_sg_cancel(&vub300->sg_request);
0816 }
0817 complete(&vub300->command_complete);
0818 }
0819
0820 static void command_out_completed(struct urb *urb)
0821 {
0822 struct vub300_mmc_host *vub300 = (struct vub300_mmc_host *)urb->context;
0823 if (urb->status) {
0824 complete(&vub300->command_complete);
0825 } else {
0826 int ret;
0827 unsigned int pipe =
0828 usb_rcvbulkpipe(vub300->udev, vub300->cmnd_res_ep);
0829 usb_fill_bulk_urb(vub300->command_res_urb, vub300->udev, pipe,
0830 &vub300->resp, sizeof(vub300->resp),
0831 command_res_completed, vub300);
0832 vub300->command_res_urb->actual_length = 0;
0833 ret = usb_submit_urb(vub300->command_res_urb, GFP_ATOMIC);
0834 if (ret == 0) {
0835
0836
0837
0838
0839 } else {
0840
0841
0842
0843
0844 complete(&vub300->command_complete);
0845 }
0846 }
0847 }
0848
0849
0850
0851
0852 static void snoop_block_size_and_bus_width(struct vub300_mmc_host *vub300,
0853 u32 cmd_arg)
0854 {
0855 if ((0xFBFFFE00 & cmd_arg) == 0x80022200)
0856 vub300->fbs[1] = (cmd_arg << 8) | (0x00FF & vub300->fbs[1]);
0857 else if ((0xFBFFFE00 & cmd_arg) == 0x80022000)
0858 vub300->fbs[1] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[1]);
0859 else if ((0xFBFFFE00 & cmd_arg) == 0x80042200)
0860 vub300->fbs[2] = (cmd_arg << 8) | (0x00FF & vub300->fbs[2]);
0861 else if ((0xFBFFFE00 & cmd_arg) == 0x80042000)
0862 vub300->fbs[2] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[2]);
0863 else if ((0xFBFFFE00 & cmd_arg) == 0x80062200)
0864 vub300->fbs[3] = (cmd_arg << 8) | (0x00FF & vub300->fbs[3]);
0865 else if ((0xFBFFFE00 & cmd_arg) == 0x80062000)
0866 vub300->fbs[3] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[3]);
0867 else if ((0xFBFFFE00 & cmd_arg) == 0x80082200)
0868 vub300->fbs[4] = (cmd_arg << 8) | (0x00FF & vub300->fbs[4]);
0869 else if ((0xFBFFFE00 & cmd_arg) == 0x80082000)
0870 vub300->fbs[4] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[4]);
0871 else if ((0xFBFFFE00 & cmd_arg) == 0x800A2200)
0872 vub300->fbs[5] = (cmd_arg << 8) | (0x00FF & vub300->fbs[5]);
0873 else if ((0xFBFFFE00 & cmd_arg) == 0x800A2000)
0874 vub300->fbs[5] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[5]);
0875 else if ((0xFBFFFE00 & cmd_arg) == 0x800C2200)
0876 vub300->fbs[6] = (cmd_arg << 8) | (0x00FF & vub300->fbs[6]);
0877 else if ((0xFBFFFE00 & cmd_arg) == 0x800C2000)
0878 vub300->fbs[6] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[6]);
0879 else if ((0xFBFFFE00 & cmd_arg) == 0x800E2200)
0880 vub300->fbs[7] = (cmd_arg << 8) | (0x00FF & vub300->fbs[7]);
0881 else if ((0xFBFFFE00 & cmd_arg) == 0x800E2000)
0882 vub300->fbs[7] = (0xFF & cmd_arg) | (0xFF00 & vub300->fbs[7]);
0883 else if ((0xFBFFFE03 & cmd_arg) == 0x80000E00)
0884 vub300->bus_width = 1;
0885 else if ((0xFBFFFE03 & cmd_arg) == 0x80000E02)
0886 vub300->bus_width = 4;
0887 }
0888
0889 static void send_command(struct vub300_mmc_host *vub300)
0890 {
0891
0892 struct mmc_command *cmd = vub300->cmd;
0893 struct mmc_data *data = vub300->data;
0894 int retval;
0895 int i;
0896 u8 response_type;
0897 if (vub300->app_spec) {
0898 switch (cmd->opcode) {
0899 case 6:
0900 response_type = SDRT_1;
0901 vub300->resp_len = 6;
0902 if (0x00000000 == (0x00000003 & cmd->arg))
0903 vub300->bus_width = 1;
0904 else if (0x00000002 == (0x00000003 & cmd->arg))
0905 vub300->bus_width = 4;
0906 else
0907 dev_err(&vub300->udev->dev,
0908 "unexpected ACMD6 bus_width=%d\n",
0909 0x00000003 & cmd->arg);
0910 break;
0911 case 13:
0912 response_type = SDRT_1;
0913 vub300->resp_len = 6;
0914 break;
0915 case 22:
0916 response_type = SDRT_1;
0917 vub300->resp_len = 6;
0918 break;
0919 case 23:
0920 response_type = SDRT_1;
0921 vub300->resp_len = 6;
0922 break;
0923 case 41:
0924 response_type = SDRT_3;
0925 vub300->resp_len = 6;
0926 break;
0927 case 42:
0928 response_type = SDRT_1;
0929 vub300->resp_len = 6;
0930 break;
0931 case 51:
0932 response_type = SDRT_1;
0933 vub300->resp_len = 6;
0934 break;
0935 case 55:
0936 response_type = SDRT_1;
0937 vub300->resp_len = 6;
0938 break;
0939 default:
0940 vub300->resp_len = 0;
0941 cmd->error = -EINVAL;
0942 complete(&vub300->command_complete);
0943 return;
0944 }
0945 vub300->app_spec = 0;
0946 } else {
0947 switch (cmd->opcode) {
0948 case 0:
0949 response_type = SDRT_NONE;
0950 vub300->resp_len = 0;
0951 break;
0952 case 1:
0953 response_type = SDRT_3;
0954 vub300->resp_len = 6;
0955 break;
0956 case 2:
0957 response_type = SDRT_2;
0958 vub300->resp_len = 17;
0959 break;
0960 case 3:
0961 response_type = SDRT_6;
0962 vub300->resp_len = 6;
0963 break;
0964 case 4:
0965 response_type = SDRT_NONE;
0966 vub300->resp_len = 0;
0967 break;
0968 case 5:
0969 response_type = SDRT_4;
0970 vub300->resp_len = 6;
0971 break;
0972 case 6:
0973 response_type = SDRT_1;
0974 vub300->resp_len = 6;
0975 break;
0976 case 7:
0977 response_type = SDRT_1B;
0978 vub300->resp_len = 6;
0979 break;
0980 case 8:
0981 response_type = SDRT_7;
0982 vub300->resp_len = 6;
0983 break;
0984 case 9:
0985 response_type = SDRT_2;
0986 vub300->resp_len = 17;
0987 break;
0988 case 10:
0989 response_type = SDRT_2;
0990 vub300->resp_len = 17;
0991 break;
0992 case 12:
0993 response_type = SDRT_1B;
0994 vub300->resp_len = 6;
0995 break;
0996 case 13:
0997 response_type = SDRT_1;
0998 vub300->resp_len = 6;
0999 break;
1000 case 15:
1001 response_type = SDRT_NONE;
1002 vub300->resp_len = 0;
1003 break;
1004 case 16:
1005 for (i = 0; i < ARRAY_SIZE(vub300->fbs); i++)
1006 vub300->fbs[i] = 0xFFFF & cmd->arg;
1007 response_type = SDRT_1;
1008 vub300->resp_len = 6;
1009 break;
1010 case 17:
1011 case 18:
1012 case 24:
1013 case 25:
1014 case 27:
1015 response_type = SDRT_1;
1016 vub300->resp_len = 6;
1017 break;
1018 case 28:
1019 case 29:
1020 response_type = SDRT_1B;
1021 vub300->resp_len = 6;
1022 break;
1023 case 30:
1024 case 32:
1025 case 33:
1026 response_type = SDRT_1;
1027 vub300->resp_len = 6;
1028 break;
1029 case 38:
1030 response_type = SDRT_1B;
1031 vub300->resp_len = 6;
1032 break;
1033 case 42:
1034 response_type = SDRT_1;
1035 vub300->resp_len = 6;
1036 break;
1037 case 52:
1038 response_type = SDRT_5;
1039 vub300->resp_len = 6;
1040 snoop_block_size_and_bus_width(vub300, cmd->arg);
1041 break;
1042 case 53:
1043 response_type = SDRT_5;
1044 vub300->resp_len = 6;
1045 break;
1046 case 55:
1047 response_type = SDRT_1;
1048 vub300->resp_len = 6;
1049 vub300->app_spec = 1;
1050 break;
1051 case 56:
1052 response_type = SDRT_1;
1053 vub300->resp_len = 6;
1054 break;
1055 default:
1056 vub300->resp_len = 0;
1057 cmd->error = -EINVAL;
1058 complete(&vub300->command_complete);
1059 return;
1060 }
1061 }
1062
1063
1064
1065
1066 vub300->cmnd.head.header_size = 20;
1067 vub300->cmnd.head.header_type = 0x00;
1068 vub300->cmnd.head.port_number = 0;
1069 vub300->cmnd.head.command_type = 0x00;
1070 vub300->cmnd.head.response_type = response_type;
1071 vub300->cmnd.head.command_index = cmd->opcode;
1072 vub300->cmnd.head.arguments[0] = cmd->arg >> 24;
1073 vub300->cmnd.head.arguments[1] = cmd->arg >> 16;
1074 vub300->cmnd.head.arguments[2] = cmd->arg >> 8;
1075 vub300->cmnd.head.arguments[3] = cmd->arg >> 0;
1076 if (cmd->opcode == 52) {
1077 int fn = 0x7 & (cmd->arg >> 28);
1078 vub300->cmnd.head.block_count[0] = 0;
1079 vub300->cmnd.head.block_count[1] = 0;
1080 vub300->cmnd.head.block_size[0] = (vub300->fbs[fn] >> 8) & 0xFF;
1081 vub300->cmnd.head.block_size[1] = (vub300->fbs[fn] >> 0) & 0xFF;
1082 vub300->cmnd.head.command_type = 0x00;
1083 vub300->cmnd.head.transfer_size[0] = 0;
1084 vub300->cmnd.head.transfer_size[1] = 0;
1085 vub300->cmnd.head.transfer_size[2] = 0;
1086 vub300->cmnd.head.transfer_size[3] = 0;
1087 } else if (!data) {
1088 vub300->cmnd.head.block_count[0] = 0;
1089 vub300->cmnd.head.block_count[1] = 0;
1090 vub300->cmnd.head.block_size[0] = (vub300->fbs[0] >> 8) & 0xFF;
1091 vub300->cmnd.head.block_size[1] = (vub300->fbs[0] >> 0) & 0xFF;
1092 vub300->cmnd.head.command_type = 0x00;
1093 vub300->cmnd.head.transfer_size[0] = 0;
1094 vub300->cmnd.head.transfer_size[1] = 0;
1095 vub300->cmnd.head.transfer_size[2] = 0;
1096 vub300->cmnd.head.transfer_size[3] = 0;
1097 } else if (cmd->opcode == 53) {
1098 int fn = 0x7 & (cmd->arg >> 28);
1099 if (0x08 & vub300->cmnd.head.arguments[0]) {
1100 vub300->cmnd.head.block_count[0] =
1101 (data->blocks >> 8) & 0xFF;
1102 vub300->cmnd.head.block_count[1] =
1103 (data->blocks >> 0) & 0xFF;
1104 vub300->cmnd.head.block_size[0] =
1105 (data->blksz >> 8) & 0xFF;
1106 vub300->cmnd.head.block_size[1] =
1107 (data->blksz >> 0) & 0xFF;
1108 } else {
1109 vub300->cmnd.head.block_count[0] = 0;
1110 vub300->cmnd.head.block_count[1] = 0;
1111 vub300->cmnd.head.block_size[0] =
1112 (vub300->datasize >> 8) & 0xFF;
1113 vub300->cmnd.head.block_size[1] =
1114 (vub300->datasize >> 0) & 0xFF;
1115 }
1116 vub300->cmnd.head.command_type =
1117 (MMC_DATA_READ & data->flags) ? 0x00 : 0x80;
1118 vub300->cmnd.head.transfer_size[0] =
1119 (vub300->datasize >> 24) & 0xFF;
1120 vub300->cmnd.head.transfer_size[1] =
1121 (vub300->datasize >> 16) & 0xFF;
1122 vub300->cmnd.head.transfer_size[2] =
1123 (vub300->datasize >> 8) & 0xFF;
1124 vub300->cmnd.head.transfer_size[3] =
1125 (vub300->datasize >> 0) & 0xFF;
1126 if (vub300->datasize < vub300->fbs[fn]) {
1127 vub300->cmnd.head.block_count[0] = 0;
1128 vub300->cmnd.head.block_count[1] = 0;
1129 }
1130 } else {
1131 vub300->cmnd.head.block_count[0] = (data->blocks >> 8) & 0xFF;
1132 vub300->cmnd.head.block_count[1] = (data->blocks >> 0) & 0xFF;
1133 vub300->cmnd.head.block_size[0] = (data->blksz >> 8) & 0xFF;
1134 vub300->cmnd.head.block_size[1] = (data->blksz >> 0) & 0xFF;
1135 vub300->cmnd.head.command_type =
1136 (MMC_DATA_READ & data->flags) ? 0x00 : 0x80;
1137 vub300->cmnd.head.transfer_size[0] =
1138 (vub300->datasize >> 24) & 0xFF;
1139 vub300->cmnd.head.transfer_size[1] =
1140 (vub300->datasize >> 16) & 0xFF;
1141 vub300->cmnd.head.transfer_size[2] =
1142 (vub300->datasize >> 8) & 0xFF;
1143 vub300->cmnd.head.transfer_size[3] =
1144 (vub300->datasize >> 0) & 0xFF;
1145 if (vub300->datasize < vub300->fbs[0]) {
1146 vub300->cmnd.head.block_count[0] = 0;
1147 vub300->cmnd.head.block_count[1] = 0;
1148 }
1149 }
1150 if (vub300->cmnd.head.block_size[0] || vub300->cmnd.head.block_size[1]) {
1151 u16 block_size = vub300->cmnd.head.block_size[1] |
1152 (vub300->cmnd.head.block_size[0] << 8);
1153 u16 block_boundary = FIRMWARE_BLOCK_BOUNDARY -
1154 (FIRMWARE_BLOCK_BOUNDARY % block_size);
1155 vub300->cmnd.head.block_boundary[0] =
1156 (block_boundary >> 8) & 0xFF;
1157 vub300->cmnd.head.block_boundary[1] =
1158 (block_boundary >> 0) & 0xFF;
1159 } else {
1160 vub300->cmnd.head.block_boundary[0] = 0;
1161 vub300->cmnd.head.block_boundary[1] = 0;
1162 }
1163 usb_fill_bulk_urb(vub300->command_out_urb, vub300->udev,
1164 usb_sndbulkpipe(vub300->udev, vub300->cmnd_out_ep),
1165 &vub300->cmnd, sizeof(vub300->cmnd),
1166 command_out_completed, vub300);
1167 retval = usb_submit_urb(vub300->command_out_urb, GFP_KERNEL);
1168 if (retval < 0) {
1169 cmd->error = retval;
1170 complete(&vub300->command_complete);
1171 return;
1172 } else {
1173 return;
1174 }
1175 }
1176
1177
1178
1179
1180
1181 static void vub300_sg_timed_out(struct timer_list *t)
1182 {
1183 struct vub300_mmc_host *vub300 = from_timer(vub300, t,
1184 sg_transfer_timer);
1185 vub300->usb_timed_out = 1;
1186 usb_sg_cancel(&vub300->sg_request);
1187 usb_unlink_urb(vub300->command_out_urb);
1188 usb_unlink_urb(vub300->command_res_urb);
1189 }
1190
1191 static u16 roundup_to_multiple_of_64(u16 number)
1192 {
1193 return 0xFFC0 & (0x3F + number);
1194 }
1195
1196
1197
1198
1199 static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,
1200 const struct firmware *fw)
1201 {
1202 u8 register_count = 0;
1203 u16 ts = 0;
1204 u16 interrupt_size = 0;
1205 const u8 *data = fw->data;
1206 int size = fw->size;
1207 u8 c;
1208 dev_info(&vub300->udev->dev, "using %s for SDIO offload processing\n",
1209 vub300->vub_name);
1210 do {
1211 c = *data++;
1212 } while (size-- && c);
1213 dev_info(&vub300->udev->dev, "using offload firmware %s %s\n", fw->data,
1214 vub300->vub_name);
1215 if (size < 4) {
1216 dev_err(&vub300->udev->dev,
1217 "corrupt offload pseudocode in firmware %s\n",
1218 vub300->vub_name);
1219 strncpy(vub300->vub_name, "corrupt offload pseudocode",
1220 sizeof(vub300->vub_name));
1221 return;
1222 }
1223 interrupt_size += *data++;
1224 size -= 1;
1225 interrupt_size <<= 8;
1226 interrupt_size += *data++;
1227 size -= 1;
1228 if (interrupt_size < size) {
1229 u16 xfer_length = roundup_to_multiple_of_64(interrupt_size);
1230 u8 *xfer_buffer = kmalloc(xfer_length, GFP_KERNEL);
1231 if (xfer_buffer) {
1232 int retval;
1233 memcpy(xfer_buffer, data, interrupt_size);
1234 memset(xfer_buffer + interrupt_size, 0,
1235 xfer_length - interrupt_size);
1236 size -= interrupt_size;
1237 data += interrupt_size;
1238 retval =
1239 usb_control_msg(vub300->udev,
1240 usb_sndctrlpipe(vub300->udev, 0),
1241 SET_INTERRUPT_PSEUDOCODE,
1242 USB_DIR_OUT | USB_TYPE_VENDOR |
1243 USB_RECIP_DEVICE, 0x0000, 0x0000,
1244 xfer_buffer, xfer_length, 1000);
1245 kfree(xfer_buffer);
1246 if (retval < 0)
1247 goto copy_error_message;
1248 } else {
1249 dev_err(&vub300->udev->dev,
1250 "not enough memory for xfer buffer to send"
1251 " INTERRUPT_PSEUDOCODE for %s %s\n", fw->data,
1252 vub300->vub_name);
1253 strncpy(vub300->vub_name,
1254 "SDIO interrupt pseudocode download failed",
1255 sizeof(vub300->vub_name));
1256 return;
1257 }
1258 } else {
1259 dev_err(&vub300->udev->dev,
1260 "corrupt interrupt pseudocode in firmware %s %s\n",
1261 fw->data, vub300->vub_name);
1262 strncpy(vub300->vub_name, "corrupt interrupt pseudocode",
1263 sizeof(vub300->vub_name));
1264 return;
1265 }
1266 ts += *data++;
1267 size -= 1;
1268 ts <<= 8;
1269 ts += *data++;
1270 size -= 1;
1271 if (ts < size) {
1272 u16 xfer_length = roundup_to_multiple_of_64(ts);
1273 u8 *xfer_buffer = kmalloc(xfer_length, GFP_KERNEL);
1274 if (xfer_buffer) {
1275 int retval;
1276 memcpy(xfer_buffer, data, ts);
1277 memset(xfer_buffer + ts, 0,
1278 xfer_length - ts);
1279 size -= ts;
1280 data += ts;
1281 retval =
1282 usb_control_msg(vub300->udev,
1283 usb_sndctrlpipe(vub300->udev, 0),
1284 SET_TRANSFER_PSEUDOCODE,
1285 USB_DIR_OUT | USB_TYPE_VENDOR |
1286 USB_RECIP_DEVICE, 0x0000, 0x0000,
1287 xfer_buffer, xfer_length, 1000);
1288 kfree(xfer_buffer);
1289 if (retval < 0)
1290 goto copy_error_message;
1291 } else {
1292 dev_err(&vub300->udev->dev,
1293 "not enough memory for xfer buffer to send"
1294 " TRANSFER_PSEUDOCODE for %s %s\n", fw->data,
1295 vub300->vub_name);
1296 strncpy(vub300->vub_name,
1297 "SDIO transfer pseudocode download failed",
1298 sizeof(vub300->vub_name));
1299 return;
1300 }
1301 } else {
1302 dev_err(&vub300->udev->dev,
1303 "corrupt transfer pseudocode in firmware %s %s\n",
1304 fw->data, vub300->vub_name);
1305 strncpy(vub300->vub_name, "corrupt transfer pseudocode",
1306 sizeof(vub300->vub_name));
1307 return;
1308 }
1309 register_count += *data++;
1310 size -= 1;
1311 if (register_count * 4 == size) {
1312 int I = vub300->dynamic_register_count = register_count;
1313 int i = 0;
1314 while (I--) {
1315 unsigned int func_num = 0;
1316 vub300->sdio_register[i].func_num = *data++;
1317 size -= 1;
1318 func_num += *data++;
1319 size -= 1;
1320 func_num <<= 8;
1321 func_num += *data++;
1322 size -= 1;
1323 func_num <<= 8;
1324 func_num += *data++;
1325 size -= 1;
1326 vub300->sdio_register[i].sdio_reg = func_num;
1327 vub300->sdio_register[i].activate = 1;
1328 vub300->sdio_register[i].prepared = 0;
1329 i += 1;
1330 }
1331 dev_info(&vub300->udev->dev,
1332 "initialized %d dynamic pseudocode registers\n",
1333 vub300->dynamic_register_count);
1334 return;
1335 } else {
1336 dev_err(&vub300->udev->dev,
1337 "corrupt dynamic registers in firmware %s\n",
1338 vub300->vub_name);
1339 strncpy(vub300->vub_name, "corrupt dynamic registers",
1340 sizeof(vub300->vub_name));
1341 return;
1342 }
1343
1344 return;
1345
1346 copy_error_message:
1347 strncpy(vub300->vub_name, "SDIO pseudocode download failed",
1348 sizeof(vub300->vub_name));
1349 }
1350
1351
1352
1353
1354
1355 static void download_offload_pseudocode(struct vub300_mmc_host *vub300)
1356 {
1357 struct mmc_card *card = vub300->mmc->card;
1358 int sdio_funcs = card->sdio_funcs;
1359 const struct firmware *fw = NULL;
1360 int l = snprintf(vub300->vub_name, sizeof(vub300->vub_name),
1361 "vub_%04X%04X", card->cis.vendor, card->cis.device);
1362 int n = 0;
1363 int retval;
1364 for (n = 0; n < sdio_funcs; n++) {
1365 struct sdio_func *sf = card->sdio_func[n];
1366 l += scnprintf(vub300->vub_name + l,
1367 sizeof(vub300->vub_name) - l, "_%04X%04X",
1368 sf->vendor, sf->device);
1369 }
1370 snprintf(vub300->vub_name + l, sizeof(vub300->vub_name) - l, ".bin");
1371 dev_info(&vub300->udev->dev, "requesting offload firmware %s\n",
1372 vub300->vub_name);
1373 retval = request_firmware(&fw, vub300->vub_name, &card->dev);
1374 if (retval < 0) {
1375 strncpy(vub300->vub_name, "vub_default.bin",
1376 sizeof(vub300->vub_name));
1377 retval = request_firmware(&fw, vub300->vub_name, &card->dev);
1378 if (retval < 0) {
1379 strncpy(vub300->vub_name,
1380 "no SDIO offload firmware found",
1381 sizeof(vub300->vub_name));
1382 } else {
1383 __download_offload_pseudocode(vub300, fw);
1384 release_firmware(fw);
1385 }
1386 } else {
1387 __download_offload_pseudocode(vub300, fw);
1388 release_firmware(fw);
1389 }
1390 }
1391
1392 static void vub300_usb_bulk_msg_completion(struct urb *urb)
1393 {
1394 complete((struct completion *)urb->context);
1395 }
1396
1397 static int vub300_usb_bulk_msg(struct vub300_mmc_host *vub300,
1398 unsigned int pipe, void *data, int len,
1399 int *actual_length, int timeout_msecs)
1400 {
1401
1402 struct usb_device *usb_dev = vub300->udev;
1403 struct completion done;
1404 int retval;
1405 vub300->urb = usb_alloc_urb(0, GFP_KERNEL);
1406 if (!vub300->urb)
1407 return -ENOMEM;
1408 usb_fill_bulk_urb(vub300->urb, usb_dev, pipe, data, len,
1409 vub300_usb_bulk_msg_completion, NULL);
1410 init_completion(&done);
1411 vub300->urb->context = &done;
1412 vub300->urb->actual_length = 0;
1413 retval = usb_submit_urb(vub300->urb, GFP_KERNEL);
1414 if (unlikely(retval))
1415 goto out;
1416 if (!wait_for_completion_timeout
1417 (&done, msecs_to_jiffies(timeout_msecs))) {
1418 retval = -ETIMEDOUT;
1419 usb_kill_urb(vub300->urb);
1420 } else {
1421 retval = vub300->urb->status;
1422 }
1423 out:
1424 *actual_length = vub300->urb->actual_length;
1425 usb_free_urb(vub300->urb);
1426 vub300->urb = NULL;
1427 return retval;
1428 }
1429
1430 static int __command_read_data(struct vub300_mmc_host *vub300,
1431 struct mmc_command *cmd, struct mmc_data *data)
1432 {
1433
1434 int linear_length = vub300->datasize;
1435 int padded_length = vub300->large_usb_packets ?
1436 ((511 + linear_length) >> 9) << 9 :
1437 ((63 + linear_length) >> 6) << 6;
1438 if ((padded_length == linear_length) || !pad_input_to_usb_pkt) {
1439 int result;
1440 unsigned pipe;
1441 pipe = usb_rcvbulkpipe(vub300->udev, vub300->data_inp_ep);
1442 result = usb_sg_init(&vub300->sg_request, vub300->udev,
1443 pipe, 0, data->sg,
1444 data->sg_len, 0, GFP_KERNEL);
1445 if (result < 0) {
1446 usb_unlink_urb(vub300->command_out_urb);
1447 usb_unlink_urb(vub300->command_res_urb);
1448 cmd->error = result;
1449 data->bytes_xfered = 0;
1450 return 0;
1451 } else {
1452 vub300->sg_transfer_timer.expires =
1453 jiffies + msecs_to_jiffies(2000 +
1454 (linear_length / 16384));
1455 add_timer(&vub300->sg_transfer_timer);
1456 usb_sg_wait(&vub300->sg_request);
1457 del_timer(&vub300->sg_transfer_timer);
1458 if (vub300->sg_request.status < 0) {
1459 cmd->error = vub300->sg_request.status;
1460 data->bytes_xfered = 0;
1461 return 0;
1462 } else {
1463 data->bytes_xfered = vub300->datasize;
1464 return linear_length;
1465 }
1466 }
1467 } else {
1468 u8 *buf = kmalloc(padded_length, GFP_KERNEL);
1469 if (buf) {
1470 int result;
1471 unsigned pipe = usb_rcvbulkpipe(vub300->udev,
1472 vub300->data_inp_ep);
1473 int actual_length = 0;
1474 result = vub300_usb_bulk_msg(vub300, pipe, buf,
1475 padded_length, &actual_length,
1476 2000 + (padded_length / 16384));
1477 if (result < 0) {
1478 cmd->error = result;
1479 data->bytes_xfered = 0;
1480 kfree(buf);
1481 return 0;
1482 } else if (actual_length < linear_length) {
1483 cmd->error = -EREMOTEIO;
1484 data->bytes_xfered = 0;
1485 kfree(buf);
1486 return 0;
1487 } else {
1488 sg_copy_from_buffer(data->sg, data->sg_len, buf,
1489 linear_length);
1490 kfree(buf);
1491 data->bytes_xfered = vub300->datasize;
1492 return linear_length;
1493 }
1494 } else {
1495 cmd->error = -ENOMEM;
1496 data->bytes_xfered = 0;
1497 return 0;
1498 }
1499 }
1500 }
1501
1502 static int __command_write_data(struct vub300_mmc_host *vub300,
1503 struct mmc_command *cmd, struct mmc_data *data)
1504 {
1505
1506 unsigned pipe = usb_sndbulkpipe(vub300->udev, vub300->data_out_ep);
1507 int linear_length = vub300->datasize;
1508 int modulo_64_length = linear_length & 0x003F;
1509 int modulo_512_length = linear_length & 0x01FF;
1510 if (linear_length < 64) {
1511 int result;
1512 int actual_length;
1513 sg_copy_to_buffer(data->sg, data->sg_len,
1514 vub300->padded_buffer,
1515 sizeof(vub300->padded_buffer));
1516 memset(vub300->padded_buffer + linear_length, 0,
1517 sizeof(vub300->padded_buffer) - linear_length);
1518 result = vub300_usb_bulk_msg(vub300, pipe, vub300->padded_buffer,
1519 sizeof(vub300->padded_buffer),
1520 &actual_length, 2000 +
1521 (sizeof(vub300->padded_buffer) /
1522 16384));
1523 if (result < 0) {
1524 cmd->error = result;
1525 data->bytes_xfered = 0;
1526 } else {
1527 data->bytes_xfered = vub300->datasize;
1528 }
1529 } else if ((!vub300->large_usb_packets && (0 < modulo_64_length)) ||
1530 (vub300->large_usb_packets && (64 > modulo_512_length))
1531 ) {
1532 int padded_length = ((63 + linear_length) >> 6) << 6;
1533 u8 *buf = kmalloc(padded_length, GFP_KERNEL);
1534 if (buf) {
1535 int result;
1536 int actual_length;
1537 sg_copy_to_buffer(data->sg, data->sg_len, buf,
1538 padded_length);
1539 memset(buf + linear_length, 0,
1540 padded_length - linear_length);
1541 result =
1542 vub300_usb_bulk_msg(vub300, pipe, buf,
1543 padded_length, &actual_length,
1544 2000 + padded_length / 16384);
1545 kfree(buf);
1546 if (result < 0) {
1547 cmd->error = result;
1548 data->bytes_xfered = 0;
1549 } else {
1550 data->bytes_xfered = vub300->datasize;
1551 }
1552 } else {
1553 cmd->error = -ENOMEM;
1554 data->bytes_xfered = 0;
1555 }
1556 } else {
1557 int result;
1558 unsigned char buf[64 * 4];
1559 sg_copy_to_buffer(data->sg, data->sg_len, buf, sizeof(buf));
1560 result = usb_sg_init(&vub300->sg_request, vub300->udev,
1561 pipe, 0, data->sg,
1562 data->sg_len, 0, GFP_KERNEL);
1563 if (result < 0) {
1564 usb_unlink_urb(vub300->command_out_urb);
1565 usb_unlink_urb(vub300->command_res_urb);
1566 cmd->error = result;
1567 data->bytes_xfered = 0;
1568 } else {
1569 vub300->sg_transfer_timer.expires =
1570 jiffies + msecs_to_jiffies(2000 +
1571 linear_length / 16384);
1572 add_timer(&vub300->sg_transfer_timer);
1573 usb_sg_wait(&vub300->sg_request);
1574 if (cmd->error) {
1575 data->bytes_xfered = 0;
1576 } else {
1577 del_timer(&vub300->sg_transfer_timer);
1578 if (vub300->sg_request.status < 0) {
1579 cmd->error = vub300->sg_request.status;
1580 data->bytes_xfered = 0;
1581 } else {
1582 data->bytes_xfered = vub300->datasize;
1583 }
1584 }
1585 }
1586 }
1587 return linear_length;
1588 }
1589
1590 static void __vub300_command_response(struct vub300_mmc_host *vub300,
1591 struct mmc_command *cmd,
1592 struct mmc_data *data, int data_length)
1593 {
1594
1595 long respretval;
1596 int msec_timeout = 1000 + data_length / 4;
1597 respretval =
1598 wait_for_completion_timeout(&vub300->command_complete,
1599 msecs_to_jiffies(msec_timeout));
1600 if (respretval == 0) {
1601
1602 int result;
1603 vub300->usb_timed_out = 1;
1604 usb_kill_urb(vub300->command_out_urb);
1605 usb_kill_urb(vub300->command_res_urb);
1606 cmd->error = -ETIMEDOUT;
1607 result = usb_lock_device_for_reset(vub300->udev,
1608 vub300->interface);
1609 if (result == 0) {
1610 result = usb_reset_device(vub300->udev);
1611 usb_unlock_device(vub300->udev);
1612 }
1613 } else if (respretval < 0) {
1614
1615 usb_kill_urb(vub300->command_out_urb);
1616 usb_kill_urb(vub300->command_res_urb);
1617 cmd->error = respretval;
1618 } else if (cmd->error) {
1619
1620
1621
1622
1623 } else if (vub300->command_out_urb->status) {
1624 vub300->usb_transport_fail = vub300->command_out_urb->status;
1625 cmd->error = -EPROTO == vub300->command_out_urb->status ?
1626 -ESHUTDOWN : vub300->command_out_urb->status;
1627 } else if (vub300->command_res_urb->status) {
1628 vub300->usb_transport_fail = vub300->command_res_urb->status;
1629 cmd->error = -EPROTO == vub300->command_res_urb->status ?
1630 -ESHUTDOWN : vub300->command_res_urb->status;
1631 } else if (vub300->resp.common.header_type == 0x00) {
1632
1633
1634
1635
1636 } else if (vub300->resp.common.header_type == RESPONSE_ERROR) {
1637 cmd->error =
1638 vub300_response_error(vub300->resp.error.error_code);
1639 if (vub300->data)
1640 usb_sg_cancel(&vub300->sg_request);
1641 } else if (vub300->resp.common.header_type == RESPONSE_PIGGYBACKED) {
1642 int offloaded_data_length =
1643 vub300->resp.common.header_size -
1644 sizeof(struct sd_register_header);
1645 int register_count = offloaded_data_length >> 3;
1646 int ri = 0;
1647 while (register_count--) {
1648 add_offloaded_reg(vub300, &vub300->resp.pig.reg[ri]);
1649 ri += 1;
1650 }
1651 vub300->resp.common.header_size =
1652 sizeof(struct sd_register_header);
1653 vub300->resp.common.header_type = 0x00;
1654 cmd->error = 0;
1655 } else if (vub300->resp.common.header_type == RESPONSE_PIG_DISABLED) {
1656 int offloaded_data_length =
1657 vub300->resp.common.header_size -
1658 sizeof(struct sd_register_header);
1659 int register_count = offloaded_data_length >> 3;
1660 int ri = 0;
1661 while (register_count--) {
1662 add_offloaded_reg(vub300, &vub300->resp.pig.reg[ri]);
1663 ri += 1;
1664 }
1665 mutex_lock(&vub300->irq_mutex);
1666 if (vub300->irqs_queued) {
1667 vub300->irqs_queued += 1;
1668 } else if (vub300->irq_enabled) {
1669 vub300->irqs_queued += 1;
1670 vub300_queue_poll_work(vub300, 0);
1671 } else {
1672 vub300->irqs_queued += 1;
1673 }
1674 vub300->irq_disabled = 1;
1675 mutex_unlock(&vub300->irq_mutex);
1676 vub300->resp.common.header_size =
1677 sizeof(struct sd_register_header);
1678 vub300->resp.common.header_type = 0x00;
1679 cmd->error = 0;
1680 } else if (vub300->resp.common.header_type == RESPONSE_PIG_ENABLED) {
1681 int offloaded_data_length =
1682 vub300->resp.common.header_size -
1683 sizeof(struct sd_register_header);
1684 int register_count = offloaded_data_length >> 3;
1685 int ri = 0;
1686 while (register_count--) {
1687 add_offloaded_reg(vub300, &vub300->resp.pig.reg[ri]);
1688 ri += 1;
1689 }
1690 mutex_lock(&vub300->irq_mutex);
1691 if (vub300->irqs_queued) {
1692 vub300->irqs_queued += 1;
1693 } else if (vub300->irq_enabled) {
1694 vub300->irqs_queued += 1;
1695 vub300_queue_poll_work(vub300, 0);
1696 } else {
1697 vub300->irqs_queued += 1;
1698 }
1699 vub300->irq_disabled = 0;
1700 mutex_unlock(&vub300->irq_mutex);
1701 vub300->resp.common.header_size =
1702 sizeof(struct sd_register_header);
1703 vub300->resp.common.header_type = 0x00;
1704 cmd->error = 0;
1705 } else {
1706 cmd->error = -EINVAL;
1707 }
1708 }
1709
1710 static void construct_request_response(struct vub300_mmc_host *vub300,
1711 struct mmc_command *cmd)
1712 {
1713 int resp_len = vub300->resp_len;
1714 int less_cmd = (17 == resp_len) ? resp_len : resp_len - 1;
1715 int bytes = 3 & less_cmd;
1716 int words = less_cmd >> 2;
1717 u8 *r = vub300->resp.response.command_response;
1718 if (bytes == 3) {
1719 cmd->resp[words] = (r[1 + (words << 2)] << 24)
1720 | (r[2 + (words << 2)] << 16)
1721 | (r[3 + (words << 2)] << 8);
1722 } else if (bytes == 2) {
1723 cmd->resp[words] = (r[1 + (words << 2)] << 24)
1724 | (r[2 + (words << 2)] << 16);
1725 } else if (bytes == 1) {
1726 cmd->resp[words] = (r[1 + (words << 2)] << 24);
1727 }
1728 while (words-- > 0) {
1729 cmd->resp[words] = (r[1 + (words << 2)] << 24)
1730 | (r[2 + (words << 2)] << 16)
1731 | (r[3 + (words << 2)] << 8)
1732 | (r[4 + (words << 2)] << 0);
1733 }
1734 if ((cmd->opcode == 53) && (0x000000FF & cmd->resp[0]))
1735 cmd->resp[0] &= 0xFFFFFF00;
1736 }
1737
1738
1739 static void vub300_cmndwork_thread(struct work_struct *work)
1740 {
1741 struct vub300_mmc_host *vub300 =
1742 container_of(work, struct vub300_mmc_host, cmndwork);
1743 if (!vub300->interface) {
1744 kref_put(&vub300->kref, vub300_delete);
1745 return;
1746 } else {
1747 struct mmc_request *req = vub300->req;
1748 struct mmc_command *cmd = vub300->cmd;
1749 struct mmc_data *data = vub300->data;
1750 int data_length;
1751 mutex_lock(&vub300->cmd_mutex);
1752 init_completion(&vub300->command_complete);
1753 if (likely(vub300->vub_name[0]) || !vub300->mmc->card) {
1754
1755
1756
1757
1758
1759 } else if (0 == vub300->mmc->card->sdio_funcs) {
1760 strncpy(vub300->vub_name, "SD memory device",
1761 sizeof(vub300->vub_name));
1762 } else {
1763 download_offload_pseudocode(vub300);
1764 }
1765 send_command(vub300);
1766 if (!data)
1767 data_length = 0;
1768 else if (MMC_DATA_READ & data->flags)
1769 data_length = __command_read_data(vub300, cmd, data);
1770 else
1771 data_length = __command_write_data(vub300, cmd, data);
1772 __vub300_command_response(vub300, cmd, data, data_length);
1773 vub300->req = NULL;
1774 vub300->cmd = NULL;
1775 vub300->data = NULL;
1776 if (cmd->error) {
1777 if (cmd->error == -ENOMEDIUM)
1778 check_vub300_port_status(vub300);
1779 mutex_unlock(&vub300->cmd_mutex);
1780 mmc_request_done(vub300->mmc, req);
1781 kref_put(&vub300->kref, vub300_delete);
1782 return;
1783 } else {
1784 construct_request_response(vub300, cmd);
1785 vub300->resp_len = 0;
1786 mutex_unlock(&vub300->cmd_mutex);
1787 kref_put(&vub300->kref, vub300_delete);
1788 mmc_request_done(vub300->mmc, req);
1789 return;
1790 }
1791 }
1792 }
1793
1794 static int examine_cyclic_buffer(struct vub300_mmc_host *vub300,
1795 struct mmc_command *cmd, u8 Function)
1796 {
1797
1798 u8 cmd0 = 0xFF & (cmd->arg >> 24);
1799 u8 cmd1 = 0xFF & (cmd->arg >> 16);
1800 u8 cmd2 = 0xFF & (cmd->arg >> 8);
1801 u8 cmd3 = 0xFF & (cmd->arg >> 0);
1802 int first = MAXREGMASK & vub300->fn[Function].offload_point;
1803 struct offload_registers_access *rf = &vub300->fn[Function].reg[first];
1804 if (cmd0 == rf->command_byte[0] &&
1805 cmd1 == rf->command_byte[1] &&
1806 cmd2 == rf->command_byte[2] &&
1807 cmd3 == rf->command_byte[3]) {
1808 u8 checksum = 0x00;
1809 cmd->resp[1] = checksum << 24;
1810 cmd->resp[0] = (rf->Respond_Byte[0] << 24)
1811 | (rf->Respond_Byte[1] << 16)
1812 | (rf->Respond_Byte[2] << 8)
1813 | (rf->Respond_Byte[3] << 0);
1814 vub300->fn[Function].offload_point += 1;
1815 vub300->fn[Function].offload_count -= 1;
1816 vub300->total_offload_count -= 1;
1817 return 1;
1818 } else {
1819 int delta = 1;
1820 u8 register_count = vub300->fn[Function].offload_count - 1;
1821 u32 register_point = vub300->fn[Function].offload_point + 1;
1822 while (0 < register_count) {
1823 int point = MAXREGMASK & register_point;
1824 struct offload_registers_access *r =
1825 &vub300->fn[Function].reg[point];
1826 if (cmd0 == r->command_byte[0] &&
1827 cmd1 == r->command_byte[1] &&
1828 cmd2 == r->command_byte[2] &&
1829 cmd3 == r->command_byte[3]) {
1830 u8 checksum = 0x00;
1831 cmd->resp[1] = checksum << 24;
1832 cmd->resp[0] = (r->Respond_Byte[0] << 24)
1833 | (r->Respond_Byte[1] << 16)
1834 | (r->Respond_Byte[2] << 8)
1835 | (r->Respond_Byte[3] << 0);
1836 vub300->fn[Function].offload_point += delta;
1837 vub300->fn[Function].offload_count -= delta;
1838 vub300->total_offload_count -= delta;
1839 return 1;
1840 } else {
1841 register_point += 1;
1842 register_count -= 1;
1843 delta += 1;
1844 continue;
1845 }
1846 }
1847 return 0;
1848 }
1849 }
1850
1851 static int satisfy_request_from_offloaded_data(struct vub300_mmc_host *vub300,
1852 struct mmc_command *cmd)
1853 {
1854
1855 u8 regs = vub300->dynamic_register_count;
1856 u8 i = 0;
1857 u8 func = FUN(cmd);
1858 u32 reg = REG(cmd);
1859 while (0 < regs--) {
1860 if ((vub300->sdio_register[i].func_num == func) &&
1861 (vub300->sdio_register[i].sdio_reg == reg)) {
1862 if (!vub300->sdio_register[i].prepared) {
1863 return 0;
1864 } else if ((0x80000000 & cmd->arg) == 0x80000000) {
1865
1866
1867
1868
1869 vub300->sdio_register[i].prepared = 0;
1870 return 0;
1871 } else {
1872 u8 checksum = 0x00;
1873 u8 rsp0 = 0x00;
1874 u8 rsp1 = 0x00;
1875 u8 rsp2 = vub300->sdio_register[i].response;
1876 u8 rsp3 = vub300->sdio_register[i].regvalue;
1877 vub300->sdio_register[i].prepared = 0;
1878 cmd->resp[1] = checksum << 24;
1879 cmd->resp[0] = (rsp0 << 24)
1880 | (rsp1 << 16)
1881 | (rsp2 << 8)
1882 | (rsp3 << 0);
1883 return 1;
1884 }
1885 } else {
1886 i += 1;
1887 continue;
1888 }
1889 }
1890 if (vub300->total_offload_count == 0)
1891 return 0;
1892 else if (vub300->fn[func].offload_count == 0)
1893 return 0;
1894 else
1895 return examine_cyclic_buffer(vub300, cmd, func);
1896 }
1897
1898 static void vub300_mmc_request(struct mmc_host *mmc, struct mmc_request *req)
1899 {
1900 struct mmc_command *cmd = req->cmd;
1901 struct vub300_mmc_host *vub300 = mmc_priv(mmc);
1902 if (!vub300->interface) {
1903 cmd->error = -ESHUTDOWN;
1904 mmc_request_done(mmc, req);
1905 return;
1906 } else {
1907 struct mmc_data *data = req->data;
1908 if (!vub300->card_powered) {
1909 cmd->error = -ENOMEDIUM;
1910 mmc_request_done(mmc, req);
1911 return;
1912 }
1913 if (!vub300->card_present) {
1914 cmd->error = -ENOMEDIUM;
1915 mmc_request_done(mmc, req);
1916 return;
1917 }
1918 if (vub300->usb_transport_fail) {
1919 cmd->error = vub300->usb_transport_fail;
1920 mmc_request_done(mmc, req);
1921 return;
1922 }
1923 if (!vub300->interface) {
1924 cmd->error = -ENODEV;
1925 mmc_request_done(mmc, req);
1926 return;
1927 }
1928 kref_get(&vub300->kref);
1929 mutex_lock(&vub300->cmd_mutex);
1930 mod_timer(&vub300->inactivity_timer, jiffies + HZ);
1931
1932
1933
1934
1935 if (cmd->opcode == 52 &&
1936 satisfy_request_from_offloaded_data(vub300, cmd)) {
1937 cmd->error = 0;
1938 mutex_unlock(&vub300->cmd_mutex);
1939 kref_put(&vub300->kref, vub300_delete);
1940 mmc_request_done(mmc, req);
1941 return;
1942 } else {
1943 vub300->cmd = cmd;
1944 vub300->req = req;
1945 vub300->data = data;
1946 if (data)
1947 vub300->datasize = data->blksz * data->blocks;
1948 else
1949 vub300->datasize = 0;
1950 vub300_queue_cmnd_work(vub300);
1951 mutex_unlock(&vub300->cmd_mutex);
1952 kref_put(&vub300->kref, vub300_delete);
1953
1954
1955
1956
1957
1958
1959
1960 }
1961 }
1962 }
1963
1964 static void __set_clock_speed(struct vub300_mmc_host *vub300, u8 buf[8],
1965 struct mmc_ios *ios)
1966 {
1967 int buf_array_size = 8;
1968 int retval;
1969 u32 kHzClock;
1970 if (ios->clock >= 48000000)
1971 kHzClock = 48000;
1972 else if (ios->clock >= 24000000)
1973 kHzClock = 24000;
1974 else if (ios->clock >= 20000000)
1975 kHzClock = 20000;
1976 else if (ios->clock >= 15000000)
1977 kHzClock = 15000;
1978 else if (ios->clock >= 200000)
1979 kHzClock = 200;
1980 else
1981 kHzClock = 0;
1982 {
1983 int i;
1984 u64 c = kHzClock;
1985 for (i = 0; i < buf_array_size; i++) {
1986 buf[i] = c;
1987 c >>= 8;
1988 }
1989 }
1990 retval =
1991 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
1992 SET_CLOCK_SPEED,
1993 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1994 0x00, 0x00, buf, buf_array_size, 1000);
1995 if (retval != 8) {
1996 dev_err(&vub300->udev->dev, "SET_CLOCK_SPEED"
1997 " %dkHz failed with retval=%d\n", kHzClock, retval);
1998 } else {
1999 dev_dbg(&vub300->udev->dev, "SET_CLOCK_SPEED"
2000 " %dkHz\n", kHzClock);
2001 }
2002 }
2003
2004 static void vub300_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
2005 {
2006 struct vub300_mmc_host *vub300 = mmc_priv(mmc);
2007 if (!vub300->interface)
2008 return;
2009 kref_get(&vub300->kref);
2010 mutex_lock(&vub300->cmd_mutex);
2011 if ((ios->power_mode == MMC_POWER_OFF) && vub300->card_powered) {
2012 vub300->card_powered = 0;
2013 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
2014 SET_SD_POWER,
2015 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2016 0x0000, 0x0000, NULL, 0, 1000);
2017
2018 msleep(600);
2019 } else if ((ios->power_mode == MMC_POWER_UP) && !vub300->card_powered) {
2020 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
2021 SET_SD_POWER,
2022 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2023 0x0001, 0x0000, NULL, 0, 1000);
2024 msleep(600);
2025 vub300->card_powered = 1;
2026 } else if (ios->power_mode == MMC_POWER_ON) {
2027 u8 *buf = kmalloc(8, GFP_KERNEL);
2028 if (buf) {
2029 __set_clock_speed(vub300, buf, ios);
2030 kfree(buf);
2031 }
2032 } else {
2033
2034 }
2035 mutex_unlock(&vub300->cmd_mutex);
2036 kref_put(&vub300->kref, vub300_delete);
2037 }
2038
2039 static int vub300_mmc_get_ro(struct mmc_host *mmc)
2040 {
2041 struct vub300_mmc_host *vub300 = mmc_priv(mmc);
2042 return vub300->read_only;
2043 }
2044
2045 static void vub300_enable_sdio_irq(struct mmc_host *mmc, int enable)
2046 {
2047 struct vub300_mmc_host *vub300 = mmc_priv(mmc);
2048 if (!vub300->interface)
2049 return;
2050 kref_get(&vub300->kref);
2051 if (enable) {
2052 mutex_lock(&vub300->irq_mutex);
2053 if (vub300->irqs_queued) {
2054 vub300->irqs_queued -= 1;
2055 mmc_signal_sdio_irq(vub300->mmc);
2056 } else if (vub300->irq_disabled) {
2057 vub300->irq_disabled = 0;
2058 vub300->irq_enabled = 1;
2059 vub300_queue_poll_work(vub300, 0);
2060 } else if (vub300->irq_enabled) {
2061
2062 } else {
2063 vub300->irq_enabled = 1;
2064 vub300_queue_poll_work(vub300, 0);
2065 }
2066 mutex_unlock(&vub300->irq_mutex);
2067 } else {
2068 vub300->irq_enabled = 0;
2069 }
2070 kref_put(&vub300->kref, vub300_delete);
2071 }
2072
2073 static const struct mmc_host_ops vub300_mmc_ops = {
2074 .request = vub300_mmc_request,
2075 .set_ios = vub300_mmc_set_ios,
2076 .get_ro = vub300_mmc_get_ro,
2077 .enable_sdio_irq = vub300_enable_sdio_irq,
2078 };
2079
2080 static int vub300_probe(struct usb_interface *interface,
2081 const struct usb_device_id *id)
2082 {
2083 struct vub300_mmc_host *vub300;
2084 struct usb_host_interface *iface_desc;
2085 struct usb_device *udev = usb_get_dev(interface_to_usbdev(interface));
2086 int i;
2087 int retval = -ENOMEM;
2088 struct urb *command_out_urb;
2089 struct urb *command_res_urb;
2090 struct mmc_host *mmc;
2091 char manufacturer[48];
2092 char product[32];
2093 char serial_number[32];
2094 usb_string(udev, udev->descriptor.iManufacturer, manufacturer,
2095 sizeof(manufacturer));
2096 usb_string(udev, udev->descriptor.iProduct, product, sizeof(product));
2097 usb_string(udev, udev->descriptor.iSerialNumber, serial_number,
2098 sizeof(serial_number));
2099 dev_info(&udev->dev, "probing VID:PID(%04X:%04X) %s %s %s\n",
2100 le16_to_cpu(udev->descriptor.idVendor),
2101 le16_to_cpu(udev->descriptor.idProduct),
2102 manufacturer, product, serial_number);
2103 command_out_urb = usb_alloc_urb(0, GFP_KERNEL);
2104 if (!command_out_urb) {
2105 retval = -ENOMEM;
2106 goto error0;
2107 }
2108 command_res_urb = usb_alloc_urb(0, GFP_KERNEL);
2109 if (!command_res_urb) {
2110 retval = -ENOMEM;
2111 goto error1;
2112 }
2113
2114 mmc = mmc_alloc_host(sizeof(struct vub300_mmc_host), &udev->dev);
2115 if (!mmc) {
2116 retval = -ENOMEM;
2117 dev_err(&udev->dev, "not enough memory for the mmc_host\n");
2118 goto error4;
2119 }
2120
2121 mmc->caps = 0;
2122 if (!force_1_bit_data_xfers)
2123 mmc->caps |= MMC_CAP_4_BIT_DATA;
2124 if (!force_polling_for_irqs)
2125 mmc->caps |= MMC_CAP_SDIO_IRQ;
2126 mmc->caps &= ~MMC_CAP_NEEDS_POLL;
2127
2128
2129
2130
2131
2132 if (limit_speed_to_24_MHz) {
2133 mmc->caps |= MMC_CAP_MMC_HIGHSPEED;
2134 mmc->caps |= MMC_CAP_SD_HIGHSPEED;
2135 mmc->f_max = 24000000;
2136 dev_info(&udev->dev, "limiting SDIO speed to 24_MHz\n");
2137 } else {
2138 mmc->caps |= MMC_CAP_MMC_HIGHSPEED;
2139 mmc->caps |= MMC_CAP_SD_HIGHSPEED;
2140 mmc->f_max = 48000000;
2141 }
2142 mmc->f_min = 200000;
2143 mmc->max_blk_count = 511;
2144 mmc->max_blk_size = 512;
2145 mmc->max_segs = 128;
2146 if (force_max_req_size)
2147 mmc->max_req_size = force_max_req_size * 1024;
2148 else
2149 mmc->max_req_size = 64 * 1024;
2150 mmc->max_seg_size = mmc->max_req_size;
2151 mmc->ocr_avail = 0;
2152 mmc->ocr_avail |= MMC_VDD_165_195;
2153 mmc->ocr_avail |= MMC_VDD_20_21;
2154 mmc->ocr_avail |= MMC_VDD_21_22;
2155 mmc->ocr_avail |= MMC_VDD_22_23;
2156 mmc->ocr_avail |= MMC_VDD_23_24;
2157 mmc->ocr_avail |= MMC_VDD_24_25;
2158 mmc->ocr_avail |= MMC_VDD_25_26;
2159 mmc->ocr_avail |= MMC_VDD_26_27;
2160 mmc->ocr_avail |= MMC_VDD_27_28;
2161 mmc->ocr_avail |= MMC_VDD_28_29;
2162 mmc->ocr_avail |= MMC_VDD_29_30;
2163 mmc->ocr_avail |= MMC_VDD_30_31;
2164 mmc->ocr_avail |= MMC_VDD_31_32;
2165 mmc->ocr_avail |= MMC_VDD_32_33;
2166 mmc->ocr_avail |= MMC_VDD_33_34;
2167 mmc->ocr_avail |= MMC_VDD_34_35;
2168 mmc->ocr_avail |= MMC_VDD_35_36;
2169 mmc->ops = &vub300_mmc_ops;
2170 vub300 = mmc_priv(mmc);
2171 vub300->mmc = mmc;
2172 vub300->card_powered = 0;
2173 vub300->bus_width = 0;
2174 vub300->cmnd.head.block_size[0] = 0x00;
2175 vub300->cmnd.head.block_size[1] = 0x00;
2176 vub300->app_spec = 0;
2177 mutex_init(&vub300->cmd_mutex);
2178 mutex_init(&vub300->irq_mutex);
2179 vub300->command_out_urb = command_out_urb;
2180 vub300->command_res_urb = command_res_urb;
2181 vub300->usb_timed_out = 0;
2182 vub300->dynamic_register_count = 0;
2183
2184 for (i = 0; i < ARRAY_SIZE(vub300->fn); i++) {
2185 vub300->fn[i].offload_point = 0;
2186 vub300->fn[i].offload_count = 0;
2187 }
2188
2189 vub300->total_offload_count = 0;
2190 vub300->irq_enabled = 0;
2191 vub300->irq_disabled = 0;
2192 vub300->irqs_queued = 0;
2193
2194 for (i = 0; i < ARRAY_SIZE(vub300->sdio_register); i++)
2195 vub300->sdio_register[i++].activate = 0;
2196
2197 vub300->udev = udev;
2198 vub300->interface = interface;
2199 vub300->cmnd_res_ep = 0;
2200 vub300->cmnd_out_ep = 0;
2201 vub300->data_inp_ep = 0;
2202 vub300->data_out_ep = 0;
2203
2204 for (i = 0; i < ARRAY_SIZE(vub300->fbs); i++)
2205 vub300->fbs[i] = 512;
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216 vub300->large_usb_packets = 0;
2217 iface_desc = interface->cur_altsetting;
2218 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
2219 struct usb_endpoint_descriptor *endpoint =
2220 &iface_desc->endpoint[i].desc;
2221 dev_info(&vub300->udev->dev,
2222 "vub300 testing %s EndPoint(%d) %02X\n",
2223 usb_endpoint_is_bulk_in(endpoint) ? "BULK IN" :
2224 usb_endpoint_is_bulk_out(endpoint) ? "BULK OUT" :
2225 "UNKNOWN", i, endpoint->bEndpointAddress);
2226 if (endpoint->wMaxPacketSize > 64)
2227 vub300->large_usb_packets = 1;
2228 if (usb_endpoint_is_bulk_in(endpoint)) {
2229 if (!vub300->cmnd_res_ep) {
2230 vub300->cmnd_res_ep =
2231 endpoint->bEndpointAddress;
2232 } else if (!vub300->data_inp_ep) {
2233 vub300->data_inp_ep =
2234 endpoint->bEndpointAddress;
2235 } else {
2236 dev_warn(&vub300->udev->dev,
2237 "ignoring"
2238 " unexpected bulk_in endpoint");
2239 }
2240 } else if (usb_endpoint_is_bulk_out(endpoint)) {
2241 if (!vub300->cmnd_out_ep) {
2242 vub300->cmnd_out_ep =
2243 endpoint->bEndpointAddress;
2244 } else if (!vub300->data_out_ep) {
2245 vub300->data_out_ep =
2246 endpoint->bEndpointAddress;
2247 } else {
2248 dev_warn(&vub300->udev->dev,
2249 "ignoring"
2250 " unexpected bulk_out endpoint");
2251 }
2252 } else {
2253 dev_warn(&vub300->udev->dev,
2254 "vub300 ignoring EndPoint(%d) %02X", i,
2255 endpoint->bEndpointAddress);
2256 }
2257 }
2258 if (vub300->cmnd_res_ep && vub300->cmnd_out_ep &&
2259 vub300->data_inp_ep && vub300->data_out_ep) {
2260 dev_info(&vub300->udev->dev,
2261 "vub300 %s packets"
2262 " using EndPoints %02X %02X %02X %02X\n",
2263 vub300->large_usb_packets ? "LARGE" : "SMALL",
2264 vub300->cmnd_out_ep, vub300->cmnd_res_ep,
2265 vub300->data_out_ep, vub300->data_inp_ep);
2266
2267 } else {
2268 dev_err(&vub300->udev->dev,
2269 "Could not find two sets of bulk-in/out endpoint pairs\n");
2270 retval = -EINVAL;
2271 goto error5;
2272 }
2273 retval =
2274 usb_control_msg(vub300->udev, usb_rcvctrlpipe(vub300->udev, 0),
2275 GET_HC_INF0,
2276 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2277 0x0000, 0x0000, &vub300->hc_info,
2278 sizeof(vub300->hc_info), 1000);
2279 if (retval < 0)
2280 goto error5;
2281 retval =
2282 usb_control_msg(vub300->udev, usb_sndctrlpipe(vub300->udev, 0),
2283 SET_ROM_WAIT_STATES,
2284 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2285 firmware_rom_wait_states, 0x0000, NULL, 0, 1000);
2286 if (retval < 0)
2287 goto error5;
2288 dev_info(&vub300->udev->dev,
2289 "operating_mode = %s %s %d MHz %s %d byte USB packets\n",
2290 (mmc->caps & MMC_CAP_SDIO_IRQ) ? "IRQs" : "POLL",
2291 (mmc->caps & MMC_CAP_4_BIT_DATA) ? "4-bit" : "1-bit",
2292 mmc->f_max / 1000000,
2293 pad_input_to_usb_pkt ? "padding input data to" : "with",
2294 vub300->large_usb_packets ? 512 : 64);
2295 retval =
2296 usb_control_msg(vub300->udev, usb_rcvctrlpipe(vub300->udev, 0),
2297 GET_SYSTEM_PORT_STATUS,
2298 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2299 0x0000, 0x0000, &vub300->system_port_status,
2300 sizeof(vub300->system_port_status), 1000);
2301 if (retval < 0) {
2302 goto error4;
2303 } else if (sizeof(vub300->system_port_status) == retval) {
2304 vub300->card_present =
2305 (0x0001 & vub300->system_port_status.port_flags) ? 1 : 0;
2306 vub300->read_only =
2307 (0x0010 & vub300->system_port_status.port_flags) ? 1 : 0;
2308 } else {
2309 goto error4;
2310 }
2311 usb_set_intfdata(interface, vub300);
2312 INIT_DELAYED_WORK(&vub300->pollwork, vub300_pollwork_thread);
2313 INIT_WORK(&vub300->cmndwork, vub300_cmndwork_thread);
2314 INIT_WORK(&vub300->deadwork, vub300_deadwork_thread);
2315 kref_init(&vub300->kref);
2316 timer_setup(&vub300->sg_transfer_timer, vub300_sg_timed_out, 0);
2317 kref_get(&vub300->kref);
2318 timer_setup(&vub300->inactivity_timer,
2319 vub300_inactivity_timer_expired, 0);
2320 vub300->inactivity_timer.expires = jiffies + HZ;
2321 add_timer(&vub300->inactivity_timer);
2322 if (vub300->card_present)
2323 dev_info(&vub300->udev->dev,
2324 "USB vub300 remote SDIO host controller[%d]"
2325 "connected with SD/SDIO card inserted\n",
2326 interface_to_InterfaceNumber(interface));
2327 else
2328 dev_info(&vub300->udev->dev,
2329 "USB vub300 remote SDIO host controller[%d]"
2330 "connected with no SD/SDIO card inserted\n",
2331 interface_to_InterfaceNumber(interface));
2332 mmc_add_host(mmc);
2333 return 0;
2334 error5:
2335 mmc_free_host(mmc);
2336
2337
2338
2339
2340 error4:
2341 usb_free_urb(command_res_urb);
2342 error1:
2343 usb_free_urb(command_out_urb);
2344 error0:
2345 usb_put_dev(udev);
2346 return retval;
2347 }
2348
2349 static void vub300_disconnect(struct usb_interface *interface)
2350 {
2351 struct vub300_mmc_host *vub300 = usb_get_intfdata(interface);
2352 if (!vub300 || !vub300->mmc) {
2353 return;
2354 } else {
2355 struct mmc_host *mmc = vub300->mmc;
2356 if (!vub300->mmc) {
2357 return;
2358 } else {
2359 int ifnum = interface_to_InterfaceNumber(interface);
2360 usb_set_intfdata(interface, NULL);
2361
2362 vub300->interface = NULL;
2363 kref_put(&vub300->kref, vub300_delete);
2364 mmc_remove_host(mmc);
2365 pr_info("USB vub300 remote SDIO host controller[%d]"
2366 " now disconnected", ifnum);
2367 return;
2368 }
2369 }
2370 }
2371
2372 #ifdef CONFIG_PM
2373 static int vub300_suspend(struct usb_interface *intf, pm_message_t message)
2374 {
2375 return 0;
2376 }
2377
2378 static int vub300_resume(struct usb_interface *intf)
2379 {
2380 return 0;
2381 }
2382 #else
2383 #define vub300_suspend NULL
2384 #define vub300_resume NULL
2385 #endif
2386 static int vub300_pre_reset(struct usb_interface *intf)
2387 {
2388 struct vub300_mmc_host *vub300 = usb_get_intfdata(intf);
2389 mutex_lock(&vub300->cmd_mutex);
2390 return 0;
2391 }
2392
2393 static int vub300_post_reset(struct usb_interface *intf)
2394 {
2395 struct vub300_mmc_host *vub300 = usb_get_intfdata(intf);
2396
2397 vub300->errors = -EPIPE;
2398 mutex_unlock(&vub300->cmd_mutex);
2399 return 0;
2400 }
2401
2402 static struct usb_driver vub300_driver = {
2403 .name = "vub300",
2404 .probe = vub300_probe,
2405 .disconnect = vub300_disconnect,
2406 .suspend = vub300_suspend,
2407 .resume = vub300_resume,
2408 .pre_reset = vub300_pre_reset,
2409 .post_reset = vub300_post_reset,
2410 .id_table = vub300_table,
2411 .supports_autosuspend = 1,
2412 };
2413
2414 static int __init vub300_init(void)
2415 {
2416 int result;
2417
2418 pr_info("VUB300 Driver rom wait states = %02X irqpoll timeout = %04X",
2419 firmware_rom_wait_states, 0x0FFFF & firmware_irqpoll_timeout);
2420 cmndworkqueue = create_singlethread_workqueue("kvub300c");
2421 if (!cmndworkqueue) {
2422 pr_err("not enough memory for the REQUEST workqueue");
2423 result = -ENOMEM;
2424 goto out1;
2425 }
2426 pollworkqueue = create_singlethread_workqueue("kvub300p");
2427 if (!pollworkqueue) {
2428 pr_err("not enough memory for the IRQPOLL workqueue");
2429 result = -ENOMEM;
2430 goto out2;
2431 }
2432 deadworkqueue = create_singlethread_workqueue("kvub300d");
2433 if (!deadworkqueue) {
2434 pr_err("not enough memory for the EXPIRED workqueue");
2435 result = -ENOMEM;
2436 goto out3;
2437 }
2438 result = usb_register(&vub300_driver);
2439 if (result) {
2440 pr_err("usb_register failed. Error number %d", result);
2441 goto out4;
2442 }
2443 return 0;
2444 out4:
2445 destroy_workqueue(deadworkqueue);
2446 out3:
2447 destroy_workqueue(pollworkqueue);
2448 out2:
2449 destroy_workqueue(cmndworkqueue);
2450 out1:
2451 return result;
2452 }
2453
2454 static void __exit vub300_exit(void)
2455 {
2456 usb_deregister(&vub300_driver);
2457 flush_workqueue(cmndworkqueue);
2458 flush_workqueue(pollworkqueue);
2459 flush_workqueue(deadworkqueue);
2460 destroy_workqueue(cmndworkqueue);
2461 destroy_workqueue(pollworkqueue);
2462 destroy_workqueue(deadworkqueue);
2463 }
2464
2465 module_init(vub300_init);
2466 module_exit(vub300_exit);
2467
2468 MODULE_AUTHOR("Tony Olech <tony.olech@elandigitalsystems.com>");
2469 MODULE_DESCRIPTION("VUB300 USB to SD/MMC/SDIO adapter driver");
2470 MODULE_LICENSE("GPL");