scsi request, part usb mass storage class driver, bulk transfers
[quarnos.git] / resources / scsi_request.h
blob4b0172a069d006c7086ab155b56731c469144efb
1 #include "arch/low/general.h"
3 #include "libs/buffer.h"
4 #include "libs/pointer.h"
6 namespace resources {
7 class scsi_request /* : public block_io_request */ {
8 private:
9 struct command_6 {
10 u8 operation;
11 u8 flags;
12 u16 lba;
13 u8 transfer_length;
14 u8 control;
15 } __attribute__((packed));
17 struct command_10 {
18 u8 operation;
19 u8 flags;
20 u32 lba;
21 u8 reserved;
22 u16 transfer_length;
23 u8 control;
24 } __attribute__((packed));
26 struct command_12 {
27 u8 operation;
28 u8 flags;
29 u32 lba;
30 u32 transfer_length;
31 u8 reserved;
32 u8 control;
33 } __attribute__((packed));
35 p<command_10> cmd;
36 public:
37 scsi_request() : cmd(new command_10) { }
38 ~scsi_request() {
39 cmd.dispose();
42 void set_address(int addr) {
43 cmd->lba = addr;
46 void set_size(int size) {
47 cmd->transfer_length = size;
50 void read() {
51 cmd->control = 0;
52 cmd->reserved = 0;
53 cmd->flags = 0;
55 cmd->operation = 0x28;
58 buffer generate() const {
59 return buffer::to_mem(cmd);