/*
* Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#include
#include "scsi.h"
#include "ufs.h"
static int get_cmnd(uint32_t opcode, uint32_t lba, uint32_t size, uint8_t *cmd)
{
ufs_memset(cmd, 0x0, 16);
switch (opcode) {
case UFS_OP_READ_10:
cmd[0] = UFS_OP_READ_10;
cmd[1] = 0;
cmd[2] = (uint8_t)((lba & 0xff000000) >> 24); /* MSB Byte */
cmd[3] = (uint8_t)((lba & 0x00ff0000) >> 16);
cmd[4] = (uint8_t)((lba & 0x0000ff00) >> 8);
cmd[5] = (uint8_t)(lba & 0x000000ff); /* LSB byte */
cmd[6] = 0;
cmd[7] = (uint8_t)((size >> 8) & 0xff);
cmd[8] = (uint8_t)((size) & 0xff);
cmd[9] = 0;
break;
case UFS_OP_TEST_UNIT_READY:
cmd[0] = UFS_OP_TEST_UNIT_READY;
cmd[1] = 0;
cmd[2] = 0;
cmd[3] = 0;
cmd[4] = 0;
cmd[5] = 0;
break;
default:
return -1;
}
return 0;
}