Lines Matching refs:cdb
47 unsigned char *cdb = cmd->t_task_cdb; in sbc_emulate_readcapacity() local
65 if (!(cdb[8] & 1) && !!(cdb[2] | cdb[3] | cdb[4] | cdb[5])) in sbc_emulate_readcapacity()
160 unsigned char *cdb = cmd->t_task_cdb; in sbc_emulate_startstop() local
167 if (!(cdb[1] & 1) || cdb[2] || cdb[3]) in sbc_emulate_startstop()
174 if (cdb[4] >> 4 & 0xf) in sbc_emulate_startstop()
182 if (!(cdb[4] & 1) || (cdb[4] & 2) || (cdb[4] & 4)) in sbc_emulate_startstop()
241 static inline u32 transport_get_sectors_6(unsigned char *cdb) in transport_get_sectors_6() argument
251 return cdb[4] ? : 256; in transport_get_sectors_6()
254 static inline u32 transport_get_sectors_10(unsigned char *cdb) in transport_get_sectors_10() argument
256 return (u32)(cdb[7] << 8) + cdb[8]; in transport_get_sectors_10()
259 static inline u32 transport_get_sectors_12(unsigned char *cdb) in transport_get_sectors_12() argument
261 return (u32)(cdb[6] << 24) + (cdb[7] << 16) + (cdb[8] << 8) + cdb[9]; in transport_get_sectors_12()
264 static inline u32 transport_get_sectors_16(unsigned char *cdb) in transport_get_sectors_16() argument
266 return (u32)(cdb[10] << 24) + (cdb[11] << 16) + in transport_get_sectors_16()
267 (cdb[12] << 8) + cdb[13]; in transport_get_sectors_16()
273 static inline u32 transport_get_sectors_32(unsigned char *cdb) in transport_get_sectors_32() argument
275 return (u32)(cdb[28] << 24) + (cdb[29] << 16) + in transport_get_sectors_32()
276 (cdb[30] << 8) + cdb[31]; in transport_get_sectors_32()
280 static inline u32 transport_lba_21(unsigned char *cdb) in transport_lba_21() argument
282 return ((cdb[1] & 0x1f) << 16) | (cdb[2] << 8) | cdb[3]; in transport_lba_21()
285 static inline u32 transport_lba_32(unsigned char *cdb) in transport_lba_32() argument
287 return (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; in transport_lba_32()
290 static inline unsigned long long transport_lba_64(unsigned char *cdb) in transport_lba_64() argument
294 __v1 = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; in transport_lba_64()
295 __v2 = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9]; in transport_lba_64()
303 static inline unsigned long long transport_lba_64_ext(unsigned char *cdb) in transport_lba_64_ext() argument
307 __v1 = (cdb[12] << 24) | (cdb[13] << 16) | (cdb[14] << 8) | cdb[15]; in transport_lba_64_ext()
308 __v2 = (cdb[16] << 24) | (cdb[17] << 16) | (cdb[18] << 8) | cdb[19]; in transport_lba_64_ext()
717 sbc_check_prot(struct se_device *dev, struct se_cmd *cmd, unsigned char *cdb, in sbc_check_prot() argument
720 u8 protect = cdb[1] >> 5; in sbc_check_prot()
768 "PROTECT: 0x%02x\n", cdb[0], protect); in sbc_check_prot()
796 sbc_check_dpofua(struct se_device *dev, struct se_cmd *cmd, unsigned char *cdb) in sbc_check_dpofua() argument
798 if (cdb[1] & 0x10) { in sbc_check_dpofua()
802 " does not advertise support for DPO\n", cdb[0]); in sbc_check_dpofua()
806 if (cdb[1] & 0x8) { in sbc_check_dpofua()
810 cdb[0]); in sbc_check_dpofua()
822 unsigned char *cdb = cmd->t_task_cdb; in sbc_parse_cdb() local
829 switch (cdb[0]) { in sbc_parse_cdb()
831 sectors = transport_get_sectors_6(cdb); in sbc_parse_cdb()
832 cmd->t_task_lba = transport_lba_21(cdb); in sbc_parse_cdb()
837 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
838 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
840 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
843 ret = sbc_check_prot(dev, cmd, cdb, sectors, false); in sbc_parse_cdb()
851 sectors = transport_get_sectors_12(cdb); in sbc_parse_cdb()
852 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
854 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
857 ret = sbc_check_prot(dev, cmd, cdb, sectors, false); in sbc_parse_cdb()
865 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
866 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()
868 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
871 ret = sbc_check_prot(dev, cmd, cdb, sectors, false); in sbc_parse_cdb()
879 sectors = transport_get_sectors_6(cdb); in sbc_parse_cdb()
880 cmd->t_task_lba = transport_lba_21(cdb); in sbc_parse_cdb()
886 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
887 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
889 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
892 ret = sbc_check_prot(dev, cmd, cdb, sectors, true); in sbc_parse_cdb()
900 sectors = transport_get_sectors_12(cdb); in sbc_parse_cdb()
901 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
903 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
906 ret = sbc_check_prot(dev, cmd, cdb, sectors, true); in sbc_parse_cdb()
914 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
915 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()
917 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
920 ret = sbc_check_prot(dev, cmd, cdb, sectors, true); in sbc_parse_cdb()
931 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
933 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
936 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
947 u16 service_action = get_unaligned_be16(&cdb[8]); in sbc_parse_cdb()
950 sectors = transport_get_sectors_32(cdb); in sbc_parse_cdb()
952 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
958 cmd->t_task_lba = transport_lba_64_ext(cdb); in sbc_parse_cdb()
969 sectors = transport_get_sectors_32(cdb); in sbc_parse_cdb()
977 cmd->t_task_lba = get_unaligned_be64(&cdb[12]); in sbc_parse_cdb()
979 ret = sbc_setup_write_same(cmd, &cdb[10], ops); in sbc_parse_cdb()
991 sectors = cdb[13]; in sbc_parse_cdb()
1000 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
1008 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); in sbc_parse_cdb()
1031 size = (cdb[10] << 24) | (cdb[11] << 16) | in sbc_parse_cdb()
1032 (cdb[12] << 8) | cdb[13]; in sbc_parse_cdb()
1036 if (cdb[0] == SYNCHRONIZE_CACHE) { in sbc_parse_cdb()
1037 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
1038 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
1040 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
1041 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()
1059 size = get_unaligned_be16(&cdb[7]); in sbc_parse_cdb()
1063 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
1070 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); in sbc_parse_cdb()
1072 ret = sbc_setup_write_same(cmd, &cdb[1], ops); in sbc_parse_cdb()
1077 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
1084 cmd->t_task_lba = get_unaligned_be32(&cdb[2]); in sbc_parse_cdb()
1090 ret = sbc_setup_write_same(cmd, &cdb[1], ops); in sbc_parse_cdb()
1096 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
1097 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()