Lines Matching refs:us

114 #define MEDIA_PORT(us) us->srb->device->lun
115 #define MEDIA_INFO(us) ((struct alauda_info *)us->extra)->port[MEDIA_PORT(us)]
121 static int init_alauda(struct us_data *us);
308 static int alauda_get_media_status(struct us_data *us, unsigned char *data)
313 if (MEDIA_PORT(us) == ALAUDA_PORT_XD)
318 rc = usb_stor_ctrl_transfer(us, us->recv_ctrl_pipe,
322 usb_stor_dbg(us, "Media status %02X %02X\n", data[0], data[1]);
331 static int alauda_ack_media(struct us_data *us)
335 if (MEDIA_PORT(us) == ALAUDA_PORT_XD)
340 return usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
348 static int alauda_get_media_signature(struct us_data *us, unsigned char *data)
352 if (MEDIA_PORT(us) == ALAUDA_PORT_XD)
357 return usb_stor_ctrl_transfer(us, us->recv_ctrl_pipe,
364 static int alauda_reset_media(struct us_data *us)
366 unsigned char *command = us->iobuf;
371 command[8] = MEDIA_PORT(us);
373 return usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
380 static int alauda_init_media(struct us_data *us)
382 unsigned char *data = us->iobuf;
390 if (alauda_get_media_status(us, data) != USB_STOR_XFER_GOOD)
397 usb_stor_dbg(us, "We are ready for action!\n");
399 if (alauda_ack_media(us) != USB_STOR_XFER_GOOD)
404 if (alauda_get_media_status(us, data) != USB_STOR_XFER_GOOD)
408 usb_stor_dbg(us, "Media not ready after ack\n");
412 if (alauda_get_media_signature(us, data) != USB_STOR_XFER_GOOD)
415 usb_stor_dbg(us, "Media signature: %4ph\n", data);
423 MEDIA_INFO(us).capacity = 1 << media_info->chipshift;
424 usb_stor_dbg(us, "Found media with capacity: %ldMB\n",
425 MEDIA_INFO(us).capacity >> 20);
427 MEDIA_INFO(us).pageshift = media_info->pageshift;
428 MEDIA_INFO(us).blockshift = media_info->blockshift;
429 MEDIA_INFO(us).zoneshift = media_info->zoneshift;
431 MEDIA_INFO(us).pagesize = 1 << media_info->pageshift;
432 MEDIA_INFO(us).blocksize = 1 << media_info->blockshift;
433 MEDIA_INFO(us).zonesize = 1 << media_info->zoneshift;
435 MEDIA_INFO(us).uzonesize = ((1 << media_info->zoneshift) / 128) * 125;
436 MEDIA_INFO(us).blockmask = MEDIA_INFO(us).blocksize - 1;
438 num_zones = MEDIA_INFO(us).capacity >> (MEDIA_INFO(us).zoneshift
439 + MEDIA_INFO(us).blockshift + MEDIA_INFO(us).pageshift);
440 MEDIA_INFO(us).pba_to_lba = kcalloc(num_zones, sizeof(u16*), GFP_NOIO);
441 MEDIA_INFO(us).lba_to_pba = kcalloc(num_zones, sizeof(u16*), GFP_NOIO);
442 if (MEDIA_INFO(us).pba_to_lba == NULL || MEDIA_INFO(us).lba_to_pba == NULL)
445 if (alauda_reset_media(us) != USB_STOR_XFER_GOOD)
455 static int alauda_check_media(struct us_data *us)
457 struct alauda_info *info = (struct alauda_info *) us->extra;
458 unsigned char *status = us->iobuf;
461 rc = alauda_get_media_status(us, status);
470 usb_stor_dbg(us, "No media, or door open\n");
471 alauda_free_maps(&MEDIA_INFO(us));
480 usb_stor_dbg(us, "Media change detected\n");
481 alauda_free_maps(&MEDIA_INFO(us));
482 alauda_init_media(us);
497 static int alauda_check_status2(struct us_data *us)
502 0, 0, 0, 0, 3, 0, MEDIA_PORT(us)
506 rc = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
511 rc = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
516 usb_stor_dbg(us, "%3ph\n", data);
527 static int alauda_get_redu_data(struct us_data *us, u16 pba, unsigned char *data)
532 PBA_HI(pba), PBA_ZONE(pba), 0, PBA_LO(pba), 0, 0, MEDIA_PORT(us)
535 rc = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
540 return usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
565 static int alauda_read_map(struct us_data *us, unsigned int zone)
567 unsigned char *data = us->iobuf;
570 unsigned int zonesize = MEDIA_INFO(us).zonesize;
571 unsigned int uzonesize = MEDIA_INFO(us).uzonesize;
582 usb_stor_dbg(us, "Mapping blocks for zone %d\n", zone);
591 result = alauda_get_redu_data(us, blocknum, data);
602 usb_stor_dbg(us, "PBA %d has no logical mapping\n", blocknum);
615 usb_stor_dbg(us, "PBA %d has no logical mapping: reserved area = %02X%02X%02X%02X data status %02X block status %02X\n",
624 usb_stor_dbg(us, "PBA %d has invalid address field %02X%02X/%02X%02X\n",
673 MEDIA_INFO(us).lba_to_pba[zone] = lba_to_pba;
674 MEDIA_INFO(us).pba_to_lba[zone] = pba_to_lba;
689 static void alauda_ensure_map_for_zone(struct us_data *us, unsigned int zone)
691 if (MEDIA_INFO(us).lba_to_pba[zone] == NULL
692 || MEDIA_INFO(us).pba_to_lba[zone] == NULL)
693 alauda_read_map(us, zone);
699 static int alauda_erase_block(struct us_data *us, u16 pba)
704 PBA_ZONE(pba), 0, PBA_LO(pba), 0x02, 0, MEDIA_PORT(us)
708 usb_stor_dbg(us, "Erasing PBA %d\n", pba);
710 rc = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
715 rc = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
720 usb_stor_dbg(us, "Erase result: %02X %02X\n", buf[0], buf[1]);
728 static int alauda_read_block_raw(struct us_data *us, u16 pba,
734 PBA_ZONE(pba), 0, PBA_LO(pba) + page, pages, 0, MEDIA_PORT(us)
737 usb_stor_dbg(us, "pba %d page %d count %d\n", pba, page, pages);
739 rc = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
744 return usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
745 data, (MEDIA_INFO(us).pagesize + 64) * pages, NULL);
754 static int alauda_read_block(struct us_data *us, u16 pba,
758 unsigned int pagesize = MEDIA_INFO(us).pagesize;
760 rc = alauda_read_block_raw(us, pba, page, pages, data);
779 static int alauda_write_block(struct us_data *us, u16 pba, unsigned char *data)
782 struct alauda_info *info = (struct alauda_info *) us->extra;
785 PBA_ZONE(pba), 0, PBA_LO(pba), 32, 0, MEDIA_PORT(us)
788 usb_stor_dbg(us, "pba %d\n", pba);
790 rc = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
795 rc = usb_stor_bulk_transfer_buf(us, info->wr_ep, data,
796 (MEDIA_INFO(us).pagesize + 64) * MEDIA_INFO(us).blocksize,
801 return alauda_check_status2(us);
807 static int alauda_write_lba(struct us_data *us, u16 lba,
815 unsigned int uzonesize = MEDIA_INFO(us).uzonesize;
816 unsigned int zonesize = MEDIA_INFO(us).zonesize;
817 unsigned int pagesize = MEDIA_INFO(us).pagesize;
818 unsigned int blocksize = MEDIA_INFO(us).blocksize;
823 alauda_ensure_map_for_zone(us, zone);
825 pba = MEDIA_INFO(us).lba_to_pba[zone][lba_offset];
836 new_pba = alauda_find_unused_pba(&MEDIA_INFO(us), zone);
845 result = alauda_read_block_raw(us, pba, 0,
863 usb_stor_dbg(us, "Warning: bad ecc in page %d- of pba %d\n",
869 usb_stor_dbg(us, "Warning: bad ecc in page %d+ of pba %d\n",
890 result = alauda_write_block(us, new_pba, blockbuffer);
895 MEDIA_INFO(us).pba_to_lba[zone][new_pba_offset] = lba;
896 MEDIA_INFO(us).lba_to_pba[zone][lba_offset] = new_pba;
897 usb_stor_dbg(us, "Remapped LBA %d to PBA %d\n", lba, new_pba);
901 result = alauda_erase_block(us, pba);
904 MEDIA_INFO(us).pba_to_lba[zone][pba_offset] = UNDEF;
913 static int alauda_read_data(struct us_data *us, unsigned long address,
919 unsigned int blockshift = MEDIA_INFO(us).blockshift;
920 unsigned int pageshift = MEDIA_INFO(us).pageshift;
921 unsigned int blocksize = MEDIA_INFO(us).blocksize;
922 unsigned int pagesize = MEDIA_INFO(us).pagesize;
923 unsigned int uzonesize = MEDIA_INFO(us).uzonesize;
942 page = (address & MEDIA_INFO(us).blockmask);
943 max_lba = MEDIA_INFO(us).capacity >> (blockshift + pageshift);
954 alauda_ensure_map_for_zone(us, zone);
958 usb_stor_dbg(us, "Error: Requested lba %u exceeds maximum %u\n",
969 pba = MEDIA_INFO(us).lba_to_pba[zone][lba_offset];
972 usb_stor_dbg(us, "Read %d zero pages (LBA %d) page %d\n",
984 usb_stor_dbg(us, "Read %d pages, from PBA %d (LBA %d) page %d\n",
987 result = alauda_read_block(us, pba, page, pages, buffer);
993 usb_stor_access_xfer_buf(buffer, len, us->srb,
1008 static int alauda_write_data(struct us_data *us, unsigned long address,
1013 unsigned int blockshift = MEDIA_INFO(us).blockshift;
1014 unsigned int pageshift = MEDIA_INFO(us).pageshift;
1015 unsigned int blocksize = MEDIA_INFO(us).blocksize;
1016 unsigned int pagesize = MEDIA_INFO(us).pagesize;
1044 page = (address & MEDIA_INFO(us).blockmask);
1045 max_lba = MEDIA_INFO(us).capacity >> (pageshift + blockshift);
1058 usb_stor_dbg(us, "Requested lba %u exceeds maximum %u\n",
1065 usb_stor_access_xfer_buf(buffer, len, us->srb,
1068 result = alauda_write_lba(us, lba, page, pages, buffer,
1107 static int init_alauda(struct us_data *us)
1110 struct usb_host_interface *altsetting = us->pusb_intf->cur_altsetting;
1113 us->extra = kzalloc(sizeof(struct alauda_info), GFP_NOIO);
1114 if (!us->extra)
1117 info = (struct alauda_info *) us->extra;
1118 us->extra_destructor = alauda_info_destructor;
1120 info->wr_ep = usb_sndbulkpipe(us->pusb_dev,
1127 static int alauda_transport(struct scsi_cmnd *srb, struct us_data *us)
1130 struct alauda_info *info = (struct alauda_info *) us->extra;
1131 unsigned char *ptr = us->iobuf;
1137 usb_stor_dbg(us, "INQUIRY - Returning bogus response\n");
1139 fill_inquiry_response(us, ptr, 36);
1144 usb_stor_dbg(us, "TEST_UNIT_READY\n");
1145 return alauda_check_media(us);
1152 rc = alauda_check_media(us);
1156 num_zones = MEDIA_INFO(us).capacity >> (MEDIA_INFO(us).zoneshift
1157 + MEDIA_INFO(us).blockshift + MEDIA_INFO(us).pageshift);
1159 capacity = num_zones * MEDIA_INFO(us).uzonesize
1160 * MEDIA_INFO(us).blocksize;
1173 rc = alauda_check_media(us);
1182 usb_stor_dbg(us, "READ_10: page %d pagect %d\n", page, pages);
1184 return alauda_read_data(us, page, pages);
1190 rc = alauda_check_media(us);
1199 usb_stor_dbg(us, "WRITE_10: page %d pagect %d\n", page, pages);
1201 return alauda_write_data(us, page, pages);
1205 usb_stor_dbg(us, "REQUEST_SENSE\n");
1226 usb_stor_dbg(us, "Gah! Unknown command: %d (0x%x)\n",
1239 struct us_data *us;
1242 result = usb_stor_probe1(&us, intf, id,
1248 us->transport_name = "Alauda Control/Bulk";
1249 us->transport = alauda_transport;
1250 us->transport_reset = usb_stor_Bulk_reset;
1251 us->max_lun = 1;
1253 result = usb_stor_probe2(us);