blob: 42e18732b0444b0148e4df995c1b7dff18bf09a9 [file] [log] [blame]
// Definitions for SCSI style command data blocks.
#ifndef __BLOCKCMD_H
#define __BLOCKCMD_H
#include "types.h" // u8
#define CDB_CMD_READ_10 0x28
#define CDB_CMD_VERIFY_10 0x2f
#define CDB_CMD_WRITE_10 0x2a
struct cdb_rwdata_10 {
u8 command;
u8 flags;
u32 lba;
u8 resreved_06;
u16 count;
u8 reserved_09;
u8 pad[6];
} PACKED;
#define CDB_CMD_READ_CAPACITY 0x25
struct cdb_read_capacity {
u8 command;
u8 flags;
u8 resreved_02[8];
u8 pad[6];
} PACKED;
struct cdbres_read_capacity {
u32 sectors;
u32 blksize;
} PACKED;
#define CDB_CMD_TEST_UNIT_READY 0x00
#define CDB_CMD_INQUIRY 0x12
#define CDB_CMD_REQUEST_SENSE 0x03
struct cdb_request_sense {
u8 command;
u8 flags;
u16 reserved_02;
u8 length;
u8 reserved_05;
u8 pad[10];
} PACKED;
struct cdbres_request_sense {
u8 errcode;
u8 segment;
u8 flags;
u32 info;
u8 additional;
u32 specific;
u8 asc;
u8 ascq;
u32 reserved_0e;
} PACKED;
#define SCSI_TYPE_DISK 0x00
#define SCSI_TYPE_CDROM 0x05
struct cdbres_inquiry {
u8 pdt;
u8 removable;
u8 reserved_02[2];
u8 additional;
u8 reserved_05[3];
char vendor[8];
char product[16];
char rev[4];
} PACKED;
#define CDB_CMD_MODE_SENSE 0x5A
#define MODE_PAGE_HD_GEOMETRY 0x04
struct cdb_mode_sense {
u8 command;
u8 flags;
u8 page;
u32 reserved_03;
u16 count;
u8 reserved_09;
u8 pad[6];
} PACKED;
struct cdbres_mode_sense_geom {
u8 unused_00[3];
u8 read_only;
u32 unused_04;
u8 page;
u8 length;
u8 cyl[3];
u8 heads;
u8 precomp[3];
u8 reduced[3];
u16 step_rate;
u8 landing[3];
u16 rpm;
} PACKED;
// blockcmd.c
struct disk_op_s;
int scsi_fill_cmd(struct disk_op_s *op, void *cdbcmd, int maxcdb);
int scsi_is_read(struct disk_op_s *op);
int scsi_is_ready(struct disk_op_s *op);
struct drive_s;
int scsi_drive_setup(struct drive_s *drive, const char *s, int prio, u8 target, u8 lun);
typedef int (*scsi_add_lun)(u32 lun, struct drive_s *tmpl_drv);
int scsi_rep_luns_scan(struct drive_s *tmp_drive, scsi_add_lun add_lun);
int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns,
scsi_add_lun add_lun);
#endif // blockcmd.h