Lines Matching refs:cdb
48 unsigned char *cdb = cmd->t_task_cdb; in sbc_emulate_readcapacity() local
66 if (!(cdb[8] & 1) && !!(cdb[2] | cdb[3] | cdb[4] | cdb[5])) in sbc_emulate_readcapacity()
153 unsigned char *cdb = cmd->t_task_cdb; in sbc_emulate_startstop() local
160 if (!(cdb[1] & 1) || cdb[2] || cdb[3]) in sbc_emulate_startstop()
167 if (cdb[4] >> 4 & 0xf) in sbc_emulate_startstop()
175 if (!(cdb[4] & 1) || (cdb[4] & 2) || (cdb[4] & 4)) in sbc_emulate_startstop()
234 static inline u32 transport_get_sectors_6(unsigned char *cdb) in transport_get_sectors_6() argument
244 return cdb[4] ? : 256; in transport_get_sectors_6()
247 static inline u32 transport_get_sectors_10(unsigned char *cdb) in transport_get_sectors_10() argument
249 return get_unaligned_be16(&cdb[7]); in transport_get_sectors_10()
252 static inline u32 transport_get_sectors_12(unsigned char *cdb) in transport_get_sectors_12() argument
254 return get_unaligned_be32(&cdb[6]); in transport_get_sectors_12()
257 static inline u32 transport_get_sectors_16(unsigned char *cdb) in transport_get_sectors_16() argument
259 return get_unaligned_be32(&cdb[10]); in transport_get_sectors_16()
265 static inline u32 transport_get_sectors_32(unsigned char *cdb) in transport_get_sectors_32() argument
267 return get_unaligned_be32(&cdb[28]); in transport_get_sectors_32()
271 static inline u32 transport_lba_21(unsigned char *cdb) in transport_lba_21() argument
273 return get_unaligned_be24(&cdb[1]) & 0x1fffff; in transport_lba_21()
276 static inline u32 transport_lba_32(unsigned char *cdb) in transport_lba_32() argument
278 return get_unaligned_be32(&cdb[2]); in transport_lba_32()
281 static inline unsigned long long transport_lba_64(unsigned char *cdb) in transport_lba_64() argument
283 return get_unaligned_be64(&cdb[2]); in transport_lba_64()
289 static inline unsigned long long transport_lba_64_ext(unsigned char *cdb) in transport_lba_64_ext() argument
291 return get_unaligned_be64(&cdb[12]); in transport_lba_64_ext()
705 sbc_check_prot(struct se_device *dev, struct se_cmd *cmd, unsigned char *cdb, in sbc_check_prot() argument
708 u8 protect = cdb[1] >> 5; in sbc_check_prot()
756 "PROTECT: 0x%02x\n", cdb[0], protect); in sbc_check_prot()
784 sbc_check_dpofua(struct se_device *dev, struct se_cmd *cmd, unsigned char *cdb) in sbc_check_dpofua() argument
786 if (cdb[1] & 0x10) { in sbc_check_dpofua()
790 " does not advertise support for DPO\n", cdb[0]); in sbc_check_dpofua()
794 if (cdb[1] & 0x8) { in sbc_check_dpofua()
798 cdb[0]); in sbc_check_dpofua()
810 unsigned char *cdb = cmd->t_task_cdb; in sbc_parse_cdb() local
817 switch (cdb[0]) { in sbc_parse_cdb()
819 sectors = transport_get_sectors_6(cdb); in sbc_parse_cdb()
820 cmd->t_task_lba = transport_lba_21(cdb); in sbc_parse_cdb()
825 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
826 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
828 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
831 ret = sbc_check_prot(dev, cmd, cdb, sectors, false); in sbc_parse_cdb()
839 sectors = transport_get_sectors_12(cdb); in sbc_parse_cdb()
840 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
842 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
845 ret = sbc_check_prot(dev, cmd, cdb, sectors, false); in sbc_parse_cdb()
853 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
854 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()
856 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
859 ret = sbc_check_prot(dev, cmd, cdb, sectors, false); in sbc_parse_cdb()
867 sectors = transport_get_sectors_6(cdb); in sbc_parse_cdb()
868 cmd->t_task_lba = transport_lba_21(cdb); in sbc_parse_cdb()
874 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
875 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
877 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
880 ret = sbc_check_prot(dev, cmd, cdb, sectors, true); in sbc_parse_cdb()
888 sectors = transport_get_sectors_12(cdb); in sbc_parse_cdb()
889 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
891 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
894 ret = sbc_check_prot(dev, cmd, cdb, sectors, true); in sbc_parse_cdb()
903 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
904 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()
906 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
909 ret = sbc_check_prot(dev, cmd, cdb, sectors, true); in sbc_parse_cdb()
920 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
922 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
925 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
936 u16 service_action = get_unaligned_be16(&cdb[8]); in sbc_parse_cdb()
939 sectors = transport_get_sectors_32(cdb); in sbc_parse_cdb()
941 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
947 cmd->t_task_lba = transport_lba_64_ext(cdb); in sbc_parse_cdb()
958 sectors = transport_get_sectors_32(cdb); in sbc_parse_cdb()
966 cmd->t_task_lba = get_unaligned_be64(&cdb[12]); in sbc_parse_cdb()
968 ret = sbc_setup_write_same(cmd, &cdb[10], ops); in sbc_parse_cdb()
986 sectors = cdb[13]; in sbc_parse_cdb()
995 if (sbc_check_dpofua(dev, cmd, cdb)) in sbc_parse_cdb()
1003 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); in sbc_parse_cdb()
1026 size = get_unaligned_be32(&cdb[10]); in sbc_parse_cdb()
1030 if (cdb[0] == SYNCHRONIZE_CACHE) { in sbc_parse_cdb()
1031 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
1032 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
1034 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
1035 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()
1053 size = get_unaligned_be16(&cdb[7]); in sbc_parse_cdb()
1057 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
1064 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); in sbc_parse_cdb()
1066 ret = sbc_setup_write_same(cmd, &cdb[1], ops); in sbc_parse_cdb()
1071 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
1078 cmd->t_task_lba = get_unaligned_be32(&cdb[2]); in sbc_parse_cdb()
1084 ret = sbc_setup_write_same(cmd, &cdb[1], ops); in sbc_parse_cdb()
1091 if (cdb[0] == VERIFY) { in sbc_parse_cdb()
1092 sectors = transport_get_sectors_10(cdb); in sbc_parse_cdb()
1093 cmd->t_task_lba = transport_lba_32(cdb); in sbc_parse_cdb()
1095 sectors = transport_get_sectors_16(cdb); in sbc_parse_cdb()
1096 cmd->t_task_lba = transport_lba_64(cdb); in sbc_parse_cdb()