Register KIDM, write macros
This commit is contained in:
parent
e711ddf15a
commit
bb104e12c7
|
|
@ -16,7 +16,12 @@ uint32_t module_api(uint32_t func, ...){
|
||||||
switch(func){
|
switch(func){
|
||||||
case MODULE_API_REGISTER:
|
case MODULE_API_REGISTER:
|
||||||
//do something
|
//do something
|
||||||
return_value = -1;
|
void *structure = va_arg(vars, void *);
|
||||||
|
if(structure == 0){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
vector_push(modules, structure);
|
||||||
|
return 0;
|
||||||
break;
|
break;
|
||||||
case MODULE_API_ADDFUNC:
|
case MODULE_API_ADDFUNC:
|
||||||
//do something
|
//do something
|
||||||
|
|
|
||||||
|
|
@ -48,27 +48,74 @@ make fini function to destroy global object, and free any remaining resources.
|
||||||
#define ATA_LBA_MID ATA_CYLINDER_LOW
|
#define ATA_LBA_MID ATA_CYLINDER_LOW
|
||||||
#define ATA_LBA_HIH ATA_CYLINDER_HIGH
|
#define ATA_LBA_HIH ATA_CYLINDER_HIGH
|
||||||
|
|
||||||
#define ATA_ALT_STATUS + 0
|
#define ATA_ALT_STATUS + 0x206
|
||||||
#define ATA_DEVICE_CONTROL + 0
|
#define ATA_DEVICE_CONTROL + 0x206
|
||||||
#define ATA_DRIVE_ADDRESS + 1
|
#define ATA_DRIVE_ADDRESS + 0x207
|
||||||
|
|
||||||
#define ATA_IDENTIFY 0xEC
|
#define ATA_IDENTIFY 0xEC
|
||||||
|
|
||||||
#define ATA_SLAVE_DRIVE 0xF0
|
#define ATA_MASTER_DRIVE 0x1F0
|
||||||
#define ATA_MASTER_DRIVE 0xE0
|
|
||||||
|
|
||||||
#define ATA_IS_ATA(a) a[0] & 0x8000
|
#define ATA_IS_ATA(a) a[0] & 0x8000
|
||||||
#define ATA_GET_SZ28(a) (a[60] | (a[61] << 16))
|
#define ATA_GET_SZ28(a) (a[60] | (a[61] << 16))
|
||||||
#define ATA_IS_LBA48(a) (a[83] & (1 << 10))
|
#define ATA_IS_LBA48(a) (a[83] & (1 << 10))
|
||||||
#define ATA_GET_SZ48L(a) (a[100] | (a[101] << 16))
|
#define ATA_GET_SZ48L(a) (a[100] | (a[101] << 16))
|
||||||
#define ATA_GET_SZ48H(a) (a[102] | (a[103] << 16))
|
#define ATA_GET_SZ48H(a) (a[102] | (a[103] << 16))
|
||||||
|
//is drive busy?
|
||||||
|
#define ATA_BSY(a) a & 0x80
|
||||||
|
//Is drive ready?
|
||||||
|
#define ATA_DRDY(a) a & 0x40
|
||||||
|
//was there an error during write?
|
||||||
|
#define ATA_DWF(a) a & 0x20
|
||||||
|
//is drive seek complete?
|
||||||
|
#define ATA_DSC(a) a & 0x10
|
||||||
|
//is data ready to be transferred?
|
||||||
|
#define ATA_DRQ(a) a & 0x8
|
||||||
|
//was data corrected?
|
||||||
|
#define ATA_CORR(a) a & 0x4
|
||||||
|
//was there an error?
|
||||||
|
#define ATA_ERR(a) a & 0x1
|
||||||
|
//was there a bad block?
|
||||||
|
#define ATA_BBK(a) a & 0x80
|
||||||
|
//was there uncorrectable data?
|
||||||
|
#define ATA_UNC(a) a & 0x40
|
||||||
|
//mc, whatever that means
|
||||||
|
#define ATA_MC(a) a & 0x20
|
||||||
|
//was the sector id not found?
|
||||||
|
#define ATA_IDNF(a) a & 0x10
|
||||||
|
//my chemical romance??? in my drive????
|
||||||
|
#define ATA_MCR(a) a & 0x8
|
||||||
|
//comman aborted?
|
||||||
|
#define ATA_ABRT(a) a & 0x4
|
||||||
|
//track 0 not found
|
||||||
|
#define ATA_TK0NF(a) a & 0x2
|
||||||
|
//data address mark not found
|
||||||
|
#define ATA_AMNF(a) a & 0x1;
|
||||||
|
|
||||||
void fini();
|
void fini();
|
||||||
void ata_identify();
|
void ata_identify();
|
||||||
|
//return 1 if ready, 0 if not
|
||||||
|
int ata_ready(uint32_t drive){
|
||||||
|
uint16_t status = inb(drive ATA_ALT_STATUS);
|
||||||
|
if(!ATA_BSY(status) || ATA_DRQ(status)) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void init(KOS_MAPI_FP module_api, uint32_t api_version){
|
void init(KOS_MAPI_FP module_api, uint32_t api_version){
|
||||||
api = module_api;
|
api = module_api;
|
||||||
api(MODULE_API_PRINT, MODULE_NAME, "KIDM Storage Driver Module v0.1.0\nSupported interfaces: \n");
|
api(MODULE_API_PRINT, MODULE_NAME, "KIDM Storage Driver Module v0.1.0\nSupported interfaces: \n");
|
||||||
|
module_t module_data = {
|
||||||
|
init,
|
||||||
|
0xfae00000,
|
||||||
|
"KIDM OFFICIAL 01",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
int status = api(MODULE_API_REGISTER, &module_data);
|
||||||
|
if(status){
|
||||||
|
api(MODULE_API_PRINT, MODULE_NAME, "Failed to register module, exiting\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ata_identify();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue