git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: add dummy process to keep scheduler busy
[lunaix-os.git]
/
lunaix-os
/
includes
/
hal
/
ahci
/
hba.h
diff --git
a/lunaix-os/includes/hal/ahci/hba.h
b/lunaix-os/includes/hal/ahci/hba.h
index 8203ab5e6f902880961f7d3236fecfb99e394cb3..c60536d6d14b3707796ad76261c90c60bafc30ee 100644
(file)
--- a/
lunaix-os/includes/hal/ahci/hba.h
+++ b/
lunaix-os/includes/hal/ahci/hba.h
@@
-1,6
+1,8
@@
#ifndef __LUNAIX_HBA_H
#define __LUNAIX_HBA_H
#ifndef __LUNAIX_HBA_H
#define __LUNAIX_HBA_H
+#include <lunaix/blkio.h>
+#include <lunaix/buffer.h>
#include <lunaix/types.h>
#define HBA_RCAP 0
#include <lunaix/types.h>
#define HBA_RCAP 0
@@
-64,6
+66,8
@@
typedef unsigned int hba_reg_t;
#define HBA_CMDH_CLR_BUSY (1 << 10)
#define HBA_CMDH_PRDT_LEN(entries) (((entries)&0xffff) << 16)
#define HBA_CMDH_CLR_BUSY (1 << 10)
#define HBA_CMDH_PRDT_LEN(entries) (((entries)&0xffff) << 16)
+#define HBA_MAX_PRDTE 4
+
struct hba_cmdh
{
uint16_t options;
struct hba_cmdh
{
uint16_t options;
@@
-87,7
+91,7
@@
struct hba_cmdt
uint8_t command_fis[64];
uint8_t atapi_cmd[16];
uint8_t reserved[0x30];
uint8_t command_fis[64];
uint8_t atapi_cmd[16];
uint8_t reserved[0x30];
- struct hba_prdte entries[
3
];
+ struct hba_prdte entries[
HBA_MAX_PRDTE
];
} __HBA_PACKED__;
#define HBA_DEV_FEXTLBA 1
} __HBA_PACKED__;
#define HBA_DEV_FEXTLBA 1
@@
-119,22
+123,28
@@
struct hba_device
struct
{
int (*identify)(struct hba_device* dev);
struct
{
int (*identify)(struct hba_device* dev);
- int (*read_buffer)(struct hba_device* dev,
- uint64_t lba,
- void* buffer,
- uint32_t size);
- int (*write_buffer)(struct hba_device* dev,
- uint64_t lba,
- void* buffer,
- uint32_t size);
+ void (*submit)(struct hba_device* dev, struct blkio_req* io_req);
} ops;
};
} ops;
};
+struct hba_cmd_state
+{
+ struct hba_cmdt* cmd_table;
+ void* state_ctx;
+};
+
+struct hba_cmd_context
+{
+ struct hba_cmd_state* issued[32];
+ u32_t tracked_ci;
+};
+
struct hba_port
{
volatile hba_reg_t* regs;
unsigned int ssts;
struct hba_cmdh* cmdlst;
struct hba_port
{
volatile hba_reg_t* regs;
unsigned int ssts;
struct hba_cmdh* cmdlst;
+ struct hba_cmd_context cmdctx;
void* fis;
struct hba_device* device;
};
void* fis;
struct hba_device* device;
};
@@
-152,8
+162,14
@@
struct ahci_hba
int
hba_prepare_cmd(struct hba_port* port,
struct hba_cmdt** cmdt,
int
hba_prepare_cmd(struct hba_port* port,
struct hba_cmdt** cmdt,
- struct hba_cmdh** cmdh,
- void* buffer,
- unsigned int size);
+ struct hba_cmdh** cmdh);
+
+int
+hba_bind_vbuf(struct hba_cmdh* cmdh,
+ struct hba_cmdt* cmdt,
+ struct vecbuf* vbuf);
+
+int
+hba_bind_sbuf(struct hba_cmdh* cmdh, struct hba_cmdt* cmdt, struct membuf mbuf);
#endif /* __LUNAIX_HBA_H */
#endif /* __LUNAIX_HBA_H */